我对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()发布于 2012-02-07 02:20:38
让我们在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] ])函数deriv接受Y = [y, y']作为输入。
并且它应该输出它们的导数([y', y''])。
y' = Y[1]
y'' = a*Y[0]+b*Y[1]
发布于 2012-02-07 02:20:24
阅读odeint上的文档。它需要以下类型的输入方程式:
函数dy/dt =
(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,...)
https://stackoverflow.com/questions/9164828
复制相似问题