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 解决颂歌系统(不断变化的常数!)?