【问题标题】:Physical Moon Earth Sun System物理月球地球太阳系统
【发布时间】:2015-12-05 17:46:41
【问题描述】:

http://pastebin.com/ccck8LjE

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

有没有更好的方法来尝试并在仍然使用 euler/leapfrog 方法的同时做到这一点?

【问题讨论】:

    标签: c++ orbital-mechanics


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,很酷,我明天会通读一遍,我对编程很陌生,所以我仍在掌握如何做事。
    • 我认为这更像是一道数学题而不是编程题。我认为您正确地编程了您理解为 Leapfrog 的数学但误解了数学。我希望该页面会为您清除它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多