최근 수정 시각 : 2019-06-07 14:02:01

행렬

1. 여럿이 줄지어 가는 것2. 수학matrix
2.1. 행렬의 연산
2.1.1. 덧셈, 뺄셈2.1.2. 상수배2.1.3. 행렬곱2.1.4. Hadamard Product2.1.5. 전치(transpose)2.1.6. 주의점
2.2. 역행렬
2.2.1. 첨가 행렬로 역행렬 구하기2.2.2. 크라메르 공식으로 역행렬 구하기
2.3. 특수한 행렬
2.3.1. 영행렬(zero matrix)2.3.2. 정사각행렬(square matrix)2.3.3. 단위행렬(identity matrix)2.3.4. 대칭 행렬(Symmetric matrix)2.3.5. 에르미트 행렬(Hermitian matrix)
2.4. 고등학교 교육 과정2.5. 프로그래밍2.6. 더 보기

1. 여럿이 줄지어 가는 것

한자로는 行列이라고 쓰는데, 수학의 행렬과 한자는 같다. 가족관계에서 쓰이는 항렬도 한자는 동일. 이 때문에 '대수학은 대수(代數)와 항렬(行列)을 공부하므로 족보학의 일부다.'[1]라는 드립도 있다(…).

2. 수학matrix

대수학
{{{#!folding [ 펼치기 · 접기 ]이론
기본대상 방정식 · 부등식 · 산술
수 체계 실수 · 복소수 · 사원수
다루는 대상과 주요토픽
대수적 구조
군(Group) 군의 작용 · 실로우 정리
환(Ring)
체(Field) 갈루아 이론
대수(Algebra)
선형대수학 벡터 · 행렬 · 선형사상 · 가군(Module)
정리
대수학의 기본정리 · 나머지 정리
다항식 · 유클리드 호제법 · 대수 · 노름
분야와 관심대상
대수기하학 대수다양체 · 스킴 · 에탈 코호몰로지 · 모티브 · 사슬 복합체
대수적 정수론
대수적 위상수학 스펙트럼
가환대수학
표현론
호몰로지 대수학
}}}||


선형대수학
{{{#!folding [ 펼치기 · 접기 ] 선형대수학의 대수적 구조
가군(모듈) 벡터 공간 내적 공간
선형대수학의 이론
기본 대상 벡터 · 행렬 · 선형 변환
선형 연산자 기본 개념 행렬곱 · 단위행렬 · 역행렬크라메르 공식 · 가역행렬 · 행렬식 · 주대각합
선형 시스템 기본행연산기본행렬 · 가우스-조르당 소거법 · RREF
주요 정리 차원 정리 · 가역행렬의 기본정리 · 선형대수학의 기본정리 · 스펙트럼 정리
기타 제곱근행렬
벡터공간의 분해 상사 · 고유치 문제 · 케일리-해밀턴 정리 · 대각화 · 삼각화 · 조르당 분해
벡터의 연산 내적 · 외적 · 다중선형형식
내적공간 그람-슈미트 과정 · 수반 연산자
다중선형대수 텐서 · 텐서곱
}}}||

matrix(行列) [2]

1개 이상의 수나 식을 사각형의 배열로 나열한 것. 가로줄을 (row), 세로줄을 (column)이라고 부른다. column에는 기둥이라는 뜻도 있다는 것을 알면 세로줄이라는 뜻도 쉽게 이해가 된다. 아서 케일리윌리엄 로원 해밀턴이 발명했다. 역사적으로 본다면 행렬은 연립 일차 방정식의 풀이를 어떻게 하면 될까라고 고민한 데서 시작했다. 아서 케일리가 연구하던 중에 adbc ad - bc 의 값에 따라 연립 방정식의 해가 다르게 나오는 것을 보고 이것이 해의 존재 여부(궁극적으로는 행렬의 가역 여부)를 판별한다는 관점에서 determinant라고 부른 데서 행렬식이 탄생했고, 윌리엄 로원 해밀턴이 '야, 그러면 연립 방정식의 계수랑 변수를 따로 떼어내서 쓰면 어떨까?'라는 생각에서 행렬이 탄생했다. 즉 역사적으로 보면 행렬식이 행렬보다 먼저 탄생했다.

