2015년 6월 24일 수요일

MATLAB 행렬 기본 입력 (part 3) : 복소 행렬

 여기에서는 이전 포스트에 이어서 기본적인 행렬 생성의 기본적인 내용을 설명하겠다. 행렬 X가 다음과 같이 복소행렬(행렬의 요소 중 하나 이상이 복소수인 행렬)이라고 하자.
아래와 같이 입력하면 화면에 행렬 X가 나타난다. j 대신 i가 쓰일 수도 있다.


>> X=[1 j;-5j 2]
X =
  1 + 0i   0 + 1i
 -0 - 5i   2 + 0i


위와 같이 MATLAB에서 허수를 나타내기 위해서 ‘i’ 혹은 ‘j'를 사용한다. 그러므로 변수 이름으로 ‘i’와 ‘j'를 사용하지 않아야 한다.


>> i
0.0000 + 1.0000i
>> a = 2 + 3i
a =
2.0000 + 3.0000i


수식 입력의 편의를 위해서 복소수를 입력할 때에는 위에서와 같이 ‘3i’를 입력해도 가능하다. 그러나 i 가 허수단위가 아닐 때에는 불가능하며 앞에서도 설명한 바 있듯이 'i3'으로 입력하면 안된다는 것이 유의하자. i3은 변수명으로 해석하기 때문이다.
 만약 ‘i’를 행렬 이름으로 (즉, 변수로) 사용했을 때는 그 행렬이 존재하는 한 ‘i’는 행렬 이름이며 허수가 아니다.


>> i = [1 2 3] 󰎠
i =
1 2 3
>> a = 10 + i 󰎠
a =
11 12 13


‘i’를 다음과 같이 지우면 다시 허수로 사용할 수 있다.


>> clear i 󰎠
>> i 󰎠
0.0000 + 1.0000i


여기서 clear 명령어는 그 뒤에 오는 변수를 메모리에서 지우는 일을 수행한다. 만약  ‘i’가 행렬 변수로 사용되고 있을 때는 ‘sqrt(-1)’을 이용하여 허수를 만들 수 있다.


>> i = [1 2 3]
i =
1 2 3

>> i
1 2 3

>> a = [1+i 1-i] % 'i'는 행렬로 인식된다.
a =
2 3 4 0 -1 -2

>> a = [1+sqrt(-1) 1-sqrt(-1)]
a =
1.0000 + 1.0000i 1.0000 - 1.0000i


하지만 ‘i’ 나 ‘j’는 MATLAB에서는 일종의 예약어(keyword)이므로 변수명으로 사용하는 것은 피하는 것이 바람직하다.


 MATLAB에서 복소수를 취급하는 기본적인 함수들은 다음 표와 같다.


[표 1] 복소수 관련 내장 함수들
함수명
기능
실행 예
(a=3+4j 일 경우)
결과
real()
복소수의 실수부를 구한다
real(a)
3
imag()
복소수의 허수부를 구한다
imag(a)
4
abs()
복소수의 크기를 구한다
abs(a)
5
angle()
복소수의 각(라디안)을 구한다
angle(a)
0.9273
conj()
켤레복수소를 구한다
conj(a)
3-i4


 만약 각도의 결과를 라디안에서 도(degree)로 바꾸고 싶다면 angle()함수의 결과값에 360/2π 를 곱하면 된다.


>> angle(3+4i)
ans =
0.9273
>> ans*360/(2*pi)
ans =
53.1301


 복소행렬의 전치를 구할 때는 약간의 주의가 필요하다. 복소전치행렬(complex conjugate transpose)을 구할 수도 있고 그냥 전치행렬을 구할 수도 있다. 복소전치행렬은 각 행렬 요소들의 공액 복소수(complex conjugate, 허수부의 부호만 바뀐 복소수)를 구한 다음 전치를 하는 것이다. 이전 포스트에서 설명한 (‘)연산자가 실은 복소전치행렬을 구하는 연산자이다. 다음 예에서 이것을 확인할 수 있다.


>> X=[1 j;-5j 2]
X =
  1 + 0i   0 + 1i
 -0 - 5i   2 + 0i

>> Y=X'
Y =
  1 - 0i  -0 + 5i
  0 - 1i   2 - 0i


이와 다르게 행렬의 복소수 요소의 공액복소수를 취하지 않고 단순히 비대각요소의 위치만 전치하고 싶다면 (.‘)연산자를 사용한다.


>> Z=X.'
Z =
  1 + 0i  -0 - 5i
  0 + 1i   2 + 0i


 두  전치연산자 (‘)와 (.’)의 차이에 주의해야 한다.



댓글 없음:

댓글 쓰기