수학

MATH / 초급 44번

행렬식과 역행렬: ad−bc는 무엇을 재는 수인가

2×2 연립방정식을 문자로 끝까지 풀면 분모에 ad−bc가 나옵니다. 이 값이 곧 두 열이 만드는 평행사변형의 넓이이고, 0이면 해가 하나가 아닙니다. 여인수 전개로 3×3 행렬식을 계산하고, 2×2 역행렬 공식과 가우스-조던으로 3×3 역행렬까지 손으로 구합니다.

PALDYN Team41 MIN READ

지난 글 · 가우스 소거에서 2×2 연립방정식을 요령으로 푸는 것은 그냥 지나갔습니다. 이번에는 그 2×2 를 미지수 이름을 다 남긴 채 끝까지 풀어 봅니다.

{ax+by=ecx+dy=f\begin{cases} ax + by = e \\ cx + dy = f \end{cases}

첫 식에 dd 를 곱하고 둘째 식에 bb 를 곱해 빼면 yy 가 사라집니다.

(ad−bc) x=de−bf⟹x=de−bfad−bc(ad - bc)\,x = de - bf \quad\Longrightarrow\quad x = \frac{de - bf}{ad - bc}

분모에 ad−bcad - bc 가 나옵니다. 이 값이 0이 아닐 때에만 xx 가 유일하게 정해집니다. 0이면 나눌 수 없고 해가 하나로 정해지지 않습니다. 이 관찰이 이 글의 시작입니다.

행렬식의 정의

A=(abcd)A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} 의 행렬식은 ad−bcad - bc 이고 det⁡A\det A 로 적습니다. 세로 막대를 쳐서 ∣abcd∣=ad−bc\begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc 라 적기도 합니다.

이 수가 무엇을 재는지가 눈에 보입니다. AA 의 두 열을 24번 · 좌표평면과 직선의 좌표로 읽으면 첫 열이 점 (a,c)(a, c), 둘째 열이 점 (b,d)(b, d) 입니다. 원점과 이 두 점이 만드는 평행사변형의 넓이가 정확히 ∣ad−bc∣|ad - bc| 입니다.

두 열이 만드는 평행사변형의 넓이가 |ad-bc|

부호를 붙여 놓는 이유는 두 열의 순서에 따라 값이 달라지도록 하기 위함입니다 — 두 열을 맞바꾸면 넓이는 그대로지만 det⁡\det 는 부호가 뒤집힙니다. 그래서 "부호 있는 넓이"라고 부릅니다.

같은 분모를 갖는 두 해

yy 도 끝까지 풀어 두면 이 값의 지위가 분명해집니다. 이번에는 첫 식에 cc 를, 둘째 식에 aa 를 곱해 빼서 xx 를 없앱니다.

(cb−ad) y=ce−af⟹y=af−cead−bc(cb - ad)\,y = ce - af \quad\Longrightarrow\quad y = \frac{af - ce}{ad - bc}

분자와 분모의 부호를 함께 뒤집어 분모를 xx 쪽과 같은 모양으로 맞췄습니다. 두 해를 한 줄로 적으면 이렇습니다.

x=de−bfad−bc,y=af−cead−bcx = \frac{de - bf}{ad - bc}, \qquad y = \frac{af - ce}{ad - bc}

두 해가 같은 분모를 씁니다. 그래서 ad−bcad - bc 가 0인 순간 xx 와 yy 가 함께 무너집니다 — 둘 중 하나만 구해지는 일은 없습니다. 수를 넣어 확인해 봅니다. a=1,b=1,c=2,d=3,e=5,f=8a=1, b=1, c=2, d=3, e=5, f=8 이면 ad−bc=3−2=1ad - bc = 3 - 2 = 1 이고

x=3⋅5−1⋅81=7,y=1⋅8−2⋅51=−2x = \frac{3 \cdot 5 - 1 \cdot 8}{1} = 7, \qquad y = \frac{1 \cdot 8 - 2 \cdot 5}{1} = -2

원래 식 x+y=5x + y = 5 에 넣으면 7−2=57 - 2 = 5, 2x+3y=82x + 3y = 8 에 넣으면 14−6=814 - 6 = 8 로 맞습니다.

대각행렬과 삼각행렬

행렬식을 계산하지 않고 눈으로 읽을 수 있는 모양이 둘 있습니다. 대각행렬은 대각선 밖이 전부 0인 행렬이고, 삼각행렬은 대각선의 한쪽 편이 전부 0인 행렬입니다. 지난 글의 사다리꼴이 바로 위삼각행렬이었습니다.

∣2003∣=6−0=6,∣2503∣=6−0=6\begin{vmatrix} 2 & 0 \\ 0 & 3 \end{vmatrix} = 6 - 0 = 6, \qquad \begin{vmatrix} 2 & 5 \\ 0 & 3 \end{vmatrix} = 6 - 0 = 6

둘 다 대각 성분의 곱입니다. 0이 곱해지는 항이 통째로 사라지기 때문입니다. 이 성질은 크기가 커져도 그대로여서, 3×3 위삼각행렬도

∣214035007∣=2⋅3⋅7=42\begin{vmatrix} 2 & 1 & 4 \\ 0 & 3 & 5 \\ 0 & 0 & 7 \end{vmatrix} = 2 \cdot 3 \cdot 7 = 42

입니다. 대각선 위의 1, 4, 5 는 값에 아무 영향을 주지 않습니다. 셋째 절에서 이 성질을 거꾸로 써서, 소거로 삼각꼴을 만든 뒤 대각을 곱하는 계산법을 봅니다.

전체에 수를 곱하면

행렬 전체에 kk 를 곱하면 행렬식은 몇 배가 될까요. kk 배라고 답하기 쉽지만 그렇지 않습니다.

det⁡(kA)=∣kakbkckd∣=k2ad−k2bc=k2det⁡A\det(kA) = \begin{vmatrix} ka & kb \\ kc & kd \end{vmatrix} = k^2 ad - k^2 bc = k^2 \det A

넓이로 읽으면 당연합니다 — 두 변이 함께 kk 배로 늘어나므로 넓이는 k2k^2 배입니다. A=(1234)A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} 이면 det⁡A=−2\det A = -2 이고, 2A=(2468)2A = \begin{pmatrix} 2 & 4 \\ 6 & 8 \end{pmatrix} 의 행렬식은 16−24=−816 - 24 = -8 로 22×(−2)2^2 \times (-2) 입니다.

