【发布时间】:2011-01-06 12:07:00
【问题描述】:
我正在寻找一个可以在 Python 中集成僵硬 ODE 的好库。问题是,scipy 的 odeint 给了我很好的解决方案有时,但初始条件的最轻微变化会导致它倒下并放弃。 MATLAB 的刚性求解器(ode15s 和 ode23s)非常愉快地解决了同样的问题,但我不能使用它(即使是 Python,因为 MATLAB C API 的 Python 绑定都没有实现回调,我需要传递一个函数到 ODE 求解器)。我正在尝试 PyGSL,但它非常复杂。任何建议将不胜感激。
编辑:我在使用 PyGSL 时遇到的具体问题是选择正确的阶跃函数。其中有几个,但没有直接与 ode15s 或 ode23s 类似(bdf 公式和修改后的 Rosenbrock,如果有意义的话)。那么对于刚性系统来说,什么是好的阶跃函数呢?我必须对这个系统求解很长时间才能确保它达到稳态,而 GSL 求解器要么选择一个很小的时间步长,要么选择一个太大的时间步长。
【问题讨论】:
-
我想帮助你处理 PyGSL。我从未使用过它,但我有使用 GSL 的经验。我刚刚查看了 pygsl (odeiv.py) 中提供的示例,它看起来与 C 中的几乎相同。您是否认为 PyGSL 是由于 python 接口或 GSL 本身而非常复杂?
-
好吧,可怕的复杂也许是夸大其词:)。它 比 MATLAB 或 scipy 复杂一个数量级。需要澄清的是,python 接口与 C 接口几乎相同,因此库本身很复杂。另外,PyGSL 没有记录 odeiv,所以我必须使用 C 文档来弄清楚在 Python 中要做什么。不好玩。
-
OT:我不记得
t0:tn在 Matlab 中做了什么,但numpy.r_[0:1:11j]可能会有所帮助。