首页 > 解决方案 > Python中的可重入复杂ODE求解器

问题描述

我有一个复杂的微分方程列表,我需要“并行”逐步完成(对方程 1 积分一个时间步,然后在方程 2 中积分一个时间步,然后在方程 1 中积分另一个时间步,等等):求解器需要是“重入”。我一直在尝试使用scipy.integrate.ode. 我的问题与使用 python 和 scipy.integrate.ode 在一个循环中求解两个不耦合的 ODE 完全相同,除了复杂的微分方程。因此我不能使用仅用于实值 ODE 的“dopri5”。

Python 中是否有任何复杂的可重入 ODE 求解器(最好具有与 没有太大区别的接口scipy.integrate.ode)?

使用multiprocessing在多个进程中使用求解器(如此处所提议)并不是一个真正的选择,因为通过 IPC 发回状态的开销会令人望而却步。对同一问题的另一条评论提到,作为 scipy 求解器基础的日晷库实际上是可重入的,但大概 Scipy 还没有赶上。是否还有其他用于日晷的 Python 包装器?我找不到提到的scikits-odes包是否可重入的任何信息。

我也尝试简单地替换scipy.integrate.ode为,但是我没有进一步调查scipy.integrate.complex_ode的崩溃。TypeError: can't multiply sequence by non-int of type 'complex'

我的整个问题出现的实际代码在这里: https ://github.com/qucontrol/krotov/blob/fe7c7240b6b7090b176b96f7d6d2f6b96bc39816/src/krotov/propagators.py#L156

标签: pythonnumpyscipyode

解决方案


推荐阅读