gpt4 book ai didi

matlab - 实数的角度()

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:10 24 4
gpt4 key购买 nike

我对 Matlab 中的 angle() 函数有点困惑,尤其是在应用于实数数组时。

angle() 函数应该给我一个复数的相位。示例:y = a + bi, ==> phase = arctan(b/a)。事实上,以下工作:

for t=1:1000
comp(t) = exp(1i*(t/10));
end

phase_good_comp1 = unwrap(angle(comp)); %this gives me the right answer
b = imag(comp);
a = real(comp);
phase_good_comp2 = atan(b./a); %this gives me the right answer too, but
wrapped (not sure if there is a way to unwrap this, but unwrap() does not
work)

figure(1)
plot(phase_good_comp1)
hold on
plot(phase_good_comp2,'--r')
legend('good phase1', 'good phase2')
title('complex number')

这是复数的绘图 --

enter image description here

请注意,我可以使用 angle() 函数或相位的显式定义,如上所示。两者都产生了良好的结果(我无法打开后者,但这不是我的问题)。

现在,如果我将相同的逻辑应用于实数数组,我应该得到一个恒定的相位,因为不存在虚部,所以 arctan(b/a) = arctan(0) = 0。如果我使用相位的显式定义,但如果我使用 angle(),我会得到一个奇怪的结果:

for t=1:1000
ree(t) = cos((t/10));
end

phase_bad_re = unwrap(angle(ree)); %this gives me an unreasonable (?) answer
b = imag(ree);
a = real(ree);
phase_good_re = atan(b./a); %this gives me the right answer

figure(1)
plot(phase_bad_re)
hold on
plot(phase_good_re,'--r')
legend('bad phase', 'good phase')
title('real number')

这是实数图 --

enter image description here

为什么我使用angle()时会出现振荡???

最佳答案

Matlab 文档告诉您如何计算:

The angle function can be expressed as angle(z) = imag(log(z)) = atan2(imag(z),real(z)).

https://www.mathworks.com/help/matlab/ref/angle.html

请注意,他们使用 atan2 而不是 atan 来定义它。

现在您的数据在余弦范围内,包括正数和负数。正数的夹角一般为0,负数的夹角一般为圆周率的奇数倍。使用他们选择的特定定义来获得唯一的答案,它是 pi。那就是你得到的。 (实际上,对于正数,pi 的任何偶数倍数都可以,但 0 是“自然”选择,您可以从 atan2 中获得。)

如果您不清楚为什么负数没有角度 = 0,请在复平面上绘制它并记住根据定义,复数的径向部分是正数。即 z = r * exp(i*theta) for positive r and theta 由这个角度给你'正在计算。

关于matlab - 实数的角度(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com