【发布时间】:2019-05-14 23:44:19
【问题描述】:
如何拟合下面scipy教程的微分函数
Scipy Differential Equation Tutorial?
最后,我想拟合一些数据点,这些数据点遵循一组两个微分方程,总共有六个参数,但我想从一个简单的例子开始。到目前为止,我尝试了 scipy.optimize.curve_fit 和 scipy.optimize.leastsq 函数,但我没有得到任何结果。
这就是我走了多远:
import numpy as np
import scipy.optimize as scopt
import scipy.integrate as scint
import scipy.optimize as scopt
def pend(y, t, b, c):
theta, omega = y
dydt = [omega, -b*omega - c*np.sin(theta)]
return dydt
def test_pend(y, t, b, c):
theta, omega = y
dydt = [omega, -b*omega - c*np.sin(theta)]
return dydt
b = 0.25
c = 5.0
y0 = [np.pi - 0.1, 0.0]
guess = [0.5, 4]
t = np.linspace(0, 1, 11)
sol = scint.odeint(pend, y0, t, args=(b, c))
popt, pcov = scopt.curve_fit(test_pend, guess, t, sol)
带有以下错误消息:
ValueError: too many values to unpack (expected 2)
我很抱歉,因为假设这是一个非常简单的问题,但我没有让它工作。所以提前谢谢。
【问题讨论】:
-
能否请您发布完整的错误。意思是,在哪个变量或行上,你得到了这个错误
-
你看
scopt.curve_fit的文档了吗?您必须按顺序传递值:“函数名”后跟 xdata 和 ydata。那不是你在这里做的事情 -
对不起,你是对的。我使用的拟合线是
popt, pcov = scopt.curve_fit(test_pend, t, sol)
标签: python scipy curve-fitting ode