사실 그 존재가치는 함수 내지는 사상(寫像, map)을 표현하기 위한 도구라는 데 있다. 모든 선형 변환(일차 변환)은 행렬로 표현할 수 있고 그 역도 성립한다. 즉, 행렬은 선형 변환과 같다. 이를 선형대수학의 기본정리라고 한다. 행렬의 곱셈을 덧셈이나 뺄셈처럼 안 하고 복잡하게 정의해 놓은 이유도 여기 있다. 참고로 정확히 말하면 차원이 nnFF-벡터공간에서 차원이 mmFF-벡터공간으로 가는 선형변환의 집합과 FF 위의 n×mn\times m 행렬의 집합이 FF-대수(algebra)로서 동형(isomorphic)인 것인데, 선형대수학 수준에서는 증명은 다 하면서도 어물쩡 넘긴다.

독립변수 1개, 종속변수 1개인 일반적인 일변수함수는 행렬 개념을 쓰지 않고도 수로 직관적으로 설명할 수 있지만, 정의역이나 공역의 차원이 둘 이상이 되기 시작하면 그때부터는 수가 아니라 행렬로 함수를 표현해야 한다(행렬로 연립방정식을 풀어 본 사람이라면 감이 올 것이다. 이게 정의역이 두 개 이상인 함수의 맛보기). 예컨대 정의역이 2차원이고 공역이 3차원인 함수(=대응)를 표현하는 행렬은 3×2 행렬이다. 중/고급 수학의 핵심 개념.

계산 노가다가 행 하나, 열 하나 더해질 때마다 무지막지하게 늘어난다. 예를 들어 행렬식을 구하는 경우, 3차 정사각행렬은 2차의 3배의 계산을, 4차 정사각행렬은 3차의 4배의 계산을 필요로 한다. 5차 정도 되면 맨손으로는 도저히 못 푼다. 뭐 다행스럽게도 실제로 풀 때는 그렇게 야만스럽게(...) 계산하라고 하진 않고, 가우스 소거법으로 어찌저찌 잘 풀 수는 있다. 물론 머리 아프기는 마찬가지. 다만 컴퓨터 연산에 매우 친화적이라서 슈퍼컴퓨터의 점수놀음은 대부분 행렬 연산에 기반을 둔 애플리케이션의 실행 시간으로 행해진다. 이를테면 y=ax²+bx+c와 같은 기본적인 이차방정식도 이를 컴퓨터로 하여금 계산하게 하는 것은 매우 난감하다. 사람은 직관적으로 이런 식을 이해할 수 있지만, 컴퓨터는 그렇지가 못하기 때문이다. 그러나 이를 행렬식으로 표현하면 문제는 아주 간단해진다. 그냥 곱하기 더하기 연산만 여러 번 반복하면 그게 곧 결과값이 되니까. 이는 컴퓨터에서 하나의 연산을 빠르게 하는 건 어렵지만 같은 시간에 더 많은 데이터에 대해 동일한 연산을 일률적으로 처리하는 건 쉽기 때문이다. 대표적인 예로 인텔 CPUMMXSSE, 요즘 슈퍼컴퓨팅에서 핫한 GPGPUFPGA가 그런 전략을 쓴다. 이런 것과 별도로 병렬 프로그래밍을 써서 멀티코어나 MPI나 Hadoop MapReduce등을 활용하는 것도 결국 이 원리에 해당한다. 덧셈, 뺄셈, 곱셈은 쉬울 줄 알았지? 그러니까 행렬 계산되는 공학계산기를 사용해야 합니다.
x=[x1x2...xm], x=[x1x2...xm]\mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ ... \\ x_m \end{bmatrix} , \ \mathbf{x} = \begin{bmatrix} x_1 \quad x_2 \quad ... \quad x_m \end{bmatrix}

하나의 열로만 구성되면 열벡터, 하나의 행으로만 구성되면 행벡터라고 한다. 보통 책에는 조판이 귀찮아서 열벡터는 행벡터를 transpose[3]를 이용해 나타내는 경우가 있다. 행과 열 모두가 둘 이상이면 텐서가 된다.

보통 이과 학생들은 대학에서 선형대수학을 배우면서 미지수가 2개 이상인 방정식이나, 둘 이상의 변수로 정의되는 함수를 표현하려면 행렬이 필수적이다. 이공계에서 선형대수학은 정말 활용도가 높은 과목이기에 몇몇 특수한 학과(예를 들어 산업 디자인 학과. 이 학과의 경우 행렬은커녕 수포자 수준으로 고등학교 수학을 몰라도 전공을 배우는 데 문제가 없다 카더라.)가 아닌 이상 전부 이를 배우게 된다. 왜냐하면 실제 세계를 수식으로 모델링 할 때는 필연적으로 여러 개의 방정식을 동시에 만족시키는 해 또는 근사를 구해야 하고, 이를 위한 방법론 중 가장 대표격이 선형대수학이기 때문이다. 물론 수학과 학생들은 이런 '행렬 활용법'에 가까운 공대 선형대수 이상의 원론적인 개념으로 행렬에 대해 접근하게 된다.

