系数估计的系统耦合常微分方程

7视图(30天)
你好你们所有人,我是一个完整的新手Matlab和我试图解决系统4常微分方程的未知参数。我的目的是估计参数来获取解决方案然后使用实验数据优化ODE体系的解决方案。
我modiffied代码提供的用户星黾的问题: “一个微分方程组参数估计” 利用常微分方程和数据我拥有,因为这两个问题很相似。然而结果符合程序发现暗示我,我做错了什么。
我将把 。m 我的代码,里面也包含了实验数据。
ODE体系供参考我试图解决的是一个附加的图像上显示。

接受的答案

明星黾
明星黾 2021年8月30日
我没有看到,你做错了什么,和代码运行没有错误。
我做的这些改变是估计初始条件以及其他参数,并使用随机值 “theta0” 。我的格式扩展 的常量: 输出以查看完整的精度,并改变了剧情循环,这样安装线是相同的颜色广告数据点。(我做了这个变化在其他关于这个主题的文章,所以我更新在这里。)健康与这些变化似乎是相当不错。
注意就是 lsqcurvefit 超过了评价函数极限之前,确信模型聚合。你可以增加函数评估限制(参见文档部分 选项 ),不过可能不是必要的。(我增加 15000年 和迭代限制 1500年 ,似乎是更好的,估计是收敛的。)在这里使用估计参数 “theta0” 如果你想改变选项运行它,因为这似乎是相当好的近似。
modelacion
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。常量:θ(1)= 1.225621526046θ(2)θ= 8.818523145614(3)θ= 0.832213488120(4)θ= 8864.918733082799(5)θ= 1.234266936058θ(6)= 0.810227130705(7)θ= 0.157698146317(8)= 0.023932541443θ(9)= 0.089951988393θ(10)θ= 36.855992659497(11)= 0.565552316098θ(12)= 0.000134265635
函数modelacion
函数C =动力学(θ,t)
% c0 = [1, 0, 0, 0);
c0 =θ(9:12);
(T, Cv) =数值(@DifEq T c0);
%
函数dC = DifEq (t, c)
dcdt = 0 (4,1);
dcdt(1) =(θ(1)*(1 -θ(c(1) /(2)))θ(3))* c (1);
dcdt(2) =((1. /θ(4))* dcdt(1)——(θ(5)。* c (1));
dcdt(3) =θ(6)。* dcdt(1) +θ(7)。* c (1);
dcdt(4) =θ(8)。* dcdt (1);
dC = dcdt;
结束
C =简历;
结束
t = [0
0.928
1.984
2.992
3.952
5.008
5.968
6.976
7.98400000000
8.992
9.952
11.008);
c = (0.075 36.77419355 0.317906336 0
0.075 36.77419355 0.545179063 0.000434783
0.175 36.4516129 0.71184573 0.001304348
0.325 36.12903226 0.909090909 0.003478261
0.425 36.12903226 1.106060606 0.006086957
0.525 35.48387097 1.242424242 0.010869565
0.675 34.19354839 1.439393939 0.013913043
0.925 33.5483871 1.636363636 0.020869565
1.15 32.25806452 1.985123967 0.026521739
1.475 30.32258065 2.454820937 0.032608696
1.8 28.38709677 3.015702479 0.040869565
2.075 26.12903226 3.54600551 0.047826087);
% theta0 = [1; 1; 1; 1; 1; 1; 1; 1];
theta0 =兰德(12日1);
选择= optimoptions (“lsqcurvefit”,“MaxFunctionEvaluations”,15000,“MaxIterations”,1500);
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c、零(大小(theta0)),正(大小(theta0)),选择);
流(1,“\ tConstants: \ n”)
k1 = 1:长度(θ)
流(1,' \ t \ tTheta (% 2 d) = % 18.12 f \ n ',k1,θ(k1))
结束
电视= linspace (min (t)、马克斯(t));
Cfit =动力学(θ,电视);
图(1)
高清=情节(t、c、“p”);
k1 = 1:尺寸(c, 2)
简历(k1,:) =高清(k1) .Color;
高清(k1)。:MarkerFaceColor =简历(k1);
结束
持有
hlp =情节(电视、Cfit);
k1 = 1:尺寸(c, 2)
hlp (k1)。:颜色=简历(k1);
结束
持有
网格
包含(“时间”)
ylabel (“浓度”)
传奇(hlp组成(“C_} {% d (t)的1:尺寸(c, 2)),“位置”,“最佳”)
结束
做适当的改变来得到你想要的结果。
3评论
亚历克斯·沙
亚历克斯·沙 2021年9月9日
嗨,巴勃罗,根据颂歌方程你发布的照片,如上所述,在您的代码:
dcdt(2) =((1. /θ(4))* dcdt(1)——(θ(5)。* c (1));
应:
dcdt(2) =((1. /θ(4))* dcdt(3) -(θ(5)。* c (1));
吗?

登录置评。

更多的答案(0)

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的