Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lecture 3. 행렬 곱셈과 역행렬

Multiplication and Inverse Matrices — 서술

지난 강의에서 소거의 각 단계를 행렬 EijE_{ij} 로 쓰고, 소거 전체를 EA=UEA = U 로 정리하였다. 그 과정에서 행렬끼리의 곱을 여러 번 썼지만, 곱셈 자체를 제대로 다루지는 않았다.

이번 강의에서는 두 가지를 다룬다. 하나는 행렬 곱셈이고, 다른 하나는 역행렬(inverse matrix)이다.

행렬 곱셈을 계산하는 방법은 이미 알고 있을 것이다. ABAB 의 (i,j)(i,j) 성분이 AA 의 ii 행과 BB 의 jj 열의 내적이라는 규칙이다. 그런데 그것은 계산법이고, 같은 곱셈을 보는 방법은 네 가지가 있다. 네 방법은 같은 답을 주지만 알려 주는 것은 서로 다르다.


1. 행렬 곱셈 (Matrix multiplication)

이번 강의에서 계속 쓸 예제이다.

A=[123456],B=[789101112]A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}, \qquad B = \begin{bmatrix} 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix}

AA 는 3×23 \times 2 이고 BB 는 2×32 \times 3 이다. 곱셈이 되려면 AA 의 열 개수와 BB 의 행 개수가 같아야 한다. 가운데 숫자가 맞아야 한다는 뜻이고, 결과의 크기는 바깥 숫자를 따라간다.

A⏟m×n  B⏟n×p=AB⏟m×p\underbrace{A}_{m \times n} \; \underbrace{B}_{n \times p} = \underbrace{AB}_{m \times p}

이 예제에서는 3×23 \times 2 와 2×32 \times 3 을 곱하므로 결과는 3×33 \times 3 이다.

AB=[27303361687595106117]AB = \begin{bmatrix} 27 & 30 & 33 \\ 61 & 68 & 75 \\ 95 & 106 & 117 \end{bmatrix}

이 숫자들이 어디서 나왔는지를 네 가지 방식으로 설명할 수 있다.

같은 곱셈을 보는 네 가지 방법. 색칠한 부분이 서로 대응한다.

Figure 1:같은 곱셈을 보는 네 가지 방법. 색칠한 부분이 서로 대응한다.

성분으로 보기

가장 익숙한 방법이다. ABAB 의 (i,j)(i,j) 성분은 AA 의 ii 행과 BB 의 jj 열의 내적이다.

(AB)ij=∑k=1naikbkj(AB)_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}

예를 들어 (1,1)(1,1) 성분은 1⋅7+2⋅10=271 \cdot 7 + 2 \cdot 10 = 27 이고, (3,2)(3,2) 성분은 5⋅8+6⋅11=1065 \cdot 8 + 6 \cdot 11 = 106 이다. 손으로 계산할 때 쓰는 방법이며, 성분 하나씩 따로 구한다.


2. 열 관점 (Column-wise)

이번에는 결과를 성분 하나가 아니라 열 하나씩 만들어 보자.

(4)의 식을 다시 보자. (AB)ij=∑kaikbkj(AB)_{ij} = \sum_k a_{ik}b_{kj} 에서 열 번호 jj 를 하나로 고정하면, 이 식에 들어가는 BB 의 성분은 b1j,…,bnjb_{1j}, \dots, b_{nj} 뿐이다. 즉 BB 의 jj 열 하나만 쓰인다. 다른 열은 관여하지 않는다.

jj 를 고정한 채 ii 를 1 부터 mm 까지 훑어 세로로 모으면, 그것은 AA 에 BB 의 jj 열을 곱한 것과 같다. BB 의 jj 열을 bj\vv{b}_j 라 하면

(AB)의 j열=Abj(AB)\text{의 } j \text{열} = A\vv{b}_j

