0

我使用 lsqcurvefit 来适应我的功能。我的功能是:

C_PET (t)=(k_1/(α_2+α_1 ) [(k_3+k_4-α_1 )  e^((-α_1   t) )+(α_2-k_3-k_4 ) e^((-α_2   t) ) ]* C_P (t))+vC_b (t)

我去寻找解决方案,这意味着最适合我的 K 参数。问题是我的代码给出的解决方案是起点。这是代码(vb 是常数,cp,ydata,t 是向量

    k0 = 1*ones(1,4);
    k0(4) = 0;
    k0 = [0.8,0.1,0.5,0.07]
    a1=[k0(2)+k0(3)+k0(4)+sqrt(((k0(2)+k0(3)+k0(4)).^2) -4*k0(2)*k0(4))]/2;
    a2=[k0(2)+k0(3)+k0(4)-sqrt(((k0(2)+k0(3)+k0(4)).^2) -4*k0(2)*k0(4))]/2;
    l1=(k0(1)/(a2+a1))*(k0(3)+k0(4)-a1) l2=(a2-k0(3)-k0(4))
    l2=(a2-k0(3)-k0(4))
     y=conv((l1*exp(-a1*t)+l2*exp(-a2*t)),cp);

    y=(y(1:numel(t)));
    CPET=@(k,t) y+(vb*cp);
    [xfitted,errorfitted] = lsqcurvefit(CPET,k0,t,ydata)

%

所以请你帮帮我。

4

1 回答 1

1

你的目标函数CPET是一个常数:

CPET=@(k,t) y+(vb*cp);

您已将其声明为 and 的函数,kt既不yvb也不cp更改时kt更改。这就是为什么您的求解器没有改变答案的原因。无论k或的值是t lsqcurvefit什么CPET,答案总是相同的,这是错误的。

您的目标函数很长,因此让我们考虑一个更简单的目标函数,例如拟合一个二次模型,该模型具有另一个函数t(即与您的C_P工作方式相同),例如:

O = k 1 + k 2 *t + k 3 *t 2 + C P (t)

将此目标函数写入lsqcurvefitdo 预期的形式:

O = @(k,t) k(1) + k(2).*t + k(3).*t.^2 + CP(t)

现在CP上面可以是一个向量 CP,当且仅当它t总是一个自然数。然而,创建一个作为输入的名为CP的函数会更有意义。t例如,也许所有要做的就是取thenCP的正弦t

CP = @(t)sin(t);  %// This needs to be declared before O

您需要将您的相似性编写CPET为 and 的函数,k并且t它需要在其定义中同时使用kand 。t

于 2016-02-19T12:01:28.527 回答