首页 > 解决方案 > Matlab:ODE45方程的参数拟合 - 只有xdata的初始值

问题描述

我有一个由 3 个 ODE 组成的系统:

Cf' = kin * Cw * F - (kout + km) * Cf
Cw' = kout * Cf - kin * Cw(i) * F
Cm' = km * Cf

我测量了 Cf 的所有时间点的数据,只测量了 Cw 和 Cm 的初始值。现在我想将我的模型拟合到这些数据中,找到 kin、kout 和 km 的最佳参数值。

我可以用 lsqcurvefit 和 ode45 以某种方式做到这一点吗?谢谢!

标签: matlabcurve-fittingdifferential-equations

解决方案


所以你有一个 ODE 函数

function Dy = derivs(t,y,p)
  Cf = y(1); Cw = y(2); Cm = y(3);
  kin = p(1); kout = p(2); km = p(3);
  DCf = kin * Cw * F - (kout + km) * Cf;
  DCw = kout * Cf - kin * Cw * F;
  DCm = km * Cf;
  Dy = [ DCf DCw DCm ]
end

以及获得指定点解决方案的功能

function y_data = solution(x_data,y0,p)
  sol = ode45(@(t,y)derivs(t,y,p), [x0,xe], y0)
  y_data = deval(sol, x_data)
end

现在传递给拟合过程的函数是

@(p) solution(x_data,y0,p) 

你会得到一个更详细的值表,其中包含p_opt用于绘制的优化参数

x_plot = linspace(x0,xe,300)
y_plot = solution(x_plot,y0,p_opt)
plot(x_plot, y_plot)

推荐阅读