Matlab 행렬

위키배움터
이동: 둘러보기, 검색
자료 정보
Face-smile-big.svg 진행 상황: 이 자료는 완성되었거나 거의 완성 단계에 있습니다.
Sciences humaines.svg 교육 수준: 이 자료는 대학교 강의 수준의 자료입니다.
Crystal exec.png 과목 정보: 이 자료는 공학 과목의 자료입니다.
Nuvola apps edu miscellaneous.svg 자료 형식: 이 자료는 강의형식의 자료입니다.

2강에서는 Matlab에서 사용하는 행렬에 대한 기본적인 사항을 다룹니다.

Matlab에 행렬을 입력하는 방법은 간단합니다. [] 괄호를 이용하면 행렬을 표시한다는 뜻이고, 콤마(,)는 같은 행의 원소를 나열할 때, 세미콜론(;)은 다음 행으로 넘어갈 때 사용합니다.

>> A=[1, 2, 3, 4; 5, 6, 7, 8]
A =
  1   2   3   4
  5   6   7   8
>> B=[9; 10; 11; 12]
B =
   9
  10
  11
  12

행렬 안에 꼭 숫자만 들어갈 필요는 없습니다. 변수나 함수가 들어가도 됩니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =

1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416

원소 자동 입력[편집]

[a:gap:b] 형태[편집]

첫번째 원소와 간격, 마지막 원소를 입력해서 행렬을 생성할 수도 있습니다.

>> C=[0:2:10]
C =
   0    2    4    6    8   10

가운데 입력하는 간격을 생략하고 쓴다면 간격은 자동으로 1로 설정됩니다.

>> C1=[0:10]
C1 =
   0    1    2    3    4    5    6    7    8    9   10

linspace 이용하기[편집]

linspace(xi,xj,n)을 이용해 xi부터 xj까지의 수를 n개로 자동으로 나누어 표시할 수도 있습니다.

>> linspace(0,10,5)
ans =
   0.00000    2.50000    5.00000    7.50000   10.00000

linespace(xi, xj)만 입력하면, 즉 원소 개수를 생략하면 xi부터 xj까지의 수를 100개로 자동으로 나누어 표시해 줍니다.

>> linspace(1,10)
ans =
Columns 1 through 12:
   1.0000    1.0909    1.1818    1.2727    1.3636    1.4545    1.5455    1.6364    1.7273    1.8182    1.9091    2.0000
Columns 13 through 24:
   2.0909    2.1818    2.2727    2.3636    2.4545    2.5455    2.6364    2.7273    2.8182    2.9091    3.0000    3.0909
Columns 25 through 36:
   3.1818    3.2727    3.3636    3.4545    3.5455    3.6364    3.7273    3.8182    3.9091    4.0000    4.0909    4.1818
Columns 37 through 48:
   4.2727    4.3636    4.4545    4.5455    4.6364    4.7273    4.8182    4.9091    5.0000    5.0909    5.1818    5.2727
Columns 49 through 60:
   5.3636    5.4545    5.5455    5.6364    5.7273    5.8182    5.9091    6.0000    6.0909    6.1818    6.2727    6.3636
Columns 61 through 72:
   6.4545    6.5455    6.6364    6.7273    6.8182    6.9091    7.0000    7.0909    7.1818    7.2727    7.3636    7.4545
Columns 73 through 84:
   7.5455    7.6364    7.7273    7.8182    7.9091    8.0000    8.0909    8.1818    8.2727    8.3636    8.4545    8.5455
Columns 85 through 96:
   8.6364    8.7273    8.8182    8.9091    9.0000    9.0909    9.1818    9.2727    9.3636    9.4545    9.5455    9.6364
Columns 97 through 100:
   9.7273    9.8182    9.9091   10.0000

영행렬, 단위행렬, 1행렬[편집]

영행렬[편집]

영행렬인 정방행렬은 zeros(x)에 변수를 한 개만 입력하면 됩니다.

>> zeros(3)
ans =

   0   0   0
   0   0   0
   0   0   0

i행, j열의 영행렬은 zeros(i, j)를 이용해 생성합니다.

>> zeros(3,4)
ans =

