24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2031  |  回复: 1

wtb1987

新虫 (初入文坛)

[交流] 【求助】MATLAB数值模拟已有1人参与

我编写了一个程序,结果拟合出来未知参数的置信区间很大,希望大家能帮我指导一下!!!
function HZSM_8
clear all;clc
expdata=[4.28 0.0724 0.0614 0.0075 0.0013 0.0021;
         8.56 0.1126 0.0859 0.0164 0.0039 0.0064;
         16.69 0.1529 0.1034 0.0278 0.0079 0.0138;
         33.76 0.1928 0.1134 0.0412 0.0132 0.0251;
         69.72 0.2305 0.1158 0.0555 0.0192 0.04;];
yexp=expdata(:,2:6);
x0=[0 0 0 0 0];
k0=[1.862 0.578 1.321 0.8 9.813 1.018 0.2409 0.626 4.5301 18.174 40.311 314.1];
options=optimset('Algorithm','Levenberg-Marquardt','LargeScale','off');
[k,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(@objfunc,k0,[],[],options,x0,yexp);
ci=nlparci(k,residual,jacobian);
fprintf('\t k1=%.4f±%.4f\n',k(1),ci(1,2)-k(1))
fprintf('\t k2=%.4f±%.4f\n',k(2),ci(2,2)-k(2))
fprintf('\t k3=%.4f±%.4f\n',k(3),ci(3,2)-k(3))
fprintf('\t k4=%.4f±%.4f\n',k(4),ci(4,2)-k(4))
fprintf('\t k5=%.4f±%.4f\n',k(5),ci(5,2)-k(5))
fprintf('\t k6=%.4f±%.4f\n',k(6),ci(6,2)-k(6))
fprintf('\t k7=%.4f±%.4f\n',k(7),ci(7,2)-k(7))
fprintf('\t k8=%.4f±%.4f\n',k(8),ci(8,2)-k(8))
fprintf('\t k9=%.4f±%.4f\n',k(9),ci(9,2)-k(9))
fprintf('\t k10=%.4f±%.4f\n',k(10),ci(10,2)-k(10))
fprintf('\t k11=%.4f±%.4f\n',k(11),ci(11,2)-k(11))
fprintf('\t k12=%.4f±%.4f\n',k(12),ci(12,2)-k(12))
fprintf('\t the sum of the squares is:%.1e\n\n',resnorm)
function f=objfunc(k,x0,yexp)
%使用四阶龙格库塔法求取常微分方程组的值
tspan=[0 4.28 8.56 16.69 33.76 69.72];
[t,x]=ode45(@equations,tspan,x0,[],k)
y=x(2:6,;
%目标函数的定义
f1=y(:,1)-yexp(:,1);
f2=y(:,2)-yexp(:,2);
f3=y(:,3)-yexp(:,3);
f4=y(:,4)-yexp(:,4);
f5=y(:,5)-yexp(:,5);
f=[f1;f2;f3;f4;f5];
function dxdt=equations(t,x,k)
P=1;
PT=(1-x(1))*P/(6+x(1));
Ppx=x(2)*P/(6+x(2));
PO=x(4)*P/(6+x(1));
PMx=x(3)*P/(6+x(1));
PTMB=x(5)*P/(6+x(5));
PM=[0.5-(x(1)+x(5))]/(6+x(1));
Z=(1+k(7)*PT+k(8)*PM+k(9)*Ppx+k(10)*PMx+k(11)*PO+k(12)*PTMB)^2;
dx1dt=k(1)*PT*PM/Z;
dx2dt=[k(1)*PT*PM-k(2)*(Ppx-PMx/2.2)-k(4)*Ppx*PM]/Z;
dx3dt=[k(2)*(Ppx-PMx/2.2)-k(3)*(PMx-PO/0.4)-k(5)*PMx*PM]/Z;
dx4dt=[k(3)*(PMx-PO/0.4)-k(6)*PO*PM]/Z;
dx5dt=(k(4)*Ppx*PM+k(5)*PMx*PM+k(6)*PO*PM)/Z;
dxdt=[dx1dt;dx2dt;dx3dt;dx4dt;dx5dt];

结果是:
k1=1.9174±58287.8297
         k2=0.5759±17506.6005
         k3=1.4271±43384.6026
         k4=0.8909±27081.9850
         k5=9.4426±287049.8962
         k6=2.5515±77564.2240
         k7=-0.0804±227820.0664
         k8=1.4310±276004.5168
         k9=5.7924±106309.8775
         k10=17.1832±259330.6709
         k11=37.7388±551649.7103
         k12=314.3976±4536110.8346
         the sum of the squares is:6.2e-007
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

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

spiderone

木虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
您这个问题是怎么解决的啊,我的也是这个情况,参数区间大的很!
2楼2013-12-02 15:32:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wtb1987 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见