다음 코드를 사용하여 MATLAB이 어떻게 복소수를 비교하는지 알아 내려고합니다. 이것이 예상 된 동작인지 또는 버그를 발견했는지 확실하지 않습니다.MATLAB의 복소수 비교
최대의 문서를 말한다 다음
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
에서이 방식으로 행동 변화가 있습니까? 시험은 숫자 배열
너무>의 구현은 실수 부에 보이는 것이 일의 실수 부분을 비교
doc >
에서
"보다 큼"과 "미만"은 복소수에 대해 잘 정의되어 있지 않으므로 결과를 기대할 수 있습니다. – Joni
@ 조니 그들이 잘 정의되지 않았 음을 이해합니다. 필자는 MATLAB의 범위 내에서 다른 기능에 대해 다른 해석을 선택했습니다. –
13 년 전에 [MATLAB Central] (http://www.mathworks.com/matlabcentral/newsreader/view_thread/25213)에서 이에 대한 오랜 토론이있었습니다. 그 이후로별로 변하지 않은 것으로 보인다. 이제 답은 복소수를 비교하려는 경우 더 크거나 작게 사용하려는 메트릭을 정확하게 명시해야한다는 것입니다. – craigim