n×nn \times n 행렬이면 nn 개의 열이 함께 늘어나므로 det⁡(kA)=kndet⁡A\det(kA) = k^n \det A 입니다. 크기가 클수록 이 배수가 무섭게 커집니다.

정칙과 특이

det⁡A=0\det A = 0 은 두 열이 서로의 배수여서 평행사변형이 납작하게 눌린 상황입니다.

det=0: 두 열이 한 직선 위에 놓여 넓이가 0

같은 사실이 여러 언어로 다시 말해집니다.

언어 뜻
det⁡A=0\det A = 0 위에서 정의한 대로
평행사변형의 넓이가 0 두 열이 한 직선 위에 있음
한 열이 다른 열의 배수 두 방정식이 사실 하나
Ax=bAx = b 의 해가 하나가 아님 지난 글의 두 갈래(무한 또는 없음)로 감

이 넷은 완전히 같은 상황을 다른 말로 부른 것뿐입니다. 하나가 성립하면 넷 다 성립합니다.

det⁡A≠0\det A \ne 0 인 행렬은 정칙 행렬, 0인 행렬은 특이 행렬이라 부릅니다.

세 열이 만드는 부피

크기를 하나 올리면 넓이가 부피가 됩니다. 3×3 행렬의 세 열을 공간의 점 셋으로 읽으면, 원점과 그 셋이 만드는 기울어진 상자 — 이것을 평행육면체라 합니다 — 의 부피가 ∣det⁡A∣|\det A| 입니다.

그러면 det⁡=0\det = 0 이 뜻하는 것도 한 칸 올라갑니다. 2×2 에서는 두 열이 한 직선 위에 있어 넓이가 0이었고, 3×3 에서는 세 열이 한 평면 위에 있어 부피가 0입니다. 상자가 납작한 종이로 눌린 셈입니다.

C=(123011134)C = \begin{pmatrix} 1 & 2 & 3 \\ 0 & 1 & 1 \\ 1 & 3 & 4 \end{pmatrix}

셋째 열 (3,1,4)(3, 1, 4) 가 첫째 열 (1,0,1)(1, 0, 1) 과 둘째 열 (2,1,3)(2, 1, 3) 을 더한 것입니다. 셋째 점이 앞의 두 점이 만드는 평면 위에 놓여 있으니 부피가 0이어야 하고, 실제로 그렇습니다.

det⁡C=1(1⋅4−1⋅3)−2(0⋅4−1⋅1)+3(0⋅3−1⋅1)=1+2−3=0\det C = 1(1 \cdot 4 - 1 \cdot 3) - 2(0 \cdot 4 - 1 \cdot 1) + 3(0 \cdot 3 - 1 \cdot 1) = 1 + 2 - 3 = 0

계산 방법은 다음 절에서 세웁니다. 여기서 볼 것은 한 열이 다른 열들을 더하고 곱해 만들어지면 det⁡\det 가 0이라는 것입니다. 2×2 의 "한 열이 다른 열의 배수"가 그 가장 작은 경우였습니다.

행과 열의 대칭

지금까지 열로만 말했는데, 행으로 읽어도 결론이 똑같습니다. 행과 열을 맞바꾼 행렬을 전치행렬 ATA^\mathsf{T} 라 하는데, 2×2 로 확인하면

A=(1234),AT=(1324),det⁡A=4−6=−2=det⁡ATA = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, \quad A^\mathsf{T} = \begin{pmatrix} 1 & 3 \\ 2 & 4 \end{pmatrix}, \quad \det A = 4 - 6 = -2 = \det A^\mathsf{T}

입니다. 일반적으로 det⁡(AT)=det⁡A\det(A^\mathsf{T}) = \det A 가 성립하므로, 열에 대해 참인 모든 진술은 행에 대해서도 참입니다. 한 행이 다른 행의 배수여도 det⁡=0\det = 0 이고, 한 행이 다른 행들의 합이어도 그렇습니다.

∣1224∣=4−4=0\begin{vmatrix} 1 & 2 \\ 2 & 4 \end{vmatrix} = 4 - 4 = 0

이 행렬은 둘째 행이 첫째 행의 2배이면서 동시에 둘째 열이 첫째 열의 2배입니다. 2×2 에서는 한쪽이 성립하면 다른 쪽도 반드시 성립합니다.

특이 행렬의 소거

det⁡A=0\det A = 0 인 행렬을 지난 글의 소거에 넣으면 어떻게 되는지 직접 봅니다. A=(1224)A = \begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix} 로 Ax=(36)Ax = \begin{pmatrix} 3 \\ 6 \end{pmatrix} 을 풀어 봅니다.

[123246]→R2−2R1[123000]\left[\begin{array}{cc|c} 1 & 2 & 3 \\ 2 & 4 & 6 \end{array}\right] \xrightarrow{R_2 - 2R_1} \left[\begin{array}{cc|c} 1 & 2 & 3 \\ 0 & 0 & 0 \end{array}\right]

마지막 줄이 0=00 = 0 이 되어 해가 무한히 많습니다. 우변을 b=(37)b = \begin{pmatrix} 3 \\ 7 \end{pmatrix} 로 살짝 바꾸면

[123247]→R2−2R1[123001]\left[\begin{array}{cc|c} 1 & 2 & 3 \\ 2 & 4 & 7 \end{array}\right] \xrightarrow{R_2 - 2R_1} \left[\begin{array}{cc|c} 1 & 2 & 3 \\ 0 & 0 & 1 \end{array}\right]

이번엔 0=10 = 1 로 해가 없습니다. 특이 행렬은 우변에 따라 무한한 해와 아무 해도 없음 사이를 오갑니다 — 둘 중 어느 쪽이든 유일한 해는 없습니다. 지난 글의 말로 옮기면 피벗이 미지수 수보다 적게 나오는 행렬이 곧 특이 행렬입니다.

거의 특이한 행렬

det⁡\det 가 정확히 0은 아닌데 0에 아주 가까운 행렬이 있습니다. 성분만 보면 아무 문제가 없어 보입니다.

