본문 바로가기
programming language/MATLAB

MATLAB rot90(), triu(), transpose, hermitian transpose, upper(), lower()

by __observer__ 2011. 4. 3.
반응형

MATLAB 의 rot90() 함수는 matrix 를 시계 반대방향으로 돌리는 기능을 하는 함수입니다.

 

x=magic(4)

x =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

 

위 x 에 대하여 다음과 같이 하면 시계 방대방향으로 90 도 돌리게 됩니다.

 

x1=rot90(x)

x1 =

13 8 12 1

3 10 6 15

2 11 7 14

16 5 9 4

 

위 x 에 90 도씩 3번 시계 방대방향으로 돌리고 싶다면 다음과 같이 하면 됩니다.

 

x2=rot90(x,3)

x2 =

4 9 5 16

14 7 11 2

15 6 10 3

1 12 8 13

 

 

다음으로 설명한 명령어는 triu(), tril() 함수 입니다.

 

triu() 함수는 upper triangular 부분을 구하는 함수이며 tril() 함수는 lower triangular 부분을 구하는 함수입니다.

 

triu() 함수를 실행하면 다음과 같이 됩니다. diagonal 을 포함하여 upper triangular 부분만 남아 있고 나머지는 다 0 이 되게 됩니다.

 

x_triu=triu(x)

x_triu =

16 2 3 13

0 11 10 8

0 0 6 12

0 0 0 1

 

 

triu() 함수에 diagonal 로 부터의 offset 을 줘서 다음과 같이 diagonal 부분을 제외하고 선택도 가능합니다.

 

x_triu2=triu(x,1)

x_triu2 =

0 2 3 13

0 0 10 8

0 0 0 12

0 0 0 0

 

triu() 함수에 – 의 옵셋을 주게 되면 diagonal 아래 방향으로 옵셋을 주게 됩니다.

 

x_triu3=triu(x,-1)

x_triu3 =

16 2 3 13

5 11 10 8

0 7 6 12

0 0 15 1

 

tril() 함수는 다음과 같이 사용합니다.

 

x_tril= tril(x)

x_tril =

16 0 0 0

5 11 0 0

9 7 6 0

4 14 15 1

 

triu() 함수와 사용방법은 비슷하지만 옵셋을 줄 때는 조심하셔야 합니다.

 

x_tril1= tril(x,1)

x_tril1 =

16 2 0 0

5 11 10 0

9 7 6 12

4 14 15 1

 

triu() 함수에서 + 옵셋을 줬을 때는 triangular 의 크기가 줄어들었는데 tril() 함수에서는 + 옵셋을 줬을 때 triangular 의 크기가 커지는 것을 알 수 있습니다.

 

tril(), triu() 함수의 옵셋은 무조건 diagonal 을 기준으로 + 면 위쪽으로 – 면 아래 쪽으로 triangle 의 크기가 변한다고 알고 계시면 됩니다.

 

tril() 함수에서 -1로 옵셋을 주니깐 삼각형이 줄어들게 됩니다.

 

x_tril2= tril(x,-1)

x_tril2 =

0 0 0 0

5 0 0 0

9 7 0 0

4 14 15 0

 

 

MATLAB 에서 '(쉼표) 는 hermitian transpose 를 의미 합니다.

 

hermitian transpose 란 complex conjugate transpose 를 하는 것입니다.

 

다음과 같은 matrix 에 대해 hermitian transpose 를 취해 보죠

 

x=magic(3)+i*magic(3)

x =

8.0000 + 8.0000i 1.0000 + 1.0000i 6.0000 + 6.0000i

3.0000 + 3.0000i 5.0000 + 5.0000i 7.0000 + 7.0000i

4.0000 + 4.0000i 9.0000 + 9.0000i 2.0000 + 2.0000i

 

위 결과를 보면 imaginary 의 부호가 바뀌었고 transpose 된 것을 확인 할 수 있습니다.

 

x'

ans =

8.0000 - 8.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i

1.0000 - 1.0000i 5.0000 - 5.0000i 9.0000 - 9.0000i

6.0000 - 6.0000i 7.0000 - 7.0000i 2.0000 - 2.0000i

 

 

complex conjugate 는 안 하고 transpose 만 할 때는 .' (점 - 쉼표)를 이용해야 합니다.

 

x.'

ans =

8.0000 + 8.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i

1.0000 + 1.0000i 5.0000 + 5.0000i 9.0000 + 9.0000i

6.0000 + 6.0000i 7.0000 + 7.0000i 2.0000 + 2.0000i

 

 

MATLAB 에서 대소문자 변환 관련한 함수로는 upper(), lower() 함수가 있습니다.

 

upper()함수는 대문자로 변환해 주며

 

X=upper('I am a man')

X =

I AM A MAN

 

lower() 함수는 소문자로 변환 해주는 함수 입니다.

 

lower(X)

ans =

i am a man

  


반응형

댓글