이고, 이것을 모든 jj 에 대해 늘어놓으면 다음과 같다.

AB=[Ab1Ab2⋯Abp]AB = \begin{bmatrix} A\vv{b}_1 & A\vv{b}_2 & \cdots & A\vv{b}_p \end{bmatrix}

그런데 Ab1A\vv{b}_1 이 무엇인지는 첫 강의에서 정해 두었다. AA 의 열들의 선형결합이고, 그 계수가 b1\vv{b}_1 의 성분이다. 정리하면 다음과 같다.

첫 번째 열로 확인해 보자. BB 의 첫 번째 열이 (7,10)(7, 10) 이므로 AA 의 두 열을 각각 7배, 10배 해서 더하면 된다.

7[135]+10[246]=[72135]+[204060]=[276195]7 \begin{bmatrix} 1 \\ 3 \\ 5 \end{bmatrix} + 10 \begin{bmatrix} 2 \\ 4 \\ 6 \end{bmatrix} = \begin{bmatrix} 7 \\ 21 \\ 35 \end{bmatrix} + \begin{bmatrix} 20 \\ 40 \\ 60 \end{bmatrix} = \begin{bmatrix} 27 \\ 61 \\ 95 \end{bmatrix}

(3)의 첫 번째 열과 같다.

이 관점이 알려 주는 것이 하나 있다. ABAB 의 모든 열이 AA 의 열들의 결합이므로, ABAB 의 열들은 AA 의 열들이 만들어낼 수 있는 범위를 벗어나지 못한다.


3. 행 관점 (Row-wise)

같은 일을 행에 대해서도 할 수 있다. 이번에는 (AB)ij=∑kaikbkj(AB)_{ij} = \sum_k a_{ik}b_{kj} 에서 행 번호 ii 를 고정한다. 그러면 이 식에 들어가는 AA 의 성분은 ai1,…,aina_{i1}, \dots, a_{in} 뿐이다. AA 의 ii 행 하나만 쓰이고, 대신 BB 는 모든 열이 쓰인다.

ii 를 고정한 채 jj 를 훑어 가로로 모으면 AA 의 ii 행에 BB 를 곱한 것이 된다. AA 의 ii 번째 행을 aiT\vv{a}_i^{\mathsf{T}} 라 하면 다음과 같이 쓸 수 있다.

AB=[a1TBa2TB⋮amTB]AB = \begin{bmatrix} \vv{a}_1^{\mathsf{T}} B \\ \vv{a}_2^{\mathsf{T}} B \\ \vdots \\ \vv{a}_m^{\mathsf{T}} B \end{bmatrix}

첫 번째 행으로 확인해 보자. AA 의 첫 번째 행이 (1,2)(1, 2) 이므로 BB 의 두 행을 각각 1배, 2배 해서 더하면 된다.

1[789]+2[101112]=[273033]1 \begin{bmatrix} 7 & 8 & 9 \end{bmatrix} + 2 \begin{bmatrix} 10 & 11 & 12 \end{bmatrix} = \begin{bmatrix} 27 & 30 & 33 \end{bmatrix}

지난 강의에서 소거를 EAEA 로 쓸 때 사용한 관점이 바로 이것이다. EE 의 한 행이 AA 의 행들을 어떤 비율로 섞을지 정하고 있었다.


4. 열 × 행 관점 (Column times row)

앞의 두 관점은 AA 나 BB 중 하나만 쪼갰다. 이번에는 둘 다 쪼갠다.

먼저 짚어 둘 것이 있다. 열 하나는 n×1n \times 1 이고 행 하나는 1×p1 \times p 이다. (2)의 규칙에 따르면 이 둘을 곱한 결과는 n×pn \times p 행렬이다. 숫자 하나가 아니라 행렬이 나온다.

