Lecture 3. 행렬 곱셈과 역행렬
Multiplication and Inverse Matrices — 서술
지난 강의에서 소거의 각 단계를 행렬 Eij 로 쓰고, 소거 전체를 EA=U 로 정리하였다.
그 과정에서 행렬끼리의 곱을 여러 번 썼지만, 곱셈 자체를 제대로 다루지는 않았다.
이번 강의에서는 두 가지를 다룬다. 하나는 행렬 곱셈이고, 다른 하나는 역행렬(inverse matrix)이다.
행렬 곱셈을 계산하는 방법은 이미 알고 있을 것이다. AB 의 (i,j) 성분이 A 의 i 행과
B 의 j 열의 내적이라는 규칙이다. 그런데 그것은 계산법이고, 같은 곱셈을 보는 방법은
네 가지가 있다. 네 방법은 같은 답을 주지만 알려 주는 것은 서로 다르다.
1. 행렬 곱셈 (Matrix multiplication)¶
이번 강의에서 계속 쓸 예제이다.
A=⎣⎡135246⎦⎤,B=[710811912] A 는 3×2 이고 B 는 2×3 이다. 곱셈이 되려면 A 의 열 개수와 B 의 행
개수가 같아야 한다. 가운데 숫자가 맞아야 한다는 뜻이고, 결과의 크기는 바깥 숫자를 따라간다.
m×nAn×pB=m×pAB 이 예제에서는 3×2 와 2×3 을 곱하므로 결과는 3×3 이다.
AB=⎣⎡27619530681063375117⎦⎤ 이 숫자들이 어디서 나왔는지를 네 가지 방식으로 설명할 수 있다.

Figure 1:같은 곱셈을 보는 네 가지 방법. 색칠한 부분이 서로 대응한다.
성분으로 보기¶
가장 익숙한 방법이다. AB 의 (i,j) 성분은 A 의 i 행과 B 의 j 열의 내적이다.
(AB)ij=k=1∑naikbkj 예를 들어 (1,1) 성분은 1⋅7+2⋅10=27 이고, (3,2) 성분은
5⋅8+6⋅11=106 이다. 손으로 계산할 때 쓰는 방법이며, 성분 하나씩 따로 구한다.
2. 열 관점 (Column-wise)¶
이번에는 결과를 성분 하나가 아니라 열 하나씩 만들어 보자.
(4)의 식을 다시 보자. (AB)ij=∑kaikbkj 에서 열 번호 j 를 하나로
고정하면, 이 식에 들어가는 B 의 성분은 b1j,…,bnj 뿐이다. 즉 B 의 j 열
하나만 쓰인다. 다른 열은 관여하지 않는다.
j 를 고정한 채 i 를 1 부터 m 까지 훑어 세로로 모으면, 그것은 A 에 B 의 j 열을
곱한 것과 같다. B 의 j 열을 bj 라 하면
(AB)의 j열=Abj 이고, 이것을 모든 j 에 대해 늘어놓으면 다음과 같다.
AB=[Ab1Ab2⋯Abp] 그런데 Ab1 이 무엇인지는 첫 강의에서 정해 두었다. A 의 열들의 선형결합이고,
그 계수가 b1 의 성분이다. 정리하면 다음과 같다.
첫 번째 열로 확인해 보자. B 의 첫 번째 열이 (7,10) 이므로 A 의 두 열을 각각 7배, 10배 해서
더하면 된다.
7⎣⎡135⎦⎤+10⎣⎡246⎦⎤=⎣⎡72135⎦⎤+⎣⎡204060⎦⎤=⎣⎡276195⎦⎤ (3)의 첫 번째 열과 같다.
이 관점이 알려 주는 것이 하나 있다. AB 의 모든 열이 A 의 열들의 결합이므로,
AB 의 열들은 A 의 열들이 만들어낼 수 있는 범위를 벗어나지 못한다.
3. 행 관점 (Row-wise)¶
같은 일을 행에 대해서도 할 수 있다. 이번에는 (AB)ij=∑kaikbkj 에서 행 번호
i 를 고정한다. 그러면 이 식에 들어가는 A 의 성분은 ai1,…,ain 뿐이다.
A 의 i 행 하나만 쓰이고, 대신 B 는 모든 열이 쓰인다.
i 를 고정한 채 j 를 훑어 가로로 모으면 A 의 i 행에 B 를 곱한 것이 된다.
A 의 i 번째 행을 aiT 라 하면 다음과 같이 쓸 수 있다.
AB=⎣⎡a1TBa2TB⋮amTB⎦⎤ 첫 번째 행으로 확인해 보자. A 의 첫 번째 행이 (1,2) 이므로 B 의 두 행을 각각 1배, 2배 해서
더하면 된다.
1[789]+2[101112]=[273033] 지난 강의에서 소거를 EA 로 쓸 때 사용한 관점이 바로 이것이다. E 의 한 행이 A 의 행들을
어떤 비율로 섞을지 정하고 있었다.
4. 열 × 행 관점 (Column times row)¶
앞의 두 관점은 A 나 B 중 하나만 쪼갰다. 이번에는 둘 다 쪼갠다.
먼저 짚어 둘 것이 있다. 열 하나는 n×1 이고 행 하나는 1×p 이다.
(2)의 규칙에 따르면 이 둘을 곱한 결과는 n×p 행렬이다. 숫자 하나가 아니라
행렬이 나온다.
⎣⎡135⎦⎤[789]=⎣⎡721358244092745⎦⎤ 이 행렬의 열을 하나씩 보자. 열벡터를 u=(1,3,5), 행벡터를
vT=(7,8,9) 라 하면, 곱의 (i,j) 성분은 uivj 이다. j 를 고정하고
i 를 훑으면
(uvT)의 j열=⎣⎡u1vju2vju3vj⎦⎤=vj⎣⎡u1u2u3⎦⎤=vju 이 된다. 즉 모든 열이 같은 벡터 u 의 배수이고, 배수만 vj 로 다르다.
예제에서는 세 열이 각각 7u, 8u, 9u 이다. 같은 계산을 행에 대해 하면
모든 행이 vT 의 배수임을 알 수 있다. 세 열이 모두 한 직선 위에 놓인다.

