2016-10-05 3 views
0

Использование scipy версии 0.18.0 и действительно царапание моя голова в данный момент. я уменьшил код следующим минимальным Например:Scipy ode solver

пытаются решить простой дифференциальное уравнение возможного

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) 

Объект говорит мне, что это было успешным, но возвращаемое значение является NumPy массив длины 1 .

Документация крайне редкая, и я не уверен , если я использую ее неправильно.

Спасибо за помощь, ребята.

Приветствия.

ответ

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() 

Это произведет следующий вывод: enter image description here