您好我已经编写了这段代码来尝试和模拟月球地球太阳系。我得到了地球的圆形轨道,但月亮却发疯了。
有没有更好的方法尝试这样做,同时仍然使用euler / leapfrog方法?
答案 0 :(得分:-1)
我没有花时间仔细检查你的代码或测试它的行为,但众所周知,Euler方法在这种模拟中获得了能量,所以通常使用“梯形”代替。 https://en.wikipedia.org/wiki/Trapezoidal_rule
如果我理解正确,你的方法在位置和速度之间的关系中是二阶的(我假设是为了避免能量增益),但它似乎是加速度和速度之间关系的第一顺序。
你可能能够保持蛙跳设计(而不是梯形),但在尝试这样做时,你应该更好地使额外状态明确,以消除二阶导数的使用。
编辑:我重读了跳过的维基百科页面并重新阅读你的代码,很明显你没有使用跳跃(正如我之前所说,因为你只将它应用于位置\速度而不是速度\加速)。请注意,该页面还向您展示了如何简化跳跃方程式(你有),其中加速度取决于位置而不是速度: https://en.wikipedia.org/wiki/Leapfrog_integration
答案 1 :(得分:-1)
如果您想继续使用显式集成,也许可以尝试使用Runge Kutta方法:https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods RK4通常就足够了。