I am trying to figure out how MATLAB compares complex numbers using the following code. I am not sure if this is expected behavior or if I have uncovered a bug.
The documentation for max says the following:
When X is complex, the maximum is computed using the magnitude MAX(ABS(X)). In the case of equal magnitude elements, then the phase angle MAX(ANGLE(X)) is used.
The behavior of max
matches the documentation as expected.
>> 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
However when I try to use greater than operator, ">", matlab seems to use just the real part for comparison.
>> 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
Is there any particular reason the behavior changes in this manner from max
to >
?
>
(a.k.a.gt
), and the other fiverelop
relationship operators, is detailed in their own documentation. – horchler