2014-10-14 4 views
3

다음 코드를 사용하여 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 > 

에서

+4

"보다 큼"과 "미만"은 복소수에 대해 잘 정의되어 있지 않으므로 결과를 기대할 수 있습니다. – Joni

+0

@ 조니 그들이 잘 정의되지 않았 음을 이해합니다. 필자는 MATLAB의 범위 내에서 다른 기능에 대해 다른 해석을 선택했습니다. –

+3

13 년 전에 [MATLAB Central] (http://www.mathworks.com/matlabcentral/newsreader/view_thread/25213)에서 이에 대한 오랜 토론이있었습니다. 그 이후로별로 변하지 않은 것으로 보인다. 이제 답은 복소수를 비교하려는 경우 더 크거나 작게 사용하려는 메트릭을 정확하게 명시해야한다는 것입니다. – craigim

답변

2

이다. Matlab 팀의 설계 결정은 합당한 것 같습니다.

비교 연산자와 관련된 연산의 대부분은 실수로 작업하기위한 것입니다. >와 같은 기본 연산에 특별한 동작을 추가하면 복소수를 처리 할 때 필요하지 않은 코드의 90 %가 큰 숫자가됩니다. 특히, 복소수를 비교하는 표준 방법이 없다. 그것은 귀하의 응용 프로그램에 따라 다릅니다.