0

太陽系シミュレーションを作成しようとしていますが、シミュレーションに配置したランダムオブジェクトの初速度ベクトルを計算しようとして問題が発生しています。

仮定:-私はガウス重力定数を使用しているので、すべての単位はAU /太陽質量/日です-座標にx、y、zを使用します-1つの星。0,0,0に固定されています。準ランダム質量が決定されます-私は惑星をランダムなx、y、z座標に配置し、それ自体の準ランダム質量が決定されます。

(RK4を使用して)nbodyループを開始する前に、惑星の初速度を、星の周りを円軌道にするようにします。もちろん、他の配置された惑星は、シミュレーションが開始されるとそれを引っ張りますが、私はそれに安定した軌道を持つ機会を与えたいと思います...

したがって、最終的には、惑星の初速度ベクトル(x、y、z)が必要です。これは、1タイムステップ後に星の周りに円軌道を持つことを意味します。

ヘルプ?私はこれに対して何週間も頭を悩ませてきました、そして私はまだ合理的な解決策を持っているとは思いません...

4

3 に答える 3

4

M星の質量がすべての惑星の総質量よりもはるかに大きいと仮定すると、それは非常に簡単ですsum(m[i])。これにより、星を座標系の中心に固定できるため、問題が単純化されます。また、すべての惑星の運動が同一平面上にあると仮定する方がはるかに簡単です。これにより、問題の次元がさらに 2D に縮小されます。

  1. r[i]最初に、半径ベクトル(軌道の半径)の大きさを考慮して、円軌道速度の大きさを決定します。上記の仮定により、星の質量のみに依存v[i] = sqrt(mu / r[i])muますmu = G * M

  2. phi[i]から均一にサンプリングすることにより、ランダムな軌道位相パラメーターを選択します[0, 2*pi)。次に、デカルト座標での惑星の初期位置は次のとおりです。
    x[i] = r[i] * cos(phi[i])
    y[i] = r[i] * sin(phi[i])

  3. 円軌道では、速度ベクトルは常に動径ベクトルに対して垂直です。つまり、その方向はphi[i] +/- pi/2(+pi/2反時計回り (CCW) 回転の場合と-pi/2時計回り回転の場合) です。例として、CCW 回転を考えてみましょう。惑星の速度のデカルト座標は次のとおりです。
    vx[i] = v[i] * cos(phi[i] + pi/2) = -v[i] * sin(phi[i])
    vy[i] = v[i] * sin(phi[i] + pi/2) = v[i] * cos(phi[i])

z[i] = 0これは、とを追加することで同一平面上の 3D 運動に簡単に拡張できますがvz[i] = 0、Z 方向には力がなく、したがってz[i]vz[i]が永久に等しいままであるため、意味がありません0(つまり、完全な 3D 空間の 2D 部分空間問題を解くことになります)。 )。

各惑星がランダムに傾斜した初期軌道で移動する完全な 3D シミュレーションを使用すると、次のように作業できます。

  1. このステップは、2D の場合のステップ 1 と同じです。

  2. 単位球面の初期位置を選択する必要があります。一様にランダムな方法でそれを行う方法の例については、こちらを参照してください。次に、単位球座標を の大きさでスケーリングしr[i]ます。

  3. 3D の場合、2 つの可能な垂直ベクトルの代わりに、惑星の速度が存在する接平面全体があります。接平面の法線ベクトルは、半径ベクトル および と同一線上にありdot(r[i], v[i]) = 0 = x[i]*vx[i] + y[i]*vy[i] + z[i]*vz[i]ます。r[i]たとえば、 に垂直な任意のベクトルを選択できe1[i] = (-y[i], x[i], 0)ます。これにより、極でヌル ベクトルが生成されるため、代わりにそこを選択できe1[i] = (0, -z[i], y[i])ます。r[i]次に、との外積をとることによって、別の垂直ベクトルを見つけることができe1[i]ます
    e2[i] = r[i] x e1[i] = (r[2]*e1[3]-r[3]*e1[2], r[3]*e1[1]-r[1]*e1[3], r[1]*e1[2]-r[2]*e1[1])e1[i]e2[i]は、それらをノルムで割ることによって正規化
    n1[i] = e1[i] / ||e1[i]||
    n2[i] = e2[i] / ||e2[i]||
    できます||a|| = sqrt(dot(a, a)) = sqrt(a.x^2 + a.y^2 + a.z^2)。接平面に直交ベクトル基底ができたので、ランダムな角度を 1 つ選択omega[0, 2*pi)て、速度ベクトルを次のように計算できます。v[i] = cos(omega) * n1[i] + sin(omega) * n2[i]、またはデカルト コンポーネント:
    vx[i] = cos(omega) * n1[i].x + sin(omega) * n2[i].x
    vy[i] = cos(omega) * n1[i].y + sin(omega) * n2[i].y
    vz[i] = cos(omega) * n1[i].z + sin(omega) * n2[i].z

omega構造上、手順 3 の基底は半径ベクトルに依存しますが、ランダムな方向 ( ) が追加されるため、これは重要ではありません。

単位の選択に関しては、シミュレーション科学では常に物事を自然単位に保つ傾向があります。つまり、計算されたすべての量が無次元で[0, 1]、少なくとも 1 ~ 2 桁以内に保持される単位です。 -ポイント表現を使用できます。星の質量を太陽質量の単位で、距離を AU で、時間を年で表すと1、太陽に似た星の周りの AU にある地球に似た惑星の場合、軌道速度の大きさは次のようになります。2*pi(AU/yr) で、半径ベクトルの大きさは1(AU) になります。

于 2013-02-13T10:18:49.420 に答える
1

求心加速度を重力加速度と等しくしてください。

m 1 v 2 / r = G m 1 m 2 / r 2

v = sqrt( G m 2 / r )

もちろん、星の質量 m 2は惑星の質量 m 1よりもはるかに大きくなければなりません。

物理の問​​題を設定するとき、単位は厄介な問題です。タイムステップ単位ではなく秒単位でエラーを解決するのに何日も費やしました。AU/Solar Masses/Day の選択はまったく正気ではありません。何よりも先にそれを修正してください。

また、コンピューターは本質的に精度が限られていることに注意してください。nbody シミュレーションでは積分誤差が蓄積されるため、100 万または 10 億ステップ後には、ステップの持続時間に関係なく円ができなくなります。私はその数学についてあまり知りませんが、安定した n 体システムは、近くの星や FPU によって導入された小さな変動を吸収する共鳴によって安定していると思います。そのため、セットアップは安定した 5 体の問題では問題なく機能しますが、1 体の問題では失敗します。

于 2013-02-13T02:16:01.677 に答える
0

Ed が提案したように、他のユニット セットではなく、mks ユニットを使用します。

初期速度については、Ed が言ったことの一部に同意しますが、求心加速度のベクトル形式を使用します。

m 1 v 2 /rr(帽子) = G m 1 m 2 / r2 r(帽子)

z を 0 に設定し、極座標からデカルト座標 (x,y) に変換します。次に、y または x のいずれかに初期速度を割り当て、円軌道の基準を満たす他の変数を計算します。これにより、nbody 問題を開始できる初期値 (Vx,Vy) が得られます。また、nbody 中心力問題の数値レシピに関するかなりの文献があるはずです。

于 2013-02-13T05:29:37.447 に答える