@Julio “s 優れた回答は、飛行経路の角度を説明し、それを説明していますは、接線方向(中心体の半径方向ベクトルに垂直)と現在の速度ベクトルの間の角度です。

最初にこの式から角度を取得しようとしましたが、明らかに間違っています。 、$ \ arccos $は偶数関数であり、角度は$-\ pi / 2 $から$ \ pi / 2 $になります。

$$ \ arccos \ left(\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)-\ frac {\ pi} {2} \ \ \ \ text {(不正解です!)} $$

GM($ \ mu $)とSMA($ a $)の軌道を統合し、0.2から1.8の開始距離を1にしました。これにより、ピリオドは常に$ 2 \ pi $になります。関数の結果をプロットすると、小刻みに動くことが多すぎます。

状態ベクトルから開始して正しい飛行経路角度ガンマを取得するには、どの式を使用できますか?

誤った部分についてPythonを改訂していただければ幸いですが、回答には必要ありません。

軌道プロット

def deriv(X, t): x, v = X.reshape(2, -1) acc = -x * ((x**2).sum())**-1.5 return np.hstack((v, acc)) import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint as ODEint halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)] T = twopi time = np.linspace(0, twopi, 201) a = 1.0 rstarts = 0.2 * np.arange(1, 10) vstarts = np.sqrt(2./rstarts - 1./a) # from vis-viva equation answers = [] for r, v in zip(rstarts, vstarts): X0 = np.array([r, 0, 0, v]) answer, info = ODEint(deriv, X0, time, full_output= True) answers.append(answer.T) gammas = [] for a in answers: xx, vv = a.reshape(2, 2, -1) dotted = ((xx*vv)**2).sum(axis=0) rabs, vabs = [np.sqrt((thing**2).sum(axis=0)) for thing in (xx, vv)] gamma = np.arccos(dotted/(rabs*vabs)) - halfpi gammas.append(gamma) if True: plt.figure() plt.subplot(4, 1, 1) for x, y, vx, vy in answers: plt.plot(x, y) plt.plot(x[:1], y[:1], ".k") plt.plot([0], [0], "ok") plt.title("y vs x") plt.subplot(4, 1, 2) for x, y, vx, vy in answers: plt.plot(time, x, "-b") plt.plot(time, y, "--r") plt.title("x (blue) y (red, dashed)") plt.xlim(0, twopi) plt.subplot(4, 1, 3) for x, y, vx, vy in answers: plt.plot(time, vx, "-b") plt.plot(time, vy, "--r") plt.title("vx (blue) vy (red), dashed") plt.xlim(0, twopi) plt.subplot(4, 1, 4) for gamma in gammas: plt.plot(time, gamma) plt.title("gamma?") plt.xlim(0, twopi) plt.show() 

コメント

  • この質問が必要です'式のどこが間違っているのかを尋ねているようです

回答

これは、軌道力学に精通しているが、異なる教科書を使用して学んだ人々のグループを悩ませてきた問題です。「飛行経路角度」には2つの異なる定義があります。 “!!

接線方向と速度ベクトルの間の角度である$ \ gamma $に加えて、$ \ beta $の間の角度があります。 半径方向と速度ベクトル。 どの定義を使用しているのかと言わずに「飛行経路の角度」と言うことがよくあります。紛らわしいです!(Julioの回答の図にも$ \ beta $が表示されていることに気づきました)

$ \ gamma $の代わりに$ \ beta $を使用する場合、$ \ beta $は次の式で与えられます

$$ \ arccos \ left(\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)\ tag {1} $$

これは0(「まっすぐ上」)から$ \ pi $( “まっすぐ”)。 $ \ gamma $を使用すると、「まっすぐ上」は$ \ pi / 2 $で、「まっすぐ下」は$-\ pi / 2 $なので、$ \ beta $を$ \ gamma $に変換すると、から$ \ beta $を引くだけです。 $ \ pi / 2 $:

$$ \ gamma = \ pi / 2- \ arccos \ left(\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)\ tag {2} $$

