2011년 6월 11일 토요일

행렬(行列, matrix)

[경고] 아래 글을 읽지 않고 "행렬"을 보면 바보로 느껴질 수 있습니다.
1. 좌표계 기반 벡터


[그림 1] $M\times N$ 행렬의 정의(출처: wikipedia.org)

[그림 1]과 같이 숫자를 사각형으로 배치하고 꺽쇠로 닫은 것을 행렬(行列, matrix)이라 한다. "에이, 이게 뭐야! 나도 할 수 있겠네!"라고 생각할 수 있겠지만 우리가 보는 [그림 1]의 행렬은 현대수학 중에서 가장 중요한 부분이다. 그래서, 행렬의 어원도 '어머니(mother)', '자궁(womb)'을 뜻하는 라틴어(Latin) 'matrix'이다. 다양한 수학이론의 자궁(matrix) 역할을 하는 것이 행렬(matrix)이라 생각할 수 있다.
미분적분학(微分積分學, calculus)이 중요하다는 사람도 있지만 컴퓨터(computer)를 고려하면 단연 중요한 것은 행렬이론이다. 미분적분학은 연속함수(連續函數, continuous function)를 다루기 때문에 컴퓨터로 처리하려면 반드시 이산화(離散化, discretization)를 해야 한다. 그러면 그다음의 처리과정은 대부분 행렬기반으로 처리된다. 문제를 풀기 위해 반복기법을 이용할 수도 있지만 해답의 정확도와 속도면에서는 행렬이 월등하다. 반복이 필요한 현대 암호학에서도 행렬은 빼놓을 수 없는 부분이다. 단, 행렬의 계산속도가 빨라야 한다. 보통 초보자가 설계한 걸로는 부족하다. 많이 부족하다. 그래서, 컴퓨터를 고려한 현대수학에서는 행렬이 대세이다. 빠른 행렬 코드를 가지고 있어야 수학분야 선진국이라고 불릴 수 있다. 애석하게도 대한민국은 행렬을 많이 사용하지만 새로운 행렬 코드 개발에는 매우 인색해서 Made in Korea는 아직 없다. 현재 많이 사용하는 공개된 행렬 코드는 Made in USA인 LAPack(Linear Algebra Package)이다.

[그림 2] 에셜론에서 운영하는 하드웨어 시스템으로 믿고 있는 장치(출처: wikipedia.org)

하지만, LAPack이 현재의 행렬 코드 정수를 보여준다고 볼 수 없다. 공개되지 않는 빠른 코드들은 반드시 존재한다. 대표적인 예가 미국이 운영하고 있다고 믿고 있는 에셜론(Echelon)이다. 에셜론이라는 말은 '계층' 혹은 '사다리꼴 형태'로 번역할 수 있는 말이다. 이 말이 수학에서 쓰인다면 연립방정식(聯立方程式, simultaneous equations)을 쉽게 풀 수 있도록 '사다리꼴 형태'로 바꾼 모양을 의미한다. 이를 이해하기 위해 다음을 살펴보자. 어떤 시스템 특성을 아래 연립방정식으로 근사화할 수 있다고 가정하자.

                          (1)

[그림 1]과 같은 행렬 정의에 의해 식 (1)은 다음 행렬들로 동일하게 표현할 수 있다.

                          (2)

식 (1)보다는 식 (2)가 대수(代數, algebra)적으로 잘 정리된 느낌이 든다. 식 (2)는 다음과 같은 붙임행렬(augmented matrix)로 표현할 수도 있다.

                          (3)

식 (3)의 붙임행렬을 잘 조작하면 동등한 특성을 가진 다음 붙임행렬을 생성할 수 있다.

                          (4)

식 (4)의 붙임행렬을 식 (3)의 에셜론 형태(echelon form)라고 부른다. 즉, 생긴 모양이 [그림 3]과 같은 사다리꼴(trapezoid)이 된다.

[그림 3] 사다리꼴의 모양(출처: wikipedia.org)