A=(1111.001),det⁡A=1⋅1.001−1⋅1=0.001A = \begin{pmatrix} 1 & 1 \\ 1 & 1.001 \end{pmatrix}, \qquad \det A = 1 \cdot 1.001 - 1 \cdot 1 = 0.001

성분은 전부 1 언저리인데 행렬식은 천분의 일입니다. 두 열 (1,1)(1,1) 과 (1,1.001)(1, 1.001) 이 거의 같은 방향이라 평행사변형이 아주 납작하기 때문입니다.

이 행렬이 바로 지난 글에서 계수를 조금 흔들었더니 해가 크게 튀던 그 연립의 계수행렬입니다. det⁡\det 가 0이 아니면 해는 분명히 하나인데, 0에 가까우면 그 하나가 불안합니다. 분모가 작으니 분자가 조금만 달라져도 몫이 크게 달라진다고 읽어도 됩니다. 지난 글에서 이름만 짚은 조건수가 이 "얼마나 가까운가"를 재는 값입니다.

여인수 전개

3×3 행렬식은 2×2로 되돌려 계산합니다.

전개 한 예

B=(210121012)B = \begin{pmatrix} 2 & 1 & 0 \\ 1 & 2 & 1 \\ 0 & 1 & 2 \end{pmatrix}

첫 행을 따라 이렇게 전개합니다 — 각 성분에 그 성분이 있는 행과 열을 지운 2×2 행렬식을 곱하고, 부호를 +,−,++, -, + 로 번갈아 붙여 더합니다.

det⁡B=2⋅∣2112∣−1⋅∣1102∣+0⋅∣1201∣\det B = 2 \cdot \begin{vmatrix} 2 & 1 \\ 1 & 2 \end{vmatrix} - 1 \cdot \begin{vmatrix} 1 & 1 \\ 0 & 2 \end{vmatrix} + 0 \cdot \begin{vmatrix} 1 & 2 \\ 0 & 1 \end{vmatrix}

각 2×2 행렬식을 계산합니다.

∣2112∣=4−1=3,∣1102∣=2−0=2,∣1201∣=1−0=1\begin{vmatrix} 2 & 1 \\ 1 & 2 \end{vmatrix} = 4 - 1 = 3, \quad \begin{vmatrix} 1 & 1 \\ 0 & 2 \end{vmatrix} = 2 - 0 = 2, \quad \begin{vmatrix} 1 & 2 \\ 0 & 1 \end{vmatrix} = 1 - 0 = 1

det⁡B=2⋅3−1⋅2+0⋅1=6−2=4\det B = 2 \cdot 3 - 1 \cdot 2 + 0 \cdot 1 = 6 - 2 = 4

이 방식을 여인수 전개라 합니다. 첫 행이 아니라 아무 행이나 열을 골라 전개해도 같은 값이 나오며, 0이 많은 줄을 고르면 계산이 짧아집니다. 크기가 커져도 같은 규칙이 그대로 통합니다 — 4×4 는 3×3 행렬식 네 개로, 5×5 는 4×4 행렬식 다섯 개로 되돌립니다.

행 연산과 행렬식

지난 글의 세 가지 행 연산이 행렬식을 어떻게 바꾸는지 알아 두면 계산이 훨씬 짧아집니다. 셋의 효과가 각각 다릅니다.

세 가지 행 연산이 행렬식에 미치는 효과

A=(1234)A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} 로 하나씩 확인합니다. 원래 det⁡A=−2\det A = -2 입니다.

연산 결과 행렬식
R1↔R2R_1 \leftrightarrow R_2 (3412)\begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix} 6−4=26 - 4 = 2 — 부호가 뒤집힘
R1→2R1R_1 \to 2R_1 (2434)\begin{pmatrix} 2 & 4 \\ 3 & 4 \end{pmatrix} 8−12=−48 - 12 = -4 — 2배
R2→R2−3R1R_2 \to R_2 - 3R_1 (120−2)\begin{pmatrix} 1 & 2 \\ 0 & -2 \end{pmatrix} −2−0=−2-2 - 0 = -2 — 그대로

셋째 줄이 가장 쓸모 있습니다. 소거에 쓰는 연산이 행렬식을 바꾸지 않습니다. 앞의 「전체에 수를 곱하면」과 비교해 두면 헷갈리지 않습니다 — 거기서는 nn 개의 행이 함께 늘어나 knk^n 배였고, 여기서는 한 행만 늘어나 kk 배입니다.

소거로 구하는 행렬식

셋째 연산이 행렬식을 바꾸지 않으니, 소거로 위삼각꼴을 만든 뒤 대각을 곱하면 그것이 곧 행렬식입니다. 위의 BB 로 해 봅니다.

R2→R2−12R1:(21003/21012)R_2 \to R_2 - \tfrac12 R_1: \quad \begin{pmatrix} 2 & 1 & 0 \\ 0 & 3/2 & 1 \\ 0 & 1 & 2 \end{pmatrix}

R3→R3−23R2:(21003/21004/3)R_3 \to R_3 - \tfrac23 R_2: \quad \begin{pmatrix} 2 & 1 & 0 \\ 0 & 3/2 & 1 \\ 0 & 0 & 4/3 \end{pmatrix}

두 연산 모두 행렬식을 그대로 두므로, 대각을 곱하면

det⁡B=2⋅32⋅43=4\det B = 2 \cdot \tfrac32 \cdot \tfrac43 = 4

입니다. 앞에서 여인수 전개로 구한 값과 같습니다. 도중에 행을 맞바꿨다면 맞바꾼 횟수만큼 부호를 뒤집어 주고, 한 행에 수를 곱했다면 그 수로 나눠 주면 됩니다.

전개의 연산 횟수

두 방법 가운데 어느 쪽을 쓸지는 크기가 정합니다. 여인수 전개는 n×nn \times n 을 (n−1)×(n−1)(n-1) \times (n-1) 짜리 nn 개로 쪼개고, 그 각각을 다시 쪼갭니다. 그래서 연산 횟수가 nn 부터 1까지를 모두 곱한 값 — n!n! 에 비례해 커집니다.

크기 nn 여인수 전개 소거 (n3/3n^3/3)
3 6 9
5 120 42
10 3,628,800 333