[135][789]=[789212427354045]\begin{bmatrix} 1 \\ 3 \\ 5 \end{bmatrix} \begin{bmatrix} 7 & 8 & 9 \end{bmatrix} = \begin{bmatrix} 7 & 8 & 9 \\ 21 & 24 & 27 \\ 35 & 40 & 45 \end{bmatrix}

이 행렬의 열을 하나씩 보자. 열벡터를 u=(1,3,5)\vv{u} = (1, 3, 5), 행벡터를 vT=(7,8,9)\vv{v}^{\mathsf{T}} = (7, 8, 9) 라 하면, 곱의 (i,j)(i,j) 성분은 uivju_i v_j 이다. jj 를 고정하고 ii 를 훑으면

(uvT)의 j열=[u1vju2vju3vj]=vj[u1u2u3]=vj u(\vv{u}\vv{v}^{\mathsf{T}})\text{의 } j \text{열} = \begin{bmatrix} u_1 v_j \\ u_2 v_j \\ u_3 v_j \end{bmatrix} = v_j \begin{bmatrix} u_1 \\ u_2 \\ u_3 \end{bmatrix} = v_j\,\vv{u}

이 된다. 즉 모든 열이 같은 벡터 u\vv{u} 의 배수이고, 배수만 vjv_j 로 다르다. 예제에서는 세 열이 각각 7u7\vv{u}, 8u8\vv{u}, 9u9\vv{u} 이다. 같은 계산을 행에 대해 하면 모든 행이 vT\vv{v}^{\mathsf{T}} 의 배수임을 알 수 있다. 세 열이 모두 한 직선 위에 놓인다.

열 하나와 행 하나를 곱하면 행렬이 나온다. 그 행렬의 세 열은 모두 같은 직선 위에 있다.

Figure 2:열 하나와 행 하나를 곱하면 행렬이 나온다. 그 행렬의 세 열은 모두 같은 직선 위에 있다.

이런 행렬을 랭크 1 행렬(rank one matrix)이라 한다. 랭크가 정확히 무엇인지는 뒤에서 정의하지만, 지금은 "열들이 만들어내는 것이 직선 하나뿐"이라는 뜻으로 이해하면 된다.

이제 곱셈 전체를 이런 조각들의 합으로 쓸 수 있다.

AB=∑k=1n(A의 k열)(B의 k행)AB = \sum_{k=1}^{n} (A \text{의 } k \text{열})(B \text{의 } k \text{행})

이 식이 정말 성립하는지 성분으로 확인해 보자. AA 의 kk 열은 성분이 a1k,…,amka_{1k}, \dots, a_{mk} 이고 BB 의 kk 행은 성분이 bk1,…,bkpb_{k1}, \dots, b_{kp} 이다. (11)에서 본 것처럼 이 둘을 곱한 행렬의 (i,j)(i,j) 성분은 두 성분을 그냥 곱한 것이다.

[(A의 k열)(B의 k행)]ij=aik bkj\big[(A \text{의 } k \text{열})(B \text{의 } k \text{행})\big]_{ij} = a_{ik}\,b_{kj}

이제 kk 에 대해 모두 더하면 다음과 같다.

[ ∑k=1n(A의 k열)(B의 k행) ]ij=∑k=1naik bkj\left[\, \sum_{k=1}^{n} (A \text{의 } k \text{열})(B \text{의 } k \text{행}) \,\right]_{ij} = \sum_{k=1}^{n} a_{ik}\,b_{kj}

우변은 (4)의 우변, 즉 (AB)ij(AB)_{ij} 와 정확히 같다. 모든 (i,j)(i,j) 에서 같으므로 두 행렬이 같다.

이 계산을 다시 보면 두 관점의 차이가 무엇인지 드러난다. 성분 관점은 (i,j)(i,j) 를 고정해 놓고 kk 에 대해 더했다. 열 × 행 관점은 반대로 kk 를 고정해 행렬 하나를 만든 다음, 마지막에 kk 에 대해 더한다. 같은 이중 합에서 더하는 순서를 바꾼 것이다.

