为什么会发生这种情况,我该如何解决?
发生这种情况的原因是几年前做出了不幸的API设计决策。 odeint
并且ode
该类需要不同的签名才能解决系统。
您可以通过添加一个包装程序来解决此问题,该包装程序可以在使用ode
类时更改前两个参数的顺序。例如,您可以更改以下内容:
r = sc.ode(f).set_integrator(solver)
至
r = sc.ode(lambda t, x, *args: f(x, t, *args)).set_integrator(solver)
更新 :在SciPy 1.1.0中,该参数tfirst
已添加到中scipy.integrate.odeint
。默认值tfirst=False
保留旧的行为。用tfirst=True
,odeint
期望第一 的参数func
是t
(即独立变量)。通过使用tfirst=True
,同样func
可以搭配ode
,odeint
以及较新的solver_ivp
。