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

4 投票
2 回答
12925 浏览
提问于 2025-04-17 12:26

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

请查看关于 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,...)

2

为了让下面的内容更清楚,我们在整个回答中用 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] ])

函数 deriv 接收 Y = [y, y'] 作为输入。

它的输出应该是它们的导数,也就是 [y', y'']

y' = Y[1] 这表示 y'Y 中的第二个元素。

y'' = a*Y[0]+b*Y[1] 这表示 y'' 是通过将 Y 中的第一个元素乘以 a,再加上第二个元素乘以 b 得到的。

撰写回答