| 查看: 1776 | 回复: 5 | ||
birdcanfly金虫 (正式写手)
|
[求助]
微分方程ode45求解,最小二乘法优化微分方程参数,程序运行求助 已有1人参与
|
|
仿照下面的帖子(http://muchong.com/bbs/viewthread.php?tid=6425538&authorid=1122189)进行了程修改,求解微分方程组的系数,微分方程组中包含了指前系数和活化能。 现在运行程序,matlab跑起来没完,无结果,无报错。请求高手指点,协助调通程序,50金币相谢! *********************** 程序代码如下: function k1k2k3 format long clear all clc k0 = [1e40 1e20 1e40 1e30 100e3 50e3 100e3 100e3 0.8]; lb = [0 0 0 0 0 0 0 0 0]; ub = [inf inf inf inf inf inf inf inf 1]; data=... [ 0.00 100.000 0.00000 0.00000 0.00000 0.21 78.8686 18.802 1.99667 0 0.22 59.2346 37.9368 2.66223 0.332779 0.23 48.0865 46.7554 4.49251 0.166389 0.24 37.1048 57.0715 5.32446 0.665557 0.25 29.6173 61.2313 8.31947 0.831947 0.253 31.1148 59.5674 9.65058 0.831947 0.258 29.7837 61.2313 7.8203 0.998336 0.26 22.629 63.3943 12.3128 1.16473 0.263 24.792 60.3993 13.4775 1.33111 0.266 21.9634 62.396 13.9767 1.4975 0.27 21.2978 63.228 13.1448 1.83028 0.272 24.6256 59.0682 14.3095 1.66389 0.277 17.3045 58.4027 21.1314 3.1614 0.28 17.4709 58.7354 20.9651 2.82862 0.29 23.7937 49.9168 22.4626 3.32779 0.3 18.3028 43.7604 31.1148 6.48918 ]; x0=data(1,2:end); tspan=data(:,1)'; yexp = [data(2:end,2) data(2:end,3) data(2:end,4) data(2:end,5)]; [k,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,x0,yexp); ci = nlparci(k,residual,jacobian); fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n') fprintf('\tk1 = %.9f ± %.9f\n',k(1),ci(1,2)-k(1)) fprintf('\tk2 = %.9f ± %.9f\n',k(2),ci(2,2)-k(2)) fprintf('\tk3 = %.9f ± %.9f\n',k(3),ci(3,2)-k(3)) fprintf('\tk4 = %.9f ± %.9f\n',k(4),ci(4,2)-k(4)) fprintf('\tEa1 = %.9f ± %.9f\n',k(5),ci(5,2)-k(5)) fprintf('\tEa2 = %.9f ± %.9f\n',k(6),ci(6,2)-k(6)) fprintf('\tEa3 = %.9f ± %.9f\n',k(7),ci(7,2)-k(7)) fprintf('\tEa4 = %.9f ± %.9f\n',k(8),ci(8,2)-k(8)) fprintf('\ta = %.9f ± %.9f\n',k(9),ci(9,2)-k(9)) fprintf(' The sum of the squares is: %.9e\n\n',resnorm) ts=0 (max(tspan)-min(tspan))/100):max(tspan);[ts ys] = ode45(@KineticsEqs,ts,x0,[],k); yy = [data(:,2) data(:,3) data(:,4)]; I100=100*ones(16,1); plot(ts,ys(:,1),'b',tspan,yy(:,1),'bo'); hold on plot(ts,ys(:,2)+ys(:,3),'r',tspan,yy(:,2),'r*'); plot(ts,ys(:,4),'k',tspan,yy(:,3),'k+'); plot(ts,I100(:,1)-ys(:,1)-ys(:,2)-ys(:,3)-ys(:,4),'g',tspan,yy(:,4),'g<') legend('C1的计算值','C1的实验值','C2的计算值*5','C2的实验值*5','C3的计算值*5','C3的实验值*5','C4的计算值','C4的实验值') function f = ObjFunc(k,tspan,x0,yexp) % 目标函数 [t Xsim] = ode45(@KineticsEqs,tspan,x0,[],k);% 求解常微分方程,其中tspan为t的取值点,x0为微分方程组的初始值,k为微分方程的系数,返回t为微分方程组解的取值点,Xsim为微分方程组的解 Xsim1=Xsim(:,1);%提取Xsim的第一列 Xsim2=Xsim(:,2);%提取Xsim的第二列 Xsim3=Xsim(:,3);%提取Xsim的第三列 Xsim4=Xsim(:,4);%提取Xsim的第四列 ysim(:,1) = Xsim1(2:end);%微分方程的第一个变量,从第二个解到最后一个解赋值给ysim的第一列 ysim(:,2) = Xsim2(2:end);%微分方程的第二个变量,从第二个解到最后一个解赋值给ysim的第二列 ysim(:,3) = Xsim3(2:end);%微分方程的第三个变量,从第二个解到最后一个解赋值给ysim的第三列 ysim(:,4) = Xsim4(2:end);%微分方程的第四个变量,从第二个解到最后一个解赋值给ysim的第四列 I100=100*ones(16,1); f = [(ysim(:,1)-yexp(:,1)) (ysim(:,2)+ysim(:,3)-yexp(:,2)) (ysim(:,4)-yexp(:,3)) (I100-ysim(:,1)-ysim(:,2)-ysim(:,3)-ysim(:,4)-yexp(:,4))];%形成目标优化函数 function dCdt = KineticsEqs(t,C,k) % ODE模型方程,C为浓度,k为微分方程中的系数,t为导数 a=k(9); Ea1=k(5); Ea2=k(6); Ea3=k(7); Ea4=k(8); R=8.314; Ttime=(-960.5*t^2+842.1*t+56.66+273.15); dC1dt =-k(1)*exp(-Ea1/(R*Ttime))*C(1);%第一个微分方程,等号前面是C(1)对t的微分 dC2dt =k(1)*exp(-Ea1/(R*Ttime))*a*C(1)-k(2)*exp(-Ea2/(R*Ttime))*C(2);%第二个微分方程,等号前面是C(2)对t的微分 dC3dt =k(2)*exp(-Ea2/(R*Ttime))*C(2)-k(3)*exp(-Ea3/(R*Ttime))*C(3);%第三个微分方程,等号前面是C(3)对t的微分 dC4dt =k(3)*exp(-Ea3/(R*Ttime))*C(3)-k(4)*exp(-Ea4/(R*Ttime))*C(4);%第四个微分方程,等号前面是C(4)对t的微分 dCdt = [dC1dt; dC2dt;dC3dt;dC4dt];%微分方程组 |
» 猜你喜欢
【复旦大学】二维材料方向招收2026年博士研究生1名
已经有0人回复
北京纳米能源与系统研究所 王中林院士/曹南颖研究员课题组2026级硕/博/博后招生
已经有10人回复
物理学I论文润色/翻译怎么收费?
已经有237人回复
荷兰Utrecht University超快太赫兹光谱王海教授课题招收2026 CSC博士生
已经有23人回复
反铁磁体中的磁性切换:两种不同的机制已成功可视化
已经有0人回复
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
笼目材料中量子自旋液体基态的证据
已经有0人回复
» 本主题相关价值贴推荐,对您同样有帮助:
有方程,怎么求多元回归方程的参数
已经有12人回复
求大神帮忙matlab拟合函数求参数
已经有9人回复
如何求解带有固定参数的超定方程组?
已经有21人回复
微分方程组求参数问题,求高人指教,感谢
已经有11人回复
matlab求解方程中的参数
已经有21人回复
动力学参数拟合
已经有26人回复
一阶微分方程求解,并优化参数值
已经有14人回复
matlab拟合方程参数时初值的选择
已经有15人回复
matlab解微分方程
已经有10人回复
用matlab求解方程出问题,请帮忙看看
已经有3人回复
求助利用matlab的ODE45求解微分方程
已经有16人回复
用Matlab求解方程
已经有6人回复
最小二乘法解方程组系数
已经有10人回复
用MATLAB ode45求解2阶微分方程
已经有4人回复
【求助】用matlab最优化方法进行参数拟合
已经有17人回复
【求助】急求各位大侠,关于用ode45解微分方程
已经有8人回复
【求助】如何计算实验数据与已知方程的相关系数?
已经有6人回复
【求助】最小二乘法编写指数拟合方程
已经有19人回复
【求助】使用Matlab预估动力学方程问题
已经有13人回复
2楼2014-09-18 22:12:01
birdcanfly
金虫 (正式写手)
- 应助: 8 (幼儿园)
- 金币: 735.7
- 散金: 406
- 红花: 3
- 帖子: 320
- 在线: 105.9小时
- 虫号: 399057
- 注册: 2007-06-11
- 性别: GG
- 专业: 生物医用高分子材料
|
可以顺利运行,求出了参数,可以很好的拟合文献中的数据,但是参数和文献报道的参数差好几个数量级。 ********************* function k1k2k3 format short e clear all clc k0 = [1.0 1.0 1.0 1.0 139 59 169 100 0.8]; lb = [0 0 0 0 0 0 0 0 0]; ub = [inf inf inf inf inf inf inf inf 1]; data=... [ 0.21 78.8686 18.802 1.99667 0 0.22 59.2346 37.9368 2.66223 0.332779 0.23 48.0865 46.7554 4.49251 0.166389 0.24 37.1048 57.0715 5.32446 0.665557 0.25 29.6173 61.2313 8.31947 0.831947 0.253 31.1148 59.5674 9.65058 0.831947 0.258 29.7837 61.2313 7.8203 0.998336 0.26 22.629 63.3943 12.3128 1.16473 0.263 24.792 60.3993 13.4775 1.33111 0.266 21.9634 62.396 13.9767 1.4975 0.27 21.2978 63.228 13.1448 1.83028 0.272 24.6256 59.0682 14.3095 1.66389 0.277 17.3045 58.4027 21.1314 3.1614 0.28 17.4709 58.7354 20.9651 2.82862 0.29 23.7937 49.9168 22.4626 3.32779 0.3 18.3028 43.7604 31.1148 6.48918 ]; x0=data(1,2:end); tspan=data(:,1); yexp = [data(2:end,2) data(2:end,3) data(2:end,4) data(2:end,5)]; [k,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,x0,yexp); ci = nlparci(k,residual,jacobian); fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n') fprintf('\tk1 = %e ± %e\n',k(1),ci(1,2)-k(1)) fprintf('\tk2 = %e ± %e\n',k(2),ci(2,2)-k(2)) fprintf('\tk3 = %e ± %e\n',k(3),ci(3,2)-k(3)) fprintf('\tk4 = %e ± %e\n',k(4),ci(4,2)-k(4)) fprintf('\tEa1 = %e ± %e\n',k(5),ci(5,2)-k(5)) fprintf('\tEa2 = %e ± %e\n',k(6),ci(6,2)-k(6)) fprintf('\tEa3 = %e ± %e\n',k(7),ci(7,2)-k(7)) fprintf('\tEa4 = %e ± %e\n',k(8),ci(8,2)-k(8)) fprintf('\ta = %f ± %f\n',k(9),ci(9,2)-k(9)) ts=0.210 (max(tspan)-min(tspan))/100):max(tspan);[ts ys] = ode45(@KineticsEqs,ts,x0,[],k); yy = [data(:,2) data(:,3) data(:,4) data(:,5)]; I100=100*ones(101,1); plot(ts,ys(:,1),'b',tspan,yy(:,1),'bo'); hold on plot(ts,ys(:,2)+ys(:,3),'r',tspan,yy(:,2),'r*'); plot(ts,ys(:,4),'k',tspan,yy(:,3),'k+'); plot(ts,I100-ys(:,1)-ys(:,2)-ys(:,3)-ys(:,4),'g',tspan,yy(:,4),'g<') legend('C1的计算值','C1的实验值','C2的计算值','C2的实验值','C3的计算值','C3的实验值','C4的计算值','C4的实验值') function f = ObjFunc(k0,tspan,x0,yexp) % 目标函数 [t Xsim] = ode45(@KineticsEqs,tspan,x0,[],k0);% 求解常微分方程,其中tspan为t的取值点,x0为微分方程组的初始值,k为微分方程的系数,返回t为微分方程组解的取值点,Xsim为微分方程组的解 Xsim1=Xsim(:,1);%提取Xsim的第一列 Xsim2=Xsim(:,2);%提取Xsim的第二列 Xsim3=Xsim(:,3);%提取Xsim的第三列 Xsim4=Xsim(:,4);%提取Xsim的第四列 ysim(:,1) = Xsim1(2:end);%微分方程的第一个变量,从第二个解到最后一个解赋值给ysim的第一列 ysim(:,2) = Xsim2(2:end);%微分方程的第二个变量,从第二个解到最后一个解赋值给ysim的第二列 ysim(:,3) = Xsim3(2:end);%微分方程的第三个变量,从第二个解到最后一个解赋值给ysim的第三列 ysim(:,4) = Xsim4(2:end);%微分方程的第四个变量,从第二个解到最后一个解赋值给ysim的第四列 I100=100*ones(15,1); f = [(ysim(:,1)-yexp(:,1)) (ysim(:,2)+ysim(:,3)-yexp(:,2)) (ysim(:,4)-yexp(:,3)) (I100-ysim(:,1)-ysim(:,2)-ysim(:,3)-ysim(:,4)-yexp(:,4))];%形成目标优化函数 function dCdt = KineticsEqs(t,C,k) % ODE模型方程,C为浓度,k为微分方程中的系数,t为导数 a=k(9); Ea1=k(5); Ea2=k(6); Ea3=k(7); Ea4=k(8); R=8.314; Ttime=(-960.5*t^2+842.1*t+56.66+273.15); dC1dt =-k(1)*exp(-Ea1/(R*Ttime))*C(1);%第一个微分方程,等号前面是C(1)对t的微分 dC2dt =k(1)*exp(-Ea1/(R*Ttime))*a*C(1)-k(2)*exp(-Ea2/(R*Ttime))*C(2);%第二个微分方程,等号前面是C(2)对t的微分 dC3dt =k(2)*exp(-Ea2/(R*Ttime))*C(2)-k(3)*exp(-Ea3/(R*Ttime))*C(3);%第三个微分方程,等号前面是C(3)对t的微分 dC4dt =k(3)*exp(-Ea3/(R*Ttime))*C(3)-k(4)*exp(-Ea4/(R*Ttime))*C(4);%第四个微分方程,等号前面是C(4)对t的微分 dCdt = [dC1dt; dC2dt;dC3dt;dC4dt];%微分方程组 |
3楼2014-09-19 13:17:46
birdcanfly
金虫 (正式写手)
- 应助: 8 (幼儿园)
- 金币: 735.7
- 散金: 406
- 红花: 3
- 帖子: 320
- 在线: 105.9小时
- 虫号: 399057
- 注册: 2007-06-11
- 性别: GG
- 专业: 生物医用高分子材料
4楼2014-09-19 13:22:20
whqs8426212
铜虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 13.2
- 散金: 375
- 红花: 7
- 帖子: 782
- 在线: 685.7小时
- 虫号: 2572504
- 注册: 2013-07-30
- 专业: 数论
5楼2014-09-20 18:18:39
birdcanfly
金虫 (正式写手)
- 应助: 8 (幼儿园)
- 金币: 735.7
- 散金: 406
- 红花: 3
- 帖子: 320
- 在线: 105.9小时
- 虫号: 399057
- 注册: 2007-06-11
- 性别: GG
- 专业: 生物医用高分子材料
6楼2014-09-23 18:08:55













(max(tspan)-min(tspan))/100):max(tspan);
回复此楼