행렬은 다음 두 형태 중 하나를 골라서 그린다.
[x11x12x21x22]=(x11x12x21x22)\begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix} = \begin{pmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{pmatrix}
공통수학과정이 아닌 선형대수학에서 행렬을 쓸 때는 보통 좌변의 형태를 많이 쓴다. 행렬 연산의 중첩이 많다 보니 일반 괄호 '( )'와 헷갈림을 방지하기 위해서라고. 공과 계열에서는 벡터 형태의 변수를 나타낼 때에는 일반 괄호를 쓰고 함수를 의미하는 행렬을 나타낼 때에는 대괄호를 씀으로써 항의 의미를 명확히 하는 경우도 종종 있다. 예컨대 연립일차상미분방정식이나 고차상미분방정식에서 볼 수 있는 x˙=Ax \dot{x} = Ax 꼴의 수식을 (x1˙x2˙)=[a11a12a21a22](x1x2) \begin{pmatrix}\dot{x_1}\\\dot{x_2}\end{pmatrix} = \begin{bmatrix} a_{11} \quad a_{12} \\ a_{21} \quad a_{22} \end{bmatrix}\begin{pmatrix}x_1\\x_2\end{pmatrix} 로 표기하는 것을 볼 수 있을 것이다.

간단히는 다음과 같이 쓴다.
(xij)\left(x_{ij}\right)

2.1. 행렬의 연산

2.1.1. 덧셈, 뺄셈

대응하는 원소끼리 더하고 뺀다. 행렬의 크기가 서로 같은 경우에만 할 수 있다.
[x11x12x21x22]±[y11y12y21y22]=[x11±y11x12±y12x21±y21x22±y22]\begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix} \pm \begin{bmatrix} y_{11} \quad y_{12} \\ y_{21} \quad y_{22} \end{bmatrix} = \begin{bmatrix} x_{11} \pm y_{11} \quad x_{12} \pm y_{12} \\ x_{21} \pm y_{21} \quad x_{22} \pm y_{22} \end{bmatrix}
기호로 간단히 표현하자면, 다음과 같다.
(xij)+(yij)=(xij+yij)\left(x_{ij}\right)+\left(y_{ij}\right)=\left(x_{ij}+y_{ij}\right)

2.1.2. 상수배

마찬가지로 모든 원소에 해당 상수를 곱해 주면 된다.
c[x11x12x21x22]=[cx11cx12cx21cx22] c \begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix} = \begin{bmatrix} cx_{11} \quad cx_{12} \\ cx_{21} \quad cx_{22} \end{bmatrix}
기호로 간단히 다음과 같이 표현한다.
c(xij)=(cxij)c\left(x_{ij}\right)=\left(cx_{ij}\right)

2.1.3. 행렬곱

사실 수의 곱셈과는 방식이 다르다. 자세한 내용은 문서 참조.

2.1.4. Hadamard Product

행렬곱보다 더 쉽다.
[A0,0A0,1A1,0A1,1][B0,0B0,1B1,0B1,1]=[A0,0B0,0A0,1B0,1A1,0B1,0A1,1B1,1]\left[\begin{matrix}A_{0, 0} & A_{0, 1}\\A_{1, 0} & A_{1, 1}\end{matrix}\right] \circ \left[\begin{matrix}B_{0, 0} & B_{0, 1}\\B_{1, 0} & B_{1, 1}\end{matrix}\right] = \left[\begin{matrix}A_{0, 0} B_{0, 0} & A_{0, 1} B_{0, 1}\\A_{1, 0} B_{1, 0} & A_{1, 1} B_{1, 1}\end{matrix}\right]

2.1.5. 전치(transpose)

행렬 내의 원소를 대각선축을 기준으로 서로 위치를 바꾼 것. 즉 m×nm\times n 행렬의 전치행렬은 n×mn\times m 행렬이 된다. 텐서곱 연산의 필수요소다.
[x11x12x21x22]T=[x11x21x12x22] \begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix}^{T} = \begin{bmatrix} x_{11} \quad x_{21} \\ x_{12} \quad x_{22} \end{bmatrix}
기호로는 간단히 다음과 같이 표현한다.
(xij)T=(xji)\left(x_{ij}\right)^{T}=\left(x_{ji}\right)
이를 복소수 범위에서 생각한 게 Hermitian이다.

