IW95bTKrLRrsBJhzWtFZCtWLPFFjo9r0MGuY30fvVNVruq-10lObw8zQsSf3fllosI8eVdOvo0JCoRPkKgbgMagZMqP5pVsXqejPHu0l2MKuixM5Hhk

안녕하세요? LGS입니다.
지난 시간에 콜론 연산자를 배웠습니다. 오늘은 그 콜론 연산자를 가지고 놀아 봅시다.
>>A = pas 
라고만 쓴 다음 Tab(탭) 키를 눌러보세요.
jDNVSlvMuxPDLJHmgGsdEG1ce04ZtsyqvtKdX0her7eTO1pCJPsQugD5vRkw3hBQWRbjcM10-wNrUoNvuOK7Pko7wAupsoh2tnVeV2UXTF8J3ird5Tk

그러면 pas~로 시작되는 함수 목록이 나옵니다. 여기서 우리는 pascal 이라는 함수를 사용할 것입니다. 
항목 중에 pascal을 더블클릭 하시거나 항목을 화살표로 선택후 Enter를 치면 
나머지 부분이 자동으로 Command Window에 채워지게 됩니다. 

pascal 이라는 함수가 무얼 하는 함수인지 모르시겠다구요? 
그럼 커서를 pascal 중간 아무곳에나 두고 F1을 눌러보세요(물론 help pascal을 치셔도 됩니다)

2LVPPMWIYgX7439B60utLi8Ff3fAZ4KM-Lye6-An3WIdq6KzKofQuMpvZeTdc1w-P1j4_Umbm2LBhsStthg6u1dYKEJ30uvVw8xHx1olTC9HY-fPvVI


pascal 함수를 설명해주는 미니 도움말 창이 뜨게 됩니다. 
(pascal 함수는 파스칼 삼각형 행렬을 반환합니다)

이번 시간에는 크기가  5x5 짜리 파스칼 행렬을 만들어 가지고 놀아 보죠~

>>A = pascal(5)
A = 
     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    70

저번 강의 기억나시나요? 콜론 연산자가 매우중요하고 자주쓰인다고 말씀드렸는데...
혹시 기억안나시는 분들을 위해서 다시한번... 시작값:(증분값):끝값 remind하시구요

처음 1강에서 말씀드렸는데 기억할지 모르겠습니다.
A(3,4)가 무얼 말하는지.. 'A라는 이름의 행렬의 3행 4열의 숫자를 반환하라' 라는 말이죠
이렇게 참조하면 딸랑 element 하나만 가져올 수 있습니다. 
그런데 우리는 A행렬의 element 하나가 아니라 세번째 행 [1 3 6 10 15] 를 통채로 참조하여 가지고 오고 싶다고 합시다.
어떻게 해야할 까요?

>>A(3 , 1 : 5)
ans =
      1    3    6    10    15

콜론 연사자를 사용하면 쉽게 행렬의 전체 또는 일부를 가져올 수 있습니다. 
1 : 5 == [1  2  3  4  5] 이니까 A(3,1:5)는 A(3,[1 2 3 4 5])와 같습니다. 
이것을 풀어쓰면 'A라는 이름의 행렬에서 3행의 1렬 2렬 3렬 4렬 5렬을 참조하겠다'라는 말입니다.

1 : 5 라고 적는 것이 귀찮군요. 1:5라고 적으려면 일일이 행렬의 크기를 알아야 합니다. 
그래서 그냥 이렇게 적어도 상관없습니다.

>>A( 3 , 1 : end)
ans =
      1    3    6    10    15

행렬에서 end는 행렬의 끝을 나타냅니다. 
A(3 , 1 : end)을 풀어서 써보면 'A라는 이름의 행렬에서 3행의 1열부터 끝렬까지' 라는 말이되겠습니다.
1:end 라고 적는 것도 귀찮으시다구요? 그럼

>> A(3,:)
ans =
      1    3    6    10    15

어떻습니까? 결과가 똑같죠? 좌우에 아무것도 없는 콜론에 주목하세요.
행렬에서 : 것은 전체를 나타냅니다.
A(3,:)을 풀어서 써보면 'A 행렬의 3행 전체' 라는 말이되겠습니다.

4loO_c_kG6Gk6zWiaEfjBf03KQJM1_zeDywXzLyGL4-BAi7LUDc6cfZkPTUogovgW6yElwTz3GTwtAULYv6EZUfDaTT7WW7VgaeljhW7Ji-Z0i0X4k8
>>A([2 4],[2 5])
ans =
      2   5
      4   35
위의 그림을 보세요~ 이해가 되시죠?


이번에는 A행렬의 2열과 4열로 이루어진 행렬을 만들어 봅시다.
역시 방법은 여러가지가 있습니다.

>>[ A(:,2)  A(:,4) ]
ans = 
      1    1
      2    4
      3    10
      4    20
      5    35

>> A(:, [2 4])
ans =
      1    1
      2    4
      3    10
      4    20
      5    35

1강에서 행렬을 만들때 숫자들을 [ ]으로 감싸주었습니다. 
행렬을 만들때 행렬안에의 각각의 숫자를 vector로도 표현할 수 있겠죠? 
첫번째 방법이 그런 방식입니다.[]안에 2개이상의 행렬(벡터)를 쓰면 concatenate 즉 두 행렬(벡터)를 하나로 합치는 겁니다. 
단 합치려는 행렬(벡터)의 합치려는 방향의 크기는 같아야겠죠? 
MATLAB에서는 상수도 1x1 행렬이라고 그랬죠? 그러고 보니 [] 안에 그냥 숫자를 체우는 것도 
결국 concatenate 이군요(여러개의 1x1 matrix를 하나로 합치는)

두번째 방법은 설명 안드려도 아시겠죠? 'A 행렬의 2번째 4번째 렬 전체'라고 쉽게 풀어 말할 수 있으시면 잘 따라 오신겁니다.

자 오늘은 여기까지입니다.
여기까지 여러분들은 기본적으로 행렬을 만들고 계산하고 참조하는 방법을 모두 배우셨습니다. 
이제 여러분의 앞에는 멋있고 화려한 MATLAB의 다양한 기능들이 기다리고 있습니다.
그럼 다음 시간에 뵙겠습니다.


마지막 부분이 이해가 잘 되지 않는다는 분이 계셔서 보충 강의 올립니다.


대괄호( [ , ] )는 행렬을 합치는 역할을 합니다.
그럼 위의 두 행렬을 만들려면 Command Window에서 어떻게 입력해야할 까요?

>>[ [8 ; 3 ;4 ]   [1 ; 5 ; 9] ]
>>[ [8 1 6] ; [3 5 7] ]

단 합치려는 방향의 두 행렬은 크기가 같아야 합니다.
>>[ [8 ; 3 ; 4]  [1 ; 5] ]
위의 경우는 Error가 발생합니다.

마지막으로 한번 더 연습해봅시다.

>>[ [8  1 ; 3  5]  [6 ; 7] ; [4 9 2] ]

이해가 가시나요?
profile