为什么Verlet积分比Euler积分更好?

26

有人能解释一下为什么Verlet积分比Euler积分更好吗?以及为什么RK4比Verlet更好?我不明白为什么它是一种更好的方法。

3个回答

22
Verlet方法擅长模拟具有能量守恒性质的系统,原因在于它是辛格式。为了理解这个说法,您需要将模拟中的时间步骤描述为一个将状态空间映射到自身的函数f。换句话说,每个时间步骤可以写成以下形式。
(x(t+dt), v(t+dt)) = f(x(t),v(t))
Verlet方法的时间步骤函数f具有特殊属性,即它保持状态空间体积不变。我们可以用数学术语来表达这一点。如果在状态空间中有一组状态A,则可以通过以下方式定义f(A):
f(A) = {f(x)|对于x∈A}
现在假设集合A和f(A)都是光滑且良好的,因此我们可以定义它们的体积。然后,辛映射f始终满足f(A)的体积与A的体积相同(对于所有良好且光滑的A选择都成立)。这被Verlet方法的时间步骤函数所满足,因此Verlet方法是一种辛格式方法。
现在最后一个问题是,为什么辛格式方法适用于模拟具有能量守恒性质的系统,但恐怕您需要阅读一本书才能理解这一点。

这些方程中的x和v是什么?我认为你应该对使用的每个非明显变量给出简要定义! - Lii
2
@Lii - x代表位置,v代表速度。 - Aidenhjj

19

欧拉方法是一种一阶积分方案,即总误差与步长成比例。但它可能在数值上不稳定,也就是说,累计误差可能会压倒计算结果并产生荒谬的输出。请注意,无论你把步长设置得多小或者系统是否线性,这种不稳定性都可能发生。我对verlet积分法不熟悉,所以无法评价其有效性。然而,龙格-库塔(Runge-Kutta)方法与欧拉方法在步长方面不同。

实际上,它们基于更好的数值求导方法。具体细节我现在记不太清了。通常情况下,四阶龙格-库塔方法被认为是积分方案的主力,但它确实存在一些缺点。例如,它略微耗散,即在计算中添加一个小的一阶导数相关项,类似于增加了摩擦力。此外,它有一个固定的步长,这可能会使得达到所需精度变得困难。另一种方法是使用自适应步长方案,例如龙格-库塔-费伯格(Runge-Kutta-Fehlberg)方法,它需要进行额外6次函数计算以实现五阶精度。这可以极大地减少执行计算所需的时间并提高精度,如此处所示。


请注意,无论您将步长缩小到多小,或者系统是否线性,都可能发生这种不稳定性。 当您说线性时,您是指二阶(加速度),而不是一阶(速度),对吗?我相信tom10指的是稳定的非加速速度。 - Steve H
@Steve H,当我说线性时,我指的是线性微分方程的标准定义,而不是方程的阶数。 - rcollyer
2
欧拉方法是龙格-库塔方法的一种,所以不能说龙格-库塔方法与欧拉方法不同。此外,请注意,存在多个四阶龙格-库塔方法,其中之一被称为RK4方法,并且特别有名。但也许这已经包含在你所说的内容中了。 - HelloGoodbye

5

如果一切都是线性的,你使用的方法并不重要。但是当出现有趣的(即非线性的)情况时,你需要更仔细地观察,可以通过直接考虑非线性(Verlet)或采用更小的时间步长(RK4)来实现。


3
是的!我认为这是一个非常有用的指出,而其他综合回答中缺少了这一点。如果您没有加速度,欧拉积分将给您精确的结果,除了数字舍入之外。但您几乎肯定会有加速度。您的速度会发生变化。它不会在迭代点瞬间改变 - 在平滑加速度下,它会在步骤之间连续变化。这就是为什么更复杂的积分技术有助于现实主义和可能的其他属性,如模拟稳定性。 - Benjohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接