Runge Kutta 和 Milstein – 带噪声的二阶耦合微分方程组

计算科学 龙格库塔 随机 微分方程 粒子
2021-12-22 03:05:20

我想解决一个二阶微分方程系统来描述粒子系统的动力学。的运动负责:由于其他粒子和随机噪声项而作用在每个粒子上的力。ifi,jfnoise

由于其他粒子而作用在每个粒子上的力取决于粒子 i 的当前位置s_iv_i系统中其他粒子的位置和速度fi,jsiviisjvjj

Fi=fi,j(vi,vj,si,sj)+fnoise

前面提到的每个术语都包含二维运动的两个分量。在欧拉方案下,每个粒子的速度和位置将更新如下:

vivi+FimΔtsisi+viΔt

其中是粒子的质量,是积分步长。但是,我想使用 Milstein 算法进行速度更新(因为我们有噪声项)和四阶 Runge-Kutta 方法来更新位置我很困惑,因为依赖于我应该如何操作?miΔtsifi,jsisjvivj

2个回答

您不能采用确定性方法并对它们进行某种 Milstein 校正以获得更高的顺序。相反,如果您想要获得良好的准确性,您应该查看专门为高阶集成 SDE 而设计的方法。如果纯粹的效率很重要并且噪声是加性/对角线,那么@Wrzlprmft 提到的自适应罗斯勒方法就是要走的路。对于非对角线,其他罗斯勒方案做得很好。

然而,在许多情况下,在谈论二阶 ODE 的“准确”处理时,人们通常会讨论辛积分器和能量守恒。这些方法不会节约能源。但是,由于 Burrage,有一种方法确实可以节省能源。

http://epubs.siam.org/doi/pdf/10.1137/050646032

但是,如果你想要比强阶 0.5 更好,那么正如论文中所述,“挑战是在随机设置中扩展这个想法,以构建以高阶精度逼近固定相关矩阵的显式分区方法”,即你'重新靠自己。我认为实现这一目标的一种有希望的方法是将罗斯勒的工作扩展到可比较的随机龙格-库塔尼斯特罗姆方法并证明辛条件,但我认为还没有人这样做。

首先,由于许多超出此问题范围的原因,不可能将多步 Runge-Kutta 方法和 Milstein-Itō 方法交织在一起¹。因此,您可以做的最好的事情是:

  1. 做一个确定性的 Runge-Kutta 步骤,忽略噪声项。
  2. 应用噪音(以 Milstein–Itō 方式)。
  3. 转到 1。

这有一个问题,即 Runge-Kutta 步骤完全忽略了噪声在该步骤期间对系统的影响。如果你的噪音作用的时间尺度比你的龙格-库塔步骤长得多,这可能是可以接受的,但你应该考虑以下几点:

  • 如果您的 Runge-Kutta 时间步长如此之小,无法准确捕捉确定性力,即确定性力作用于比随机力短得多的时间尺度:您的模型中真的需要噪声吗?(请注意,肯定有一些应用程序是有意义的;想想你的应用程序是否是其中之一。)

  • 否则,即,如果您的随机力作用于与确定性力相同或什至更小的时间尺度:您是否真的从使步数如此之小或首先使用四阶龙格-库塔方法获得任何好处?请记住,多步 Runge-Kutta 方法的主要优点之一是减少系统误差,这是 Euler 方法的主要问题。无论如何,如果您有一个巨大的随机项,那么这些错误可能与您无关。

话虽如此,现在有用于随机微分方程的多步积分器,它们结合了双方的优点(并且通常更快),例如Rößler 提出的那些最近,Rackauckas 和 Nie在此基础上提出了一种嵌入式方法。您通常不想自己实现这些,但JuliaPython中提供了实现(真正由您自己实现)。


¹如果您对此有简洁易懂的论据,请回答我的这个问题