不同集成商的优缺点[关闭]


29

在游戏中创建诸如物理学之类的东西时,您需要一个积分器。我已经看到Verlet集成提到了几个地方,可以代替Euler集成。例如,托马斯·雅各布森(Thomas Jakobsen)著名文献中。然而,在这篇文章格伦费德勒写道:

与其向您介绍现有的各种不同的集成商,不如让我追逐并直奔最好的。该积分器称为Runge Kutta order 4积分器,又名RK4。

因此,显然没有灵丹妙药。不同集成商的优缺点是什么?关于简单性,速度,准确性,稳定性等。哪种集成商最适合哪种类型的游戏?您什么时候使用Verlet,RK4或其他?您应该使用Euler吗?


有一个SO答案,您可能会喜欢stackoverflow.com/questions/2769466/…–
teodron

感谢您的链接。我已经知道了。
paldepind 2012年

Answers:


27

两种方法的优缺点:

RK4优点:

  1. 精度(由于其更好的逼近级数,因此产生了四阶精度)
  2. 人工/固有感应阻尼(有点像隐式方法)增加了稳定性(而简单的欧拉步骤却没有,实际上却相反,引入了会积聚的虚假能量,可能会使系统陷入混乱)

RK4缺点:

  1. 计算费用:尽管与隐式方法或混合IMEX方法相比并没有那么高的要求,但RK4的成本是显式Euler的4倍,因为它需要更多的函数求值。这表明在瞄准优化的前沿时。
  2. 仍然不稳定:根据所涉及的力量类型,RK4可能与欧拉一样不稳定。平均而言,RK4更加稳定,并且倾向于从其赋予的阻尼“技能”中受益。
  3. 非渐近性:数字阻尼会带来成本-您无法模拟能量/体积/等能量较大的系统。损失不应随时间施加可见的影响(例如,分子动力学,势场衍生的力,变化问题)

Verlet专业人士:

  1. 欧拉步骤复杂度的一到两倍(取决于您的Verlet口味:位置或速度)。
  2. 辛:节省内部能量
  3. 二阶精度:许多游戏不需要高精度的浮点结果,并且二阶比在游戏场景中令人赏心悦目(而且:“游戏”发现时,它用于非游戏场景模拟中,因此没那么糟糕)

缺点:

  1. 稳定,但仍然:就稳定性而言,可能是最好的显式方法。当将硬约束添加到系统时,它往往会赢得优势,因此在基于位置的动力引擎中实现投影约束时,可以减少头痛。如果系统受到较大的外力干扰,并且未添加阻尼/摩擦,则它会变为无穷大。即使这样,在内部(弹簧)力的大小也有一定的数值​​限制,但它们平均比RK4的作用力高
  2. 较低的精度:如果您需要较高的精度估计,则无用
  3. 在某些仿真中,平均而言,与RK4相比,所需的时间步长更短(RK4得益于其精度和内部阻尼)

在一个之上使用另一个取决于场景。如果刚度,较大的外力和虚拟能量是一个问题,请考虑在描述/标题中使用“隐式”字词的其他方法。


请注意,一些作者/书籍将术语半隐式欧拉用于实际的显式欧拉积分器,称为辛欧拉方法(或欧拉·克罗默),从中实际推导出Verlet。Verlet也被某些人称为“跨越式方法”。速度Verlet和中点方法非常相似,因为在t + 0.5*dt类预测器-校正器步骤是必需的。IMEX方法(隐式-显式)也用于命名两种相似但不完全相同的方法:将计算分为刚性和非刚性部分,并在其上使用不同的积分器(对于非刚性为显式,对于刚性为隐式)或求解通过隐式更新步骤来改变速度并以显式方式更新位置(这是混合半隐式方法,属于IMEX类方法,因为刚性部分对加速度计算的影响最大)。隐式方法比较麻烦,需要为整个配置求解一个同时非线性方程组。隐式方法用于可变形体,通常不用于解耦刚体。

如评论之一所述,如果可以,请不要使用欧拉。使用中点方法,半隐式Euler或相同的位置-Verlet。与显式的Euler积分器相比,它们都具有略高的精度和明显更高的稳定性。

推荐的迷你比较读物:

http://wiki.vdrift.net/Numerical_Integration


一个观察结果:两种Verlet变体都可以编码为每帧更新仅评估一次加速度。
teodron

1
感谢您的回答!我几乎在寻找什么。
paldepind 2012年

3

Euler的实现往往非常快,但远没有其他方法稳定。朗格·库塔(Runge Kutta)比欧拉(Euler)慢,但精确和稳定得多。

我对Verlet集成不是很了解,所以我不知道它如何与Euler和Runge Kutta相提并论。

如果您需要更精确的仿真,甚至需要数值证明,则Runge Kutta是两者中较好的一个。

如果您需要快速,低成本的物理知识来制作简单的游戏,则欧拉是更好的选择。


2
朗格·库塔(Runge Kutta)的远比其他人稳定。它仍然是Euler,每帧完成了8次,而不是1次(有一些预测和校正,但仍然..)
teodron,2012年

2
取决于您需要“稳定”的条件。也许我应该详细说明一下,龙格·库塔在数值上比欧拉更稳定。 farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
据我所知,没有任何理由会使Verlet慢于Euler。因此,与Verlet Euler相比,它没有速度优势,但它仍然更加精确和稳定。因此,我认为您认为欧拉最适合用于快速简单的物理学的说法是错误的。
paldepind 2012年

4
以下是一个博客文章,显示了准确性的巨大差异:kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind 2012年

2
在《变形金刚》的最后一级(PS2,2004年)中,我实施的飞行模型使用的是Euler积分器,我每帧更新了2000次。(当然,这是一个相当现实的飞行模型,可以加速到超音速并放置在弯曲的重力场内,因此对稳定性的要求非常高。在该级别上,没有太多CPU密集型工作,因此我能够摆脱它)。与切换到其他迭代器相比,在Euler进行额外的迭代通常要容易得多。
Trevor Powell

1

首先,我认为您应该使用Euler,直到您直接需要使用更高级的集成方案为止。它快速且易于实现。

如果您遇到稳定性问题,例如弹簧系统永不停止运行,或者您的仿真需要很高的精度,则可以开始进行其他实验。

我上面没有提到的一种中点方法很容易实现,只需要一个额外的集成步骤。


1
我认为verlet的只是一个简单,易于实现
paldepind

我从未亲自使用过它,但据我了解,您可能是正确的。
MikaelHögström,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.