【发布时间】:2018-06-18 19:13:28
【问题描述】:
我正在尝试将我的实验数据拟合到包含 2 个耦合 ODE 的模型中。我创建了一个单独的函数来定义 2 个 ODE,其中 a 是包含我要拟合的 2 个常量的数组。
function dy = CalcCoupODEs(t,y,a)
%dy= matrix with all 2 ODEs
dy = zeros(2,1); % variable definition
dy(1) = 1.41.*a(1) .* ((y(2)*y(1)^2)^2)*y(1) - a(2) .* y(1)*t ; %ODE for R
dy(2) = -a(1)*(y(2)*y(1)^2)^2; %ODE for n
end
然后,我通过以下方式调用该函数:
cycle_DMACl = [20, 25, 30, 40, 45]; % this is t variable
R_DMACl = [18.34, 11.29, 7.09, 6.51, 4.396]; %this is y(1)
n_DMACl = [92.31, 61.9, 53.82, 26.04, 11.87]; % this is y(2)
a0 = [1, 1]; %initial guess for constants
lb1 = [0, 0]; %lower bound
a = lsqcurvefit(@CalcCoupODEs, a0, cycle_DMACl(:), R_DMACl(:), n_DMACl(:), lb1);
我得到以下信息:
警告:下限长度 >
length(x);忽略额外的界限。
这显然不是试图拟合正确的东西(a 和 lb 都是 1x2)。我做错了什么,最好的方法是什么?
谢谢!
【问题讨论】:
标签: matlab ode non-linear-regression