식 (2)의 미지수 갯수가 몇개 안된다면 어떤 알고리즘을 쓰든지 계산속도는 큰 차이는 없다. 하지만, 미지수가 수 천개 아니면 수 십만개가 된다면 문제는 달라진다. 식 (3)의 왼쪽행렬(A)의 특성을 파악해서 식 (4)의 에셜론 형태를 만들 수 있는 특별한 알고리즘(algorithm)을 찾아야 한다. 이와 같이 에셜론 형태 찾는 알고리즘이 행렬이론 적용의 핵심이 된다. 이런 측면에서 [그림 2]의 에셜론 시스템 명칭의 의미를 파악할 수 있다.
에셜론 형태가 찾아지면 식 (4)의 답은 아래와 같이 손쉽게 계산할 수 있다.

                       (5)

이런 정도 이해를 바탕으로 행렬 연산을 하나하나 정의해 보자. 이를 위해 하나만 주의하면 된다. [그림 1]과 같은 행렬은 식 (1)과 같은 연립방정식을 우아하게 표현하기 위해 1850년에 실베스터(James Joseph Sylvester)가 도입한 것이다. 즉, 행렬 ≡ 연립방정식이라는 것을 꼭 기억해야 한다.
아래 행렬에 대한 사칙연산을 정의한다.

1. 곱셈
[그림 4] 행렬의 곱셈 정의(출처: wikipedia.org)

행렬은 식 (1)과 같은 연립방정식을 멋드러지게 풀기 위해 도입한 개념이므로 연산정의는 식 (2)와 같이 곱셈부터 시작한다. 행렬 곱셈인 [그림 4]의 과정을 수식으로 쓰면 아래와 같다.

                       (6)

여기서 $a_{ik}, b_{kj}, c_{ij}$는 행렬 ${\bf A}, {\bf B}, {\bf C}$의 원소이다. 예를 들어 $a_{ik}$는 행렬 $\bf A$의 $i$번째 행, $k$번째 열의 원소이다.
______________________________

2. 덧셈과 뺄셈

행렬의 덧셈과 뺄셈은 식 (1)과 같은 연립방정식들을 서로 더하거나 빼는 과정을 의미한다. 그래서, 다음과 같이 덧셈과 뺄셈을 정의한다.

                       (7)
______________________________

3. 상수배

행렬의 상수배는 식 (1)과 같은 연립방정식을 상수로 곱하는 과정을 의미해서 아래로 정의한다.

                       (8)
______________________________

4. 나눗셈

지금까지 곱셈과 상수배를 정의한 것을 이용하면 나눗셈을 표현할 수 있다. 행렬의 나눗셈을 구한다는 것은 식 (1)의 연립방정식 해답을 구하는 것이다.
식 (6)과 같은 곱셈을 기반으로 나눗셈을 정의해보자.

                       (9)

식 (6)에 적당한 행렬 ${\bf A}^{-1}$을 곱해서 식 (9)와 같이 나눗셈을 정의할 수 있다. 적당한 행렬 ${\bf A}^{-1}$은 행렬 $\bf A$와 곱해져서 단위행렬(單位行列], identity matrix)을 만들 수 있어야 한다. 단위행렬은 대각선 원소가 1이고 이외는 모두 0인 정방행렬(正方行列, square matrix: 행과 열의 수가 같음)을 의미한다. 단위행렬인 경우는 아래 관계식이 성립한다.

                       (10)

식 (10)을 이용하면 단위행렬의 원소 $I_{ij}$는 크로네커 델타(Kronecker delta)를 이용해 쉽게 표현할 수 있다.

                      (11)

식 (9)의 마지막식(${\bf A}^{-1}{\bf A} = {\bf I}$)처럼 어떤 행렬 $\bf A$에 곱해져서 단위행렬을 만들 수 있는 행렬은 행렬 $\bf A$의 역행렬(逆行列, inverse matrix)이라 부른다[1]. 행렬 $\bf A$의 원소를 이용해서 역행렬을 계산해 보기로 하자. 식 (9)의 마지막식(${\bf A}^{-1}{\bf A} = {\bf I}$)을 참고하면 아래 관계가 반드시 성립해야 한다.

                       (12)

