NumPy 共轭和角度的数值差异

Numerical differences in NumPy conjugate and angle

假设使用 Python 和 NumPy (1.20.1) 有两个复数:

a = 5 + 1j*3
a0 = 4 + 1j*2

我想计算相移,也就是两个角度之间的距离。我得到两个略有不同的结果:

>>> np.angle(a*np.conjugate(a0))
0.07677189126977804
>>> np.angle(a) - np.angle(a0)
0.07677189126977807

我想最正确的方法应该是第一种。 在某些情况下差异更大,在其他情况下存在 none.

有人知道这种差异的来源吗?

干杯。

编辑 我找到了一个更相关的例子:

>>> a = 41.887609743111966+3.868827773225067j
>>> a0 = -65.06495257694792-0.19335140606773393j
>>> np.angle(a) - np.angle(a0)
3.2307217955357035
>>> np.angle(a*np.conjugate(a0))
-3.0524635116438827

第一个例子只是由于进行浮点计算时固有的数值不精确;以不同的顺序执行这些操作会导致不同的舍入,从而导致它们由(非常轻微的)不同的浮点值表示。对于大多数应用程序,两者之间的值差异可以忽略不计。

但是,正如您的第二个示例所示,这两个表达式并不等价。 np.angle returns 从-pi 到 pi 的值,当角度差大于该值时很重要。当您取两个角度之间的差异时,您可以获得此范围之外的值,这就是第一个片段中发生的情况。结果直接来自 np.angle 的第二个片段必须在 -pi 到 pi 的范围内。这两个结果之间的差异只是 2pi.

所以如果你想确定两点之间的绝对角度,你会使用你的第一个公式。如果您只想确定 -pi 和 pi 之间的相对相位,您可以使用第二个。