0 0 0 0 0 0 0 0 0 0 0 0

단위 행렬[편집]

n행, n열의 단위 행렬은 eye(n)을 이용해 생성합니다.

>> eye(5)
ans =

Diagonal Matrix
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

eye(i, j)로, 변수를 두 개 주면 다음과 같은 대각 성분이 1이고, 정방행렬이 아닌 부분 원소는 모두 0인 행렬이 만들어집니다.

>> eye(3,4)
ans =

Diagonal Matrix

   1   0   0   0
   0   1   0   0
   0   0   1   0

1행렬[편집]

1로만 이루어진 정방행렬은 ones(x)로 생성합니다.

>> ones(3)
ans =

   1   1   1
   1   1   1
   1   1   1

1로만 이루어진 i행, j열의 행렬은 ones(i, j)로 생성합니다.

>> ones(3,4)
ans =

1 1 1 1 1 1 1 1 1 1 1 1

전치[편집]

전치(transpose)를 사용하면 i행 j열의 행렬을 j행 i열의 행렬로 뒤집을 수 있습니다. 전치하고자 하는 행렬에 작은 따옴표(')를 붙여주면 됩니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]
D =

1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416 >> D' ans =
1.0000 2.0000 5.0000 2.7183 2.0000 4.0000 6.0000 3.1416 3.0000 5.0000 7.0000 3.1416

linspace를 이용한 행렬도 간단히 전치할 수 있습니다.

>> linspace(1,3,3)'
ans =

1 2 3

행렬의 주소[편집]

위에서 정의한 D행렬의 i행 j열 원소는 D(i,j)로 불러낼 수 있습니다.

>> D(4,1)
ans =  2.7183

또한 해당 원소의 자리에 새 값을 덮어쓰기할 수도 있습니다.

>> D(4,1)=999;
>> D
D =

1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 999.0000 3.1416 3.1416

linspace로 만든 행렬에 바로 적용할 수도 있습니다. 이때 행 벡터나 열 벡터의 원소를 출력할 때, 괄호 안의 숫자는 한개만 넣습니다.

>> linspace(1,3,3)'(2)
ans =  2
>> linspace(1,3,3)'(3)
ans =  3

앞서 정의한 C 행렬의 네번째 원소를 불러와 봅니다.

>> C(4)
ans =  6

콜론(:)의 사용[편집]

콜론(:)을 이용해 특정한 열이나 행 전체를 선택할 수도 있습니다.

>> D(:,3)    %행 자리에 콜론(:)이 들어갔으므로 모든 행을 선택하는데, 열 자리에는 3열을 선택하였으므로, 3열에 해당하는 모든 행을 출력합니다.
ans =

3.0000 5.0000 7.0000 3.1416
>> D(2,:) %열 자리에 콜론(:)이 들어갔으므로 모든 열을 선택하는데, 행 자리에는 2행을 선택하였으므로, 2행에 해당하는 모든 열을 출력합니다. ans =
2 4 5

행 벡터나 열 벡터의 경우 m번째에서 n번째 원소를 선택할 수도 있습니다. 앞서 정의한 B에서 두번째부터 네번째까지의 원소로 행렬을 만들면,

>> B
B =

9 10 11 12
>> B(2:4) ans =
10 11 12

eye(5) 행렬의 2행부터 4열, 1열부터 4열까지의 원소로 행렬을 만들어 봅니다.

>> eye(5)
ans =

Diagonal Matrix
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
>> ans(2:4, 1:4) ans =
0 1 0 0 0 0 1 0 0 0 0 1

불연속적인 행과 열 선택[편집]

연속되지 않은 행과 열을 선택할 수도 있습니다. 이때는 행과 열을 선택할 때 [] 괄호를 사용해주어야 합니다.

>> V=4:3:34
V =

    4    7   10   13   16   19   22   25   28   31   34

>> u=V([3,5, 8:10])    % 3번째, 5번째, 8~10번째 원소로 새 행렬 u를 생성
u =

   10   16   25   28   31
>> A=[1,2,3,9; 2,4,5,10; 5,6,7,11; 999, pi, pi, 12; 1,2,3,9; 2,4,5,10; 5,6,7,11; 999, pi, pi, 12]
A =

     1.0000     2.0000     3.0000     9.0000
     2.0000     4.0000     5.0000    10.0000
     5.0000     6.0000     7.0000    11.0000
   999.0000     3.1416     3.1416    12.0000
     1.0000     2.0000     3.0000     9.0000
     2.0000     4.0000     5.0000    10.0000
     5.0000     6.0000     7.0000    11.0000
   999.0000     3.1416     3.1416    12.0000

>> A([4,7], [1,3:4])         % A행렬에서 4행, 7행을 선택하고, 그 중 1열, 3~4열에 해당하는 원소로 행렬을 생성
ans =

   999.0000     3.1416    12.0000
     5.0000     7.0000    11.0000

기존 행렬에 원소 추가하기[편집]

벡터에 원소 추가하기[편집]

행벡터 혹은 열벡터의 경우 원소를 추가해 보겠습니다.

>> A=1:5
A =

   1   2   3   4   5

>> A(6:10)=linspace(0,10,5)         % A행렬의 6번째부터 10번째 원소를, 0부터 10까지의 수에서 같은 간격 다섯 개 수로 지정
A =

 Columns 1 through 6:

    1.00000    2.00000    3.00000    4.00000    5.00000    0.00000

 Columns 7 through 10:

    2.50000    5.00000    7.50000   10.00000
>> A(15)=999      % 10번째 원소까지만 있는 행렬에, 15번째 원소만 추가한다면, 11번째 원소부터 14번째 원소는 자동으로 0으로 채워집니다.
A =

 Columns 1 through 6:

     1.00000     2.00000     3.00000     4.00000     5.00000     0.00000

 Columns 7 through 12:

     2.50000     5.00000     7.50000    10.00000     0.00000     0.00000

 Columns 13 through 15:

     0.00000     0.00000   999.00000
>> NEW(7)=777    % 아직 존재하지 않는 행렬의 임의 주소에 원소를 할당해 주면, 나머지 주소에는 자동으로 0이 채워집니다.
NEW =

     0     0     0     0     0     0   777

행렬에 원소 추가하기[편집]

>> A=ones(5)
A =

   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1

>> A(3, 8)=999    % 3행 8열에 새 원소 999를 추가하고 나머지 빈 주소에는 0으로 채우기
A =

     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0   999
     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0

>> B=A(:,1:5)     % A행렬에서 모든 행에 해당하며, 1에서 5열까지의 원소로 새 행렬 B를 만듦
B =

   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1

>> B(8,8)=888    % B 행렬에서 8행 8열에 새 원소 888을 추가하고 나머지 빈 주소에는 0을 입력
B =

     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0
     1     1     1     1     1     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0   888

이미 원소가 있는 주소에 다른 수를 지정하면, 원소가 교체됩니다.

>> B1=ones(5)
B1 =

   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1

>> B1(3,4)=999        % B1행렬의 3행 4열에 999로 교체
B1 =

     1     1     1     1     1
     1     1     1     1     1
     1     1     1   999     1
     1     1     1     1     1
     1     1     1     1     1

이어붙이기[편집]

벡터끼리 이어붙이기[편집]

벡터끼리도 이어붙일 수 있습니다.

>> v1=[3:8]
v1 =

   3   4   5   6   7   8

>> v2=[11:17]
v2 =

   11   12   13   14   15   16   17

>> v3=[v1 v2]
v3 =

    3    4    5    6    7    8   11   12   13   14   15   16   17

2차원 행렬 이어붙이기[편집]

2차원 행렬에도 원소 추가를 할 수 있습니다. 이미 있는 행렬에 이미 있는 행렬을 붙여서 새로운 행렬을 만드는 것도 가능합니다.

 >> D1=[D, B]      % 앞서 만든 D, B행렬을 이어붙여 D1행렬을 만들어 줍니다.
 D1 =
 
     1.0000     2.0000     3.0000     9.0000
     2.0000     4.0000     5.0000    10.0000
     5.0000     6.0000     7.0000    11.0000
   999.0000     3.1416     3.1416    12.0000
 
 >> D2=[D1; D1]          % D1행렬을 세로로 이어붙여 D2행렬을 만듭니다. 가로로 이어붙인다면 세미콜론(;) 대신 쉼표(,)나 띄어쓰기를 넣어주면 됩니다.
 D2 =
 
     1.0000     2.0000     3.0000     9.0000
     2.0000     4.0000     5.0000    10.0000
     5.0000     6.0000     7.0000    11.0000
   999.0000     3.1416     3.1416    12.0000
     1.0000     2.0000     3.0000     9.0000
     2.0000     4.0000     5.0000    10.0000
     5.0000     6.0000     7.0000    11.0000
   999.0000     3.1416     3.1416    12.0000

예제 1) ones, zeros를 이용해 첫 두 행은 0, 다음 두 행은 1인 4X4 행렬을 만들어보자.

