我如何适应耦合微分方程实验数据?

16个视图(30天)
CP
CP 2015年11月13日
评论道: 明星黾 2015年11月18日
我有一组微分方程,我想适合实验数据得到的化学动力学参数。方程是:
d (Mzb (t) / dt = - [Mzb (t) -Mzb0] / T1b - kb * Mzb (t) + kf * Mzf (t);
d (Mzf (t) / dt = - [Mzf (t) -Mzf0] / T1f - kf * Mzf (t) + kb * Mzb (t);
的数据是Mzb (t)和Mzf (t)在不同的时间点。从这些数据,我可以收集Mzb0 Mzf0 (Mzb平衡值(t)和Mzf (t)将常量),和其他数据我知道常数T1b和T1f。我也知道,这将是一个最小二乘优化得到最适合知识库和kf参数。部分我不明白是如何代码所有这一切——我是一个新手的语法,也感谢所有的帮助。

答案(1)

明星黾
明星黾 2015年11月13日
两种可能性: 莫诺动力学和曲线拟合 优化仿真或常微分方程 。应该给你你所需要的信息。
2的评论
明星黾
明星黾 2015年11月18日
我的荣幸。
首先,有几种方法可以确保你颂歌函数返回一个列向量。可能最容易添加第二个维度是指你的方程:
:xdot (1) = - (x (1) - B (1)) / T1b - B (3) . * x (1) + (4)。* x (2);
:xdot (2) = - (x (2) - B (2)) / T1f - B (4)。* x (2) + (3)。* x (1);
这将返回一个列向量。另一个方法就是在你的函数作为第一个赋值语句:
xdot = 0 (2, 1);
选择一个你最喜欢的!
请注意,你可以通过几个参数赋函数,包括初始条件,将产生最好的适合你的数据。你只需要确保适当解析出来在你的目标函数(在这里 “Mzbt” )。
第二,我阻止你的使用 全球 变量。最好将它们传递函数作为参数:
函数S = Mzbt (B、t、T1b T1f, Mzb0, Mzf0)
然后在脚本文件调用 lsqnonlin nlinfit ,使用一个匿名函数来确定拟合函数只有“看到”你想要的函数的参数:
objfcn = @ (B、t) Mzbt (B t T1b、T1f Mzb0, Mzf0);
你可以使用你的目标函数,或把它作为矿体合适参数,例如, lsqcurvefit :
B = lsqcurvefit (@ (B、t) Mzbt (B t T1b、T1f Mzb0, Mzf0),);
该函数将拿起其他参数从您的工作空间,因为你已经定义。
这不是一个简单的问题,因为你已经发现了。我将在这里帮助你一样。

登录置评。

类别

找到更多的在化工过程设计帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!