共享数据拟合中的公共参数

时间:2018-04-18 09:35:13

标签: matlab parameters curve-fitting differential-equations least-squares

我正在尝试将数据拟合到非线性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

有人可以向我解释如何更正代码以评估常用参数吗?

0 个答案:

没有答案