我已经将一些数据拟合到非线性ODE系统以估计ODE模型参数。我是使用lsqcurvefit
完成的,但现在出于不同的原因想要使用fmincon
进行尝试(因为现在我想同时将两个数据集放到同一个模型中)。
首先,我尝试使用与lsqcurvefit
相同的数据,只更改代码以包含fmincon
。
我的问题是fmincon
即使我使用lsqcurvefit
估算作为初步猜测,也不能很好地适应。
因为我正在最小化目标函数
sum((fitted-data)^2)
相当于lsqcurvefit
为什么我不适合fmincon
?
这是matlab代码,
lb=[0,0.001,0,0,0,0,0];
ub=[inf,inf,1,1,1,100,100];
x=[thours,data];
[fit,fval]=fmincon(@(parameters)ssq(parameters,x),initial,[],[],[],[],lb,ub)
function SSE=ssq(parameters,x)
time=x(:,1);
data=x(:,2);
fitted=model(parameters,time);
error1=fitted(:,1)-data;
SSE=sum(error1.^2);
end
function [output]= model(parameters,thours)
%ODE model code