使用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数组。
文档极其稀疏,我不确定 如果我使用不当。
感谢帮助人员。
问候。
答案 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()