24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1693  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

ZHM10

新虫 (小有名气)

[求助] Matlab拟合动力学参数问题,求指导! 已有1人参与

小弟现在要用matlab拟合出一个复杂反应体系的动力学参数,先用ode45求解微分方程组再用最小二乘拟合,参照文献编了一个程序,但运行老出一些问题,快急死了…
求大神们帮忙看看,有什么问题…还有个问题,就是我看文献上需要先给动力学参数一个初值,那这个初值该怎么选择啊?
下面是程序、动力学模型以及实验数据,先谢谢各位了!
clear all; %%清理内存
clc;     %%清屏
global C_A_EXP C_B_EXP C_C1_EXP C_C2_EXP C_C3_EXP C_D_EXP C_E_EXP %%各个物质浓度实验值
global C_A_CAL C_B_CAL C_C1_CAL C_C2_CAL C_C3_CAL C_D_CAL C_E_CAL %%各个物质浓度计算值
global R tspan C00  %%理想气体常数、积分区间、初值
R=8.314;
tspan={[0 5];[0 10];[0 20];[0 30];[0 45];[0 60];[0 90];[0 120];[0 180]};
%% 读取数据
display '读取50 下数据...';data_expx_50=xlsread('data_expx.xlsx','50','B5:H13');
display '读取60 下数据...';data_expx_60=xlsread('data_expx.xlsx','60','B5: H13');
display '读取70 下数据...';data_expx_70=xlsread('data_expx.xlsx','70','B5: H13');
display '读取80 下数据...';data_expx_80=xlsread('data_expx.xlsx','80','B5: H13');
display '读取初值...'
display '读取50 下初值...';data_expx_50_0=xlsread('data_expx.xlsx','50','B4:H4');
display '读取60 下初值...';data_expx_60_0=xlsread('data_expx.xlsx','60','B4:H4');
display '读取70 下初值...';data_expx_70_0=xlsread('data_expx.xlsx','70','B4:H4');
display '读取80 下初值...';data_expx_80_0=xlsread('data_expx.xlsx','80','B4:H4');
display '读取数据结束...'
%% 浓度实验值数据
C_A_EXP=[ data_expx_50(:,1)...data_expx_60(:,1)...data_expx_70(:,1)...
data_expx_80(:,1)];
C_B_EXP=[ data_expx_50(:,2)...data_expx_60(:,2)...data_expx_70(:,2)...
data_expx_80(:,2)];
C_C1_EXP=[ data_expx_50(:,3)...data_expx_60(:,3)...data_expx_70(:,3)...
data_expx_80(:,3)];
C_C2_EXP=[ data_expx_50(:,4)...data_expx_60(:,4)...data_expx_70(:,4)...
data_expx_80(:,4)];
C_C3_EXP=[ data_expx_50(:,5)...data_expx_60(:,5)...data_expx_70(:,5)...
data_expx_80(:,5)];
C_D_EXP=[ data_expx_50(:,6)...data_expx_60(:,6)...data_expx_70(:,6)...
data_expx_80(:,6)];
C_E_EXP=[ data_expx_50(:,7)...data_expx_60(:,7)...data_expx_70(:,7)...
data_expx_80(:,7)];
%% 初值
C_A_EXP_0=[data_expx_50_0(:,1)...data_expx_60_0(:,1)...data_expx_70_0(:,1)...
data_expx_80_0(:,1)];
C_B_EXP_0=[data_expx_50_0(:,2)...data_expx_60_0(:,2)...data_expx_70_0(:,2)...
data_expx_80_0(:,2)];
C_C1_EXP_0=[data_expx_50_0(:,3)...data_expx_60_0(:,3)...data_expx_70_0(:,3)...
data_expx_80_0(:,3)];
C_C2_EXP_0=[data_expx_50_0(:,4)...data_expx_60_0(:,4)...data_expx_70_0(:,4)...
data_expx_80_0(:,4)];
C_C3_EXP_0=[data_expx_50_0(:,5)...data_expx_60_0(:,5)...data_expx_70_0(:,5)...
data_expx_80_0(:,5)];
C_D_EXP_0=[data_expx_50_0(:,6)...data_expx_60_0(:,6)...data_expx_70_0(:,6)...
data_expx_80_0(:,6)];
C_E_EXP_0=[data_expx_50_0(:,7)...data_expx_60_0(:,7)...data_expx_70_0(:,7)...
data_expx_80_0(:,7)];
C00=[C_A_EXP_0 C_B_EXP_0 C_C1_EXP_0 C_C2_EXP_0 C_C3_EXP_0 C_D_EXP_0 C_E_EXP_0];
p0=[2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0...
2.0e+5 1.0e+004 1.0];
options=optimset('tolfun',0.1,'TolX',1e4,'MaxFunEvals',9e25,'display','iter');
[p,exitflag]=fminsearch(@minfun_,p0,options);
%% 显示结果
disp 'p1=';p(1)
disp 'p2=';p(2)
disp 'p3=';p(3)
disp 'p4=';p(4)
disp 'p5=';p(5)
disp 'p6=';p(6)
disp 'p7=';p(7)
disp 'p8=';p(8)
disp 'p9=';p(9)
disp 'p10=';p(10)
disp 'p11=';p(11)
disp 'p12=';p(12)
disp 'p13=';p(13)
disp 'p14=';p(14)
disp 'p15=';p(15)
disp 'p16=';p(16)
disp 'p17=';p(17)
disp 'p18=';p(18)
disp 'p19=';p(19)
disp 'p20=';p(20)
disp 'p21=';p(21)
disp 'p22=';p(22)
disp 'p23=';p(23)
disp 'p24=';p(24)


