数値:次のODEを正規化する方法


9

この質問は、数値的に問題に取り組む方法に関するものです。

小さなプロジェクトで、ヤヌスとエピメテウスの軌道運動をシミュレートしたいと思いました。これは基本的に三体問題です。私は土星を原点に固定することを選択し、r 2をそれぞれジャヌスとエピメテウスの位置ベクトルとする。JanusとEpimetheusが非常に接近しているときに効果が発生するので、解像度を上げるために相対座標を選択しました。つまり、r = r 1r 2およびR = r 1 + r 2です。これで、次の運動方程式が得られます。r1r2r=r1r2R=r1+r2

d2dt2(Rr)=G(m2±m1)RR34MG(r+R(r+R)3rR(rR)3)

ここで、は月の質量に対応し、は土星の質量、は重力定数です。これを数値的に解こうとすると問題が発生します。完全に異なる大きさの値、つまりとます。そして、、は0から150,000の範囲にあります。miMGMe28mie17rR

正直なところ、これがそのような数値的な問題について議論するためのフォーラムかどうかはわかりません。

詳しくは:

コードはMatlabで記述されており、標準のODEソルバーを使用して結果を取得しています。ただし、機械の精度ではステップサイズを小さくできないため、これはうまくいきません。(私はこれが驚くべきことではないことを発見しました。なぜなら、すでに言及された桁数を扱わなければならないからです)


2
このシミュレーションをSI単位で実行していますか?最低でも、因数ですべてを除算する必要があります。これにより、数桁を排除できます。Gm2

こんにちは、私はこれですが、まだ機能していません...以前と同じ問題が発生します。:(

質量の単位を月の質量の1つに設定し、長さ/時間の単位を1に設定する必要があります。うまく書けば、1/100より小さくてはいけません。市販のソルバーは必要ありません。ステップサイズを制御するコードを自分で作成します。これらのタイプのポテンシャルによるステップサイズの内訳は、衝突時に発生する可能性があり、ソルバーは収束するまでステップサイズを縮小しようとしますが、衝突時には収束しません。軌道が同一線上にないことを確認する必要があるため、シミュレーションを表示する必要があります。そのままでは答えが出ません。
Ron Maimon、2011年

1
タイトルの省略形は避けてください。DGL = Differentialgleichung?

どの標準ODEソルバーを使用していますか?
Geoff Oxberry

回答:


2

現在のアプローチでは数値の安定性が損なわれます。実際、おそらくこの方法で解像度が失われます。

各衛星の座標として、ケプラー変数と、衛星の位置、速度、および原点を含む平面の角度をとります。衛星間の相互作用がない場合の微分方程式は簡単になり、相互作用のみがやや複雑になります。衛星が遠くにある場合、相互作用は小さいので、結果として得られるダイナミクスは数値的に安定しているはずです。



0

シミュレーションに3つのステップがある場合はどうでしょうか。

  1. ヤヌス-土星の力を計算して、ヤヌスの位置を更新します。
  2. エピメテウス-土星の力を計算して、エピメテウスの位置を更新します。
  3. ヤヌス-エピメテウス力を計算して、ヤヌスとエピメテウスの位置を更新します。

おそらく#3のより細かいタイムステップを使用しています。

これが役立つかどうかはわかりません。本当の問題は、月が近い場合を除いて、力の大きさが月(月)と月(土星)のケースで異なることだと思いますか?

または:

  1. 月が近い場合は、おおよその月-重心ベクトルを使用して土星の力を計算し、両方の位置を同じベクトルで更新します。
  2. 離れている場合は、個別に更新してください。
  3. 従来通り。

がんばって!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.