Figure 2:열 하나와 행 하나를 곱하면 행렬이 나온다. 그 행렬의 세 열은 모두 같은 직선 위에 있다.
이런 행렬을 랭크 1 행렬(rank one matrix)이라 한다. 랭크가 정확히 무엇인지는 뒤에서 정의하지만,
지금은 "열들이 만들어내는 것이 직선 하나뿐"이라는 뜻으로 이해하면 된다.
이제 곱셈 전체를 이런 조각들의 합으로 쓸 수 있다.
AB=k=1∑n(A의 k열)(B의 k행) 이 식이 정말 성립하는지 성분으로 확인해 보자. A 의 k 열은 성분이 a1k,…,amk 이고
B 의 k 행은 성분이 bk1,…,bkp 이다. (11)에서 본 것처럼 이 둘을
곱한 행렬의 (i,j) 성분은 두 성분을 그냥 곱한 것이다.
[(A의 k열)(B의 k행)]ij=aikbkj 이제 k 에 대해 모두 더하면 다음과 같다.
[k=1∑n(A의 k열)(B의 k행)]ij=k=1∑naikbkj 우변은 (4)의 우변, 즉 (AB)ij 와 정확히 같다. 모든 (i,j) 에서 같으므로
두 행렬이 같다.
이 계산을 다시 보면 두 관점의 차이가 무엇인지 드러난다. 성분 관점은 (i,j) 를 고정해 놓고
k 에 대해 더했다. 열 × 행 관점은 반대로 k 를 고정해 행렬 하나를 만든 다음, 마지막에
k 에 대해 더한다. 같은 이중 합에서 더하는 순서를 바꾼 것이다.
예제에서는 n=2 이므로 항이 두 개이다.
⎣⎡721358244092745⎦⎤+⎣⎡204060224466244872⎦⎤=⎣⎡27619530681063375117⎦⎤ (3)의 결과와 같다. 행렬 곱은 랭크 1 행렬들의 합이다.
지금은 이 관점이 어디에 쓰이는지 잘 보이지 않을 것이다. 성분·열·행 관점은 계산과 바로
연결되지만 이것은 그렇지 않다. 이 관점은 행렬을 분해할 때 쓰인다. 주어진 행렬을 랭크 1
조각들의 합으로 쪼개는 일이 뒤에서 여러 번 나온다.
네 관점을 정리하면 다음과 같다. 네 방법은 같은 답을 주지만, 같은 것을 알려 주지는 않는다.
| 관점 | AB 를 어떻게 보는가 | 주로 쓰이는 곳 |
|---|
| 성분 | (i,j) 성분 = i 행과 j 열의 내적 | 손으로 계산할 때 |
| 열 | 각 열이 A 의 열들의 선형결합 | Ax 의 의미, 열공간 |
| 행 | 각 행이 B 의 행들의 선형결합 | 소거 EA |
| 열 × 행 | 랭크 1 행렬들의 합 | 행렬을 분해할 때 |
5. 블록 곱셈 (Block multiplication)¶
행렬을 작은 덩어리로 나누어도 곱셈 규칙은 그대로 성립한다. 예를 들어 두 행렬을 각각 네 개의
블록으로 나누면 다음과 같이 된다.
[A1A3A2A4][B1B3B2B4]=[A1B1+A2B3A3B1+A4B3A1B2+A2B4A3B2+A4B4] 성분 대신 블록이 들어갔을 뿐 형태가 같다. 블록의 크기가 서로 맞기만 하면 된다.
이것이 성립하는 이유도 (4)의 합에서 나온다. (AB)ij=∑kaikbkj 에서
k 가 도는 범위를 앞쪽 묶음과 뒤쪽 묶음으로 갈라 따로 더한 다음 합쳐도 결과는 같다.
k=1∑naikbkj=A1B1 쪽k≤r∑aikbkj+A2B3 쪽k>r∑aikbkj k 를 어디서 자르느냐가 곧 A 를 세로로, B 를 가로로 어디서 자르느냐이다. 그래서 두 행렬의
자르는 위치가 서로 맞아야 한다는 조건이 붙는다.
사실 앞의 네 관점이 전부 블록 곱셈의 특수한 경우이다. B 를 열 단위로 쪼개면 열 관점이 되고,
A 를 행 단위로 쪼개면 행 관점이 되며, A 를 열로 B 를 행으로 쪼개면 열 × 행 관점이 된다.
큰 행렬을 실제로 곱할 때 블록 단위로 나누는 이유는 계산 순서를 바꿀 수 있기 때문이다.
한 번 읽어 온 블록을 메모리에 두고 여러 번 쓰면 훨씬 빠르다.
6. 역행렬 (Inverse matrix)¶
이제 두 번째 주제로 넘어간다. 어떤 정방행렬 A 에 대해 다음을 만족하는 행렬이 있으면
그것을 A 의 역행렬이라 하고 A−1 로 적는다.
A−1A=I,AA−1=I 여기서 I 는 대각 성분이 모두 1이고 나머지가 0인 단위행렬(identity matrix)이다.
어떤 행렬에 곱해도 그 행렬을 그대로 돌려준다.
정방행렬에서는 두 조건 중 하나만 확인해도 나머지가 따라온다. 정방이 아닌 경우에는 왼쪽에서
곱하는 역행렬과 오른쪽에서 곱하는 역행렬이 달라지는데, 이것은 뒤에서 따로 다룬다.
역행렬은 존재한다면 하나뿐이다. B 와 C 가 모두 A 의 역행렬이라고 하자. 그러면
BA=I 이고 AC=I 이므로, 곱 BAC 를 두 가지로 묶어 계산할 수 있다.
B(AC)=BI=B,(BA)C=IC=C 행렬 곱셈에는 결합법칙이 성립하므로 두 값이 같아야 한다. 따라서 B=C 이다.
이 덕분에 "A 의 역행렬"이라고 부르며 A−1 이라는 하나의 기호를 쓸 수 있다.
역행렬이 있는 행렬을 가역(invertible) 또는 비특이(nonsingular)라 하고, 없는 행렬을
특이(singular)라 한다.
역행렬이 있으면 Ax=b 의 해를 바로 쓸 수 있다. 양변 왼쪽에 A−1 을 곱하면 된다.
Ax=b⟹A−1Ax=A−1b⟹x=A−1b 곱의 역행렬¶
두 가역행렬의 곱도 가역이고, 그 역행렬은 순서가 뒤집힌다.
(AB)−1=B−1A−1 확인은 곱해 보면 된다. 가운데부터 지워진다.
(AB)(B−1A−1)=A(BB−1)A−1=AIA−1=AA−1=I 순서를 그대로 두어 A−1B−1 로 쓰면 가운데가 B−1A 가 되어 지워지지 않는다.
AB 는 B 를 적용한 뒤 A 를 적용한 것이므로, 되돌릴 때는 나중에 한 A 부터 되돌려야 한다.
7. 역행렬이 없는 경우¶
어떤 행렬이 역행렬을 갖지 못하는가? 판정 기준 하나를 먼저 적어 둔다.
이유는 두 줄이면 된다. 만약 A−1 이 존재한다고 하자. Ax=0 의 양변 왼쪽에
A−1 을 곱하면 x=A−10=0 이 된다. 이것은 x=0 이라는
가정에 어긋난다. 따라서 A−1 은 존재할 수 없다.
예를 들어 다음 행렬을 보자.
A=[1236],A[3−1]=[00] 이런 x 를 어떻게 찾았는가. 열 관점으로 보면 바로 보인다. 두 번째 열이 첫 번째 열의
3배이므로, 첫 번째 열을 3배 한 것에서 두 번째 열을 한 번 빼면 0이 된다.
3[12]−1[36]=[3−36−6]=[00] 계수 (3,−1) 이 곧 (23)의 x 이다. 0이 아닌 벡터가 0으로 가므로
이 행렬에는 역행렬이 없다.
(34)의 공식으로도 같은 결론이 나온다. ad−bc=1⋅6−3⋅2=0
이므로 분모가 0이 되어 공식을 쓸 수 없다.
기하적으로 보면¶
행렬을 변환으로 보면 이 상황이 더 분명해진다. 단위 정육면체의 여덟 꼭짓점에 A 를 곱해서
어디로 가는지 그려 보자.