function dCdt=myfun_(t,C,p,m)
global R
%%
%% 计算各个物质反应速率
%%
if m<=1
TC=323.15;
elseif m>1 && m<=2
TC=433.15;
elseif m>2 && m<=3
TC=443.15;
elseif m>3
TC=453.15;
end
R1=p(1).*exp(-p(2)./(R*TC)).*(C(1).^p(3));
R2=p(4).*exp(-p(5)./(R*TC)).*(C(2).^p(6));
R3=p(7).*exp(-p(8)./(R*TC)).*(C(2).^p(9));
R4=p(10).*exp(-p(11)./(R*TC)).*(C(2).^p(12));
R5=p(13).*exp(-p(14)./(R*TC)).*(C(3).^p(15));
R6=p(16).*exp(-p(17)./(R*TC)).*(C(4).^p(18));
R7=p(19).*exp(-p(20)./(R*TC)).*(C(5).^p(21));
R8=p(22).*exp(-p(23)./(R*TC)).*(C(6).^p(24));
dCdt=[-R1;R1-R2-R3-R4;R2-R5;R3-R6;R4-R7;R5+R6+R7-R8;R8];

function min=minfun_(p)
global R tspan C00  
for i=1:1:9
for m=1:1:7
C0=[C00(m) C00(m+7) C00(m+14) C00(m+21)];
[t,C]=ode45(@myfun,tspan{i},C0,[],p,m);
C_A_CAL(i,m)=C(end,1);
C_B_CAL(i,m)=C(end,2);
C_C1_CAL(i,m)=C(end,3);
C_C2_CAL(i,m)=C(end,4);
C_C3_CAL(i,m)=C(end,5);
C_D_CAL(i,m)=C(end,6);
C_E_CAL(i,m)=C(end,7);
end
end
min = sum(sum((C_A_EXP-C_A_CAL).^2+(C_B_EXP-C_B_CAL).^2+…
(C_C1_EXP-C_C1_CAL).^2+(C_C2_ EXP-C_C2_CAL).^2+…
(C_C3_EXP-C_C3_CAL).^2+(C_D_EXP-C_D_CAL).^2+…
(C_E_ EXP-C_E_CAL).^2));Matlab拟合动力学参数问题,求指导!
动力学模型1.jpg


