我正在尝试用sciPy的odeint和ode方法解决一个简单的ODE。我使用的例子是疾病传播(我稍后会尝试解决我更复杂的ODE)。该函数应如下所示:
我的odeint代码给出了可接受的结果。
from scipy import *
import scipy.integrate as integ
from pylab import *
def dydt(y,t):
K=0.00003
L=250000
return K*y*(L-y)
t=linspace(0,12,61)
y=integ.odeint(dydt, 250, t)
plot(t,y)
show()
但是当我尝试用ode方法做同样的事情时,我会发现完全不同(并且结果不正确,情节显然表明了这一点)。我做错了什么?
from scipy.integrate import ode
from pylab import *
from numpy import *
y0, t0 = 250, 0
def dydt(y,t):
K=0.00003
L=250000
return K*y*(L-y)
r = ode(dydt).set_integrator('vode', method='bdf')
r.set_initial_value(y0, t0)
t1 = 10.0
dt = 0.1
sol = []
while r.successful() and r.t < t1:
r.integrate(r.t + dt)
sol.append([r.t, r.y])
sol = array(sol)
plot(sol[:,0],sol[:,1])
show()
请注意,r.y包含真实值,这就是为什么我只能绘制真实部分。