2.1.6. 주의점

  • 1*1 행렬은 스칼라가 아니다.
    행렬에 관해서, 특히 프로그래밍으로 행렬 개념에 입문한 사람들이 자주 하는 오해 중 하나이다. 하지만 위에 나온 행렬 곱과 스칼라 곱의 정의를 보면 알겠지만, 스칼라를 1*1 행렬과 같은 것으로 생각하면 두 정의가 서로 충돌되기 때문에 둘은 수학적으로는 완전히 다른 개념으로 사용해서 모호함을 피하는 편이다. 애초에 속한 집합부터 다르다.
    행렬의 곱셈법도 사실 행렬곱과 행렬-스칼라 곱은 정의된 집합부터 완전히 다를 수밖에 없다.
    다만 MATLAB이나 NumPy 코딩은 Broadcasting이라는 개념을 통해 행렬과 1*1행렬 사이의 곱셈이나, 행렬과 1*1행렬 사이의 덧셈 같은 수학적으로는 말도 안되는 것들이, 프로그래밍적 상황에서는 효율적이거나 유용하다는 이유로 정의되어 있다는 점에 유의하자.
  • 행렬곱과 Dot Product는 다른 것이다.
    백터를 행렬처럼 기술하는 경우가 많은데, 행렬곱과 Dot Product를 같은 기호를 쓴다거나 하면 모호해지게 되니 주의하자. Dot Product를 행렬곱으로 바꾸려면, 만약 두 벡터를 Column Vector로 기술한다면 앞의 벡터에는 Transpose가 따라붙게 된다. 특히 복소수 벡터의 경우 Transpose가 Conjugate Transpose가 되기 때문에, 해당 개념은 혼동한 채 계산을 한다거나 프로그래밍을 하게 되면 큰 실수를 할 수 있다.

2.2. 역행렬

정사각행렬 AA의 곱셈에 대한 역원 A1A^{-1}을 말한다. 후술할 단위행렬은, 곱셈에 대한 항등원이다. 즉,A1A=I=AA1A^{-1}A=I=AA^{-1}을 만족하는 유일한 A1A^{-1}을 말한다[4].

그렇다면 주어진 행렬이 언제 가역이 되는지가 문제이다.2×22\times2 행렬의 경우에는 아래 식에 따라 행렬식( x11x22x12x21 x_{11}x_{22} - x_{12}x_{21} )이 00이 아니면 가역이 됨을 알 수 있다. 크기가 이보다 큰 행렬에서도 마찬가지로 행렬식만 보면 알 수 있다. 자세한 건 가역행렬의 기본정리 문서 참고. 일반적으로 RR11을 갖는 가환환일 때, RR 위의 정사각행렬이 가역인 것과 그 행렬식이 가역인 것은 동치이다(!).

문제는 일반적인 n×nn\times n 행렬의 행렬식을 어떻게 정의하느냐 하는 것이고, 이것이 학부 선형대수학의 전반부 대부분을 차지하는 내용이다.

A1=1AadjA\displaystyle A^{-1}=\frac{1}{\left|A\right|}\text{adj}A[5]로 쓸 수 있는데, 이는 구체적으로 다음과 같다.
  • 2×22\times 2
    \displaystyle \begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix}^{-1} = \frac{1}{x_{11}x_{22} - x_{12}x_{21}} \begin{bmatrix} x_{22} \quad -x_{12} \\ -x_{21} \quad x_{11} \end{bmatrix} </math>
  • 3×33\times 3
    \displaystyle \begin{bmatrix} x_{11} \quad x_{12} \quad x_{13} \\ x_{21} \quad x_{22} \quad x_{23} \\ x_{31} \quad x_{32} \quad x_{33} \end{bmatrix}^{-1} = {1 \over x_{11}x_{22}x_{33} - x_{11}x_{23}x_{32} - x_{12}x_{21}x_{33} + x_{12}x_{23}x_{31} + x_{13}x_{21}x_{32} - x_{13}x_{22}x_{31}} \begin{bmatrix} x_{22}x_{33} - x_{23}x_{32} \quad x_{13}x_{32} - x_{12}x_{33} \quad x_{12}x_{23} - x_{13}x_{22} \\ x_{23}x_{31} - x_{21}x_{33} \quad x_{11}x_{33} - x_{13}x_{31} \quad x_{13}x_{21} - x_{11}x_{23} \\ x_{21}x_{32} - x_{22}x_{31} \quad x_{12}x_{31} - x_{11}x_{32} \quad x_{11}x_{22} - x_{12}x_{21} \end{bmatrix} </math>
  • 4×44\times 4
    공식이 있긴 하지만 복잡하므로 잘 쓰지 않고, 기타 여러 가지 방법으로 역행렬을 구할수 있다.

