Решение системы связанных дифференциальных уравнений с использованием алгоритма Сципиона - PullRequest
4 голосов
/ 06 февраля 2012

Я немного запутался с 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()

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Давайте используем 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 голос
/ 06 февраля 2012

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

dy / dt = func (y, 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,...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...