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 象限の角度を生成します。」