scipy.integrate.odeint 和 scipy.integrate.ode 有啥区别?

Posted

技术标签:

【中文标题】scipy.integrate.odeint 和 scipy.integrate.ode 有啥区别?【英文标题】:What is the difference between scipy.integrate.odeint and scipy.integrate.ode?scipy.integrate.odeint 和 scipy.integrate.ode 有什么区别? 【发布时间】:2014-05-16 01:33:59 【问题描述】:

我已经阅读了这些 here 的文档,但它只是指出 odeint 是“一个基于 ODEPACK 的 lsoda 的具有更简单界面的集成商

实际的区别是什么?在什么情况下使用一种比另一种更合适?

【问题讨论】:

【参考方案1】:

如果您可以使用odeint 解决您的问题,我会推荐您这样做。它只是一个使用 lsoda 集成 ode 的函数。

如果您想要更多选项,ode 是一个包含许多方法和求解器的类:

scipy.integrate.ode scipy.integrate.ode.integrate scipy.integrate.ode.set_f_params scipy.integrate.ode.set_initial_value scipy.integrate.ode.set_integrator scipy.integrate.ode.set_jac_params scipy.integrate.ode.set_solout scipy.integrate.ode.successful

【讨论】:

是否可以为 odeint 设置不同的积分器? @imranal,据我所知,不像它所写的那样。修改或查看源代码以编写自己的版本可能并不难。 @drN 你是对的!出于某种原因,我将z 转换为 has,它应该保留在cheeseburger 中,就像经典的 Happycat i.stack.imgur.com/BZ33g.jpg 我经常遇到的问题 .odeint() 是你必须提前选择结束时间时间并不能发现麻烦并说“停止!不要再进一步了”。但是,对于.ode() 中的某些集成商,您拥有.set_solout() @uhoh 你肯定在那里!【参考方案2】:

我想知道同样的问题,后来我发现 scipy.integrate 中还有一个可用的 API。该方法在文档中有清楚的说明。

比较 odeint(odeintw 表示复杂)和 ode(complex_ode 表示复杂)可能会引起人们的兴趣。

它被称为 scipy.integrate.solve_ivp,可从 scipy v1.0.0 获得: https://scipy.github.io/devdocs/generated/scipy.integrate.solve_ivp.html#scipy.integrate.solve_ivp 在这个求解器中,LSODA 无法处理复杂的问题,但在我的情况下 BDF 更快。

【讨论】:

以上是关于scipy.integrate.odeint 和 scipy.integrate.ode 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scipy.integrate.odeint 求解具有时间相关变量的 ODE 系统

scipy.integrate.odeint可以计算矩阵的微分方程吗

使用 scipy.integrate.odeint 解决颂歌系统(不断变化的常数!)?

多个 scipy.integrate.ode 实例

python 的scipy 里的 odeint 这个求微分方程的函数怎么用啊

在不同的 scipy ode 求解器之间进行交换