我试图弄清楚MATLAB如何使用以下代码比较复数。我不确定这是否是预期的行为,或者我是否发现了一个错误。
max的文档说明如下:
当X很复杂时,使用幅度计算最大值 MAX(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
更改为>
?
答案 0 :(得分:2)
这是来自
doc >
测试只比较数值数组的实部
碰巧>的实现只关注真实的部分。 Matlab团队的设计决策似乎是合法的。
涉及比较运算符的绝大多数操作都旨在使用实数。为>等基本操作添加特殊行为处理复杂的数字将导致90%的代码不需要它。特别是,没有标准的方法来比较复数。这取决于你的申请。