我更喜欢不需要使用专有工具(如 Matlab)的建议。我知道 Python 生态系统的两个 ODE 求解选项:
- PyDSTool(Dopri、Radau、其他 Runge-Kutta 方法以及任何
scipy.integrate.ode可以访问的方法) - scipy.integrate(来自 Fortran 库的
scipy.integrate.odeint使用——求解器根据问题的刚度决定是使用 Adams 方法还是 BDF 方法;dopri5 和 dopri853 也可用,以及一些用于复杂 ODE 系统的求解器)lsodaodepack
我喜欢 Python,因为我现在可以编写 C 速度代码,并结合使用由Cython等包提供的 Python 到 C 编译器的 Python 灵活性。另外,一切都是开源的!
在我与 PyDSTool 开发人员的早期对话中,我知道他提出 Radau 可能特别适用于非线性、僵硬的 ODE 问题——而且 PyDSTool 包含的纯 C 实现肯定会比scipy.integrate标准 ODE 求解器快得多. 我当时并不能很好地理解他,仅仅是因为我缺乏数学背景(我是一名数学本科生,最近从工科转来)。您能否评论一下这样的问题 - 特别是,我需要确定我的问题的哪些特征才能找出最适合我的非线性 ODE 系统的求解器?