使用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()

我找到了答案,方程应该以以下方式表示:y1'= y2,y2'=y3,..,yn'=F(x,..),只需给出方程的右侧以解决微分方程。 - pappu
2个回答

2

让我们在后面的答案中使用 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,...)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接