решение двух несвязанных ODE в цикле с использованием python и scipy.integrate.ode

У меня возникла проблема с решением двух очень простых несвязанных ODE с использованием scipy.integrate.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 возвращать ерунду.


person farzada    schedule 09.05.2014    source источник


Ответы (1)


Когда я запустил ваш код в 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

интегрировать несколько проблем одновременно

person Elias    schedule 09.05.2014
comment
Спасибо за быстрый ответ. Документация по нему очень плохая! Как я могу использовать ode.set_integrator для решения своей проблемы? - person farzada; 10.05.2014
comment
Кажется, это также будет работать с методом Рунге-Кутта, если я настрою свой решатель на работу с «допри5». - person farzada; 10.05.2014
comment
Если вы посмотрите на стр. 270 документации: ссылка, там написано, что метод Рунге-Кутта — единственный режим, поддерживающий одновременную интеграцию нескольких ОДУ. - person Elias; 10.05.2014
comment
Похоже, документ в формате pdf с явными номерами страниц исчез. Это существует, но для v0.17 явно. - person uhoh; 15.07.2016