【发布时间】:2014-10-14 22:43:51
【问题描述】:
我试图弄清楚 MATLAB 如何使用以下代码比较复数。我不确定这是预期行为还是我发现了错误。
max 的文档说明如下:
当 X 是复数时,最大值是使用幅度计算的 最大(ABS(X))。在等幅元素的情况下,则相位 使用角度 MAX(ANGLE(X))。
max 的行为符合预期。
>> a = complex(rand(3,1), rand(3,1))
a =
0.8147 + 0.9134i
0.9058 + 0.6324i
0.1270 + 0.0975i
>> b = complex(imag(a), real(a))
b =
0.9134 + 0.8147i
0.6324 + 0.9058i
0.0975 + 0.1270i
>> max(a, b)
ans =
0.8147 + 0.9134i
0.6324 + 0.9058i
0.0975 + 0.1270i
>> a > b
ans =
0
1
1
>> angle(a) > angle(b)
ans =
1
0
0
>> abs(a) == abs(b)
ans =
1
1
1
但是,当我尝试使用大于运算符“>”时,matlab 似乎只使用实部进行比较。
>> a = complex(rand(5,1), rand(5,1))
a =
0.1576 + 0.1419i
0.9706 + 0.4218i
0.9572 + 0.9157i
0.4854 + 0.7922i
0.8003 + 0.9595i
>> b = complex(imag(a), real(a))
b =
0.1419 + 0.1576i
0.4218 + 0.9706i
0.9157 + 0.9572i
0.7922 + 0.4854i
0.9595 + 0.8003i
>> max(a, b) == a
ans =
0
0
0
1
1
>> a > b
ans =
1
1
1
0
0
>> real(a) > real(b)
ans =
1
1
1
0
0
行为以这种方式从max 更改为> 是否有任何特殊原因?
【问题讨论】:
-
“大于”和“小于”对于复数没有很好的定义,所以你可以期待任何结果。
-
@Joni 我知道它们的定义不明确。我是在 MATLAB 的范围内提出这个问题的,它选择对不同的函数有不同的解释。
-
13 年前,MATLAB Central 对此进行了长时间的讨论。从那以后似乎没有太大变化。现在的答案是,如果你想比较复数,你必须明确说明你想用什么度量来表示大于或小于。
-
@craigim 感谢您的链接。这是一个长期存在的问题,我们不知道为什么会这样,这有点令人沮丧。
标签: matlab