예제에서는 n=2n = 2 이므로 항이 두 개이다.

[789212427354045]+[202224404448606672]=[27303361687595106117]\begin{bmatrix} 7 & 8 & 9 \\ 21 & 24 & 27 \\ 35 & 40 & 45 \end{bmatrix} + \begin{bmatrix} 20 & 22 & 24 \\ 40 & 44 & 48 \\ 60 & 66 & 72 \end{bmatrix} = \begin{bmatrix} 27 & 30 & 33 \\ 61 & 68 & 75 \\ 95 & 106 & 117 \end{bmatrix}

(3)의 결과와 같다. 행렬 곱은 랭크 1 행렬들의 합이다.

지금은 이 관점이 어디에 쓰이는지 잘 보이지 않을 것이다. 성분·열·행 관점은 계산과 바로 연결되지만 이것은 그렇지 않다. 이 관점은 행렬을 분해할 때 쓰인다. 주어진 행렬을 랭크 1 조각들의 합으로 쪼개는 일이 뒤에서 여러 번 나온다.

네 관점을 정리하면 다음과 같다. 네 방법은 같은 답을 주지만, 같은 것을 알려 주지는 않는다.

관점ABAB 를 어떻게 보는가주로 쓰이는 곳
성분(i,j)(i,j) 성분 == ii 행과 jj 열의 내적손으로 계산할 때
열각 열이 AA 의 열들의 선형결합AxA\vv{x} 의 의미, 열공간
행각 행이 BB 의 행들의 선형결합소거 EAEA
열 × 행랭크 1 행렬들의 합행렬을 분해할 때

5. 블록 곱셈 (Block multiplication)

행렬을 작은 덩어리로 나누어도 곱셈 규칙은 그대로 성립한다. 예를 들어 두 행렬을 각각 네 개의 블록으로 나누면 다음과 같이 된다.

[A1A2A3A4][B1B2B3B4]=[A1B1+A2B3A1B2+A2B4A3B1+A4B3A3B2+A4B4]\begin{bmatrix} A_1 & A_2 \\ A_3 & A_4 \end{bmatrix} \begin{bmatrix} B_1 & B_2 \\ B_3 & B_4 \end{bmatrix} = \begin{bmatrix} A_1B_1 + A_2B_3 & A_1B_2 + A_2B_4 \\ A_3B_1 + A_4B_3 & A_3B_2 + A_4B_4 \end{bmatrix}

성분 대신 블록이 들어갔을 뿐 형태가 같다. 블록의 크기가 서로 맞기만 하면 된다.

이것이 성립하는 이유도 (4)의 합에서 나온다. (AB)ij=∑kaikbkj(AB)_{ij} = \sum_k a_{ik}b_{kj} 에서 kk 가 도는 범위를 앞쪽 묶음과 뒤쪽 묶음으로 갈라 따로 더한 다음 합쳐도 결과는 같다.

∑k=1naikbkj=∑k≤raikbkj⏟A1B1 쪽+∑k>raikbkj⏟A2B3 쪽\sum_{k=1}^{n} a_{ik}b_{kj} = \underbrace{\sum_{k \le r} a_{ik}b_{kj}}_{A_1B_1 \text{ 쪽}} + \underbrace{\sum_{k > r} a_{ik}b_{kj}}_{A_2B_3 \text{ 쪽}}

kk 를 어디서 자르느냐가 곧 AA 를 세로로, BB 를 가로로 어디서 자르느냐이다. 그래서 두 행렬의 자르는 위치가 서로 맞아야 한다는 조건이 붙는다.

사실 앞의 네 관점이 전부 블록 곱셈의 특수한 경우이다. BB 를 열 단위로 쪼개면 열 관점이 되고, AA 를 행 단위로 쪼개면 행 관점이 되며, AA 를 열로 BB 를 행으로 쪼개면 열 × 행 관점이 된다.