n=10n = 10 에서 이미 만 배 차이가 납니다. 손으로는 3×3까지 여인수 전개, 그보다 크면 소거라고 기억해 두면 됩니다. 크기가 작을 때 전개가 나쁘지 않은 것은 분수가 나오지 않아서이기도 합니다.

곱과 전치의 행렬식

행렬식이 곱셈과 어떻게 어울리는지를 봅니다.

곱의 행렬식

det⁡(AB)=det⁡A⋅det⁡B\det(AB) = \det A \cdot \det B 가 성립합니다. 2×2로 한 번 확인합니다.

A=(1234), B=(0110),det⁡A=−2,det⁡B=−1A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, \ B = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, \qquad \det A = -2, \quad \det B = -1

AB=(2143),det⁡(AB)=6−4=2=(−2)(−1) ✓AB = \begin{pmatrix} 2 & 1 \\ 4 & 3 \end{pmatrix}, \quad \det(AB) = 6 - 4 = 2 = (-2)(-1) \ \checkmark

넓이로 읽으면 이 성질이 자연스럽습니다. det⁡\det 를 "이 행렬이 넓이를 몇 배로 만드는가"로 읽으면, 두 행렬을 이어서 적용한 것의 배율은 각각의 배율을 곱한 값입니다. 3배로 늘리는 것과 2배로 늘리는 것을 이어 하면 6배가 되는 것과 같은 얼개입니다.

여기서 따라 나오는 결론이 하나 있습니다. det⁡A\det A 나 det⁡B\det B 가운데 하나라도 0이면 det⁡(AB)\det(AB) 도 0입니다 — 한 번 납작해진 것은 무엇을 곱해도 다시 부풀지 않습니다.

전치의 행렬식

det⁡(AT)=det⁡A\det(A^\mathsf{T}) = \det A 는 앞 절에서 이미 확인했습니다. 두 성질을 함께 쓰면 계산을 줄일 수 있습니다 — 어떤 행렬의 행렬식을 구하다 막히면 전치해서 0이 많은 줄을 찾아 전개해도 됩니다.

덧셈에는 없는 성질

곱셈에서 이렇게 깔끔하게 성립하니 덧셈에서도 그럴 것 같지만, det⁡(A+B)\det(A + B) 에 대응하는 성질은 없습니다. 반례 하나면 충분합니다.

A=(1001),B=(1001),det⁡A=det⁡B=1A = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, \quad B = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, \qquad \det A = \det B = 1

A+B=(2002),det⁡(A+B)=4≠1+1A + B = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix}, \qquad \det(A+B) = 4 \ne 1 + 1

앞에서 본 det⁡(kA)=kndet⁡A\det(kA) = k^n \det A 가 사실 같은 이야기입니다. A+A=2AA + A = 2A 의 행렬식은 det⁡A\det A 의 2배가 아니라 222^2 배였습니다. 넓이는 더하는 것이 아니라 늘어나는 것이라고 읽으면 헷갈리지 않습니다.

역행렬과 2×2 공식

이번에는 곱의 반대 방향입니다. 수 33 에 1/31/3 을 곱하면 1이 됩니다. 같은 것이 행렬에도 있습니다.

역행렬의 정의

정사각 행렬 AA 에 대해 AB=BA=IAB = BA = I 를 만족하는 BB 를 AA 의 역행렬이라 하고 A−1A^{-1} 로 적습니다. 역행렬은 있을 수도 없을 수도 있고, det⁡A≠0\det A \ne 0 일 때에만 있습니다.

있다면 하나뿐입니다. 이것은 한 줄로 보일 수 있습니다. BB 와 CC 가 둘 다 AA 의 역행렬이라고 해 봅니다.

B=BI=B(AC)=(BA)C=IC=CB = BI = B(AC) = (BA)C = IC = C

가운데에서 곱하는 순서를 바꾼 것이 아니라 묶는 자리만 옮겼다는 데 주의합니다. 행렬곱은 순서를 바꿀 수 없지만 묶는 자리는 옮겨도 되기 때문에 이 줄이 성립합니다. 결국 BB 와 CC 가 같은 행렬이므로 역행렬은 하나뿐입니다.

2×2 공식

A=(abcd),det⁡A=ad−bc≠0A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}, \quad \det A = ad - bc \ne 0 일 때

A−1=1ad−bc(d−b−ca)A^{-1} = \frac{1}{ad - bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}

대각선 자리는 서로 바꾸고, 반대 대각선 자리는 부호만 바꾸고, 전체를 det⁡A\det A 로 나눕니다. 앞에 붙는 1/(ad−bc)1/(ad - bc) 가 왜 필요한지는 실제로 곱해 보면 나옵니다.

AA−1=1ad−bc(abcd)(d−b−ca)=1ad−bc(ad−bc00ad−bc)=IAA^{-1} = \frac{1}{ad-bc}\begin{pmatrix} a & b \\ c & d \end{pmatrix}\begin{pmatrix} d & -b \\ -c & a \end{pmatrix} = \frac{1}{ad-bc}\begin{pmatrix} ad-bc & 0 \\ 0 & ad-bc \end{pmatrix} = I

앞의 1/(ad−bc)1/(ad-bc) 가 대각선의 ad−bcad-bc 를 1로 만들어 주는 자리입니다. 그리고 이것이 det⁡A=0\det A = 0 이면 나눌 수 없어 역행렬이 없다는 뜻이 왜 그런지의 이유입니다.

분수 앞에 선 (d−b−ca)\begin{pmatrix} d & -b \\ -c & a \end{pmatrix} 에도 이름이 있습니다. 수반행렬이라 하고 adj⁡A\operatorname{adj} A 로 적으며, 공식은 A−1=adj⁡A/det⁡AA^{-1} = \operatorname{adj} A / \det A 로 다시 쓸 수 있습니다. 크기가 큰 행렬에도 수반행렬이 정의되는데 그 성분 하나하나가 여인수라 계산량이 n!n! 규모가 됩니다. 2×2 공식은 이 일반 공식의 가장 작은 경우이고, 손으로 쓸 만한 것도 이 경우뿐입니다.

예를 들어 A=(3142)A = \begin{pmatrix} 3 & 1 \\ 4 & 2 \end{pmatrix} 라면 det⁡A=6−4=2\det A = 6 - 4 = 2 이므로

