我试图在柯蒂斯的《轨道力学》中复制一幅情节,但我完全不明白.但是,我已经从np.arctan切换到np.arctan2取得了进展.
也许我实施的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和2 pi处连接,而不接触0和2pi.
教科书情节和方程式:
应Saullo Castro的要求,我被告知:
“问题可能在于提供“原理值”作为输出的反正切函数.
因此,如果x是第二象限或第三象限中的一个角度,则arctan(tan(x))不会产生x.如果将arctan(tan(x))从x = 0绘制到x = Pi,则会发现它在x = Pi / 2处具有不连续的跳跃.
对于您的情况,我相信您可以编写arctan2(1,1 / arg)而不是编写arctan(arg),其中arg是arctan函数的参数.这样,当arg变为负数时,arctan2将在第二象限而不是第四象限中产生一个角度.”