Main Content

기본 행렬 연산

이 예제에서는 MATLAB® 언어에서 행렬을 다루는 데 필요한 기본적인 기법과 함수를 보여줍니다.

먼저 9개의 요소를 사용하여 a라는 간단한 벡터를 만들어 보겠습니다.

a = [1 2 3 4 6 4 3 4 5]
a = 1×9

     1     2     3     4     6     4     3     4     5

이제 벡터 a의 각 요소에 2를 더한 다음 결과를 새 벡터로 저장하겠습니다.

아래와 같이 MATLAB에서는 벡터와 행렬을 특별한 방식으로 계산할 필요가 없습니다.

b = a + 2
b = 1×9

     3     4     5     6     8     6     5     6     7

MATLAB에서는 명령 하나로 간단히 그래프를 만들 수 있습니다. 위에서 벡터의 각 요소에 2를 더한 결과를 플로팅해 보겠습니다. 그리드 선도 설정합니다.

plot(b)
grid on

Figure contains an axes object. The axes object contains an object of type line.

MATLAB에서는 축 레이블이 추가된 그래프 유형으로도 만들 수 있습니다.

bar(b)
xlabel('Sample #')
ylabel('Pounds')

Figure contains an axes object. The axes object with xlabel Sample #, ylabel Pounds contains an object of type bar.

MATLAB에서는 플롯에 기호도 사용할 수 있습니다. 아래의 예시에서는 별표를 사용하여 점을 표시합니다. MATLAB에서는 이 외에도 다양한 종류의 기호와 선을 사용할 수 있습니다.

plot(b,'*')
axis([0 10 0 10])

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

MATLAB의 강점 중 하나는 행렬 계산입니다.

행렬은 벡터를 만드는 것처럼 간단히 만들 수 있으며, 행렬의 행은 세미콜론(;)을 사용하여 구분합니다.

A = [1 2 0; 2 5 -1; 4 10 -1]
A = 3×3

     1     2     0
     2     5    -1
     4    10    -1

행렬 A의 전치도 쉽게 구할 수 있습니다.

B = A'
B = 3×3

     1     2     4
     2     5    10
     0    -1    -1

이제 이 두 행렬을 곱해 보겠습니다.

앞에서 이미 언급했듯이, MATLAB에서는 행렬을 숫자의 모음으로 처리할 필요가 없습니다. 사용자가 행렬을 다루면 MATLAB에서는 그 방식을 인식하고 그에 맞추어 계산 방식을 조정합니다.

C = A * B
C = 3×3

     5    12    24
    12    30    59
    24    59   117

행렬을 곱셈하는 방식 대신 두 행렬 또는 벡터의 대응하는 요소끼리 곱하려면 .* 연산자를 사용합니다.

C = A .* B
C = 3×3

     1     4     0
     4    25   -10
     0   -10     1

방정식 A*x = b를 푸는 데 행렬 A를 사용해 보겠습니다. 즉, \(백슬래시) 연산자를 사용해 풀 수 있습니다.

b = [1;3;5]
b = 3×1

     1
     3
     5

x = A\b
x = 3×1

     1
     0
    -1

이제 A*x가 b와 같음을 검증해 볼 수 있습니다.

r = A*x - b
r = 3×1

     0
     0
     0

MATLAB에는 일반 행렬 계산에 사용할 수 있는 거의 모든 유형의 함수가 제공됩니다.

다음과 같이 고유값을 구할 수 있는 함수뿐 아니라

eig(A)
ans = 3×1

    3.7321
    0.2679
    1.0000

... 특이값을 구할 수 있는 함수도 있습니다.

svd(A)
ans = 3×1

   12.3171
    0.5149
    0.1577

"poly" 함수는 특성 다항식의 계수가 포함된 벡터를 생성합니다.

행렬 A의 특성 다항식은 다음과 같습니다.

det(λI-A)

p = round(poly(A))
p = 1×4

     1    -5     5    -1

roots 함수를 사용하면 다항식의 근을 쉽게 구할 수 있습니다.

이 값들은 원본 행렬의 고유값에 해당합니다.

roots(p)
ans = 3×1

    3.7321
    1.0000
    0.2679

MATLAB은 행렬 계산 외에도 여러 용도로 사용할 수 있습니다.

다음과 같이 두 벡터의 컨벌루션을 수행하거나,

q = conv(p,p)
q = 1×7

     1   -10    35   -52    35   -10     1

... 컨벌루션을 수행하고 결과를 플로팅하는 데 사용할 수도 있습니다.

r = conv(p,q)
r = 1×10

     1   -15    90  -278   480  -480   278   -90    15    -1

plot(r);

Figure contains an axes object. The axes object contains an object of type line.

언제든지 who 명령이나 whos 명령을 사용하여, 메모리에 저장된 변수 목록을 가져올 수 있습니다.

whos
  Name      Size            Bytes  Class     Attributes

  A         3x3                72  double              
  B         3x3                72  double              
  C         3x3                72  double              
  a         1x9                72  double              
  ans       3x1                24  double              
  b         3x1                24  double              
  p         1x4                32  double              
  q         1x7                56  double              
  r         1x10               80  double              
  x         3x1                24  double              

변수 이름을 입력하여 특정 변수 값을 가져올 수 있습니다.

A
A = 3×3

     1     2     0
     2     5    -1
     4    10    -1

쉼표나 세미콜론으로 각 명령문을 구분하여 한 라인에 여러 명령문을 입력할 수도 있습니다.

연산 결과를 저장하기 위해 변수를 할당하지 않는 경우 결과는 ans라는 임시 변수에 저장됩니다.

sqrt(-1)
ans = 0.0000 + 1.0000i

이와 같이 MATLAB으로 계산하면 복소수도 쉽게 다룰 수 있습니다.

관련 항목