ef84d281ed8584d2f5a0ce13f190d6fc.jpg

오늘은 matrix를 이리저리 주물러 보겠습니다.
우선 MATLAB을 실행하시구요 저번 시간에 만들었던 A라는 이름의 3x3 matrix를 다른 방법으로 만들어 보겠습니다.
command window에서 

>> A = magic(3) ;
>>

이라고 입력해보세요~ 여기에서는 2가지를 말씀드리고 싶은데요
그 2가지가 무엇인고하니 바로바로바로 함수 와 세미콜론(;)입니다.
사실 이때까지 써온 'A' matrix는 magic matrix(마방진)이였습니다.
'마방진'이란 각각의 가로 세로 대각선의 합이 모두 똑같은 행렬을 말합니다.
우리는 저번 강의에서 이 마방진을 만들기 위해서 일일이 element를 손으로 쳐넣었지만 
이번에는 손쉽게 magic이라는 함수(function)를 이용 했습니다.

그럼 함수 이야기를 조금 해보죠 (함수를 알고 계시면 skip하셔도 좋습니다)

F81V4xk66vUxcol3HThq2R52AguBN3Pjclm6tHJGgn9GiiYLnp0-FU-MifXnMnMGZE3wgQg9r-xH_6iiRtwLs1FkFUEVPiTSQtyYzH_MmBBhIMGya-g


쉽게 말해서 함수는 공장입니다. 
공장은 원료들을       투입해서 조립을 해서 완성품을 만들어 내죠.
함수는 입력변수들을 받아서    계산을 해서 출력값을 반환 합니다.
함수가 공장과 다른 점이라면 공장은 반드시 원료를 투입해야지만 
완성품이 하나 나오는데 함수는 입력변수가 여러개일 수도 있고
 없을 수도 있고 출력값이 여러개일 수도 있고 없을 수도 있습니다.
 함수에서 입력변수가 둘 이상일 때는 입력변수들을 콤마(,)로 구분해 줍니다.
입력변수가 없는 함수로는 저번 강의 시간에 말했던 clc 나 clear 같은 함수들이 
입력변수를 받지 않는 MATLAB 내장 함수(명령어)가 되겠습니다.
A=magic(3)라는 것은 무슨말일까요?
예! 맞습니다. 'magic이라는 이름의 함수에 입력변수로 3을 입력하고 그 결과값을 A에 저장해라' 라는 말입니다
magic(n) : 크기가 n x n 인 마방진 정방행렬(가로 세로 길이가 같은 정사각형 형태의 행렬)을 생성합니다.

이렇게 MATLAB에서는 우리가 바로 가져다 쓸수 있는 함수들이 수백가지나 됩니다.
sin,length,size,isempty,real,importdata... 등등등 정말 수백가지가 됩니다 -_-
우리는 그 함수들이 무엇을 하는 함수인지 알고 그냥 가져다 쓰면 되죠.

>>help elfun
이라고 입력해보세요. 우리가 사용 할 수있는 가장 기초적인 수학 함수(elementary math function)들을 보여줍니다.
그 외에도 specfun (special math function), elmat (elementary matrix manipulation) 을 한번 둘러보세요. 

물론 여러분이 직접 함수를 만들어 사용 할 수도 있습니다. 
함수를 만드는 부분은 뒤에 가서 설명하겠습니다.
그럼 magic 함수의 내부를 살짝 볼까요?

>> open magic

복잡하죠? 그러나 이 강의가 끝날때 쯤이면 그 복잡해 보이던 것이 모두 이해될 것입니다.
(참고로 MATLAB 함수의 확장자는 .m 입니다. 보통 M-File 이라고 부릅니다.)
여기서 함수 이야기는 끝!!!