>> A=ones(2), B=zeros(2)
A =

   1   1
   1   1

B =

   0   0
   0   0

>> C=[B B; A A]
C =

   0   0   0   0
   0   0   0   0
   1   1   1   1
   1   1   1   1

예제 2) 모두 0으로 채워진 6X6 행렬에서, 3, 4열 그리고 3, 4행에 1을 추가해서 중앙에 십자 표시를 만들어보자.

>> A=ones(2), B=zeros(2)
A =

   1   1
   1   1

B =

   0   0
   0   0

>> C=[B A B; A A A; B A B]
C =

   0   0   1   1   0   0
   0   0   1   1   0   0
   1   1   1   1   1   1
   1   1   1   1   1   1
   0   0   1   1   0   0
   0   0   1   1   0   0

예제 3) 예제 2에서 만든 C 행렬의 1행, 2행 그리고 3 ~ 6열에 해당하는 부분에, 행렬의 2, 3행 그리고 3 ~ 6열에 해당하는 원소를 대입해보자.

>> D=[5:5:30; 20:5:45; 0:5:25]
D =

    5   10   15   20   25   30
   20   25   30   35   40   45
    0    5   10   15   20   25

>> C([1,2], [3:6])=D([2,3], [3:6])
C =

    0    0   30   35   40   45
    0    0   10   15   20   25
    1    1    1    1    1    1
    1    1    1    1    1    1
    0    0    1    1    0    0
    0    0    1    1    0    0