これは

$$ \ gamma = \ arcsin \ left(\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)\ tag {3} $$

私は言語に精通していません計算とプロットに使用したので、「ウィグルが多すぎる」理由を確認するためにアルゴリズムを調べていません。

コメント

  • ありがとう! '方程式にタグ(数値)を追加しました。ウィグルが多すぎると思いますか、それともそのウィグル動作は実際には合理的ですか? $ \ beta $(eq 1)は、円周率の半分のオフセットを除いて、誤った$ \ gamma $と同じであるため、私のプロットの小刻みは、$ \ beta $の適切なプロットの小刻みと同じである必要があります。 (eq 1)。
  • 私にはあまりにも多くの小刻みに動くように見えます。 '後で確認します。
  • @uhoh、実際、私の式1は式のにすぎません。他の何かが間違っています。もちろん、プロットされたすべての$ \ gamma $が負またはゼロであるため、何かが間違っていることはご存知でしょう。これは、内向きのスパイラルを除いて'できません。ケプラーの偏心軌道の場合、$ \ gamma $は、近地点と遠地点で正確に2回ゼロを横切り、短い(極値から近地点から他の極値まで)と長い(極値から遠地点から他の極値まで)の両方で、極値間で単調である必要があります。 )セグメント。 ' $ \ gamma $曲線がどのように見えるかの例を描くことができるかどうかを確認します。
  • おっと、上で言ったはずです、"私の式 2 はあなたのネガティブです。"ログオフして寝る必要があります!
  • @uhoh " tangential "は、軌道ではなく、プライマリを中心とする球になります。個人的には'は"横方向の速度"と言いたいのですが、私の最初の軌道力学の教授ですスタンフォード大学では、" tangential "を使用しました。

回答

スクリプトにエラーが見つかりました。これは、「自作」のドット積が原因でした。追加の二乗がありました:

dotted = ((xx*vv)**2).sum(axis=0) # WRONG dotted = (xx*vv).sum(axis=0) # Correct 

したがって、これに加えて@TomSpilkerの 優れた説明 ガンマを計算するために次の2つの方法を使用しました。

方法1:

$$ \ gamma_1 = \ arcsin \ left(\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)\ tag {3} $$

方法2:

再確認するためのブルートフォースの代替方法:

$$ \ theta_r = \ arctan2(y、x)$$

$$ \ theta_v = \ arctan2(vy、x)$$

$$ \ theta_ {tanj} = \ theta_r + \ frac {\ pi} {2} $$

$$ \ gamma_2 = \ theta_ {tanj}-\ theta_v $$

$$ \ gamma_ {2mod} = \ mod(\ gamma_2 + \ pi、2 \ pi)-\ pi $$

モジュロ演算は、各シータが個別のarctan2演算から取得されるため、コンピュータープログラムでのみ実際に必要です。

画像を入力ここでの説明

gammas_1, gammas_2 = [], [] for a in answers: xx, vv = a.reshape(2, 2, -1) dotted = (xx*vv).sum(axis=0) rabs, vabs = [np.sqrt((thing**2).sum(axis=0)) for thing in (xx, vv)] gamma_1 = np.arcsin(dotted/(rabs*vabs)) # Per Tom Spilker"s answer Eq. 3 theta_r = np.arctan2(xx[1], xx[0]) theta_v = np.arctan2(vv[1], vv[0]) theta_tanj = theta_r + halfpi gamma_2 = theta_tanj - theta_v gamma_2 = np.mod(gamma_2 + pi, twopi) - pi gammas_1.append(gamma_1) gammas_2.append(gamma_2) plt.figure() plt.subplot(2, 1, 1) for gamma_1 in gammas_1: plt.plot(time, gamma_1) plt.title("gammas_1", fontsize=16) plt.subplot(2, 1, 2) for gamma_2 in gammas_2: plt.plot(time, gamma_2) plt.title("gammas_2", fontsize=16) 

コメント

  • 確かに新しい$ \ gamma $プロットは私が期待したものです。やったー!良い探偵。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です