高阶 Verlet 集成

计算科学 计算物理学 时间积分 龙格库塔 粒子
2021-12-19 04:18:05

我将 Verlet 集成的简单版本用于具有碰撞的粒子-粒子交互系统。在每次迭代结束时,我像这样集成:

verletX = ( 1.92*x[i] - 0.92*x_old[i] ) + fx[i]*0.002;
verletY = ( 1.92*y[i] - 0.92*y_old[i] ) + fy[i]*0.002;
x_old[i] = x[i];
y_old[i] = y[i];
x[i] = verletX;
y[i] = verletY;

我可以使用更旧的 X 和 Y 数据来增加其错误顺序(以更精确地减少时间步长)吗?目前它应该不如 RK4 精确,但我确信它比简单的欧拉积分要好得多。例如,我可以使用最后八次迭代的数据达到 RK4 级别吗?

我不尝试 RK4 的原因是力的计算需要太多时间。但是,拥有旧数据的副本并对其进行更新不会。我也不需要精确性;我只需要系统稳定性,使粒子停留在固定点而不是爆炸性近距离跳跃。

1个回答

在这种情况下使用多步方法。如果它是非刚性的,请参见 Adams-Bashforth 方法,或 Adams-Bashforth-Moulton 方法,或者如果它的刚性 BDF 方法。这些使用您想要的过去时间点,以提高准确性的顺序。

我强烈建议您查看具有可变时间步长和可变顺序方法的日晷之类的东西。这对这些方法的稳定性有很大帮助,并让它们获得更高的效率。