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)。 为什么会发生这种情况?
答
的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
。相反,将其绝对值与给定的容差进行比较。
其实,phi1和phi2是在MATLAB中评估的角度。因此它们的范围在-pi和pi之间。当我评估alpha时,值的范围不在-pi和pi之间。因此,atan2没有给出确切的alpha值。但问题是我需要确切的阿尔法值,因为还有另一个方程给出beta = phi1 + phi2。我的主要目标是通过从S1和S2以及β方程推导出α来评估phi1。为此,我需要确切的阿尔法值,因为它是。但无论我尝试什么,我都无法准确检索alpha。任何人都可以请提出建议吗 –