大佬求教,拟合为什么拟合不出来?
mathematica吧
全部回复
仅看楼主
level 1
古棋香茗 楼主
ti2 = Table[i, {i, 0, 1100, 50}]
ci2 = {0.0000069659, 0.0000097818, 0.0000260849, 0.0000671390, 0.0001474686, 0.0002614418, 0.0003763042, 0.0004837562, 0.0005680875, 0.0006190716, 0.0006496028, 0.0006620524, 0.0006712414, 0.0006709450, 0.0006651648, 0.0006533080, 0.0006407102, 0.0006155146, 0.0006072148, 0.0005931349, 0.0005778693, 0.0005614181, 0.0005465971}
data = Table[{ti2[[i]], ci2[[i]]}, {i, 1, Length[ci2]}]
eq = c'[t] == k1*(0.001575 - 2*c[t])^m*(0.05 - 5*c[t])^n - k2*c[t]^l
pfun = ParametricNDSolveValue[{eq, c[ti2[[1]]] == ci2[[1]]}, c, {t, 0, 1100}, {k1, n, m, k2, l}]
sol = NonlinearModelFit[data,pfun[k1, n, m, k2, l][t], {k1, n, m, k2, l}, t]
请大佬们赐教
2020年08月06日 08点08分 1
level 7
倒数第二,三行有点问题,系统应该不会把eq当成expression,而是会先算成Boolean value。改了之后,倒数第二行里依旧一堆变量是深蓝色的(没定义),建议楼主查下PNDSolveValue格式。
2020年08月07日 09点08分 3
大佬,代码我按照你说的修改了,我看了一下PNDSolveValue格式没有问题,但就是拟合不出来,请问是什么原因呢?
2020年08月08日 02点08分
@古棋香茗 变量什么的都定义了?楼下发下代码,我在看下。
2020年08月08日 09点08分
level 4
ti2 = Table[i, {i, 0, 1100, 50}]
ci2 = {0.0000069659, 0.0000097818, 0.0000260849, 0.0000671390, 0.0001474686, 0.0002614418, 0.0003763042, 0.0004837562, 0.0005680875, 0.0006190716, 0.0006496028, 0.0006620524,0.0006712414, 0.0006709450, 0.0006651648, 0.0006533080,0.0006407102, 0.0006155146, 0.0006072148, 0.0005931349, 0.0005778693, 0.0005614181, 0.0005465971}
data = Table[{ti2[[i]], ci2[[i]]}, {i, 1, Length[ci2]}]
pfun = ParametricNDSolveValue[{c'[t] == k1*(0.001575 - 2*c[t])^m*(0.05 - 5*c[t])^n - 2*c[t]^l, c[ti2[[1]]] == ci2[[1]]}, c, {t, 0, 1100}, {k1, n, m, k2, l}]
sol = NonlinearModelFit[data, pfun[k1, n, m, k2, l][t], {k1, n, m, k2, l}, t]
上面那位兄弟,我最近也在研究微分方程拟合,和楼主遇到了相似的问题。我按照你的意思修改了楼主的代码,你说倒数第二行一堆变量没定义,可我看了帮助手册,发现PNDSolveValue格式里的参数就是未定义的啊?
2020年08月08日 10点08分 4
我的问题,我没用过这个函数,单纯的以为没定义就会有问题。我再仔细看下
2020年08月08日 15点08分
level 7
最后一行把nonlinearmodelfit换了findfit,给出了结果,不过不是模型。
2020年08月08日 15点08分 5
level 7
这里参考了下外网的资料,parameter太多的话,有可能给不出模型:https://mathematica.stackexchange.com/questions/176047/nolinearmodelfit-error-message,用findfit做出来是这个样的:
2020年08月08日 15点08分 6
plot时数字取小了,记得改大一点。。
2020年08月08日 16点08分
level 4
这拟合结果。。。算了,我不说啥了
2020年08月09日 01点08分 7
你没调PlotRange。
2020年09月05日 07点09分
吧务
level 15
非线性拟合过程是非常依赖初值的,一个例子:https://tieba.baidu.com/p/5001161378
更何况你这个模型和数据匹配度也堪忧,你可以用原始数据画一下纵轴为c'[t](用Interpolation构造插值函数再求导即可)横轴为c[t]的线,应该不难明白困境在哪。
2020年09月05日 07点09分 8
1