여기서 행렬 $\bf A$의 원소는 $a_{ij}$, $\bf A$의 역행렬(${\bf A}^{-1}$) 원소는 $A_{ij}$라 정의한다. 표기법상 행렬($\bf A$)은 알파벳을 굵고 진하게 쓰고 행렬의 원소($a_{ij}$)는 이런 것없이 그냥 쓴다.
그냥 봐서는 역행렬 원소 $A_{ij}$를 구할 수 없다. 정보가 좀 필요하다. 뭔가하면 행렬식(行列式, determinant)이다. 행렬식의 영어 의미는 식 (1)과 같은 연립방정식의 답을 구할 수 있는가 결정해주는 판별식이다. 이름은 행렬식이지만 행렬이 제안되기 훨씬 이전에 제안되어 충분한 연구가 수행된 개념이다. 그러므로, 행렬 증명에 행렬식을 쓰더라도 문제는 없다. 행렬식은 행(行, row)에 대한 라플라스 전개(Laplace expansion)를 이용해 다음으로 표현할 수 있다.

                       (13)

여기서 $C_{ij}$는 행렬 $\bf A$의 여인자(餘因子, cofactor), $M_{ij}$는 원소 $a_{ij}$의 소행렬식(小行列式, minor)이다. 예를 들어 소행렬식 $M_{23}$은 아래와 같이 계산할 수 있다.

                      (14)

즉, $M_{23}$은 2행과 3열 원소 전체를 식 (14)처럼 삭제한 후 계산하는 행렬식이다.
다시 식 (12)로 돌아가서 식 (12)와 (13)을 비교해 보자. 그러면 아주 놀라운 사실을 발견할 수 있다. 역행렬의 원소를 여인자가 되도록 하면 대각선에서는 값이 있고 나머지에서는 0이 되도록 할 수 있다.

                       (15)

식 (15)에서 $i \ne j$인 경우가 0이 되는 것은 당연하다. 왜냐하면, $i \ne j$인 경우 여인자 $C_{ki}$는 $j$열 원소들을 포함하고 있고 $a_{kj}$도  $j$열 원소를 가지므로 $C_{ki}$와 $a_{kj}$의 열들이 서로 중복되어 행렬식 관점에서 당연히 0이 되어야 한다. 반대로 $i = j$ 경우는 여인자 $C_{ki}$가 $i$열 원소를 배제하고 있으므로 0이 될 필요는 없다.
이렇게 쉽게 역행렬을 정의할 수 있는 이유는 행렬식이 매우 잘 정의되었기 때문이다. 따라서 역행렬은 행렬식을 이용하여 다음으로 정의할 수 있다.

                       (16)

식 (9)와는 다르게 역행렬을 반대편에도 곱해보자.

                       (17)

식 (17) 증명에는 열(列, column)에 대한 라플라스 전개도 동일하다는 행렬식의 성질을 이용해야 한다.
______________________________

행렬의 나눗셈 정의를 통해 역행렬의 다양한 성질을 아래와 같이 증명할 수 있다.

 (18)

     (19)

이상에서 역행렬은 매우 유용한 개념이지만 역행렬의 유일성(uniqueness of inverse matrix)을 증명하지는 않았다. 생각보다 유일성 증명은 쉽다. 만약 역행렬이 하나 더 존재해서 이를 행렬 $\bf B$라고 하자.

                       (20)

식 (20)에 의해 하나 더 존재하는 역행렬 $\bf B$는 ${\bf A}^{-1}$과 동일하게 된다.

행렬의 연산자적 특성을 알아보기 위해 행렬의 교환법칙과 결합법칙을 살펴보자.

                       (21)

                       (22)

행렬의 곱셈 정의인 식 (6)을 고려하면 교환법칙이 일반적으로 성립하는 것은 아니라는 것을 쉽게 증명할 수 있다. 결합법칙 증명을 위해 식 (22)의 좌변과 우변을 식 (6)으로 표현해 보자.

                       (23)