큰 행렬을 실제로 곱할 때 블록 단위로 나누는 이유는 계산 순서를 바꿀 수 있기 때문이다. 한 번 읽어 온 블록을 메모리에 두고 여러 번 쓰면 훨씬 빠르다.


6. 역행렬 (Inverse matrix)

이제 두 번째 주제로 넘어간다. 어떤 정방행렬 AA 에 대해 다음을 만족하는 행렬이 있으면 그것을 AA 의 역행렬이라 하고 A−1A^{-1} 로 적는다.

A−1A=I,AA−1=IA^{-1}A = I, \qquad A A^{-1} = I

여기서 II 는 대각 성분이 모두 1이고 나머지가 0인 단위행렬(identity matrix)이다. 어떤 행렬에 곱해도 그 행렬을 그대로 돌려준다.

정방행렬에서는 두 조건 중 하나만 확인해도 나머지가 따라온다. 정방이 아닌 경우에는 왼쪽에서 곱하는 역행렬과 오른쪽에서 곱하는 역행렬이 달라지는데, 이것은 뒤에서 따로 다룬다.

역행렬은 존재한다면 하나뿐이다. BB 와 CC 가 모두 AA 의 역행렬이라고 하자. 그러면 BA=IBA = I 이고 AC=IAC = I 이므로, 곱 BACBAC 를 두 가지로 묶어 계산할 수 있다.

B(AC)=BI=B,(BA)C=IC=CB(AC) = BI = B, \qquad (BA)C = IC = C

행렬 곱셈에는 결합법칙이 성립하므로 두 값이 같아야 한다. 따라서 B=CB = C 이다. 이 덕분에 "AA 의 역행렬"이라고 부르며 A−1A^{-1} 이라는 하나의 기호를 쓸 수 있다.

역행렬이 있는 행렬을 가역(invertible) 또는 비특이(nonsingular)라 하고, 없는 행렬을 특이(singular)라 한다.

역행렬이 있으면 Ax=bA\vv{x} = \vv{b} 의 해를 바로 쓸 수 있다. 양변 왼쪽에 A−1A^{-1} 을 곱하면 된다.

Ax=b  ⟹  A−1Ax=A−1b  ⟹  x=A−1bA\vv{x} = \vv{b} \;\Longrightarrow\; A^{-1}A\vv{x} = A^{-1}\vv{b} \;\Longrightarrow\; \vv{x} = A^{-1}\vv{b}

곱의 역행렬

두 가역행렬의 곱도 가역이고, 그 역행렬은 순서가 뒤집힌다.

(AB)−1=B−1A−1(AB)^{-1} = B^{-1}A^{-1}

확인은 곱해 보면 된다. 가운데부터 지워진다.

(AB)(B−1A−1)=A(BB−1)A−1=AIA−1=AA−1=I(AB)(B^{-1}A^{-1}) = A(BB^{-1})A^{-1} = AIA^{-1} = AA^{-1} = I

순서를 그대로 두어 A−1B−1A^{-1}B^{-1} 로 쓰면 가운데가 B−1AB^{-1}A 가 되어 지워지지 않는다. ABAB 는 BB 를 적용한 뒤 AA 를 적용한 것이므로, 되돌릴 때는 나중에 한 AA 부터 되돌려야 한다.


7. 역행렬이 없는 경우

어떤 행렬이 역행렬을 갖지 못하는가? 판정 기준 하나를 먼저 적어 둔다.

이유는 두 줄이면 된다. 만약 A−1A^{-1} 이 존재한다고 하자. Ax=0A\vv{x} = \vv{0} 의 양변 왼쪽에 A−1A^{-1} 을 곱하면 x=A−10=0\vv{x} = A^{-1}\vv{0} = \vv{0} 이 된다. 이것은 x≠0\vv{x} \neq \vv{0} 이라는 가정에 어긋난다. 따라서 A−1A^{-1} 은 존재할 수 없다.