원소 제거하기[편집]

제거할 원소를 지정하고 [] 괄호로 덮어쓰기 해주면 원소를 제거할 수 있습니다. 0으로 치환하는 것이 아니라 해당 부분을 제거하고 나머지 부분을 이어붙여서 더 작은 행렬을 만들어줍니다.

>> A=[1:10]
A =

    1    2    3    4    5    6    7    8    9   10

>> A(3:6)=[]
A =

    1    2    7    8    9   10
>> B=[1:10; 11:20; 21:30]
B =

    1    2    3    4    5    6    7    8    9   10
   11   12   13   14   15   16   17   18   19   20
   21   22   23   24   25   26   27   28   29   30

>> B([1,2],[3,4])=[]
error: a null assignment can only have one non-colon index    % 가운데만 뻥 뚫린 행렬을 만드는 것은 불가능합니다.
>> B(:,[3,4])=[]    % B행렬의 3, 4열을 제거하고 나머지 부분을 이어붙입니다.

B =

    1    2    5    6    7    8    9   10
   11   12   15   16   17   18   19   20
   21   22   25   26   27   28   29   30

행렬의 조작을 위한 함수[편집]

함수 설명 예시
length(A) 원소 개수를 알려준다. 스크립트 작성 시, 특히 반복문을 만들 때, length함수를 쓰면 임의 길이의 벡터나 행렬에 대해 반복문을 쉽게 작동시킬 수 있다.
 >> A=linspace(99,105,6)
A =

    99.000   100.200   101.400   102.600   103.800   105.000

>> length(A)
ans =  6
>> B=[1 2 3 4; 5 6 7 8]   % 2차원 행렬일 때는 행과 열 길이 중 큰 것의 개수를 알려준다.
B =

   1   2   3   4
   5   6   7   8