자 그럼 두번째 이야기인 세미콜론(;) 이야기를 시작하겠습니다.
MATLAB에서 세미콜론은 딱 2가지 용도로만 사용 됩니다.
첫번째 용도는 저번 강의에서 보았듯이 행렬을 입력할 때 
각 행의 끝을 표시하는 용도로 세미콜론이 사용되었습니다. 
두번째 용도는 문장의 끝에 세미콜론(;)이 붙으면 'command window에 결과값을 뿌리지 마라!!' 는 말입니다
>> A=magic(3) ;  
을 입력했을 때 workspace에는 A 행렬이 생겼지만 Command Window에는 아무 변화가 없죠? 
세미콜론을 사용하지않는다면 모든 계산 결과가 Command Window에 표시되어서 
command window가 상당히 지저분하게 됩니다. 또 Command Window에 계산값을 뿌리느라 실제 수행 속도도 느려지구요.
여기서 세미콜론이야기는 끝!!!


fNE8OOiBI2pSU6P5zMem-JyUNmnvQ35Vrqjf2DMVOzeSrgWH4FHfUyT8EUFG_UvTQd7YBEgqS49punVj8QW-H3DUauKGcelFI7omHKCRizYP-j2JYHc



>> A'
ans =
      8   3   4
      1   5   9
      6   7   2

' 연산자는 matrix를 transpose(행과 열을 서로 바꿈) 시킵니다.
연산자(operator)는 다른 것이 아니고 계산(또는 조작)을 하라는 기호입니다.
우리가 잘 알고 있는 +(더하기 기호)도 하나의 연산자죠.
'3과 4를 더해라' 이렇게 길게 말하기 귀찮으니까 그냥 기호로 '3+4'라고 나타내는 것입니다.
마찬가지로 '행렬을 대각선을 중심으로 뒤집어라' 이렇게 길게 말하는 것이 귀찮으니까
' 기호를 약속하고 아 ' 기호가 나오면 행과 열을 서로 바꾸면 되겠군 하고 생각하시면 되겠죠?
그럼 A = (A')' 라는 것 쯤은 아시겠죠? 

앞에서 A matrix가 마방진이라고 했는데 정말 가로 세로 대각선의 합이 같은지 한번 보겠습니다.

>> sum(A)
ans =
      15   15   15

sum은 기본적으로 각각의 column vector 의 합을 구합니다.
위의 각각의 15는 8+3+4   1+5+9   6+7+2 의 계산 결과 입니다.
세로방향은 합이 똑같군요. 그럼 가로 방향의 합은 어떻게 구하면 될까요?

방법 1.
>> A = A' ; 
>> sum(A)

방법 2.
>> sum(A')

방법 3.
>> sum(A,2)'
ans =
      15   15   15

어느것으로 해도 상관 없습니다. sum(A,2)이 이해가 안되시면 >>help sum 을 쳐보세요.
가로의 합도 똑같군요. 그럼 대각선의 합은?

>> diag(A)
ans =
      8
      5
      2
>> sum(diag(A))
ans =
      15
diag는 행렬의 대각선 성분은 반환합니다

8 5 2 는 왼쪽위에서 오른쪽아래 대각선인데? 그럼 나머지 대각선의 합은

>>sum(diag(fliplr(A)))
ans =
      15
가 되겠습니다. fliplr 함수는 행렬의 좌우를 바꾸는 함수입니다.

(참고로 아래/위를 바꾸는 함수는 flipud입니다.)


Nam_img26.png

자 여기까지 magic으로 만든 마방진이 정말 가로 세로 대각선의 합이 같은지 알아봤습니다.
마방진 이야기 끝 !!

magic과 같이 matrix를 만들어 주는 함수들이 몇가지 있습니다.

>> ones(4)
>> zeros(5,4)
>> rand(2,3)
>> eye(4)

아 정말 주옥같은 함수들이죠~~
각각을 입력해보면 어떤 행렬을 만들어 주는 함수인지, 

각각의 입력변수가 무엇을 뜻하는지 바로 아실 수 있을 것입니다.

자 오늘은 여기까지 입니다.
그럼 다음 시간에 뵙겠습니다
profile