我有一个由 256 个微分方程组成的系统,我想用数值求解。该系统表示刘维尔方程,它是具有复数的一阶线性微分方程。
并行求解这个方程的最佳方法是什么?请指教。
我是一名物理学家,所以我熟悉基本的求解器(Euler 和 Runge-Kutta),它们基本上是按定义顺序排列的。
我有一个由 256 个微分方程组成的系统,我想用数值求解。该系统表示刘维尔方程,它是具有复数的一阶线性微分方程。
并行求解这个方程的最佳方法是什么?请指教。
我是一名物理学家,所以我熟悉基本的求解器(Euler 和 Runge-Kutta),它们基本上是按定义顺序排列的。
256 个方程是一个相对较小的数字。所有常见的积分器,例如 Matlab、Maple 或 Mathematica 中包含的积分器,对于这种大小的方程应该没有真正的问题,并且应该能够在您自己实现算法所需的一小部分时间内返回答案,因为他们使用复杂的显式/隐式和自适应时间步进方法。
在大多数情况下,ODE 求解器是一个已解决的问题。不要浪费你的时间自己去实现——只要使用别人在你之前做过的事情。
我不同意你关于 Euler 和 Runge-Kutta 必须是顺序的说法。我知道您这么说是因为您不能跨时间步(或在 RK4 之类的情况下跨内部时间步)并行化,但是只要您在一个时间步内这样做,两者都可以并行。您只需并行评估 256 个变量的导数。
根据您的系统特性,RK 方法可能最适合您,或者可能是一个简单的刚性求解器。我个人不熟悉并行实现,所以我会将建议留给比我更有经验的人。除非您的系统非常特别,否则您将使用您很可能熟悉的算法。
您可能想查看超现实方法,即一种实时并行方法。加速可能会有巨大的收益,但稳定性存在一些问题。如果您不熟悉该方法,Lions, Maday & Turinici (2001) 的论文将是一个很好的起点。