Matlab拟合动力学参数问题,求指导!-1
动力学模型2.jpg
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : data_expx.xlsx
  • 2015-11-06 15:59:20, 14.03 K

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

898766282

新虫 (正式写手)

我最近也在编写求复杂反应动力学的matlabb程序,但是我准备用的是退货算法,不过还没写出来,可以发给我你的参考资料文献吗?谢谢!
6楼2015-12-14 10:49:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
ZHM10: 金币+10 2015-11-08 16:11:38
这种微分方程拟合问题建议用1stOpt来解决,代码简单十倍不止。
2楼2015-11-06 17:04:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ZHM10

新虫 (小有名气)

引用回帖:
2楼: Originally posted by dingd at 2015-11-06 17:04:12
这种微分方程拟合问题建议用1stOpt来解决,代码简单十倍不止。

谢谢!你能帮我看一下matlab程序吗,直接运行就行,我看文章上都是用这种方法,,1stopt这东西一点都没接触过啊
3楼2015-11-06 19:26:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hujinqiang

新虫 (初入文坛)

你好,我现在有一个复杂的动力学方程,不知道怎么解,你可否指导一下
4楼2015-12-12 16:52:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料与化工300求调剂 +39 肖开文 2026-04-09 43/2150 2026-04-12 01:30 by 秋豆菜芽
[考研] 求调剂,一志愿材料科学与工程985,365分, +7 材化李可 2026-04-11 9/450 2026-04-12 01:09 by 秋豆菜芽
[考研] 344 材料专业 求调剂211 无地域要求 +5 hualkop 2026-04-11 5/250 2026-04-11 23:13 by 852137818
[考研] 一志愿北理工298英一数二已上岸,感谢各位老师 +14 Reframe 2026-04-10 16/800 2026-04-10 23:07 by caotw2020
[考研] 284求调剂 +19 梵@@ 2026-04-06 21/1050 2026-04-10 21:12 by zhouxiaoyu
[考研] 22408 366分,本科211,一志愿西工大 +4 Rubt 2026-04-09 4/200 2026-04-10 19:51 by chemisry
[硕博家园] 0856材料化工求调剂,一志愿211,初试成绩349 +5 江淮北月 2026-04-05 5/250 2026-04-10 16:26 by 高维春
[考研] 085600材料与化工,求调剂 +11 won_qii 2026-04-07 11/550 2026-04-09 17:03 by luoyongfeng
[考研] 求机械专硕297第二批调剂 +5 拾柒12。 2026-04-08 5/250 2026-04-09 16:43 by 允当适度
[考研] 0860004 求调剂 309分 +6 Yin DY 2026-04-09 6/300 2026-04-09 10:19 by 啊李999
[考研] 一志愿0807 数一英一 313 有没有二轮调剂 +11 emokidd 2026-04-08 12/600 2026-04-09 09:24 by wyf236
[考研] 327求调剂 +10 Xxjc1107. 2026-04-06 11/550 2026-04-09 01:21 by lature00
[考研] 270求调剂 +3 031127 2026-04-06 4/200 2026-04-08 21:00 by 逆水乘风
[考研] 287求调剂 +6 Fnhc 2026-04-07 6/300 2026-04-08 10:05 by xingguangj
[考研] 材料工程专业日语生求调剂 +9 111623 2026-04-07 9/450 2026-04-07 23:31 by 一只好果子?
[考研] 调剂 +4 mcbbc 2026-04-06 5/250 2026-04-07 12:33 by upczlm1989
[考研] 081200-11408-276学硕求调剂 +5 崔wj 2026-04-05 5/250 2026-04-06 15:40 by lin-da
[考研] 求调剂到材料 +5 程9915 2026-04-06 5/250 2026-04-06 15:21 by yulian1987
[考研] 求调剂 +10 chenxrlkx 2026-04-05 10/500 2026-04-06 11:31 by 猪会飞
[考研] 332求调剂 +17 小小孟... 2026-04-05 18/900 2026-04-06 09:51 by 蓝云思雨
信息提示
请填处理意见