A−1=12(2−1−43)=(1−1/2−23/2)A^{-1} = \frac{1}{2}\begin{pmatrix} 2 & -1 \\ -4 & 3 \end{pmatrix} = \begin{pmatrix} 1 & -1/2 \\ -2 & 3/2 \end{pmatrix}

AA−1=(3142)(1−1/2−23/2)=(1001) ✓AA^{-1} = \begin{pmatrix} 3 & 1 \\ 4 & 2 \end{pmatrix}\begin{pmatrix} 1 & -1/2 \\ -2 & 3/2 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \ \checkmark

유일한 해

역행렬이 있으면 Ax=bAx = b 의 해가 하나뿐이라는 것도 곧바로 나옵니다. 양변 왼쪽에 A−1A^{-1} 을 곱합니다.

A−1(Ax)=A−1b⟹(A−1A)x=A−1b⟹x=A−1bA^{-1}(Ax) = A^{-1}b \quad\Longrightarrow\quad (A^{-1}A)x = A^{-1}b \quad\Longrightarrow\quad x = A^{-1}b

해가 무엇이든 이 계산을 거치면 A−1bA^{-1}b 가 되므로, 해가 둘일 수가 없습니다. 지난 글에서 "피벗이 모든 열에 있으면 해가 하나"라고 했던 것과 같은 말을 이번에는 역행렬로 적은 셈입니다.

역행렬의 행렬식

det⁡(A−1)\det(A^{-1}) 도 곱의 성질에서 한 줄로 나옵니다. AA−1=IAA^{-1} = I 의 양변에 행렬식을 취하고, det⁡I=1\det I = 1 임을 쓰면

det⁡A⋅det⁡(A−1)=1⟹det⁡(A−1)=1det⁡A\det A \cdot \det(A^{-1}) = 1 \quad\Longrightarrow\quad \det(A^{-1}) = \frac{1}{\det A}

넓이로 읽으면 이것도 당연합니다 — 넓이를 3배로 만드는 조작의 반대는 넓이를 1/31/3 배로 만드는 조작입니다. 그리고 이 식은 det⁡A=0\det A = 0 일 때 역행렬이 없다는 것을 다시 한 번 말해 줍니다. 0으로 나눌 수 없으니 det⁡(A−1)\det(A^{-1}) 이라는 수 자체가 있을 수 없습니다.

가우스-조던과 x = A⁻¹b

3×3 이상에서는 공식이 아니라 절차를 씁니다.

[A|I]에서 [I|A⁻¹]까지

첨가행렬 [A∣I][A \mid I] 를 만들어 행 연산으로 왼쪽이 II 가 되도록 소거하면 오른쪽이 A−1A^{-1} 이 됩니다. 이것을 가우스-조던 소거라 부릅니다. 지난 글에서 우변을 여러 열 붙여 한꺼번에 소거하던 요령을 우변 자리에 II 를 통째로 넣어 쓰는 것입니다.

가우스-조던: [A|I]에서 [I|A⁻¹]까지

B=(210121012)B = \begin{pmatrix} 2 & 1 & 0 \\ 1 & 2 & 1 \\ 0 & 1 & 2 \end{pmatrix} 의 역행렬을 이 절차로 구해 봅니다. 앞에서 det⁡B=4\det B = 4 였으므로 역행렬이 있습니다.

[210100121010012001]\left[\begin{array}{ccc|ccc} 2 & 1 & 0 & 1 & 0 & 0 \\ 1 & 2 & 1 & 0 & 1 & 0 \\ 0 & 1 & 2 & 0 & 0 & 1 \end{array}\right]

R1→12R1R_1 \to \tfrac{1}{2} R_1: [11/201/200121010012001]\left[\begin{array}{ccc|ccc} 1 & 1/2 & 0 & 1/2 & 0 & 0 \\ 1 & 2 & 1 & 0 & 1 & 0 \\ 0 & 1 & 2 & 0 & 0 & 1 \end{array}\right]

R2→R2−R1R_2 \to R_2 - R_1: [11/201/20003/21−1/210012001]\left[\begin{array}{ccc|ccc} 1 & 1/2 & 0 & 1/2 & 0 & 0 \\ 0 & 3/2 & 1 & -1/2 & 1 & 0 \\ 0 & 1 & 2 & 0 & 0 & 1 \end{array}\right]

R2→23R2R_2 \to \tfrac{2}{3} R_2: [11/201/200012/3−1/32/30012001]\left[\begin{array}{ccc|ccc} 1 & 1/2 & 0 & 1/2 & 0 & 0 \\ 0 & 1 & 2/3 & -1/3 & 2/3 & 0 \\ 0 & 1 & 2 & 0 & 0 & 1 \end{array}\right]

R3→R3−R2R_3 \to R_3 - R_2: [11/201/200012/3−1/32/30004/31/3−2/31]\left[\begin{array}{ccc|ccc} 1 & 1/2 & 0 & 1/2 & 0 & 0 \\ 0 & 1 & 2/3 & -1/3 & 2/3 & 0 \\ 0 & 0 & 4/3 & 1/3 & -2/3 & 1 \end{array}\right]

R3→34R3R_3 \to \tfrac{3}{4} R_3: [11/201/200012/3−1/32/300011/4−1/23/4]\left[\begin{array}{ccc|ccc} 1 & 1/2 & 0 & 1/2 & 0 & 0 \\ 0 & 1 & 2/3 & -1/3 & 2/3 & 0 \\ 0 & 0 & 1 & 1/4 & -1/2 & 3/4 \end{array}\right]

이제 위쪽으로도 소거합니다.

R2→R2−23R3R_2 \to R_2 - \tfrac{2}{3} R_3: 오른쪽 두 번째 행이 (−1/3−1/6, 2/3+1/3, −1/2)=(−1/2,1,−1/2)(-1/3 - 1/6, \ 2/3 + 1/3, \ -1/2) = (-1/2, 1, -1/2).

R1→R1−12R2R_1 \to R_1 - \tfrac{1}{2} R_2: 오른쪽 첫 번째 행이 (1/2+1/4,−1/2,1/4)=(3/4,−1/2,1/4)(1/2 + 1/4, -1/2, 1/4) = (3/4, -1/2, 1/4).

