24小时热门版块排行榜    

查看: 1526  |  回复: 4

ankcean96

金虫 (小有名气)

[求助] 用matlab求动力学参数 如何估计y的初始值

在大神指点下 带着满满的诚意 重新发贴:victory::victory::victory:
matlab 求解动力学常微分方程组  6个参数,初值和有物理学意义的区间如下:  
k0 = [0.5575  0.0072  1  0.5136  0.01 0.2251];         % 参数初值
lb = [0.0001 0.0001 0.0001 0.1 0.01 0.1];                   % 参数下限
ub = [50 1 1 1 1 1];    % 参数上限
常微分方程有五个,初始值如下: 
x0 = [1.4*10^8 2.043*10^4 1.8001*10^3 1212 0];    %y初值
按照下面写好的程序(y2初始值为2.043*10^4,y3初始值为1.8001*10^3),结果拟合的很好,但是实际上,y2和y3初始值是未知的。我只知道y2范围[1.8*10^4 ,1.4*10^7],y3范围[1.8*10^3,1.8*10^5],那么程序要怎么修改呢?

------------------------------------------
format long
clear all
clc
lb = [0.0001 0.0001 0.0001 0.1 0.01 0.1];                   % 参数下限
ub = [50 1 1 1 1 1];    % 参数上限
k0 = [0.5575  0.0072  1  0.5136  0.01 0.2251];         % 参数初值

x0 = [1.4*10^8 2.043*10^4 1.8001*10^3 1212 0];    %y初值
ExpData=[
31 3756.7 3217.9
59 2386.2 1060.9
90 7775.6 3470.9
120 24860.9 9981.9
151 35434.7 23046.0
181 34310 30359.4
212 26126.3 25344.2
243 11909.6 13215.4
273 10165.4 12080.2
304 8761.2 12249.1
334 7959.1 15276.8
365 6087.9 12667.9
];
t0=ExpData(:,1);   
yexp =10* ExpData(:,2);  % yexp: CDC数据

% 使用函数fmincon()进行参数估计
[k,fval,flag] = fmincon(@MSS,k0,[],[],[],[],lb,ub,[],[],x0,yexp);
fprintf('\n使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1 = %.4f\n',k(1))
fprintf('\tk2 = %.4f\n',k(2))
fprintf('\tk3 = %.4f\n',k(3))
fprintf('\tk4 = %.4f\n',k(4))
fprintf('\tk5 = %.4f\n',k(5))
fprintf('\tk6 = %.4f\n',k(6))
fprintf('  The sum of the squares is: %.1e\n\n',fval)
k_fmincon = k;

%% =======绘图显示结果=======
tspan=[0:365];
[t x] = ode45(@li,tspan,x0,[],k);
yy(:,1) = x(:,4);
tt1=[sum(yy (1:31,:),1)  
sum(yy (32:59,:),1)
sum(yy (60:90,:),1)
sum(yy (91:120,:),1)
sum(yy (121:151,:),1)
sum(yy (152:181,:),1)
sum(yy (182:212,:),1)
sum(yy (213:243,:),1)
sum(yy (244:273,:),1)
sum(yy (274:304,:),1)
sum(yy (305:334,:),1)
sum(yy (335:365,:),1) ]

plot(t0, yexp(:,1),'r.-')
hold on
plot(t0, tt1 (:,1),'bo-')
legend('y0', ' y1')
xlabel('t ')
ylabel('num')

function f = MSS(k,x0,yexp)           % fmincon优化
tspan=[0:365];
[t x] = ode45(@li,tspan,x0,[],k);
yy(:,1) = x(:,4);
tt1=[sum(yy (1:31,:),1)   
sum(yy (32:59,:),1)
sum(yy (60:90,:),1)
sum(yy (91:120,:),1)
sum(yy (121:151,:),1)
sum(yy (152:181,:),1)
sum(yy (182:212,:),1)
sum(yy (213:243,:),1)
sum(yy (244:273,:),1)
sum(yy (274:304,:),1)
sum(yy (305:334,:),1)
sum(yy (335:365,:),1) ];
f = sum((log2(1+ yexp(:,1))-log2(1+ tt1(:,1))).^2);



