24小时热门版块排行榜    

查看: 1651  |  回复: 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

新虫 (正式写手)

【答案】应助回帖

你这个程序好像是function dCdt=myfun_(t,C,p,m)和function min=minfun_(p)写错位置了吧,要倒过来。
7楼2015-12-14 10:55:36
已阅   回复此楼   关注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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 330求调剂 +4 小材化本科 2026-03-18 4/200 2026-03-20 23:13 by JourneyLucky
[考研] 中南大学化学学硕337求调剂 +3 niko- 2026-03-19 6/300 2026-03-20 21:58 by luoyongfeng
[考研] 材料学硕297已过四六级求调剂推荐 +11 adaie 2026-03-19 11/550 2026-03-20 21:30 by laoshidan
[考研] 一志愿北京化工大学0703化学318分,有科研经历,求调剂 +4 一瓶苯甲酸 2026-03-14 4/200 2026-03-20 20:36 by fen_rao
[考研] 材料学求调剂 +4 Stella_Yao 2026-03-20 4/200 2026-03-20 20:28 by ms629
[考研] 0703化学调剂 ,六级已过,有科研经历 +13 曦熙兮 2026-03-15 13/650 2026-03-20 19:35 by Dream007008
[考研] 0856调剂,是学校就去 +8 sllhht 2026-03-19 9/450 2026-03-20 14:25 by 无懈可击111
[考研] 271材料工程求调剂 +7 .6lL 2026-03-18 7/350 2026-03-20 09:10 by xingguangj
[考研] 材料学硕318求调剂 +5 February_Feb 2026-03-19 5/250 2026-03-19 23:51 by 23Postgrad
[考研] 一志愿中国海洋大学,生物学,301分,求调剂 +5 1孙悟空 2026-03-17 6/300 2026-03-19 23:46 by zcl123
[考研] 085600材料与化工求调剂 +6 绪幸与子 2026-03-17 6/300 2026-03-19 13:27 by houyaoxu
[考研] 346求调剂[0856] +3 WayneLim327 2026-03-16 6/300 2026-03-19 11:21 by WayneLim327
[考研] 0817调剂 +3 没有答案_ 2026-03-14 3/150 2026-03-19 09:51 by Xu de nuo
[考研] 0854可跨调剂,一作一项核心论文五项专利,省、国级证书40+数一英一287 +8 小李0854 2026-03-16 8/400 2026-03-18 14:35 by 搏击518
[考研] 070300化学319求调剂 +6 锦鲤0909 2026-03-17 6/300 2026-03-18 13:22 by Iveryant
[考研] 326求调剂 +5 上岸的小葡 2026-03-15 6/300 2026-03-17 17:26 by ruiyingmiao
[考研] 11408 一志愿西电,277分求调剂 +3 zhouzhen654 2026-03-16 3/150 2026-03-17 07:03 by laoshidan
[考研] [导师推荐]西南科技大学国防/材料导师推荐 +3 尖角小荷 2026-03-16 6/300 2026-03-16 23:21 by 尖角小荷
[基金申请] 今年的国基金是打分制吗? 50+3 zhanghaozhu 2026-03-14 3/150 2026-03-16 17:07 by 北京莱茵润色
[考研] 中科院材料273求调剂 +4 yzydy 2026-03-15 4/200 2026-03-16 15:59 by Gaodh_82
信息提示
请填处理意见