首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用scipy odeint求解耦合微分方程组

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

Stack Overflow用户
提问于 2012-02-07 01:59:42
回答 2查看 12.3K关注 0票数 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])]这样的表达式,但对微分方程一无所知。

这里有一个例子:

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 02:20:38

让我们在deriv中使用Y,而不是y,以使其余的答案更清晰:

代码语言:javascript
复制
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]

票数 2
EN

Stack Overflow用户

发布于 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,...)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9164828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档