2.2.1. 첨가 행렬로 역행렬 구하기

Augmented Matrix
행렬에 다른 행렬을 첨가한 형태의 행렬이다.
[13105001] \left[ \begin{array}{cc|cc} 1 & 3 & 1 & 0\\ -5 & 0 & 0 & 1 \end{array} \right]
A=[x11x12x13x14x21x22x23x24x31x32x33x34x41x42x43x44]A= \begin{bmatrix} x_{11} \quad x_{12} \quad x_{13} \quad x_{14} \\ x_{21} \quad x_{22} \quad x_{23} \quad x_{24} \\ x_{31} \quad x_{32} \quad x_{33} \quad x_{34} \\ x_{41} \quad x_{42} \quad x_{43} \quad x_{44} \end{bmatrix} 라고 하자. 이때 A1 A^{-1} 을 구하기 위해서 [A  I]=[x11x12x13x141000x21x22x23x240100x31x32x33x340010x41x42x43x440001] [ A \ | \ I ] = \left[ \begin{array}{cccc|cccc} x_{11} & x_{12} & x_{13} & x_{14} & 1 & 0 & 0 & 0 \\ x_{21} & x_{22} & x_{23} & x_{24} & 0 & 1 & 0 & 0\\ x_{31} & x_{32} & x_{33} & x_{34} & 0 & 0 & 1 & 0 \\ x_{41} & x_{42} & x_{43} & x_{44} & 0 & 0 & 0 & 1 \end{array} \right] 라는 첨가행렬을 생각한다.

이 행렬을 적절히 조작[6]해서 [I  B] [ I \ | \ B] 형태로 바꿀 수 있으면 AA의 역행렬이 존재하고, A1=BA^{-1} = B이다. 바꿀 수 없으면 역행렬은 없음.

예시)

A=[1210100120121121] A= \begin{bmatrix} 1 \quad 2 \quad 1 \quad 0 \\1 \quad 0 \quad 0 \quad 1 \\ 2 \quad 0 \quad 1 \quad 2 \\ 1 \quad 1 \quad 2 \quad 1 \end{bmatrix}의 역행렬을 구한다고 하자. 그러면 [AI]=[12101000100101002012001011210001] [ A \quad I ] = \begin{bmatrix} 1 \quad 2 \quad 1 \quad 0 \quad 1 \quad 0 \quad 0 \quad 0 \\1 \quad 0 \quad 0 \quad 1 \quad 0 \quad 1 \quad 0 \quad 0\\ 2 \quad 0 \quad 1 \quad 2 \quad 0 \quad 0 \quad 1 \quad 0 \\ 1 \quad 1 \quad 2 \quad 1 \quad 0 \quad 0 \quad 0 \quad 1 \end{bmatrix} 로 표현가능하다. 여기서 한 행을 상수배해서 다른 행과 적절히 덧셈 뺄셈 연산을 하면 된다.

[12101000100101002012001011210001] \begin{bmatrix} 1 \quad 2 \quad 1 \quad 0 \quad 1 \quad 0 \quad 0 \quad 0 \\1 \quad 0 \quad 0 \quad 1 \quad 0 \quad 1 \quad 0 \quad 0 \\ 2 \quad 0 \quad 1 \quad 2 \quad 0 \quad 0 \quad 1 \quad 0 \\ 1 \quad 1 \quad 2 \quad 1 \quad 0 \quad 0 \quad 0 \quad 1 \end{bmatrix} \sim[12101000021111000412201010111001] \left [ \begin{array} {cccc|cccc} 1 \quad & 2 \quad & 1 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & 0 \\ 0 \quad & -2 \quad & -1 \quad & 1 \quad & -1 \quad & 1 \quad & 0 \quad & 0 \\ 0 \quad & -4 \quad & -1 \quad & 2 \quad & -2 \quad & 0 \quad & 1 \quad & 0 \\ 1 \quad & 0 \quad & -1 \quad & 1 \quad & -1 \quad & 0 \quad & 0 \quad & 1 \end{array} \right] \sim

