24小时热门版块排行榜    

查看: 940  |  回复: 1

wp9361825545

新虫 (初入文坛)

[求助] 求助matlab 微分方程组参数估计程序修改!!!!!! 已有1人参与

本人对MATLAB程序不熟,最近看到一本书上一个关于常微分方程组参数估计的MATLAB程序(就两个参数)但是我编写到MATLAB运行总是不对,我很怀疑作者是不是出错了,所以希望大神指点迷津,下面我贴出程序和运行诊断!


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主程序,文件名:untitled
ID=[1 3 7 25 72 222 282 256 233 189 123 70 25 11 4];
X0=[762 1];
lb=[0 0 ];
ub=[0.1 1];
par1guess=[0.01 0.1];
options=optimset('Display','final','MaxIter',2000,'MaxFunEval',2000);
[p,fval]=fminon(LSmin,par1guess,[],[],[],[],lb,ub,[],options,ID,X0);
[T1,X1]=ode45(SImodel,[0 14],X0,[],par1);
figure(1)
plot(T1,X1(:,1),'k-');
hold on
plot(T1,X1(:,2),'K-',0:14,'KO');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LSmin函数(,文件名: LSmin.m)
function d=LSmin(par1,ID,X0)
[T,x]=ode45(SImodel,[0:1:14],X0,[],par1);
d=norm(x(:,2)'-ID)^.2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%模型方程组(文件名:SImodel .m)
function dy=SImodel(t,y,par1)
dy=zeros(2,1);
beta=par1(1);gamma=par1(2);
dy=[-beta*y(1)*y(2);bata*y(1)*y(2)-gamma*y(2)];


下面是运行之后的错误提示!

>> untitled
输入参数的数目不足。

出错 SImodel (line 3)
beta=par1(1);gamma=par1(2);

出错 LSmin (line 2)
[T,x]=ode45(SImodel,[0:1:14],X0,[],par1);

出错 untitled (line 7)
[p,fval]=fminon(LSmin,par1guess,[],[],[],[],lb,ub,[],options,ID,X0);
>>
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hzlhm

至尊木虫 (著名写手)

【答案】应助回帖

★ ★
jjdg: 金币+2, 感谢参与 2017-10-22 22:36:56
给出的代码问题实在太多了。可以这样修改成这样即可。
function ode45_main38( )
%http://muchong.com/t-11733981-1
ID=[1 3 7 25 72 222 282 256 233 189 123 70 25 11 4]';
X0=[762 1];
lb=[0 0];
ub=[0.1 1];
par1guess=[0.01 0.1];
options=optimset('Display','final','MaxIter',2000,'MaxFunEval',2000);
[par1,fval]=fmincon(@LSmin,par1guess,[],[],[],[],lb,ub,[],options,X0,ID);
[T1,X1]=ode45(@SImodel,[0:1:14],X0,[],par1);
beta=par1(1),gamma=par1(2)
figure(1)
plot(T1,X1(:,1),'k-');
hold on
plot(T1,X1(:,2),'KO');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LSmin函数(,文件名: LSmin.m)
function d=LSmin(par1,X0,ID)
[T1,x]=ode45(@SImodel,[0:1:14],X0,[],par1);
d=norm(x(:,2)-ID)^.2;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%模型方程组(文件名:SImodel .m)
function dy=SImodel(t,y,par1)
dy=zeros(2,1);
beta=par1(1);gamma=par1(2);
dy=[-beta*y(1)*y(2);beta*y(1)*y(2)-gamma*y(2)];
end
https://pan.baidu.com/s/1gfoyWJx
QQ:2120156492
2楼2017-10-21 14:49:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wp9361825545 的主题更新
信息提示
请填处理意见