Scipy ode solver

时间:2016-10-05 14:31:07

标签: python scipy

使用scipy版本0.18.0并且真的很划伤 我的脑袋此刻。 我将代码缩减为以下最小的示例:

尝试解决可能的最简单微分方程

def phase(t, y):
    c1 = y
    dydt = - c1 
    return dydt

c1 = 1.0
y0 = c1
t = np.linspace(0,1,100)
ode_obj = sp.integrate.ode(phase)
ode_obj.set_initial_value(y0)
sol = ode_obj.integrate(t)

该对象告诉我它成功了,但返回值 是一个长度为1的numpy数组。

文档极其稀疏,我不确定 如果我使用不当。

感谢帮助人员。

问候。

1 个答案:

答案 0 :(得分:0)

在github https://github.com/scipy/scipy/issues/1976上发现此问题 这基本上解释了它是如何工作的以及何时考虑这些最初的原因 值解算器工作(逐步进入最终点的方向)它 变得更清楚为什么这样做。我上面的代码看起来像 这样:

import scipy as sp
import pylab as pb

def phase(t, y):
    c1 = y
    dydt = - c1 
    return dydt

c1 = 1.0
t0 = 0.0 # not necessary here
y0 = c1
t1 = 5.0

t = []
sol = []
ode_obj = sp.integrate.ode(phase)
ode_obj.set_initial_value(y0, t=t0)
ode_obj.set_integrator('vode',method='bdf',rtol=1.e-12)
sol = ode_obj.integrate(t)
while ode_obj.successful() and ode_obj.t < t1:
    ode_obj.integrate(t1,step=100)
    t.append(ode_obj.t)
    sol.append(ode_obj.y)

pb.plot(t,sol)
pb.show()

这将产生以下输出: enter image description here