我想複製柯蒂斯的軌道力學中的一個情節,但我無法完全理解它。不過,我已經從np.arctan
切換到np.arctan2
。使用arctan/arctan2繪製一個從0到2π
也許我錯誤地執行了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的y範圍(0,2pi)不連接0和2pi時連接。
教材的情節和公式:
在Saullo卡斯特羅的要求,有人告訴我:
「問題可能出在將「原則值」作爲輸出的arctan函數
因此,如果x是第二或第三象限中的角度,則arctan(tan(x))不會產生x。如果你繪製從x = 0到x = Pi的arctan(tan(x)),你會發現它在x = Pi/2處有一個不連續的跳躍。
對於您的情況,我相信您會寫arctan2(1,1/arg),而不是寫arctan(arg),其中arg是arctan函數的參數。這樣,當arg變爲負值時,arctan2將在第二象限中產生一個角度,而不是第四象限。「
要正確使用arctan2,需要x的方程和y的方程。的arctan2是比例y/x對象限不明確: -/- == +/+和 -/+ == +/-。如果你把y作爲一個常數,你仍然只能在結果中佔據兩個象限。所以你所說的沒有意義:這不能既是方程,又是填充你所說的象限。 (既然你現在所說的是「我有這個方程式,它不起作用」,我們沒有足夠的信息來回答這個問題,這不是一個可以回答的問題。) – tom10
@ tom10它非常接近如果我們取出.6 - .9,那麼解決方案是正確的。它低於.6,但可能下降,因爲範圍是.15 – dustin
儘管如此,你還沒有給人足夠的信息,我想知道你去哪裏,而不是你開始的地方。 「接近正確」並不是特別有用。這似乎不是一個關於acrtan2的問題,而是一個關於你的教科書內容的問題。 – tom10