【问题标题】:Matlab calculating radians from -pi to pi instead of 0 to 2piMatlab计算从-pi到pi而不是0到2pi的弧度
【发布时间】:2018-04-29 06:30:39
【问题描述】:

我正在处理一个压力曲线应该是平滑的问题。为此,角度应从02pi。但是当我取某些复数的对数时,MATLAB 将角度映射到 pi 到负 pi 范围(顺时针方向)。

例如:

var_z = [20.0 + 0.6i,  20.0 - 0.6i];
za2 = -2.5000 + 0.5000i;
A = log (-(var_z-za2))   

产生A = [3.11 - 3.13i, 3.11 + 3.091i],但如果角度仅在逆时针方向(即[0, 2pi]),我们将获得[3.11 + 3.14i, 3.11 + 3.09i]

后一种结果在我的情况下更有意义,因为它可以防止压力曲线迅速上升。有什么方法可以强制 MATLAB 使用 02pi 的弧度?

【问题讨论】:

    标签: matlab mapping angle complex-numbers logarithm


    【解决方案1】:

    根据log 的文档,对于复数,执行的计算是这样的:

    log(abs(z)) + 1i*angle(z)
    

    看来我们可以通过添加 2π 模数来稍微“重新定义”它,然后显式应用上述操作集而不是 log 函数:

    log(abs(z)) + 1i*mod(angle(z),2*pi)
    

    因此如果我们定义一个函数句柄并比较结果:

    l = @(z)log(abs(z)) + 1i*mod(angle(z),2*pi);
    

    >> log(-([20.0 + 0.6i,  20.0 - 0.6i]-(-2.5000 + 0.5000i)))
    
    ans =
    
       3.1135 - 3.1371i   3.1147 + 3.0927i
    
    >> l(-([20.0 + 0.6i,  20.0 - 0.6i]-(-2.5000 + 0.5000i)))
    
    ans =
    
       3.1135 + 3.1460i   3.1147 + 3.0927i
    

    ...我们看到达到了预期的结果。

    【讨论】:

      【解决方案2】:

      从0到2pi的角度计算公式:

      f(x,y)=pi()-pi()/2*(1+sign(x))*(1-sign(y^2))-pi()/4*(2+sign(x))*sign(y)
             -sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
      

      【讨论】:

        猜你喜欢
        • 2018-01-04
        • 2019-09-08
        • 1970-01-01
        • 2022-12-04
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        相关资源
        最近更新 更多