在循环中使用Python和scipy.integrate.ode求解两个不耦合的ODE

2 投票
1 回答
794 浏览
提问于 2025-04-18 06:03

我在用scipy.integrate.ode解决两个非常简单的独立常微分方程(ODE)时遇到了问题。比如说,下面这段简单的代码:

 

from scipy.integrate import ode

def f(t, y, r_r=1.68,mu_ext=0. ,tau_m=0.020, tau_s=0.005, gs= 0.5):
        dmu = (1./tau_s)*(-y[0] + mu_ext + gs*r_r)
        dx = (1./tau_m)*(-y[1] + y[0])
        return [dmu, dx]

t0 = 0.0                #Intial time
y0 = [4.0, 0.0]         #initial condition for x = 0
y1 = [4.0, 1.0]         #inital condition for x = 1

x0m = ode(f)
x0m.set_initial_value(y0, t0)

x1m = ode(f)
x1m.set_initial_value(y1, t0)
t1 = 1.0
dt = 0.0001

x0 = []
x1 = []

t=0

for i in xrange(1000):
        t +=dt
        x0m.integrate(t)
        x0.append(x0m.y)
        x1m.integrate(t)
        x1.append(x1m.y)

有趣的是,每个方程在两个不同的循环中都能完美解决,但我不明白为什么这会导致第二个ODE求解器返回一些无意义的结果。

1 个回答

2

当我在ipython里运行你的代码时,我得到了:

Integrator `vode` can be used to solve only
a single problem at a time. If you want to      
integrate multiple problems, consider using 
a different integrator (see `ode.set_integrator`)

显然,你需要使用:

ode.set_integrator

来同时解决多个问题

撰写回答