[10010100021111000010021001111001] \left [ \begin{array} {cccc|cccc} 1 \quad & 0 \quad & 0 \quad & 1 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \\ 0 \quad & -2 \quad & -1 \quad & 1 \quad & -1 \quad & 1 \quad & 0 \quad & 0 \\ 0 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & -2 \quad & 1 \quad & 0 \\ 0 \quad & -1 \quad & 1 \quad & 1 \quad & -1 \quad & 0 \quad & 0 \quad & 1 \end{array} \right] \sim [10010100003111020010021001111001] \left [ \begin{array} {cccc|cccc} 1 \quad & 0 \quad & 0 \quad & 1 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \\ 0 \quad & 0 \quad & -3 \quad & -1 \quad & 1 \quad & 1 \quad & 0 \quad & -2 \\ 0 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & -2 \quad & 1 \quad & 0 \\ 0 \quad & -1 \quad & 1 \quad & 1 \quad & -1 \quad & 0 \quad & 0 \quad & 1 \end{array} \right] \sim

[10010100000115320010021001111001] \left [ \begin{array} {cccc|cccc} 1 \quad & 0 \quad & 0 \quad & 1 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \\ 0 \quad & 0 \quad & 0 \quad & -1 \quad & 1 \quad & -5 \quad & 3 \quad & -2 \\ 0 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & -2 \quad & 1 \quad & 0 \\ 0 \quad & -1 \quad & 1 \quad & 1 \quad & -1 \quad & 0 \quad & 0 \quad & 1 \end{array} \right] \sim [10001432000115320010021001000321] \left [ \begin{array} {cccc|cccc} 1 \quad & 0 \quad & 0 \quad & 0 \quad & 1 \quad & -4 \quad & 3 \quad & -2 \\ 0 \quad & 0 \quad & 0 \quad & 1 \quad & -1 \quad & 5 \quad & -3 \quad & 2 \\ 0 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & -2 \quad & 1 \quad & 0 \\ 0 \quad & 1 \quad & 0 \quad & 0 \quad & 0 \quad & 3 \quad & -2 \quad & 1 \end{array} \right] \sim

[10001432010003210010021000011532] \left [ \begin{array} {cccc|cccc} 1 \quad & 0 \quad & 0 \quad & 0 \quad & 1 \quad & -4 \quad & 3 \quad & -2 \\ 0 \quad & 1 \quad & 0 \quad & 0 \quad & 0 \quad & 3 \quad & -2 \quad & 1 \\ 0 \quad & 0 \quad & 1 \quad & 0 \quad & 0 \quad & -2 \quad & 1 \quad & 0 \\ 0 \quad & 0 \quad & 0 \quad & 1 \quad & -1 \quad & 5 \quad & -3 \quad & 2 \end{array} \right]

위 행렬은 [I  B] [ I \ | \ B] 형태이므로 A의 역행렬 A1=[1432032102101532] A^{-1} = \begin{bmatrix} 1 \quad -4 \quad 3 \quad -2 \\ 0 \quad 3 \quad -2 \quad 1 \\ 0 \quad -2 \quad 1 \quad 0 \\ -1 \quad 5 \quad -3 \quad 2 \end{bmatrix} 이다.

위와 같은 작업은 기본행연산이 행렬의 왼쪽에 기본행렬을 곱하는 것과 같기 때문에, P[A  I]=[PA  P]=[I  B] P[ A \ | \ I] = [ PA \ | \ P] = [ I \ | \ B] 가 된다면 PA=I, B=P PA = I, \ B=P 이므로 A1=B A^{-1} = B가 되는 것으로 이해할 수 있다.

마지막으로, 열심히 계산하다보면 왼쪽 행렬의 한 행이 전부 0이 되는 경우가 있을 수 있는데, 이는 해당 행은 다른 행들의 linear combination으로 나타낼 수 있다는 것을 의미한다. 그런 경우는 역행렬이 없다는 뜻이다.

2.2.2. 크라메르 공식으로 역행렬 구하기

크라메르 공식 문서 참고.

2.3. 특수한 행렬

2.3.1. 영행렬(zero matrix)

