我对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()
答案 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] ])
功能deriv
将Y = [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,...)