有一个常用的verlet-integration Johnathan Dummer 在网上的公式,称为 Time-Corrected Verlet。但是我读过几个论坛帖子,人们在某些情况下会得到奇怪或意外的结果。
Formula by Johnathan Dummer:
x1 = x + (x – x0) * dt / dt0 + a * dt^2
还有一个stackoverflow answer ,其中指出 Dummer 的时间校正公式被破坏,并且海报将他自己的推导呈现为正确的推导。
Suggested correct formula by a stackoverflow answer
x1 = x + (x – x0) * dt / dt0 + a * dt * (dt + dt0) / 2
那么,Dummer 的公式真的被打破了吗?如果是,海报的推导是否更好?
PS:Dummer使用verlet积分公式
x1 = x - x0 + a * dt^2
也很奇怪在他的网站上而不是正确的 x1 = 2x - x0 + a * dt^2
.
最佳答案
维基百科页面Verlet integration - Non-constant time differences给出两个公式,不做引用。我自己没有检查过推导,但第二个改进公式的推理看起来很合理。
我已经下载了 Dummer 的电子表格并修改了其中一个公式以使用更正。结果要好得多。
确切的结果以黄色显示,我们看到仅使用具有波动帧速率的普通 Verlet 算法是很糟糕的。 Dummer 的红色时间正确变体非常好,但有点偏离。带有改进校正的深绿色版本要好得多。
对于具有二次解的重力射弹,您可能会发现改进版本是准确的。当度数变得更高时,它将与真实路径不同,可能值得测试以查看我们是否仍能获得更好的近似值。
对 sin 曲线进行相同的计算表明改进的方法要好得多。在这里,时间正确的 Verlet 漂移了很多。改进后的版本更好,与确切答案仅相差一点点。
对于PS。注意如果在TCV公式中设置dt=dt0
x1 = x + (x – x0) * dt / dt0 + a * dt^2
你得到
x1 = x + x – x0 + a * dt^2
= 2 x – x0 + a * dt^2
原始的 Verlet 公式。
关于math - 时间修正的 Verlet 数值积分公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32709599/