모든 성분이 00인 행렬로, OO로 적는다. 덧셈의 항등원(즉 A+O=O+A=AA+O = O+A = A)이므로, 행렬이나 행렬벡터공간의 영원이 된다. 크기가 맞는 임의의 행렬과 곱하면 영행렬이 된다.[7]
[0000][x11x12x21x22]=[x11x12x21x22][0000]=[0000] \begin{bmatrix} 0 \quad 0 \\ 0 \quad 0 \end{bmatrix} \begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix} = \begin{bmatrix} x_{11} \quad x_{12} \\ x_{21} \quad x_{22} \end{bmatrix} \begin{bmatrix} 0 \quad 0 \\ 0 \quad 0 \end{bmatrix} = \begin{bmatrix} 0 \quad 0 \\ 0 \quad 0 \end{bmatrix}

2.3.2. 정사각행렬(square matrix)

n×n 행렬을 의미한다. 아래 내용은 정사각행렬에 관한 것이다. 정사각행렬을 모두 모으면 행렬Mn(F)M_{n}\left(F\right)을 이룬다. 특히, 이 행렬환은 수학사적으로 의미가 매우 깊다. 흔히 대수학의 해방이라 일컬어지는 대수학의 인식전환의 계기가 되었다. 그 전까지 모든 대수적 대상에서 교환법칙이 성립하는 줄 알았는데, 해밀턴의 사원수와 더불어, 교환법칙이 성립하지 않는 대수였기 때문이다. 그리고, 행렬환은 환들 중에서 조건이 가장 열악하기 때문에, 많은 반례들을 여기서 찾을 수 있다.

2.3.3. 단위행렬(identity matrix)

주대각선은 모두 1이고 나머지 성분은 모두 0인 행렬로, I 또는 E로 적는다. 단위행렬을 곱하여도 행렬에는 변화가 없다(즉 A I = A, I B = B[8]). 따라서 행렬환의 단위원, 즉 곱셈의 항등원이 된다.
E=I=[1001],[100010001],[1000010000100001]... E = I = \begin{bmatrix} 1 \quad 0 \\ 0 \quad 1 \end{bmatrix}, \begin{bmatrix} 1 \quad 0 \quad 0 \\ 0 \quad 1 \quad 0 \\ 0 \quad 0 \quad 1 \end{bmatrix}, \begin{bmatrix} 1 \quad 0 \quad 0 \quad 0 \\ 0 \quad 1 \quad 0 \quad 0 \\ 0 \quad 0 \quad 1 \quad 0 \\ 0 \quad 0 \quad 0 \quad 1 \end{bmatrix} ...
기호로 간단히 표현하자면 다음과 같다.
E=I=(δij)E=I=\left(\delta_{ij}\right)[9]
한편, 기본행렬(elementary matrix)은 단위행렬과 다르다. 기본행렬은 단위행렬에 기본행연산을 한 번 적용한 행렬로서, 기본행렬을 왼쪽에 곱하는 것은 대응하는 기초행 연산을 한 것과 동일한 결과가 된다. 해당 항목 참조.

2.3.4. 대칭 행렬(Symmetric matrix)

n차 정사각행렬 중에서, 자신의 전치행렬과 같은 행렬. A=ATA=A^{T}인 행렬이다. 즉, i,jn,Aij=Aji\forall i, j\leq n, A_{ij}=A_{ji}의 성질을 만족하는 행렬이다.

2.3.5. 에르미트 행렬(Hermitian matrix)

실수 대칭행렬을 복소수 범위로 일반화시킨 행렬로, 전치행렬의 각 원소의 켤레를 취한 행렬[약칭]과 본 행렬이 같은 행렬을 의미한다. 즉, i,jn,Aij=Aji\forall i,j\leq n, A_{ij}=\overline{A_{ji}}의 성질을 만족하는 행렬이다. 행렬중에서도 매우 특이한 성질이 존재[11]하여, 선형대수에서도 매우 특별하게 취급되는 행렬이다. 자세한건 항목 참조.

2.4. 고등학교 교육 과정

