使用scipy.integrate.ode和scipy.integrate.odeint解决ODE会得到不同的结果

时间:2016-01-03 09:02:36

标签: python math numpy scipy ode

我正在尝试用sciPy的odeint和ode方法解决一个简单的ODE。我使用的例子是疾病传播(我稍后会尝试解决我更复杂的ODE)。该函数应如下所示:

enter image description here

我的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包含真实值,这就是为什么我只能绘制真实部分。

0 个答案:

没有答案