예를 들어 다음 행렬을 보자.

A=[1326],A[3−1]=[00]A = \begin{bmatrix} 1 & 3 \\ 2 & 6 \end{bmatrix}, \qquad A \begin{bmatrix} 3 \\ -1 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}

이런 x\vv{x} 를 어떻게 찾았는가. 열 관점으로 보면 바로 보인다. 두 번째 열이 첫 번째 열의 3배이므로, 첫 번째 열을 3배 한 것에서 두 번째 열을 한 번 빼면 0이 된다.

3[12]−1[36]=[3−36−6]=[00]3\begin{bmatrix} 1 \\ 2 \end{bmatrix} - 1\begin{bmatrix} 3 \\ 6 \end{bmatrix} = \begin{bmatrix} 3 - 3 \\ 6 - 6 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}

계수 (3,−1)(3, -1) 이 곧 (23)의 x\vv{x} 이다. 0이 아닌 벡터가 0으로 가므로 이 행렬에는 역행렬이 없다.

(34)의 공식으로도 같은 결론이 나온다. ad−bc=1⋅6−3⋅2=0ad - bc = 1 \cdot 6 - 3 \cdot 2 = 0 이므로 분모가 0이 되어 공식을 쓸 수 없다.

기하적으로 보면

행렬을 변환으로 보면 이 상황이 더 분명해진다. 단위 정육면체의 여덟 꼭짓점에 AA 를 곱해서 어디로 가는지 그려 보자.

단위 정육면체(회색)가 A 에 의해 옮겨진 모습(주황). 왼쪽은 부피가 있는 입체이고,
오른쪽은 완전히 납작한 평면 조각이다.

Figure 3:단위 정육면체(회색)가 AA 에 의해 옮겨진 모습(주황). 왼쪽은 부피가 있는 입체이고, 오른쪽은 완전히 납작한 평면 조각이다.

왼쪽은 정육면체가 기울어진 입체가 되었다. 부피가 있고, 도착한 점을 보면 어느 점에서 왔는지 알 수 있다. 오른쪽은 세 번째 열이 앞의 두 열의 합이어서 정육면체가 평면 위로 눌렸다. 부피가 0이다.

납작해졌다는 것은 서로 다른 두 점이 같은 곳으로 갔다는 뜻이다. 도착점만 보고 출발점을 알아낼 방법이 없으므로 되돌리는 변환을 만들 수 없다. 역행렬이 없다는 것은 계산이 안 된다는 뜻이 아니라 정보가 사라졌다는 뜻이다.

지금까지 세 강의에서 같은 상황을 세 가지 언어로 말한 셈이다.

강의같은 상황을 부르는 말
L1열들이 한 평면 안에 놓여 공간을 다 채우지 못한다
L2소거를 해도 피벗이 nn 개 나오지 않는다
L3Ax=0A\vv{x} = \vv{0} 을 만족하는 x≠0\vv{x} \neq \vv{0} 이 있고, 역행렬이 없다

8. 가우스-조르당 (Gauss-Jordan)

역행렬이 있다면 어떻게 구하는가. AA−1=IAA^{-1} = I 를 열 관점으로 보면 답이 나온다.

A−1A^{-1} 의 열을 c1,…,cn\vv{c}_1, \dots, \vv{c}_n 이라 하고 II 의 열을 e1,…,en\vv{e}_1, \dots, \vv{e}_n 이라 하면, (6)에 의해 다음이 성립한다.

Acj=ej(j=1,…,n)A\vv{c}_j = \vv{e}_j \qquad (j = 1, \dots, n)

즉 역행렬을 구하는 일은 계수행렬이 모두 AA 로 같은 연립방정식 nn 개를 푸는 일이다. 계수행렬이 같으므로 소거 과정도 같다. 우변만 여러 개 붙여 놓고 한꺼번에 처리하면 된다.