7차 교육과정까지 정규 교육 과정에 포함되어 있었다. 학생들에게 정말 극단적인 양면성을 보여준 과목이었다. 행렬은 난이도가 쉽기 때문에 내신 대비 시험에서 학생들이 가장 편안하게 공부했던 단원이었다. 하지만 수능으로 들어오면 얘기가 달라지는데, 교과 과정 역사상 최악의 악명을 가진 반례 문제가 포함되었기 때문이다. 보기 중 맞고 틀리는 것을 고르는 문제에서 틀렸다는 것을 확인하기 위해서는 반례를 찾아내야 하는데, 이건 수학 실력과는 무관한 운에 달린 일이었기 때문이었다. 때문에 당시 최상위권 학생들 중에서는 반례 문제에 대비하기 위해 반례집을 노트로 만드는 경우도 있었는데, 반례 사례는 무한하기 때문에 소용없는 짓이었다. 결국 나중에 평가원은 반례 문제는 출제하지 않겠다고 했고, 이후 아예 정규 교과 과정에서 행렬 단원 자체가 빠지게 되었다.
  • 7차 교육과정 · 2007 개정 교육 과정 : 수학Ⅰ(2007) (수능 출제 범위)
  • 2009 개정 교육 과정 : 고급 수학Ⅰ (수능 미출제)
  • 2015 개정 교육 과정 : 고급 수학Ⅰ (수능 미출제)

2.5. 프로그래밍

  • Dense Matrix

    • 사각형 모양의 배열에 행렬의 모든 값을 담는 것으로, 수학에서 사용되는 행렬과 똑같이 사용할 수 있기 때문에, 알고리즘도 그대로 적용 가능하고 프로그래밍하기 쉽다. 하지만 행렬에 0이 많으면 메모리를 많이 잡아먹고 쓸대없는 계산도 늘어나기 때문에 비효율적이게 된다.
  • Sparse Matrix
    • CSR Matrix
    • CSC Matrix
    • DOK Matrix
    • Banded Matrix

    Dense Matrix와 달리 Ragged Array나 Hash Table형의 자료 구조를 이용해 필요한(0이 아닌) 숫자만 압축해서 기술하는 방법이다. 행렬의 구성요소에 접근하는 방법이 아예 달라지니, Decomposition 같은 알고리즘을 구현하려면 머리를 좀 써야 한다.
    Finite Difference 같은 유형의 문제를 풀다 보면 알겠지만, 행렬로 모델링 했을 때 대각선 부분에 0이 아닌 숫자가 집중되는 경우가 많고, 이런 경우 특수한 알고리즘을 이용해 Gaussian Elimination 같은 문제를 효율적으로 풀 수 있다는 것을 알 수 있다. 과학이나 공학 문제에는 이런 유형의 문제가 스케일만 커진 채로 자주 등장하기 때문에, 행렬의 특성을 잘 공부해서 위에 나온 다양한 종류의 Sparse Matrix 중 하나로 모델링 하면 문제를 더 효율적으로 풀 수 있다.
    다만 행렬의 모양이 위에 말한 Sparse Matrix마다의 권장되는 규격과 다르거나, 0이 별로 없는 행렬이 나온다면 Sparse Matrix를 이용하는 것이 오히려 더 비효율적일 수 있으므로 주의하도록 하자.

2.6. 더 보기


[1] 이인석, 학부 대수학 강의 II: 대수학, 서울대학교출판부[2] 라틴어로 자궁을 matrix라고 한다. 실베스터 행렬 등의 행렬 관련 업적이 있는 영국인 수학자 제임스 실베스터가 행렬식을 자궁 처럼 담고 있어서 그렇게 이름지었다고.[3] \ 방향을 축으로 해서 원소의 위치를 서로 바꿔치기하는 것[4] 사실 AA1=IAA^{-1}=IA1A=IA^{-1}A=I 둘 중 하나만 만족해도 상관없다. 증명은 행렬식을 이용하거나 elementary row (column) operation을 이용한다.[5] A\left|A\right|는 행렬식 adjA\text{adj}A는 (고전적) 수반행렬((classical) adjoint)이다.[6] 한 행에 0이 아닌 상수를 곱하거나, 한 행에 다른 행을 더해주거나, 두 행의 위치를 서로 교환[7] 새로운 영행렬은 물론 크기가 달라질 수 있다.[8] 여기서 AB는 크기만 맞으면 되지 정사각행렬일 필요가 없다는 데 유의하여야 한다.[9] δij\delta_{ij}Kronecker delta 함수로 i=ji=j이면 δij=1\delta_{ij}=1, 그렇지 않으면 δij=0\delta_{ij}=0이다.[약칭] 전치켤레행렬이라고 한다[11] 예를 들어서, 모든 에르미트 행렬은 그 고유값이 반드시 실수가 되며, 서로 다른 고유벡터를 취하면 반드시 서로 직교하게 되는 등 여러 독특한 성질을 지니고 있다..