matlab中的反正切不给出正确的值

问题描述:

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

其实,phi1和phi2是在MATLAB中评估的角度。因此它们的范围在-pi和pi之间。当我评估alpha时,值的范围不在-pi和pi之间。因此,atan2没有给出确切的alpha值。但问题是我需要确切的阿尔法值,因为还有另一个方程给出beta = phi1 + phi2。我的主要目标是通过从S1和S2以及β方程推导出α来评估phi1。为此,我需要确切的阿尔法值,因为它是。但无论我尝试什么,我都无法准确检索alpha。任何人都可以请提出建议吗 –

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)在区间-pipi之间。

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

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

还要注意的是,由于numerical rounding errors,你不应该依赖于差异模2*pi确切地说是0。相反,将其绝对值与给定的容差进行比较。