%微分方程组
function dydt=li(t,y,k)
u=3.9139*10^-5;
dydt=[(u*(y(1)+y(2)+y(3)+y(4)+y(5))-k(1)*(y(3)+y(4))*y(1)/(y(1)+y(2)+y(3)+y(4)+y(5))+k(2)*y(5)-u*y(1))
    (k(1)*(y(3)+y(4))*y(1)/(y(1)+y(2)+y(3)+y(4)+y(5))-k(3)*y(2)-u*y(2))
    (k(3)*(1-k(5))*y(2)-k(4)*y(3)-u*y(3))
    (k(3)*k(5)*y(2)-k(6)*y(4)-u*y(4))
    (k(4)*y(3)+k(6)*y(4)-k(2)*y(5)-u*y(5))];
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

matlab初始值需要自己多次去尝试,或者先用一两组数据计算出一个初始值

发自小木虫Android客户端
数值计算
2楼2018-05-11 09:35:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ankcean96

金虫 (小有名气)

引用回帖:
2楼: Originally posted by 独孤神宇 at 2018-05-11 09:35:55
matlab初始值需要自己多次去尝试,或者先用一两组数据计算出一个初始值

谢谢您 我现在初始值是用原文中估计出来的  结果拟合的很好  现在问题是 程序是我自己模仿小木虫上找到的程序写的 我不知道怎么把它改成可以估计y2和y3的形式?
3楼2018-05-11 12:06:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

初始值只能试,或者预先根据数据计算。当然,可以用不依赖初始值的1stOpt计算

发自小木虫Android客户端
数值计算
4楼2018-05-11 15:41:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ankcean96

金虫 (小有名气)

自己顶一下有用吗
5楼2018-05-18 13:56:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ankcean96 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 6F5UbRU2I5hL 2026-09-14 3/150 2026-09-15 17:39 by CgyNCDVNhGVg
[考研] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 6F5UbRU2I5hL 2026-09-14 4/200 2026-09-15 17:23 by CgyNCDVNhGVg
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 s3fFTmArrBt6 2026-09-14 5/250 2026-09-15 16:35 by CgyNCDVNhGVg
[公派出国] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +4 s3fFTmArrBt6 2026-09-14 4/200 2026-09-15 16:26 by CgyNCDVNhGVg
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 s3fFTmArrBt6 2026-09-13 6/300 2026-09-15 15:35 by CgyNCDVNhGVg
[硕博家园] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 LwdutQ8HoqWP 2026-09-13 5/250 2026-09-15 15:14 by CgyNCDVNhGVg
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +6 3n8v2C8RimXI 2026-09-13 7/350 2026-09-15 14:49 by VMDqgnlKimtZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 3n8v2C8RimXI 2026-09-13 4/200 2026-09-15 14:34 by VMDqgnlKimtZ
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +4 6F5UbRU2I5hL 2026-09-14 4/200 2026-09-15 08:02 by C79jjtjAKjEn
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 6F5UbRU2I5hL 2026-09-14 4/200 2026-09-15 07:50 by C79jjtjAKjEn
[教师之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +4 s3fFTmArrBt6 2026-09-13 4/200 2026-09-15 07:02 by 5BDX0d0WFp7t
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 s3fFTmArrBt6 2026-09-13 4/200 2026-09-15 06:50 by 5BDX0d0WFp7t
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 s3fFTmArrBt6 2026-09-13 5/250 2026-09-15 06:49 by 5BDX0d0WFp7t
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +6 3n8v2C8RimXI 2026-09-13 6/300 2026-09-15 05:38 by 5BDX0d0WFp7t
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +6 QUjhNVAcOSff 2026-09-13 7/350 2026-09-15 05:22 by 5BDX0d0WFp7t
[考研] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +5 LwdutQ8HoqWP 2026-09-13 5/250 2026-09-14 22:25 by vZfe6xYu34yj
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 QUjhNVAcOSff 2026-09-13 5/250 2026-09-14 21:25 by vZfe6xYu34yj
[找工作] 浙江师范大学是怎么坑我的 +6 recruit123 2026-09-09 6/300 2026-09-14 12:00 by 萨仁其其格
[考博] 西北工业大学材料学院电化学传感与催化课题组招收2027年推免研究生、博士生、博士后 +3 马方园 2026-09-10 4/200 2026-09-14 09:29 by Chem张zz
[考博] 27秋季材料博士申请求助 10+3 Cahal1 2026-09-11 4/200 2026-09-14 08:50 by 北京莱茵编辑
信息提示
请填处理意见