matlab - 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 以某种方式做到这一点吗?谢谢!
解决方案
所以你有一个 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)
推荐阅读
- r - dplyr:总结,找不到对象
- python - 文件位于不同文件夹时导入模块时出现问题
- activerecord - 向对象的 ActiverecordRelation 添加方法
- mongodb - Mongoose 文档类型声明
- python - 评估模型时出现“太多值无法解包(预期为 2)”错误
- python - 从 (1,2) pytorch 张量生成模型的置信度
- javascript - 如何将我的 API 密钥添加到此 URL 以成功获取?
- python - 使用 Python 替换字符串中的所有特定字符
- css - 为什么当光标在屏幕边缘时滚动条不可选?
- php - 如何在 Livewire 组件中使用 Laravel 请求