스칼라(scalar)의 배분법칙으로 인해 식 (23)의 첫째식과 둘째식은 항상 같다. 그래서, 행렬의 결합법칙이 증명된다. 식 (23)과 동일한 방법으로 식 (24)의 행렬 배분법칙도 증명가능하다.

                       (24)


다음으로 다양한 행렬들을 정의해보자. 식 (10)의 항등행렬(identity matrix) $\bf I$를 일반화하면 아래와 같이 대각행렬(diagonal matrix) $\bf D$를 정의할 수 있다.

                       (25)

대각행렬은 대각선 방향으로만 원소가 있기 때문에 행렬의 사칙연산이 매우 간단해진다.

     (26)

식 (4)와 같은 에셜론 형태의 행렬은 삼각행렬(三角行列, triangular matrix)이라 한다. 삼각행렬은 원소가 놓여있는 위치에 따라 상삼각행렬(上, upper triangular matrix) $\bf U$와 하삼각행렬(下, lower triangular matrix) $\bf L$로 구분한다.

                       (27)

                       (28)

계산이 용이한 에셜론 형태를 만든다는 것은 상삼각행렬이나 하삼각행렬을 만든다는 뜻이다.
행렬이론에서 중요한 또하나의 행렬은 대칭행렬(對稱行列, symmetric matrix)이다. 물리학에서 나타나는 행렬들은 대칭성을 가지는 경우가 대부분이다. 대칭행렬을 정의하기 위해 전치행렬(자리바꿈행렬, 轉置行列, transpose)을 생각해보자.

                       (29)

전치행렬이 가진 재미있는 성질은 행렬곱셈에서 나타난다. 식 (6)의 행렬곱셈 정의를 이용해 행렬곱의 전치행렬을 아래와 같이 계산해보자.

                       (30)

식 (30)과 (18)을 이용하면 전치행렬의 역행렬을 아래와 같이 정의할 수 있다.

                       (31)

전치행렬 개념을 이용하면 식 (16)으로 정의한 역행렬을 좀더 우아하게 표현할 수 있다.

                       (32)

여기서 ${\rm adj}({\bf A})$는 행렬 $\bf A$의 딸림행렬(adjucate or adjoint matrix)이다.
전치행렬은 식 (29)처럼 행렬의 행과 열을 서로 바꾼 것이므로 대칭행렬을 다음과 같이 정의할 수 있다.

                       (33)

[참고문헌]
[1] kipid, 선형 대수학(Linear Algebra) 간단한 정리들, kipid's blog, 2012.

[다음 읽을거리]
1. 행렬식
2. 행렬식의 기하학적 의미
3. 텐서

Enhanced by Zemanta

