可重入Python中的复杂ODE求解器

时间:2019-02-23 22:19:43

标签: python numpy scipy ode

我有一个复杂的微分方程式列表,需要“并行”执行(对方程式1,一个时间步长进行积分,在方程式2中,一个时间步长积分,然后在方程式1中,另一个时间步长积分,依此类推):求解器需要“重新进入”。我一直在尝试使用scipy.integrate.ode。我的问题是 与solving two uncoupled ODEs within a loop using python and scipy.integrate.ode完全相同,只是带有复数微分方程。因此,我不能使用只用于实值ODE的'dopri5'。

在Python中是否存在任何复杂的可重入ODE求解器(最好使用与scipy.integrate.ode不太相似的接口)?

使用multiprocessing在多个进程中使用求解器(如拟议的here)实际上不是一种选择,因为通过IPC发回状态的开销非常高。另一个comment on the same question提到scipy求解器基础的sundials库实际上是可重入的,但大概Scipy尚未赶上。还有其他用于日di的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

0 个答案:

没有答案