使用scipy odeint求解耦合微分方程组
我对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
得到的。