>> length(B)
ans =  4    % 행보다 열의 수가 더 크므로 4 출력
>> B'
ans =

   1   5
   2   6
   3   7
   4   8

>> length(ans)
ans =  4    % 열보다 행의 수가 더 크므로 4 출력
size(A) 해당 행렬의 행과 열 수를 알려준다
>> B'
ans =

   1   5
   2   6
   3   7
   4   8
>> size(B')
ans =

   4   2

>> B
B =

   1   2   3   4
   5   6   7   8

>> size(B)
ans =

   2   4
reshape(A, m, n) 크기가 iXj인 행렬을 mXn 행렬로 만들어준다
이때 ij=mn이어야 한다
생성되는 행렬은 1열의 위에서부터 아래로, 2열의 위에서부터 아래로 (...) 순서로 원소가 입력된다
 >> B
B =

   1   2   3   4
   5   6   7   8

>> reshape(B,4,2)
ans =

   1   3
   5   7
   2   4
   6   8
diag(v) v 벡터의 원소를 대각 성분으로 갖는 대각행렬을 만든다
>> v=[9 8 7 6];
>> diag(v)
ans =

Diagonal Matrix

   9   0   0   0
   0   8   0   0
   0   0   7   0
   0   0   0   6
diag([넣을 원소들], 중심으로부터의 변위)를 사용하면 오른쪽과 같이 중심에서 떨어진 곳에 대각 성분을 넣은 행렬을 만들 수 있다.
>> v=[9 8 7];
>> diag(v, 1)
ans =

Diagonal Matrix

   0   9   0   0
   0   0   8   0
   0   0   0   7
   0   0   0   0
diag(A) A행렬의 대각 성분을 추출하여 열 벡터를 만든다
위의 명령어와 동일하지만 입력값에 행렬이 입력되는 것이 차이점이다
>> A=[3 6 9; 7 8 9 ; 1 2 3]
A =

   3   6   9
   7   8   9
   1   2   3

>> diag(A)
ans =

   3
   8
   3

문자열[편집]

문자열은 작은 따옴표(' ') 안에 입력합니다. 문자열도 각각의 문자가 행렬처럼 저장됩니다. 특수문자, 띄어쓰기, 숫자 역시 작은 따옴표 안에 입력될 경우 문자로 취급됩니다. 문자열에도 행렬에서 사용하는 함수들을 사용할 수 있으나, 별로 활용도는 높지 않습니다. 예를 들어 어떤 행렬에 문자열을 저장했을 때, 문자열의 일부분을 수정하고 싶다면, 일일이 주소를 찾아서, 앞서 설명한 함수들을 이용해 편집해 주면 되지만, 그냥 해당 행렬에 통째로 새 문자열을 입력하는 방법이 더 쉽기 때문에 자주 쓰이는 방법은 아닙니다.

>> text='Hello World!'   % 문자열 입력
text = Hello World!
>> text(1)='C'   % 해당 문자열의 첫번째 주소 값을 다른 문자인 C로 변경
text = Cello World!

>> text='Hello World!'
text = Hello World!
>> text='Cello World!'  % 그냥 통째로 새로 입력해서 수정해주는 방법이 편합니다
text = Cello World!

행렬의 연산[편집]

덧셈과 뺄셈은 특별한 거 없이 그냥 행렬의 크기가 동일하면 서로 더하고 뺄 수 있습니다. 하나의 행렬에서 스칼라 양을 빼면 행렬의 모든 원소에서 연산이 실행됩니다.

>> A=[1:3;3:5;6:8]
A =

   1   2   3
   3   4   5
   6   7   8

>> A-8
ans =

  -7  -6  -5
  -5  -4  -3
  -2  -1   0

행렬의 곱셈은 수학에서의 행렬의 곱셈과 동일합니다. aXb 행렬과 cXd 행렬을 서로 곱해주기 위해서는 b=c이어야 하며, 결과값은 aXd행렬이 됩니다.

>> B=ans    % B는 3*3행렬
B =

  -7  -6  -5
  -5  -4  -3
  -2  -1   0

>> C=[1 2 3 4; 3 4 5 6; 7 8 9 10]   % C는 3*4 행렬
C =

    1    2    3    4
    3    4    5    6
    7    8    9   10

>> B*C     % 3*3행렬에 3*4 행렬을 곱하는 것은 가능하고, 결과는 3*4 행렬입니다.
ans =

   -60   -78   -96  -114
   -38   -50   -62   -74
    -5    -8   -11   -14

>> C*B     % 3*4행렬에 3*3 행렬을 곱하는 것은 불가능하고, 에러가 나옵니다.
error: operator *: nonconformant arguments (op1 is 3x4, op2 is 3x3)

덧셈, 뺄셈과 마찬가지로 하나의 행렬에 스칼라 양을 곱해주면 해당 형렬의 모든 원소에 곱셈이 실행됩니다.

octave:1> A=[1 2 ; 3 4]
A =

   1   2
   3   4

octave:2> 3*A
ans =

    3    6
    9   12

행렬을 이용한 연립방정식의 풀이[편집]

행렬을 이용해 연립 방정식을 풀기 위해선 우선 연립 방정식을 행렬의 곱으로 바꾼 다음, 왼쪽 나눗셈(\)을 이용하거나 역행렬을 구하는 명령(inv(A)), 행렬의 형태를 바꾸어 구하는 방법을 이용하면 됩니다.

왼쪽 나눗셈을 이용한 풀이를 보겠습니다. 2x-y+3z=4, x+4y+z=2, 6x+10y+3z=0의 해를 구한다고 한다면,

octave:3> A=[2 -1 3; 1 4 1; 6 10 3]
A =

    2   -1    3
    1    4    1
    6   10    3

octave:4> b=[4;2;0]
b =

   4
   2
   0

octave:5> x=A\b
x =

  -1.80488
   0.29268
   2.63415

같은 연립방정식을 역행렬 명령어를 이용해 풀어봅시다. A*x1=b에서 양변에 A의 역행렬(inv(A))를 곱해준다고 할 때, x1=inv(A)*b가 되므로,

octave:6> x1=inv(A)*b
x1 =

  -1.80488
   0.29268
   2.63415

위의 예시와 동일한 결과가 나옴을 알 수 있습니다.

참고) inv(A)와 A\eye(3)은 동일한 값입니다.

