8

Curtis のOrbital Mechanicsのプロットを複製しようとしていますが、うまくいきません。np.arctan2しかし、私はからに切り替えることで前進しましたnp.arctan

たぶん私はarctan2間違って実装していますか?

import pylab
import numpy as np

e = np.arange(0.0, 1.0, 0.15).reshape(-1, 1)

nu = np.linspace(0.001, 2 * np.pi - 0.001, 50000)
M2evals = (2 * np.arctan2(1, 1 / (((1 - e) / (1 + e)) ** 0.5 * np.tan(nu / 2) -
           e * (1 - e ** 2) ** 0.5 * np.sin(nu) / (1 + e * np.cos(nu)))))

fig2 = pylab.figure()
ax2 = fig2.add_subplot(111)

for Me2, _e in zip(M2evals, e.ravel()):
    ax2.plot(nu.ravel(), Me2, label = str(_e))

pylab.legend()
pylab.xlim((0, 7.75))
pylab.ylim((0, 2 * np.pi))
pylab.show()

下の画像では、不連続性が現れています。関数は滑らかで、0 と 2pi に触れない (0, 2pi) の y 範囲の 0 と 2pi で接続するはずです。

ここに画像の説明を入力してください

教科書のプロットと方程式:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

サウロ・カストロの要請で、私は次のように言われました:

問題は、出力として「原則値」を与える arctan 関数にある可能性があります。

したがって、arctan(tan(x)) は、x が第 2 象限または第 3 象限の角度である場合、x を生成しません。x = 0 から x = Pi まで arctan(tan(x)) をプロットすると、x = Pi/2 で不連続なジャンプがあることがわかります。

あなたの場合、arctan(arg) を書く代わりに、arctan2(1, 1/arg) と書くと思います。ここで、arg は arctan 関数の引数です。そうすれば、arg が負になると、arctan2 は第 4 象限ではなく第 2 象限の角度を生成します。」

4

1 に答える 1