Matlab计算从-pi到pi而不是0到2pi的弧度
Matlab calculating radians from -pi to pi instead of 0 to 2pi
我正在处理压力曲线应该是平滑的问题。为此,角度应从 0
到 2pi
。但是当我取某些复数的对数时,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 使用 0
到 2pi
作为弧度?
根据 log
的文档,对于复数执行的计算是这样的:
log(abs(z)) + 1i*angle(z)
看来我们可以通过添加 2π 模数来稍微 "redefine" 这个,然后显式应用上述操作集而不是 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
...我们看到达到了预期的结果。
计算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)))
我正在处理压力曲线应该是平滑的问题。为此,角度应从 0
到 2pi
。但是当我取某些复数的对数时,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 使用 0
到 2pi
作为弧度?
根据 log
的文档,对于复数执行的计算是这样的:
log(abs(z)) + 1i*angle(z)
看来我们可以通过添加 2π 模数来稍微 "redefine" 这个,然后显式应用上述操作集而不是 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
...我们看到达到了预期的结果。
计算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)))