두 번째
MATLAB의 큰 매력 중 하나는 벡터와 매트릭스 계산이 쉽다는 것이다.
첫번째에서 본 5와 8같이 숫자 하나만 있는 1 X 1 매트릭스를 스칼라,
[1 2 3] 혹은 [1;2;3] 처럼 n X 1 혹은 1 X n 같은 매트릭스를 벡터,
[1 2 3; 4 5 6] 처럼 n X n 매트릭스를 매트릭스 라고 한다.
MATLAB에서 벡터나 매트릭스를 나타낼 때 숫자를 [ ] 안에다가 쓴다.
예를 들어
벡터 [1 2 3 4 5 6] 이렇게 MATLAB에 넣으면
이렇게 나온다.
매트릭스도 비슷한데
1 2 3
4 5 6
이런 매트릭스를 나타내려면
[1 2 3
이 상태에서 엔터를 치면
[1 2 3
4 5 6]
이렇게 쓸수가 있고 다른 방법은
[1 2 3; 4 5 6]
이렇게 행을 바꿔야 하는 곳에 ; 를 넣어주면 된다.
나는 주로 ; 를 쓰는데 편한대로 하면 될 듯.
보는 바와 같이 같은 값으로 나온다.
벡터 사칙연산은 일반 사칙연산과 다를게 없는데
곱셈과 나눗셈은 조금 다르다.
가령, [1 2 3] * [4 5 6] 이라고 MATLAB에 넣으면
이런 에러가 뜨는데 이유는 알다시피
행렬의 곱은 [a X b] * [c X d] 처럼 b 와 c 의 값이 같아야 한다.
근데 [1 2 3] 과 [4 5 6]의 경우엔 같이가 않기 때문에 이런 에러가 나는 것.
이럴 때엔 * 앞에 . 을 붙여줘야 한다.
[1 2 3] 과 [4;5;6] 의 곱일 경우엔 . 을 붙이지 않아도 된다.
MATLAB은 기본적으로 가로벡터로 나타낸다. 세로벡터로 나타내기 위해선 [4;5;6] 처럼 행을 바꿀 때마다 ; 를 붙여줘야 하는데
큰 벡터나 매트릭스의 경우, 다 적기엔 시간이 오래 걸릴 것이다.
다행히도 MATLAB은 그런 가로벡터에서 세로벡터로 쉽게 바꿔주는 커맨드가 있는데
그건 바로 ' 이다.
벡터나 매트릭스 뒤에 ' 만 붙여주면
벡터의 경우, 가로에서 세로 벡터로, 혹은 세로에서 가로벡터로
매트릭스의 경우, 행을 열로, 열을 행으로 바꿔준다.
예를 들어 매트릭스 [1 2 3; 4 5 6; 7 8 9] 를 입력하면
1 2 3
4 5 6
7 8 9
라는 결과 값이 나오는데
[1 2 3; 4 5 6; 7 8 9]' 라고 입력을 하면
1 4 7
2 5 8
3 6 9
라는 결과 값이 나온다.
몰라도 되지만 MATLAB으로 랜덤 벡터, 매트릭스를 나타낼 수가 있다.
rand 라는 커맨드가 있는데 이 커맨드는 0 에서 1 사이의 아무 숫자를 결과 값으로 나타낸다.
rand(n) 을 넣으면 n X n 매트릭스가 나오고
rand(n,m) 을 넣으면 n X m 매트릭스가 나온다.
예전에 숙제 중에서 주사위게임 만드는 게 있었는데
그걸 rand 커맨드로 하는 것이었다.
rand(n) 만 쓰면 0.xxxx 의 숫자로 결과값이 나오는데
이것을 round, floor 혹은 ceil 커맨드를 이용해서 자연수로 만드는 것이다.
예를 들어서 round(rand(3)*3+5) 라고 MATLAB에 넣으면
5 에서 8 사이의 랜덤 자연수를 결과값으로 나타낸다.
rand(3)*3 은 0 에서 3 사이의 아무 유리수를 보여주는데 거기에 + 5 를 하면 5 에서 8의 유리수
round 커맨드를 이용해서 유리수를 자연수로 바꿔주는 거다.
이런 식으로 조금만 계산 알고리즘을 이용하면 원하는 숫자 범위 내에서 랜덤 숫자를 마음껏 나타내기가 가능하다.
막상 적고 나니까 내용이 알차지 않은 거 같다.
기초라서 그런가. 그치만 기초가 가장 중요한데.