지난 강의에서 [A∣b][A \mid \vv{b}] 를 썼던 것처럼, 이번에는 [A∣I][A \mid I] 를 놓고 소거한다.

[ A∣I ]  ⟶  [ I∣A−1 ][\,A \mid I\,] \;\longrightarrow\; [\,I \mid A^{-1}\,]

다만 지난 강의와 달리 위삼각행렬에서 멈추지 않는다. 대각선 위쪽까지 0으로 만들고 피벗을 1로 맞춰 왼쪽을 II 로 만든다. 이렇게 위아래를 모두 소거하는 방법을 가우스-조르당 소거법(Gauss-Jordan elimination)이라 한다.

예제로 확인해 보자.

[13102701]→  (2행)−2(1행)  [131001−21]→  (1행)−3(2행)  [107−301−21]\left[\begin{array}{cc|cc} 1 & 3 & 1 & 0 \\ 2 & 7 & 0 & 1 \end{array}\right] \xrightarrow{\;(2\text{행}) - 2(1\text{행})\;} \left[\begin{array}{cc|cc} 1 & 3 & 1 & 0 \\ 0 & 1 & -2 & 1 \end{array}\right] \xrightarrow{\;(1\text{행}) - 3(2\text{행})\;} \left[\begin{array}{cc|cc} 1 & 0 & 7 & -3 \\ 0 & 1 & -2 & 1 \end{array}\right]
A−1=[7−3−21]A^{-1} = \begin{bmatrix} 7 & -3 \\ -2 & 1 \end{bmatrix}

곱해 보면 AA−1=IAA^{-1} = I 가 된다.

2 × 2 행렬의 역행렬 공식

같은 절차를 숫자 대신 문자로 해 보면 잘 알려진 공식이 그대로 나온다. A=[abcd]A = \begin{bmatrix} a & b \\ c & d \end{bmatrix} 를 놓고 a≠0a \neq 0 이라 하자. 첫 번째 피벗은 aa 이고, 곱수는 c/ac/a 이다.

[ab10cd01]→  (2행)−ca(1행)  [ab100  d−bca  −ca1]\left[\begin{array}{cc|cc} a & b & 1 & 0 \\ c & d & 0 & 1 \end{array}\right] \xrightarrow{\;(2\text{행}) - \frac{c}{a}(1\text{행})\;} \left[\begin{array}{cc|cc} a & b & 1 & 0 \\[2pt] 0 & \;d - \dfrac{bc}{a}\; & -\dfrac{c}{a} & 1 \end{array}\right]

두 번째 피벗이 나왔다. 통분하면 다음과 같다.

d−bca=ad−bcad - \frac{bc}{a} = \frac{ad - bc}{a}

이 값이 0이면 소거가 끝까지 가지 못하므로 역행렬이 없다. 0이 아니라고 하고 계속 진행하자. 두 번째 행을 이 피벗으로 나누어 1로 만든다. 나누는 것은 a/(ad−bc)a/(ad-bc) 를 곱하는 것과 같으므로

[ab1001−cad−bcaad−bc]\left[\begin{array}{cc|cc} a & b & 1 & 0 \\[2pt] 0 & 1 & \dfrac{-c}{ad - bc} & \dfrac{a}{ad - bc} \end{array}\right]

이 된다. 이제 첫 번째 행에서 두 번째 행의 bb 배를 빼서 위쪽을 0으로 만든다. 오른쪽 블록의 첫 성분은

1−b⋅−cad−bc=(ad−bc)+bcad−bc=adad−bc1 - b \cdot \frac{-c}{ad - bc} = \frac{(ad - bc) + bc}{ad - bc} = \frac{ad}{ad - bc}

이고, 둘째 성분은 0−b⋅a/(ad−bc)=−ab/(ad−bc)0 - b \cdot a/(ad-bc) = -ab/(ad-bc) 이다.

