FindFit“有效为零的渐变”

时间:2015-02-02 21:37:50

标签: wolfram-mathematica differential-equations model-fitting

我正在使用Mathematica的FindFit函数来为我的数据拟合参数解决方案,我收到错误“FindFit :: fmgz:遇到一个实际为零的渐变”。我给出的参数的初始猜测非常接近我用来煮数据的值,我无法弄清楚我哪里出错了。

首先,我使用ParametricNDSolveValue函数参数化求解函数'a [t]'和'b [t]'的两个耦合一阶微分方程,参数为ka,kd和beta:

sol = ParametricNDSolveValue[{D[a[t], t] == -kd*a[t] + ka*(1 - a[t] - b[t]), a[0] == ka/(ka + kd), D[b[t], t] == -kd*b[t] + ka*(1 - Exp[-beta*t]) (1 - a[t] - b[t]), b[0] == 0 }, {a, b}, {t, 0, 20}, {ka, kd, beta}]

我可以使用以下方法提取a [t]的解为ka = 0.7,kd = 0.1,beta = 0.1

y1 = sol[0.7, 0.1, 0.1][[1]]

将y1绘制为t的函数给出预期曲线:

Plot[y1[t], {t, 0, 20}, PlotRange -> All]

然后我创建一个数据表,从图中注视值:

dataA = {{0, 0.9}, {5, 0.84}, {10, 0.75}, {15, 0.68}, {20, 0.62}}

最后,我将FindFit与sol [ka,kd,beta] [t] [[1]]一起使用来拟合数据:

fit = FindFit[dataA, sol[ka, kd, beta][t][[1]], {{ka, 0.7}, {kd, 0.1}, {beta, 0.1}}, t]

此时我得到“梯度有效为零”错误。再次注意,数据是通过观察ka = 0.7,kd = 0.1,beta = 0.1的图来生成的,所以我不知道为什么FindFit不喜欢这些初步的猜测。

有人能告诉我我做错了什么吗?谢谢你的时间!

0 个答案:

没有答案