[1003/4−1/21/4010−1/21−1/20011/4−1/23/4]\left[\begin{array}{ccc|ccc} 1 & 0 & 0 & 3/4 & -1/2 & 1/4 \\ 0 & 1 & 0 & -1/2 & 1 & -1/2 \\ 0 & 0 & 1 & 1/4 & -1/2 & 3/4 \end{array}\right]

오른쪽이 B−1B^{-1} 입니다.

B−1=(3/4−1/21/4−1/21−1/21/4−1/23/4)B^{-1} = \begin{pmatrix} 3/4 & -1/2 & 1/4 \\ -1/2 & 1 & -1/2 \\ 1/4 & -1/2 & 3/4 \end{pmatrix}

검산으로 첫 성분만 확인합니다 — BB−1BB^{-1} 의 (1,1)(1,1) 성분은 BB 의 첫 행 (2,1,0)(2, 1, 0) 과 B−1B^{-1} 의 첫 열 (3/4,−1/2,1/4)(3/4, -1/2, 1/4) 의 곱의 합입니다.

2⋅34+1⋅(−12)+0⋅14=32−12=1 ✓2 \cdot \tfrac{3}{4} + 1 \cdot (-\tfrac{1}{2}) + 0 \cdot \tfrac{1}{4} = \tfrac{3}{2} - \tfrac{1}{2} = 1 \ \checkmark

(1,2)(1, 2) 성분도: 2⋅(−1/2)+1⋅1+0⋅(−1/2)=−1+1=0 ✓2 \cdot (-1/2) + 1 \cdot 1 + 0 \cdot (-1/2) = -1 + 1 = 0 \ \checkmark

절차가 멈추는 자리

역행렬이 없는 행렬에 같은 절차를 돌리면 어떻게 되는지도 봐 두어야 합니다. 행렬식을 먼저 구하지 않고 곧장 소거를 시작했을 때 무엇을 보고 멈출지를 알아야 하기 때문입니다.

[12102401]→R2−2R1[121000−21]\left[\begin{array}{cc|cc} 1 & 2 & 1 & 0 \\ 2 & 4 & 0 & 1 \end{array}\right] \xrightarrow{R_2 - 2R_1} \left[\begin{array}{cc|cc} 1 & 2 & 1 & 0 \\ 0 & 0 & -2 & 1 \end{array}\right]

왼쪽 둘째 행이 통째로 0이 되었습니다. 여기서 무엇을 더 해도 왼쪽 아래 칸에 1을 세울 수가 없습니다 — 0인 행에 무엇을 곱해도 0이고, 다른 행을 더하면 위쪽이 망가집니다. 왼쪽에서 0인 행이 나오면 그 자리에서 멈추고 "역행렬이 없다"고 답합니다. 오른쪽에 무엇이 적혀 있든 의미가 없습니다.

지난 글의 판별과 같은 신호입니다. 0인 행이 나온다는 것은 피벗이 모자란다는 뜻이고, 피벗이 모자라면 해가 하나가 아니고, 해가 하나가 아니면 역행렬이 없습니다.

순서가 뒤집히는 성질

역행렬에 얽힌 규칙 셋을 모아 둡니다.

식 읽는 법
(A−1)−1=A(A^{-1})^{-1} = A 되돌린 것을 되돌리면 제자리
(kA)−1=1kA−1(kA)^{-1} = \tfrac{1}{k}A^{-1} kk 배 늘린 것의 반대는 1/k1/k 배
(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

x = A⁻¹b

역행렬이 있으면 Ax=bAx = b 의 해를 x=A−1bx = A^{-1}b 로 적을 수 있습니다. 하지만 실제로 답을 낼 때는 대부분 지난 글의 가우스 소거가 더 빠릅니다. 역행렬을 구하는 일이 소거보다 품이 많이 들고, 나눗셈이 많아 자릿수 오차도 커지기 쉽습니다. 우변 하나를 위해 역행렬을 만드는 것은 손해입니다.

역행렬을 미리 만들어 두는 것이 이득인 자리는 드뭅니다. 같은 AA 에 우변이 아주 많이 들어올 때입니다. 역행렬을 한 번 만들어 두면 우변마다 곱셈 한 번으로 답이 나오기 때문입니다. 다만 그 자리에서도 지난 글에서 이름만 짚은 LU 분해가 대개 더 낫습니다 — 소거의 기록만 남기므로 역행렬을 통째로 만드는 것보다 품이 적게 듭니다.

x=A−1bx = A^{-1}b 라는 식은 계산 절차라기보다 해가 하나라는 사실을 한 줄로 적는 표기로 쓰입니다. 이 표기는 뒤에 나올 여러 식에서 계속 만나게 됩니다.

연습 문제

연습 1 — 2×2 행렬식과 역행렬

세 행렬 A=(3142), B=(2314), C=(2613)A = \begin{pmatrix} 3 & 1 \\ 4 & 2 \end{pmatrix}, \ B = \begin{pmatrix} 2 & 3 \\ 1 & 4 \end{pmatrix}, \ C = \begin{pmatrix} 2 & 6 \\ 1 & 3 \end{pmatrix} 에 대해 답하세요.

  1. 셋의 행렬식을 각각 구하세요. 어느 것이 역행렬을 갖지 않나요.
    det⁡A=6−4=2\det A = 6 - 4 = 2, det⁡B=8−3=5\det B = 8 - 3 = 5, det⁡C=6−6=0\det C = 6 - 6 = 0 입니다. CC 는 역행렬을 갖지 않습니다 — 두 열 (2,1)(2, 1) 과 (6,3)(6, 3) 이 3배 관계로 한 직선 위에 있습니다.
  2. AA 와 BB 의 역행렬을 공식으로 각각 구하세요.
    A−1=12(2−1−43)=(1−1/2−23/2)A^{-1} = \dfrac{1}{2}\begin{pmatrix} 2 & -1 \\ -4 & 3 \end{pmatrix} = \begin{pmatrix} 1 & -1/2 \\ -2 & 3/2 \end{pmatrix}, B−1=15(4−3−12)=(4/5−3/5−1/52/5)B^{-1} = \dfrac{1}{5}\begin{pmatrix} 4 & -3 \\ -1 & 2 \end{pmatrix} = \begin{pmatrix} 4/5 & -3/5 \\ -1/5 & 2/5 \end{pmatrix} 입니다.
  3. AA−1=IAA^{-1} = I 를 실제로 곱해 확인하세요.
    (3142)(1−1/2−23/2)=(3−2−3/2+3/24−4−2+3)=(1001)\begin{pmatrix} 3 & 1 \\ 4 & 2 \end{pmatrix}\begin{pmatrix} 1 & -1/2 \\ -2 & 3/2 \end{pmatrix} = \begin{pmatrix} 3 - 2 & -3/2 + 3/2 \\ 4 - 4 & -2 + 3 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} 입니다.