octave:26> inv(A)-A\eye(3)
ans =

  1.3878e-017  1.1102e-016  5.5511e-017
  -1.3878e-017  0.0000e+000  -1.3878e-017
  0.0000e+000  0.0000e+000  -2.7756e-017

다음으로 행렬의 형태를 바꾸어주어 풀 수도 있습니다. 이때는 에서 를 구해주면 됩니다.

이 식은 원래 구하고자 하는 연립방정식의 행렬식 형태인 에서 좌변의 곱하는 순서를 바꾸고 모든 행렬을 전치해준 것과 같습니다.

octave:11> A'
ans =

    2    1    6
   -1    4   10
    3    1    3

octave:12> b'
ans =

   4   2   0

octave:13> x2=b'*inv(A')
x2 =

  -1.80488   0.29268   2.63415

원소별 연산[편집]

같은 크기의 행렬끼리 연산할 때, 수학에서의 행렬의 곱셈을 이용하지 않고 원소끼리만 연산하고 싶다면 연산 기호 앞에 마침표(.)를 찍어주면 됩니다.

octave:14> A=[2 3; 5 6]
A =

   2   3
   5   6

octave:15> B=[5 5; 6 2]
B =

   5   5
   6   2

octave:16> A.*B   % 원소끼리 단순 곱셈
ans =

   10   15
   30   12

octave:17> A*B   % 행렬의 곱셈을 이용한 결과. 원소끼리 단순히 곱한 것과 다릅니다.
ans =

   28   16
   61   37

원소별 곱셈(.*) 이외에도 나눗셈(./), 거듭제곱(.^), 왼쪽 나눗셈(.\)이 있습니다.


예제) 인 정수에 대하여, 값을 나열하여라.

octave:18> x=[-5:5], y=x.^2-4*x
x =

  -5  -4  -3  -2  -1   0   1   2   3   4   5

