将僵硬的ODE与Python集成 - 代码日志

将僵硬的ODE与Python集成

我正在寻找一个很好的图书馆,它将在Python中整合硬的ODE。问题是,scipy的odeint有时会给我很好的解决方案,但最初的条件的轻微变化会导致它掉下来放弃。 MATLAB的僵硬求解器(ode15s和ode23s)解决了同样的问题,但是我不能使用它(即使是Python,因为MATLAB C API的Python绑定都没有实现回调,我需要传递一个函数到ODE求解器)。我正在尝试PyGSL,但它非常复杂。任何建议将不胜感激。

编辑:与PyGSL有关的具体问题是选择正确的步骤功能。其中有几个,但没有直接类似于ode15s或ode23s(bdf公式和修改的Rosenbrock,如果这是有道理的)。那么什么是一个很好的步骤功能来选择一个僵硬的系统?我必须解决这个系统很长一段时间才能确保达到稳定状态,GSL解决方案选择一个微小的时间步长或者太大的时间。

Python可以调用C.行业标准是ODEPACK中的LSODE。这是公有领域。您可以下载C version.这些解决方案非常棘手,因此最好使用一些经过良好测试的代码。

补充:确保你真的有一个僵硬的系统,即如果速率(特征值)差异超过2或3个数量级。此外,如果系统僵硬,但是您只是寻求一个稳态解决方案,这些求解器可以让您选择一些方程代数求解。否则,一个很好的Runge-Kutta解决方案像DVERK将是一个很好的,更简单的解决方案。

在这里添加,因为它不适合注释:这是从DLSODE头文档:

C     T     :INOUT  Value of the independent variable.  On return it
C                   will be the current value of t (normally TOUT).
C
C     TOUT  :IN     Next point where output is desired (.NE. T).

还有,Michaelis-Menten动力学是非线性的。但是,Aitken加速度与之配合使用。 (如果你想要一个简短的解释,首先考虑一个简单的Y是一个标量,你运行系统得到3个Y(T)点,通过它们拟合一个指数曲线(简单的代数),然后将Y设置为渐近线,现在只是将Y概括为一个向量,假设3点在一个平面上 – 如果没有,它是可以的)除此之外,除非你有一个强制功能(如恒定的IV滴注),否则MM消除将会衰减系统将接近线性。希望有帮助。

http://stackoverflow.com/questions/2088473/integrate-stiff-odes-with-python

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:将僵硬的ODE与Python集成