댓글 20개 :

  1. 잘 봤습니다 ^^.

    저도 정리를 했었는데,
    "선형 대수학(Linear Algebra) 간단한 정리들."
    http://blog.daum.net/kipid/8307157
    같이 참고해서 보세요. 저도 정리를 좀 더 잘하고 싶은데, 손이 너무 많이가서 제대로 하기가 힘드네요;;;

    답글삭제
    답글
    1. 선형 대수학 간단한 정리들 (Linear Algebra)
      http://kipid.tistory.com/entry/Linear-Algebra

      블로그를 옮기면서 링크가 바뀌었습니다.
      트랙백을 쏠려고 했는데, 안 켜 놓으신듯 하군요 -ㅇ-;;;

      삭제
    2. 정보 감사합니다, kipid님. 제쪽 링크를 변경했습니다.

      삭제
  2. 감사합니다. 저도 kipid님 블로그 방문해봐야겠네요.

    답글삭제
  3. 식 (15)에 대한 설명이 잘 이해가 가질 않습니다. 행렬식 관점에서 보면 i≠j일 때 당연히 0이라고 하는데 왜 당연히 0일까요...ㅠㅠ

    답글삭제
    답글
    1. 행렬식 관점으로 보셔야 합니다. ^^

      i가 j와 다른 경우 $C_{ki}$는 j열 정보를 가지고 있습니다. 이 상태에서 $a_{kj}$를 곱하면 j열 정보가 또 들어가기 때문에 행렬식 정의에 의해 0이 됩니다.

      삭제
  4. 와우......행렬에 대해서 답답했었는데....
    활명수같은 내용입니다...
    감사합니다.

    답글삭제
  5. 식(12)바로 아래 설명에서요.
    "여기서 행렬 A의 원소는 aij, A의 역행렬은 Aij라 정의한다."

    A의 역행렬은 Aij ==> A의 역행렬 원소는 Aij
    로 표기 하시는게 어떠실런지요?
    저같이 초자들이 처음 접할 때는 무자게 햇갈리 수 있을 거 같습니다.
    저의 경우에는 식(15) 위 설명을 보고 역행렬의 원소인지 알게 됬습니다.

    답글삭제
    답글
    1. 익명님, 지적 감사합니다. 본문을 다시 수정했습니다. ^^

      삭제
    2. 대충 아시겠지만, 재 수준이 솔직히 오타 이외에는 먼가 맞다 틀리다를 하기에는 좀 거시기 한데요. 몇일 동안 이해가 안가서 고민을 해보았는 식(15)의 첫줄
      A_ik = C_ki 는 아무래도 표현에 무리가 있지 않을까 합니다.
      과정을 설명하는 단초가 될 수는 있으나, 먼가 기호를 다르게 써야 하지 않을까 합니다.
      예를 들면, A_ik ==> C_ki 이렇게 하면 모를까.
      아니면 재가 아직 이해를 못하고 있던가요. T.T

      삭제
    3. 앗 편집하다가. 삭제를 해보렸네요.
      A_ik는 역행렬의 원소이고, C_ki는 여인자로 파악하고....

      궁금한게 있습니다.
      4x4 행렬식를 구한다면, Minor가 3x3이니 계산을 할 수 있을거 같은데요.
      5x5 행렬식를 구하면, minor가 4x4인데, 이게 다섯게가 생깁니다.
      그럼 minor 4x4를 행렬식 구하는 방힉으로 5번을 해서 행렬식을 구해야 하는건가요?

      삭제
    4. 1. 여인자도 숫자이기 때문에 식 (15)의 표현은 문제가 없습니다.

      2. 원론적으로는 소행렬식을 이용해 재귀적으로 계산하면 됩니다. 하지만 이건 이론적인 것이고 실제로는 LU 분해를 이용해 행렬식을 구합니다.

      삭제
    5. 식(16)(17)을 보면 A_ik = C_ki / |A| 이어서요.

      처음에 식(16)(17) 보지 않고, 식 12~15까지만 보고, 보고 이해가 안되서 4일동안 맨붕이었습니다. T.T
      그래서 무작정 식(16)으로 역핼렬을 구해보니 그때서야 아~
      아직 설명하신 내용을 다 이해한건 아니지만요.

      삭제
    6. LU 분해는 위에서 말씀히신 삼각행렬을 말씀하신건가요?

      삭제
    7. 예, 상하 삼각 행렬 분해법이 LU 분해입니다. LU 분해하면 행렬식이 바로 구해집니다.

      삭제
  6. 프로그래밍 하다가 막히는 부분이 많았는데 좋은 정보 감사합니다.

    답글삭제
    답글
    1. 행렬을 하려면 프로그래밍이 필수적이지요. 열심히 하세요. ^^

      삭제
  7. 전치행렬 31번 성질을 보면 A가 전치가 되면 A의 역행렬을 존재한다고 해석했는데, 이렇게 해석이 되면 모든 행렬은 전치가 되니까 모든 행렬이 역행렬이 존재한다고 결론이 나오는데. 제가 어디서 잘못된 걸 까요?

    답글삭제
    답글
    1. 그런 뜻이 아닌데요, 전자닌자님. -.-

      역행렬은 당연히 행렬식을 봐야 하고요, 본문에서는 전치 행렬의 역행렬을 구할 경우의 관계를 증명하고 있습니다.

      삭제

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.