2015년 6월 27일 토요일

MATLAB의 행렬 간 논리 연산과 관련 함수

 MATLAB에서 제공하는 논리 연산자는 다음 표와 같다.

[표 1] 논리 연산자
논리연산자
기능
&
AND
|
OR
~
NOT

(부연하자면 C/C++의 비트연산자와 같다. MATLAB은 비트 연산자는 없다.)
 다음 예를 보자

>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2

>> B=pascal(3)
B =
1 1 1
1 2 3
1 3 6

>> ~(A>B)
0 1 0
0 0 0
0 0 1

>> (A>2)&(B<3)
1 0 1
1 1 0
1 0 0

 이전 포스트에서 설명한 기본 논리/관계연산자 외에도 MATLAB은 추가적인 다양한 논리/관계 함수를 제공한다.

[표 2] 관계/논리 연산 관련 함수들 (X, Y는 함수)
함수명
함수의 기능
Z=xor(X,Y)
XOR 연산을 수행한다
Z=any(X)
벡터 X의 요소 중 하나라도 0이 아닌 요소가 있으면 1을 반환, X가 행렬일때는 열단위로 연산된다.
z=all(X)
벡터 X의 요소들 모두 0이 아니면 1을 반환
(X가 행렬일 때는 열단위로 연산된다.)
z=isempty(X)
행렬 X가 빈행렬이면 1을 반환
z=isequal(X,Y)
행렬 X와 Y가 완전히 동일하면 1을 반환
Z=isinf(X)
행렬 X의 요소 중 inf가 있는 곳에 1을 반환
Z=isnan(X)
행렬 X의 요소 중 nan이 있는 곳에 1을 반환
z=isreal(X)
행렬 X의 요소 중 복소수가 하나도 없으면 1을 반환

위의 도표에서 소문자 z가 출력변수이면 그 함수는 스칼라값(0혹은1)을 반환함을 의미하며 대문자 Z가 출력행렬이면 그 함수는 입력 파라메터와 동일한 크기를 갖는 행렬을 반환한다는 것을 의미한다.

 이 중 isequal()함수는 연산자 (==)와 같은 역할을 하는 것 아닌가 생각할수 있으나 (==)연산자는 요소간 비교이고 isequal()함수는 두 행렬 전체를 비교하는 함수이다. 다음 예에서 이를 확인해 보라.

>> A=[1 2;3 4]
A =
1 2
3 4

>> B=[1 2;3 4]
B =
1 2
3 4

>> C=[1 2; 3 5]
C =
1 2
3 5

>> A==B
1 1
1 1

>> A==C
1 1
1 0

>> isequal(A,B)
1

>> isequal(A,C)
0


댓글 없음:

댓글 쓰기