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) 성분이 AAii 행과 BBjj 열의 내적이라는 규칙이다. 그런데 그것은 계산법이고, 같은 곱셈을 보는 방법은 네 가지가 있다. 네 방법은 같은 답을 주지만 알려 주는 것은 서로 다르다.


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}

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

Am×n  Bn×p=ABm×p\underbrace{A}_{m \times n} \; \underbrace{B}_{n \times p} = \underbrace{AB}_{m \times p}

이 예제에서는 3×23 \times 22×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) 성분은 AAii 행과 BBjj 열의 내적이다.

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

예를 들어 (1,1)(1,1) 성분은 17+210=271 \cdot 7 + 2 \cdot 10 = 27 이고, (3,2)(3,2) 성분은 58+611=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} 뿐이다. 즉 BBjj 열 하나만 쓰인다. 다른 열은 관여하지 않는다.

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

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

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

AB=[Ab1Ab2Abp]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} 뿐이다. AAii 행 하나만 쓰이고, 대신 BB 는 모든 열이 쓰인다.

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

AB=[a1TBa2TBamTB]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)

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

먼저 짚어 둘 것이 있다. 열 하나는 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]=vju(\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{행})

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

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

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

[k=1n(A의 k)(B의 k)]ij=k=1naikbkj\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=kraikbkjA1B1 쪽+k>raikbkjA2B3 쪽\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역행렬이라 하고 A1A^{-1} 로 적는다.

A1A=I,AA1=IA^{-1}A = I, \qquad A A^{-1} = I

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

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

역행렬은 존재한다면 하나뿐이다. BBCC 가 모두 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 의 역행렬"이라고 부르며 A1A^{-1} 이라는 하나의 기호를 쓸 수 있다.

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

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

Ax=b    A1Ax=A1b    x=A1bA\vv{x} = \vv{b} \;\Longrightarrow\; A^{-1}A\vv{x} = A^{-1}\vv{b} \;\Longrightarrow\; \vv{x} = A^{-1}\vv{b}

곱의 역행렬

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

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

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

(AB)(B1A1)=A(BB1)A1=AIA1=AA1=I(AB)(B^{-1}A^{-1}) = A(BB^{-1})A^{-1} = AIA^{-1} = AA^{-1} = I

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


7. 역행렬이 없는 경우

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

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

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

A=[1326],A[31]=[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]=[3366]=[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)의 공식으로도 같은 결론이 나온다. adbc=1632=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} 을 만족하는 x0\vv{x} \neq \vv{0} 이 있고, 역행렬이 없다

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

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

A1A^{-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 개를 푸는 일이다. 계수행렬이 같으므로 소거 과정도 같다. 우변만 여러 개 붙여 놓고 한꺼번에 처리하면 된다.

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

[AI]    [IA1][\,A \mid I\,] \;\longrightarrow\; [\,I \mid A^{-1}\,]

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

예제로 확인해 보자.

[13102701]  (2)2(1)  [13100121]  (1)3(2)  [10730121]\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]
A1=[7321]A^{-1} = \begin{bmatrix} 7 & -3 \\ -2 & 1 \end{bmatrix}

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

2 × 2 행렬의 역행렬 공식

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

[ab10cd01]  (2)ca(1)  [ab100  dbca  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]

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

dbca=adbcad - \frac{bc}{a} = \frac{ad - bc}{a}

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

[ab1001cadbcaadbc]\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으로 만든다. 오른쪽 블록의 첫 성분은

1bcadbc=(adbc)+bcadbc=adadbc1 - b \cdot \frac{-c}{ad - bc} = \frac{(ad - bc) + bc}{ad - bc} = \frac{ad}{ad - bc}

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

[a0adadbcabadbc01cadbcaadbc]\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 로 나누면 왼쪽이 단위행렬이 되고, 오른쪽에 역행렬이 남는다.

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

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

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

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

E[AI]=[EAE]E\,[\,A \mid I\,] = [\,EA \mid E\,]

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


마치며...

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

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

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

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

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


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