用scipy odeint求解耦合微分方程组

时间:2012-02-06 17:59:42

标签: python 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()

2 个答案:

答案 0 :(得分:2)

让我们在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] ])

功能derivY = [y, y']作为输入。

它应该输出它们的衍生物([y', y''])。

y' = Y[1]

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

答案 1 :(得分:1)

阅读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,...)