연습 2 — det=0의 결과

C=(2613)C = \begin{pmatrix} 2 & 6 \\ 1 & 3 \end{pmatrix} 를 씁니다.

  1. Cx=(42)Cx = \begin{pmatrix} 4 \\ 2 \end{pmatrix} 를 첨가행렬로 옮겨 소거하고 해의 갈래를 답하세요.
    [264132]→R2−12R1[264000]\left[\begin{array}{cc|c} 2 & 6 & 4 \\ 1 & 3 & 2 \end{array}\right] \xrightarrow{R_2 - \frac{1}{2}R_1} \left[\begin{array}{cc|c} 2 & 6 & 4 \\ 0 & 0 & 0 \end{array}\right]. 마지막 줄이 0=00 = 0 이므로 해가 무한히 많습니다.
  2. 우변을 (43)\begin{pmatrix} 4 \\ 3 \end{pmatrix} 으로 바꿔 같은 절차를 하면 어떻게 되나요.
    [264133]→R2−12R1[264001]\left[\begin{array}{cc|c} 2 & 6 & 4 \\ 1 & 3 & 3 \end{array}\right] \xrightarrow{R_2 - \frac{1}{2}R_1} \left[\begin{array}{cc|c} 2 & 6 & 4 \\ 0 & 0 & 1 \end{array}\right]. 마지막 줄이 0=10 = 1 이므로 해가 없습니다.
  3. 이 두 결과가 앞에서 정리한 "det⁡=0\det = 0 이면 해가 하나가 아니다"와 어떻게 맞아떨어지는지 한 문장으로 적으세요.
    det⁡C=0\det C = 0 이므로 유일한 해가 없고, 우변에 따라 해가 무한하거나(1번) 아예 없거나(2번) 둘 중 한 쪽으로 갑니다.

연습 3 — 3×3 여인수 전개와 곱의 행렬식

  1. D=(123014560)D = \begin{pmatrix} 1 & 2 & 3 \\ 0 & 1 & 4 \\ 5 & 6 & 0 \end{pmatrix} 의 행렬식을 첫 행에 대한 여인수 전개로 구하세요.
    det⁡D=1⋅∣1460∣−2⋅∣0450∣+3⋅∣0156∣=1(0−24)−2(0−20)+3(0−5)=−24+40−15=1\det D = 1 \cdot \begin{vmatrix} 1 & 4 \\ 6 & 0 \end{vmatrix} - 2 \cdot \begin{vmatrix} 0 & 4 \\ 5 & 0 \end{vmatrix} + 3 \cdot \begin{vmatrix} 0 & 1 \\ 5 & 6 \end{vmatrix} = 1(0-24) - 2(0-20) + 3(0-5) = -24 + 40 - 15 = 1 입니다.
  2. 같은 DD 의 행렬식을 두 번째 행(0이 있는 줄)에 대해 전개해 값이 같은지 확인하세요. 부호는 −,+,−-, +, - 로 시작합니다.
    det⁡D=−0⋅∣2360∣+1⋅∣1350∣−4⋅∣1256∣=0+1(0−15)−4(6−10)=−15+16=1\det D = -0 \cdot \begin{vmatrix} 2 & 3 \\ 6 & 0 \end{vmatrix} + 1 \cdot \begin{vmatrix} 1 & 3 \\ 5 & 0 \end{vmatrix} - 4 \cdot \begin{vmatrix} 1 & 2 \\ 5 & 6 \end{vmatrix} = 0 + 1(0-15) - 4(6-10) = -15 + 16 = 1. 같은 값입니다. 어느 행이나 열로 전개해도 결과가 같습니다.
  3. A=(1234), B=(2013)A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, \ B = \begin{pmatrix} 2 & 0 \\ 1 & 3 \end{pmatrix} 에 대해 det⁡(AB)=det⁡A⋅det⁡B\det(AB) = \det A \cdot \det B 를 확인하세요.
    det⁡A=−2\det A = -2, det⁡B=6\det B = 6. AB=(461012)AB = \begin{pmatrix} 4 & 6 \\ 10 & 12 \end{pmatrix} 이므로 det⁡(AB)=48−60=−12=(−2)(6)\det(AB) = 48 - 60 = -12 = (-2)(6) 로 성립합니다.

연습 4 — 소거로 구하는 행렬식

  1. E=(213438245)E = \begin{pmatrix} 2 & 1 & 3 \\ 4 & 3 & 8 \\ 2 & 4 & 5 \end{pmatrix} 를 행 연산으로 위삼각꼴까지 소거하고 대각을 곱해 행렬식을 구하세요. 쓴 연산이 행렬식을 바꾸는지 아닌지도 적으세요.
    R2→R2−2R1R_2 \to R_2 - 2R_1, R3→R3−R1R_3 \to R_3 - R_1 로 (213012032)\begin{pmatrix} 2 & 1 & 3 \\ 0 & 1 & 2 \\ 0 & 3 & 2 \end{pmatrix} 이 되고, R3→R3−3R2R_3 \to R_3 - 3R_2 로 (21301200−4)\begin{pmatrix} 2 & 1 & 3 \\ 0 & 1 & 2 \\ 0 & 0 & -4 \end{pmatrix} 이 됩니다. 셋 다 "한 행의 배수를 다른 행에 더하는" 연산이라 행렬식을 바꾸지 않습니다. 따라서 det⁡E=2⋅1⋅(−4)=−8\det E = 2 \cdot 1 \cdot (-4) = -8 입니다. 여인수 전개로 검산해도 2(15−32)−1(20−16)+3(16−6)=−34−4+30=−82(15 - 32) - 1(20 - 16) + 3(16 - 6) = -34 - 4 + 30 = -8 로 같습니다.
  2. F=(0231)F = \begin{pmatrix} 0 & 2 \\ 3 & 1 \end{pmatrix} 의 행렬식을 공식으로 구한 뒤, 두 행을 맞바꾼 행렬의 행렬식도 구해 부호를 비교하세요.
    det⁡F=0⋅1−2⋅3=−6\det F = 0 \cdot 1 - 2 \cdot 3 = -6 입니다. 맞바꾼 (3102)\begin{pmatrix} 3 & 1 \\ 0 & 2 \end{pmatrix} 의 행렬식은 3⋅2−1⋅0=63 \cdot 2 - 1 \cdot 0 = 6 으로 부호만 뒤집혔습니다.
  3. det⁡G=5\det G = 5 인 3×33 \times 3 행렬 GG 가 있습니다. det⁡(2G)\det(2G) 와 det⁡(G−1)\det(G^{-1}) 를 각각 구하세요.
    det⁡(2G)=23⋅5=40\det(2G) = 2^3 \cdot 5 = 40 입니다 — 세 열이 함께 2배가 되므로 232^3 배입니다. det⁡(G−1)=1/5\det(G^{-1}) = 1/5 입니다.

