1

作为较长代码的一部分,我得到一个量 phi1 和 phi2(大小为 128x128 的矩阵),它们是复数的参数。现在我在 MATLAB 中定义以下数量:

alpha=phi1-phi2;
S1=cos(alpha);
S2=sin(alpha);
K=atan2(S2,S1);

现在,K 应该等于 alpha。因此,矩阵 B 定义为:

B=K-alpha;

应该是零。但结果却是不同的。尽管 B 的几个元素为零,但其中很多元素的值为 6.2832(即 2pi)。为什么会发生这种情况?

4

1 回答 1

2

atan2函数始终返回 和 之间-pipi值。因此,例如,对于alpha = 4您的代码

S1=cos(alpha);
S2=sin(alpha);
K=atan2(S2,S1)

K =
  -2.2832

alpha只是移动(模)到和2*pi之间的间隔。-pipi

这应该不是问题,因为两个不同的角度2*pi实际上是相同的。所以一个可能的解决方案是通过做减法模来比较角度2*pi

>> mod(alpha-K, 2*pi)
ans =
     0

另请注意,由于数值舍入误差,您不应依赖模数的差值2*pi是精确的0。相反,将其绝对值与给定的容差进行比较。

于 2017-04-02T03:48:26.510 回答