У меня есть данные (y), измеренные в более чем 4 временных точках (t), для трех концентраций (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 как массивы ячеек?
Если это так, я не совсем понимаю, как изменить код для работы с массивами ячеек.
Любая помощь приветствуется.