Figure 3:단위 정육면체(회색)가 A 에 의해 옮겨진 모습(주황). 왼쪽은 부피가 있는 입체이고,
오른쪽은 완전히 납작한 평면 조각이다.
왼쪽은 정육면체가 기울어진 입체가 되었다. 부피가 있고, 도착한 점을 보면 어느 점에서 왔는지
알 수 있다. 오른쪽은 세 번째 열이 앞의 두 열의 합이어서 정육면체가 평면 위로 눌렸다.
부피가 0이다.
납작해졌다는 것은 서로 다른 두 점이 같은 곳으로 갔다는 뜻이다. 도착점만 보고 출발점을
알아낼 방법이 없으므로 되돌리는 변환을 만들 수 없다. 역행렬이 없다는 것은 계산이 안 된다는
뜻이 아니라 정보가 사라졌다는 뜻이다.
지금까지 세 강의에서 같은 상황을 세 가지 언어로 말한 셈이다.
| 강의 | 같은 상황을 부르는 말 |
|---|
| L1 | 열들이 한 평면 안에 놓여 공간을 다 채우지 못한다 |
| L2 | 소거를 해도 피벗이 n 개 나오지 않는다 |
| L3 | Ax=0 을 만족하는 x=0 이 있고, 역행렬이 없다 |
8. 가우스-조르당 (Gauss-Jordan)¶
역행렬이 있다면 어떻게 구하는가. AA−1=I 를 열 관점으로 보면 답이 나온다.
A−1 의 열을 c1,…,cn 이라 하고 I 의 열을 e1,…,en
이라 하면, (6)에 의해 다음이 성립한다.
Acj=ej(j=1,…,n) 즉 역행렬을 구하는 일은 계수행렬이 모두 A 로 같은 연립방정식 n 개를 푸는 일이다.
계수행렬이 같으므로 소거 과정도 같다. 우변만 여러 개 붙여 놓고 한꺼번에 처리하면 된다.
지난 강의에서 [A∣b] 를 썼던 것처럼, 이번에는 [A∣I] 를 놓고 소거한다.
[A∣I]⟶[I∣A−1] 다만 지난 강의와 달리 위삼각행렬에서 멈추지 않는다. 대각선 위쪽까지 0으로 만들고 피벗을
1로 맞춰 왼쪽을 I 로 만든다. 이렇게 위아래를 모두 소거하는 방법을
가우스-조르당 소거법(Gauss-Jordan elimination)이라 한다.
예제로 확인해 보자.
[12371001](2행)−2(1행)[10311−201](1행)−3(2행)[10017−2−31] A−1=[7−2−31] 곱해 보면 AA−1=I 가 된다.
2 × 2 행렬의 역행렬 공식¶
같은 절차를 숫자 대신 문자로 해 보면 잘 알려진 공식이 그대로 나온다.
A=[acbd] 를 놓고 a=0 이라 하자.
첫 번째 피벗은 a 이고, 곱수는 c/a 이다.
[acbd1001](2행)−ac(1행)⎣⎡a0bd−abc1−ac01⎦⎤ 두 번째 피벗이 나왔다. 통분하면 다음과 같다.
d−abc=aad−bc 이 값이 0이면 소거가 끝까지 가지 못하므로 역행렬이 없다. 0이 아니라고 하고 계속 진행하자.
두 번째 행을 이 피벗으로 나누어 1로 만든다. 나누는 것은 a/(ad−bc) 를 곱하는 것과 같으므로
⎣⎡a0b11ad−bc−c0ad−bca⎦⎤ 이 된다. 이제 첫 번째 행에서 두 번째 행의 b 배를 빼서 위쪽을 0으로 만든다. 오른쪽 블록의
첫 성분은
1−b⋅ad−bc−c=ad−bc(ad−bc)+bc=ad−bcad 이고, 둘째 성분은 0−b⋅a/(ad−bc)=−ab/(ad−bc) 이다.
⎣⎡a001ad−bcadad−bc−cad−bc−abad−bca⎦⎤ 마지막으로 첫 번째 행을 a 로 나누면 왼쪽이 단위행렬이 되고, 오른쪽에 역행렬이 남는다.
A−1=ad−bc1[d−c−ba] 분모의 ad−bc 는 (30)에서 두 번째 피벗으로 등장했던 값이다. 공식을 외워서
쓰는 경우가 많지만, 실제로는 소거를 문자로 한 번 해 본 결과일 뿐이다. 앞의 예제
A=[1237] 에 넣어 보면 ad−bc=7−6=1 이므로
(28)의 결과와 같아진다.
왜 오른쪽에 A−1 이 남는가¶
지난 강의의 관점을 쓰면 바로 설명된다. 소거의 전 과정을 행렬 E 하나로 쓸 수 있었다.
증강행렬에 E 를 곱하는 것은 두 블록에 각각 곱하는 것과 같으므로((16)),
E[A∣I]=[EA∣E] 이다. 우리는 왼쪽이 I 가 될 때까지 소거했으므로 EA=I 이고, 이는 E=A−1 이라는 뜻이다.
그러므로 오른쪽 블록에 남는 E 가 곧 A−1 이다. 단위행렬을 옆에 붙여 둔 것은
소거 과정을 그대로 기록하기 위한 장치였던 셈이다.
마치며...¶
이번 강의에서 다룬 것을 정리하면 다음과 같다.
| 대상 | 내용 |
|---|
| 곱셈의 네 관점 | 성분 / 열 / 행 / 열 × 행 |
| 랭크 1 행렬 | 열 하나와 행 하나의 곱. 모든 열이 한 직선 위에 있다 |
| 블록 곱셈 | 블록 크기만 맞으면 성분 곱셈과 같은 형태로 계산된다 |
| 역행렬 | A−1A=AA−1=I. (AB)−1=B−1A−1 |
| 역행렬이 없는 조건 | Ax=0 인 x=0 이 존재한다 |
| 가우스-조르당 | [A∣I]→[I∣A−1] |
행렬 곱셈은 네 가지로 볼 수 있고, 그중 열 × 행 관점은 곱을 랭크 1 행렬들의 합으로 본다.
역행렬에서는 없는 경우가 무엇을 뜻하는지가 중요했다. 변환이 공간을 납작하게 만들면 서로 다른
점이 같은 곳으로 가고, 그러면 되돌릴 수 없다.
이제 우리는 소거를 행렬로 쓸 줄 알고, 그 행렬을 되돌리는 방법도 안다. 이 둘을 합치면 무엇이
되는가? 소거 행렬들을 왼쪽에서 오른쪽으로 넘기면 A 를 두 개의 삼각행렬의 곱으로 쓸 수 있다.
다음 강의에서는 이 책의 첫 번째 분해인 A=LU 에 대해 알아보도록 하자.
이번 강의의 내용을 파이썬으로 확인해 보려면 L3 실습 노트북으로 넘어가면 된다.
네 가지 관점을 각각 함수로 구현해 결과가 같은지 확인하고, 정육면체가 변환되는 모습을
회전시켜 볼 수 있다.