[a0adad−bc−abad−bc01−cad−bcaad−bc]\left[\begin{array}{cc|cc} a & 0 & \dfrac{ad}{ad - bc} & \dfrac{-ab}{ad - bc} \\[6pt] 0 & 1 & \dfrac{-c}{ad - bc} & \dfrac{a}{ad - bc} \end{array}\right]

마지막으로 첫 번째 행을 aa 로 나누면 왼쪽이 단위행렬이 되고, 오른쪽에 역행렬이 남는다.

A−1=1ad−bc[d−b−ca]A^{-1} = \frac{1}{ad - bc}\begin{bmatrix} d & -b \\ -c & a \end{bmatrix}

분모의 ad−bcad - bc 는 (30)에서 두 번째 피벗으로 등장했던 값이다. 공식을 외워서 쓰는 경우가 많지만, 실제로는 소거를 문자로 한 번 해 본 결과일 뿐이다. 앞의 예제 A=[1327]A = \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} 에 넣어 보면 ad−bc=7−6=1ad - bc = 7 - 6 = 1 이므로 (28)의 결과와 같아진다.

왜 오른쪽에 A−1A^{-1} 이 남는가

지난 강의의 관점을 쓰면 바로 설명된다. 소거의 전 과정을 행렬 EE 하나로 쓸 수 있었다. 증강행렬에 EE 를 곱하는 것은 두 블록에 각각 곱하는 것과 같으므로((16)),

E [ A∣I ]=[ EA∣E ]E\,[\,A \mid I\,] = [\,EA \mid E\,]

이다. 우리는 왼쪽이 II 가 될 때까지 소거했으므로 EA=IEA = I 이고, 이는 E=A−1E = A^{-1} 이라는 뜻이다. 그러므로 오른쪽 블록에 남는 EE 가 곧 A−1A^{-1} 이다. 단위행렬을 옆에 붙여 둔 것은 소거 과정을 그대로 기록하기 위한 장치였던 셈이다.


마치며...

이번 강의에서 다룬 것을 정리하면 다음과 같다.

대상내용
곱셈의 네 관점성분 / 열 / 행 / 열 × 행
랭크 1 행렬열 하나와 행 하나의 곱. 모든 열이 한 직선 위에 있다
블록 곱셈블록 크기만 맞으면 성분 곱셈과 같은 형태로 계산된다
역행렬A−1A=AA−1=IA^{-1}A = AA^{-1} = I. (AB)−1=B−1A−1(AB)^{-1} = B^{-1}A^{-1}
역행렬이 없는 조건Ax=0A\vv{x} = \vv{0} 인 x≠0\vv{x} \neq \vv{0} 이 존재한다
가우스-조르당[A∣I]→[I∣A−1][A \mid I] \to [I \mid A^{-1}]

행렬 곱셈은 네 가지로 볼 수 있고, 그중 열 × 행 관점은 곱을 랭크 1 행렬들의 합으로 본다. 역행렬에서는 없는 경우가 무엇을 뜻하는지가 중요했다. 변환이 공간을 납작하게 만들면 서로 다른 점이 같은 곳으로 가고, 그러면 되돌릴 수 없다.

이제 우리는 소거를 행렬로 쓸 줄 알고, 그 행렬을 되돌리는 방법도 안다. 이 둘을 합치면 무엇이 되는가? 소거 행렬들을 왼쪽에서 오른쪽으로 넘기면 AA 를 두 개의 삼각행렬의 곱으로 쓸 수 있다.

다음 강의에서는 이 책의 첫 번째 분해인 A=LUA = LU 에 대해 알아보도록 하자.


이번 강의의 내용을 파이썬으로 확인해 보려면 L3 실습 노트북으로 넘어가면 된다. 네 가지 관점을 각각 함수로 구현해 결과가 같은지 확인하고, 정육면체가 변환되는 모습을 회전시켜 볼 수 있다.