为什么Verlet集成比Euler集成更好?

Gam*_*r89 21 physics game-physics verlet-integration runge-kutta

有人可以向我解释为什么Verlet集成比Euler集成更好吗?为什么RK4比Verlet更好?我不明白为什么这是一个更好的方法.

小智 15

Verlet方法擅长模拟具有节能的系统,原因是它是辛的.为了理解这个陈述,您必须将模拟中的时间步骤描述为将状态空间映射到自身的函数f.换句话说,每个时间步长可以写在下面的表格上.

(x(t + dt),v(t + dt))= f(x(t),v(t))

Verlet方法的时间步长函数f具有保留状态空间量的特殊属性.我们可以用数学术语来写这个.如果状态空间中有一组状态A,则可以定义f(A)

f(A)= {f(x)| 对于A中的x}

现在让我们假设集合A和f(A)是平滑的,所以我们可以定义它们的体积.然后,辛映射f将始终满足f(A)的体积与A的体积相同(并且这将适用于A的所有良好和平滑的选择).这通过Verlet方法的时间步长函数来实现,因此Verlet方法是一种辛方法.

现在最后一个问题是.为什么辛方法适用于模拟具有节能的系统,但我担心你必须阅读一本书才能理解这一点.

  • @Lii - x 是位置,v 是速度。 (2认同)

rco*_*yer 13

所述欧拉法是一阶积分方案,即,总误差正比于步长大小.但是,它可能在数值上不稳定,换句话说,累积的误差可能会压倒计算,从而导致无意义.请注意,无论步长大小或系统是否为线性,都会出现这种不稳定性.我不熟悉verlet集成,所以我不能说它的功效.但是,Runge-Kutta方法与Euler 方法的不同之处不仅仅是步长.

从本质上讲,它们基于一种更好的数值近似导数的方法.目前准确的细节让我感到惊讶.一般来说,四阶Runge-Kutta方法被认为是整合方案的主力,但它确实有一些缺点.它略微耗散,即在计算中添加一个小的一阶导数依赖项,类似于增加的摩擦力.此外,它具有固定的步长,这可能导致难以达到您想要的精度.或者,您可以使用自适应步长方案,如Runge-Kutta-Fehlberg方法,该方法为另外6个函数评估提供五阶精度.这样可以大大减少执行你的计算所需要的时间,同时提高精确度,如图所示这里.

  • Euler方法*是一个Runge-Kutta方法,所以你不能说Runge-Kutta方法与Euler方法不同.另外,请注意,有一个以上的四阶Runge-Kutta方法,但其中一个被称为RK4方法,尤其是众所周知的.但也许这就隐含在你所说的内容中. (2认同)

tom*_*m10 5

如果一切都以线性方式进行,那么您使用什么方法并不重要,但是当发生有趣的事情(非线性)时,您需要更仔细地观察,或者直接考虑非线性(verlet)或者采用较小的时间步长(rk4)。

  • 是的!我认为指出这一点非常有用,而其他全面的答案却缺乏这一点。如果没有加速度,欧拉积分将为您提供精确的结果,除了数字舍入之外。但几乎可以肯定你确实有加速度。你的速度会改变。它不会在迭代点瞬间改变——它在平滑加速的情况下在步骤之间连续变化。这就是为什么更复杂的集成技术有助于真实性以及模拟稳定性等其他特性。 (3认同)