2012-02-06 3 views
4

Я немного смущен odeint.Решение системы связанных дифференциальных уравнений с использованием scipy odeint

Я нашел один пример ниже, чтобы решить y"=ay + by'. Таким образом, кажется, что y[0] является функцией, y[1] является первой производной.

Соответствует ли следующее выражение y[1] =y' и y'[1]= a*y[0]+b*y[1]?

Если бы это было y[2], a*y[0]+b*y[1], что бы это значило?

Я немного смущен, так как выражение не говорит левой части уравнения.

Я также встречал выражения, подобные [a(y[0], y[1]), b(y[0], y[1])], но не имеют понятия дифференциального уравнения.

Вот один пример:

from scipy.integrate import odeint 
from pylab import * # for plotting commands 

def deriv(y,t): # return derivatives of the array y 
    a = -2.0 
    b = -0.1 
    return array([ y[1], a*y[0]+b*y[1] ]) 

time = linspace(0.0,10.0,1000) 
yinit = array([0.0005,0.2]) # initial values 
y = odeint(deriv,yinit,time) 
figure() 
plot(time,y[:,0]) 
xlabel('t') 
ylabel('y') 
show() 
+0

Я нашел ответ, уравнения должны быть представлены следующим образом: y1 = y2, y2 = y3, .., уп '= F (х, ..), и для решения дифференциального уравнения должны быть заданы только правые части уравнений. – pappu

ответ

1

Давайте использовать Y в deriv вместо y для остальной части ответа быть ясно:

def deriv(Y,t): # return derivatives of the array Y 
    a = -2.0 
    b = -0.1 
    return array([ Y[1], a*Y[0]+b*Y[1] ]) 

Функция deriv принимает Y = [y, y'] в качестве входных данных.

И он должен выводить свои производные ([y', y'']).

y' = Y[1]

y'' = a*Y[0]+b*Y[1]

1

Прочитайте документацию по odeint. Это требует в качестве входного уравнения следующего вида:

д/Dt = Func (у, t0, ...)

Насколько я понимаю, первый элемент array([ y[1], a*y[0]+b*y[1] ]), т.е. y[1] Поставляется как y в dy/dt, что дает dy[1]/dt = y[2]. Второй элемент, т.е. a*y[0]+b*y[1] служит func(y,t0,...)

Смежные вопросы