【问题标题】:tan inverse in matlab not giving correct valuesmatlab中的tan inverse没有给出正确的值
【发布时间】:2017-04-02 03:37:28
【问题描述】:

作为较长代码的一部分,我得到一个量 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)。 为什么会发生这种情况?

【问题讨论】:

  • 实际上,phi1 和 phi2 是在 MATLAB 中计算的角度。因此它们的范围介于 -pi 和 pi 之间。当我评估 alpha 时,值的范围不再位于 -pi 和 pi 之间。因此, atan2 没有给出准确的 alpha 值。但问题是我想要精确的 alpha 值,因为还有另一个方程给出 beta=phi1+phi2。我的主要目标是通过从 S1 和 S2 以及 beta 方程推导出 alpha 来评估 phi1。为此,我想要准确的 alpha 值,因为它是。但无论我尝试什么,我都无法准确地检索到 alpha。谁能给点建议?

标签: matlab trigonometry inverse atan2


【解决方案1】:

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*pi0 之间的模数差。相反,将其绝对值与给定的容差进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2021-06-24
    相关资源
    最近更新 更多