【发布时间】:2023-03-15 02:44:02
【问题描述】:
我有超过 4 个时间点 (t) 测量的数据 (y),用于三个浓度 (c)。
所以数据会是这样的:
c1下:y11,y12,y13,y14(4个时间点测量)
在c2:y21,y12,y23,y24下
在c3下:y31,y32,y33,y34
我要做的是通过同时拟合不同浓度的所有这些数据度量来估计两个参数 c 和 d。
但是,其中一些值是 NaN。所以,例如,
在c2:y21,y12,NaN,NaN下
在c3下:y31,y32,y33,NaN
这是我编写的 Matlab 代码。
%C contains the different concentration values (c1,c2,c3)
[fittedVals,errorVals]=lsqcurvefit(@(xEstimate,thours)model(xEstimate,t,C),initial,t,y,lb,ub);
function output= model(xEstimate,t,C)
intVals=repmat(10^5,3,1);%initial value of the ODE system
[~,values] = ode45(@(t,y)Equations(t,y,C),t,intVals);
function s=Equations(~,y,para)
a=0.25;
b=-0.1;
k=xEstimate(1);
d=xEstimate(2);
concentration=para;%different concentrations
s=zeros(3,1);
s(1)=a*y(1)-y(1)*(((a-b)*(concentration(1)/k).^d)/((concentration(1)/k).^d-(b/(a))));
s(2)=a*y(2)-y(2)*(((a-b)*(concentration(2)/k).^d)/((concentration(2)/k).^d-(b/(a))));
s(3)=a*y(3)-y(3)*(((a-b)*(concentration(3)/k).^d)/((concentration(3)/k).^d-(b/(a))));
end
output=values;
end
当数据不是 NaN 但缺少数据时,此代码有效,它会给出错误:
目标函数在初始点返回未定义的值。 lsqcurvefit 无法继续。
我可以在这里做些什么来解决这个问题?我应该将时间和 y 数据输入为元胞数组吗?
如果是这样,我不太明白如何更改代码以使用元胞数组。
任何帮助表示赞赏。
【问题讨论】:
-
这完全取决于您希望如何适应 NaN...您要省略曲线的那些部分吗?您想从非 NaN 值进行插值/外推吗?
-
@Wolfie 我想从曲线中省略这些。我不想在估算过程中使用这些。
标签: matlab optimization missing-data