こんにちは、月と地球の太陽系をシミュレートするためにこのコードを書きました。地球の円軌道を取得しますが、月は狂います。
オイラー/リープフロッグ法を使用しながら、これを試して実行するより良い方法はありますか?
こんにちは、月と地球の太陽系をシミュレートするためにこのコードを書きました。地球の円軌道を取得しますが、月は狂います。
オイラー/リープフロッグ法を使用しながら、これを試して実行するより良い方法はありますか?
明示的な統合を使い続けたい場合は、おそらくルンゲ クッタ メソッドを使用してみてください: https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods 通常は RK4 で十分です。
コードを注意深く確認したり、その動作をテストしたりする努力はしませんでしたが、オイラー法がそのようなシミュレーションでエネルギーを得ることはよく知られているため、代わりに「台形」が一般的に使用されます。
https://en.wikipedia.org/wiki/Trapezoidal_rule
私の理解が正しければ、あなたの方法は位置と速度の関係では 2 次ですが (エネルギーの増加を避けるためだと思います)、加速度と速度の関係では 1 次のように見えます。
リープフロッグ設計 (台形ではなく) を維持できるかもしれませんが、そうしようとすると、2 次導関数の使用を排除するために余分な状態を明示的にするというより良い仕事をする必要があります。
編集: リープフロッグのウィキペディアのページを読み直し、コードを読み直しましたが、リープフロッグを使用していないことは明らかです (前に述べたように、速度\加速度ではなく位置\速度にのみ適用するため)。ページには、加速度が速度ではなく位置に依存する状況 (あなたが持っている) のリープフロッグの方程式を単純化する方法も示されていることに注意してください: https://en.wikipedia.org/wiki/Leapfrog_integration