y =

   45   32   21   12    5    0   -3   -4   -3    0    5

행렬에 관한 기타 함수[편집]

  • mean(A) : A가 행렬일 때, 원소들의 산술 평균값을 알려줍니다.
  • max(A) : A행렬에서 가장 큰 값을 알려줍니다.
  • [m, n]=max(A) : A행렬에서 가장 큰수 m과, 그 수의 위치 n을 알려줍니다. 꼭 m과 n으로 문자를 정할 필요 없이 아무 문자나 해도 됩니다.
octave:19> [m, n]=max(y)   % 위 예제에서 사용한 y 행렬에서 가장 큰 값은 m에, 위치는 n에 지정합니다.
m =  45
n =  1
이차원 이상의 행렬에서는 m에 가장 큰 값을, n에 그 값의 행번호를 알려줍니다.
octave:21> Y=[y; y-1; linspace(30,55,11)]
Y =

 Columns 1 through 8:

   45.00000   32.00000   21.00000   12.00000    5.00000    0.00000   -3.00000   -4.00000
   44.00000   31.00000   20.00000   11.00000    4.00000   -1.00000   -4.00000   -5.00000
   30.00000   32.50000   35.00000   37.50000   40.00000   42.50000   45.00000   47.50000

 Columns 9 through 11:

   -3.00000    0.00000    5.00000
   -4.00000   -1.00000    4.00000
   50.00000   52.50000   55.00000

octave:22> [m, n]=max(Y)
m =

 Columns 1 through 10:

   45.000   32.500   35.000   37.500   40.000   42.500   45.000   47.500   50.000   52.500

 Column 11:

   55.000

n =

   1   3   3   3   3   3   3   3   3   3   3
  • min(A) : max(A)와 동일하나, 최솟값을 찾아줍니다.
  • [m, n]=min(A) : [m, n]=max(A)와 동일하나, 최솟값과 위치를 찾아줍니다.
  • sum(A) : 원소들의 합을 알려줍니다. 벡터가 아닌 행렬에 대해서는 각 열의 합을 벡터로 나타내 줍니다.
>> A=[1 2; 3 4]; sum(A)
ans =

   4   6
  • sort(A) : 원소들을 오름차순으로 정렬해줍니다. 만약 이차원 이상의 행렬이라면 각각의 열에 대해서 오름차순으로 정리해 줍니다.
octave:27> A
A =

    2   -1    3
    1    4    1
    6   10    3

octave:28> sort(A)
ans =

    1   -1    1
    2    4    3
    6   10    3
octave:30> B=[5 9 2 4]; median(B)
ans =  4.5000
이차 이상의 행렬에 대해서는 각 열의 중앙값을 알려줍니다.
octave:27> A
A =

    2   -1    3
    1    4    1
    6   10    3

octave:29> median(A)
ans =

   2   4   3
  • std(A) : 표준편차를 알려줍니다.
  • det(A) : 행렬식을 알려줍니다.
octave:32> B=[5 9 ; 2 4], det(B)
B =

   5   9
   2   4

ans =  2.0000
  • dot(a,b) : 두 벡터의 내적을 구해줍니다.
octave:33> a=[1 2 3], b=[4 5 6]
a =

   1   2   3

b =

   4   5   6

octave:34> dot(a,b)
ans =  32
  • cross(a,b) : 두 벡터의 외적을 구해줍니다.
octave:35> cross(a,b)
ans =

  -3   6  -3

응용 예제[편집]

힘의 합력 구하기.jpg

세 힘의 합력 크기를 Matlab을 이용해 구하고, 합력의 작용 방향도 구하시오.

octave:36> F1=400*[cosd(-20), sind(-20)], F2=500*[cosd(30), sind(30)], F3=700*[cosd(143), sind(143)]
F1 =

   375.88  -136.81

F2 =

   433.01   250.00

F3 =

  -559.04   421.27

octave:37> F=F1+F2+F3
F =

   249.84   534.46

octave:38> F_total=sqrt(sum(F.^2))
F_total =  589.98
octave:39> d=atand(F(2)/F(1))
d =  64.945

더 보기[편집]

참고한 글, 강의[편집]