我正在尝试将数据拟合到非线性ODE系统以估计模型参数。我在同一时间跨度内测量了data1,data2,data3
三个独立主题的数据。在估计这些参数时,我希望保持估计参数之一在所有受试者中是共同的。
我编写的代码类似于'anlaysis.m' in here的代码。
但是,我仍然为我想要保持不变的参数获得不同的值。
我的代码类似于:
thours = (1:100);
Y=[data1;data2;data3];
[fit,error]=lsqcurvefit(@model,initial,thours,Y,lb,ub,options)
function output= model(parameters,thours)
x0=[10^5,0.01];
a_1=parameters(1);%dependent on subject
a_2=parameters(2);%dependent on subject
a_3=parameters(3);%dependent on subject
r1=parameters(4);%common to all subjects
parameters1=[a_1,r1];
parameters2=[a_2,r1];
parameters3=[a_3,r1];
[time,res1] = ode45(@(t,y)Equations(t,y,parameters1),thours,x0);
[time,res2] = ode45(@(t,y)Equations(t,y,parameters2),thours,x0);
[time,res3] = ode45(@(t,y)Equations(t,y,parameters3),thours,x0);
function s=Equations(t,y,eval)
s=zeros(2,1);
% b, k are know constant parameter values. The parameter estimated as
% eval(2) should be constant among all subjects
s(1)=(eval(2)*y(1))-eval(1)*y(2)*y(1);
s(2)=b*(k-y(2))*y(1)-eval(1)*y(2);
end
pred1=res1(:,1);
pred2=res2(:,1);
pred3=res3(:,1);
output=[pred1;pred2;pred3];
end
有人可以向我解释如何更正代码以评估常用参数吗?