作为较长代码的一部分,我得到一个数量为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)。 为什么会发生这种情况?
答案 0 :(得分:2)
atan2
函数始终为returns values between -pi
and pi
。例如,对于alpha = 4
您的代码
S1=cos(alpha);
S2=sin(alpha);
K=atan2(S2,S1)
给出
K =
-2.2832
,alpha
但已移动(模2*pi
}到-pi
和pi
之间的间隔。
这不应该是一个问题,因为2*pi
不同的两个角度实际上是相同的。因此,一种可能的解决方案是通过减法模2*pi
来比较角度:
>> mod(alpha-K, 2*pi)
ans =
0
另请注意,由于numerical rounding errors,您不应该依赖模2*pi
的差异0
。相反,将其绝对值与给定的容差进行比较。