系数估计的系统耦合常微分方程
7视图(30天)
显示旧的评论
你好你们所有人,我是一个完整的新手Matlab和我试图解决系统4常微分方程的未知参数。我的目的是估计参数来获取解决方案然后使用实验数据优化ODE体系的解决方案。
我将把
。m
我的代码,里面也包含了实验数据。
ODE体系供参考我试图解决的是一个附加的图像上显示。
接受的答案
明星黾
2021年8月30日
我没有看到,你做错了什么,和代码运行没有错误。
我做的这些改变是估计初始条件以及其他参数,并使用随机值
“theta0”
。我的格式扩展
的常量:
输出以查看完整的精度,并改变了剧情循环,这样安装线是相同的颜色广告数据点。(我做了这个变化在其他关于这个主题的文章,所以我更新在这里。)健康与这些变化似乎是相当不错。
注意就是
lsqcurvefit
超过了评价函数极限之前,确信模型聚合。你可以增加函数评估限制(参见文档部分
选项
),不过可能不是必要的。(我增加
15000年
和迭代限制
1500年
,似乎是更好的,估计是收敛的。)在这里使用估计参数
“theta0”
如果你想改变选项运行它,因为这似乎是相当好的近似。
modelacion
函数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));
吗?