-3

http://pastebin.com/ccck8LjE

您好,我编写了这段代码来尝试模拟月球地球太阳系统。我得到了地球的圆形轨道,但月亮发疯了。

有没有更好的方法来尝试这样做,同时仍然使用 euler/leapfrog 方法?

4

2 回答 2

-1

我没有仔细检查您的代码或测试其行为,但众所周知,欧拉方法在此类模拟中获得能量,因此通常使用“梯形”代替。
https://en.wikipedia.org/wiki/Trapezoidal_rule

如果我理解正确,您的方法是位置和速度之间关系的二阶(我假设是为了避免能量增益),但它似乎是加速度和速度之间关系的一阶。

您可能可以保留跳跃式设计(而不是梯形),但在尝试这样做时,您应该更好地明确额外状态以消除二阶导数的使用。

编辑:我重新阅读了关于越级的维基百科页面并重新阅读了您的代码,很明显您没有使用越级(正如我之前所说,因为您只将它应用于位置\速度而不是速度\加速度)。请注意,该页面还向您展示了如何针对加速度取决于位置而不是速度的情况(您所拥有的)简化跳蛙方程: https ://en.wikipedia.org/wiki/Leapfrog_integration

于 2015-12-05T18:21:44.123 回答
-1

如果您想继续使用显式集成,也许您可​​以尝试使用 Runge Kutta 方法:https: //en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods RK4 通常就足够了。

于 2015-12-05T18:44:29.547 回答