首页 文章

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

提问于
浏览
4

我对 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 回答

  • 1

    让我们在 deriv 中使用 Y 而不是 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

    阅读odeint上的文档 . 它需要作为以下类型的输入方程:

    dy / dt = func(y,t0,...)

    据我了解, array([ y[1], a*y[0]+b*y[1] ]) 的第一个元素,即 y[1]dy/dt 中被设为 y ,它给出 dy[1]/dt = y[2] . 第二个元素,即 a*y[0]+b*y[1] ,作为 func(y,t0,...)

相关问题