【发布时间】:2012-02-06 21:52:01
【问题描述】:
我正在尝试通过改变 a 和 b 来将微分方程 ay' + by''=0 拟合到曲线以下代码不起作用。 curve_fit 的问题似乎是缺乏初始猜测导致拟合失败。我也试过了。谁能建议我用其他方法来拟合这种微分方程?如果我没有很好的猜测,curve_fit 会失败!
from scipy.integrate import odeint
from scipy.optimize import curve_fit
from numpy import linspace, random, array
time = linspace(0.0,10.0,100)
def deriv(time,a,b):
dy=lambda y,t : array([ y[1], a*y[0]+b*y[1] ])
yinit = array([0.0005,0.2]) # initial values
Y=odeint(dy,yinit,time)
return Y[:,0]
z = deriv(time, 2, 0.1)
zn = z + 0.1*random.normal(size=len(time))
popt, pcov = curve_fit(deriv, time, zn)
print popt # it only outputs the initial values of a, b!
【问题讨论】:
-
在我们开始回答这个问题之前,请接受您对之前问题的回答(答案左侧的绿色勾号)。
-
@ovgolovin 谢谢你的建议。我所拥有的是一组随着时间推移的数字。我试图找出这个微分方程的解是否可以用来拟合数据。
-
有什么原因不能只使用微分方程的闭式解吗?
-
“它不起作用”是什么意思?上面的代码正确打印了
[ 1.99997875 0.10001344],这确实是数据zn中拟合的参数?
标签: python numpy matplotlib scipy