정리

  • 2×22 \times 2 행렬식은 det⁡A=ad−bc\det A = ad - bc 이고, 두 열이 만드는 평행사변형의 부호 있는 넓이입니다. xx 와 yy 가 이 값을 같은 분모로 나눠 쓰므로, 0이 되면 둘이 함께 무너집니다.
  • 대각행렬과 삼각행렬의 행렬식은 대각 성분의 곱입니다. 행렬 전체에 kk 를 곱하면 nn 개의 열이 함께 늘어나 det⁡(kA)=kndet⁡A\det(kA) = k^n \det A 입니다.
  • det⁡A=0\det A = 0 인 행렬이 특이 행렬, 아닌 것이 정칙 행렬입니다. 2×2 에서는 두 열이 한 직선 위, 3×3 에서는 세 열이 한 평면 위에 있다는 뜻이고, det⁡(AT)=det⁡A\det(A^\mathsf{T}) = \det A 라 행으로 읽어도 같습니다.
  • det⁡\det 가 0은 아닌데 0에 가까우면 해는 하나이지만 불안합니다. 지난 글에서 흔들리던 연립의 계수행렬이 그 예였습니다.
  • 3×33 \times 3 행렬식은 여인수 전개로 2×2 행렬식 셋으로 되돌려 계산합니다. 행 연산은 셋 다 효과가 달라서, 맞바꾸면 부호가 뒤집히고 한 행에 kk 를 곱하면 kk 배가 되며 다른 행의 배수를 더하면 그대로입니다.
  • 그래서 소거로 삼각꼴을 만든 뒤 대각을 곱해도 행렬식이 나옵니다. 여인수 전개는 n!n! 규모라 크기가 커지면 못 쓰고, 그때는 소거를 씁니다.
  • det⁡(AB)=det⁡A⋅det⁡B\det(AB) = \det A \cdot \det B 는 넓이 배율의 곱으로 읽힙니다. det⁡(A+B)\det(A + B) 에 대응하는 성질은 없습니다.
  • AA−1=A−1A=IAA^{-1} = A^{-1}A = I 인 행렬이 역행렬이고 det⁡A≠0\det A \ne 0 일 때에만, 그리고 있다면 하나만 있습니다. 2×22 \times 2 공식 A−1=adj⁡A/det⁡AA^{-1} = \operatorname{adj} A / \det A 는 일반 공식의 가장 작은 경우이고, det⁡(A−1)=1/det⁡A\det(A^{-1}) = 1/\det A 입니다.
  • 3×33 \times 3 이상은 가우스-조던으로 [A∣I][A \mid I] 를 [I∣A−1][I \mid A^{-1}] 로 소거합니다. 도중에 왼쪽에 0인 행이 나오면 거기서 멈추고 역행렬이 없다고 답합니다.
  • (AB)−1=B−1A−1(AB)^{-1} = B^{-1}A^{-1} 로 순서가 뒤집힙니다. x=A−1bx = A^{-1}b 는 해가 하나라는 사실을 적는 표기이고, 실제 계산은 소거가 더 빠르고 안정적입니다.

다음 글은 지금까지 다룬 수 하나짜리 함수의 자리에 입력이 둘인 함수를 세워, 곡면·등고선·단면 세 가지로 같은 함수를 보는 법을 익힙니다.


읽어주셔서 감사합니다. 😊

LATEST

수학의 최신 글

수학2026.09.07

양자화 오차: 격자 사상, 오차 분산, 이상치 채널

실수를 2^b개 격자에 사상할 때 오차의 분산이 왜 Δ²/12인지 유도하고, 그것이 비트당 6.02dB라는 SNR로 번역되는 과정을 실측과 대조했습니다. 이상치 하나가 나머지 값의 유효 비트를 어떻게 먹는지, 그리고 int4에서 성능이 무너지는 지점을 오차 예산으로 미리 계산하는 법까지.

중급18 MIN
수학2026.09.07

수치적으로 안정한 계산 패턴 모음

최댓값 빼기, 로그 공간, log1p·expm1, 분산의 두 공식, 정규화의 ε, fp32 누산, 역행렬 대신 solve — 프레임워크가 몰래 해 주는 일곱 가지를 하나씩 꺼내 각각 어떤 고장을 막는지 직접 재 봤습니다. 수식을 그대로 옮긴 코드가 왜 라이브러리보다 나쁜지에 대한 목록입니다.

중급22 MIN
수학2026.09.07

부동소수점은 어디서 새는가: 반올림, 상쇄, 더하는 순서

0.1 + 0.2가 0.3이 아닌 이유부터 시작해 머신 엡실론을 유도하고, 같은 16비트인데 fp16과 bf16이 서로 다른 지점에서 터지는 이유, 비슷한 수를 뺄 때 유효자리가 사라지는 파괴적 상쇄, 그리고 1,000만 개를 순서만 바꿔 더했을 때 오차가 백만 배 갈리는 실험까지 직접 재 봤습니다.

중급23 MIN