[DX] 역행렬 (Inverse Matrix)

김진우·2025년 6월 25일

DirectX

목록 보기
6/32
post-thumbnail

의미

역행렬(Inverse Matrix)이란, 어떤 정방행렬 AA에 대해 다른 행렬 A1A^{-1}이 존재하여 아래 조건을 만족할 때:

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

여기서 II단위행렬(Identity matrix)로, 곱셈에 대해 항등원 역할을 한다.

A1A^{-1}을 A에 대한 역행렬이라고 한다.

즉, 역행렬은 원래의 행렬 곱을 "되돌려주는" 역할을 한다.

역행렬이 존재하는 조건

역행렬은 다음 조건을 모두 만족해야 한다.
1. 정방행렬 (nxn) 이어야 함
2. 행렬식 det(A)0\det(A) \ne 0 이어야 함
→ 0이면 선형독립이 아니며, 되돌릴 수 없음

이런 행렬을 가역 행렬(invertible matrix) 또는 비특이 행렬(non-singular matrix)이라고 부른다.

2×2 행렬의 역행렬

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

단, adbc0ad - bc \ne 0이어야 역행렬이 존재한다.

3×3 이상의 행렬: 역행렬 구하는 방법

1. 가우스-조던 소거법 (Gauss-Jordan Elimination)

  • AA 옆에 단위행렬 II를 붙여 [AI][A|I] 형태로 만들고
  • 행 연산을 통해 AA를 단위행렬로 바꾸면, 그때 오른쪽에 남는 행렬이 A1A^{-1}이 된다.

예:

A=[211132100]A = \begin{bmatrix} 2 & 1 & 1 \\ 1 & 3 & 2 \\ 1 & 0 & 0 \end{bmatrix}

[A  I][A\ |\ I] 형태로 시작한다.

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

Step 1: 첫 번째 열의 피벗을 1로 만든다
행 1을 2로 나눈다:

R112R1[10.50.50.500132010100001]R_1 \leftarrow \frac{1}{2} R_1 \Rightarrow \begin{bmatrix} 1 & 0.5 & 0.5 & 0.5 & 0 & 0 \\ 1 & 3 & 2 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 0 & 1 \end{bmatrix}

Step 2: 첫 열 아래 원소들을 0으로 만든다

  • R2R2R1R_2 \leftarrow R_2 - R_1
  • R3R3R1R_3 \leftarrow R_3 - R_1
[10.50.50.50002.51.50.51000.50.50.501]\Rightarrow \begin{bmatrix} 1 & 0.5 & 0.5 & 0.5 & 0 & 0 \\ 0 & 2.5 & 1.5 & -0.5 & 1 & 0 \\ 0 & -0.5 & -0.5 & -0.5 & 0 & 1 \end{bmatrix}

Step 3: 두 번째 피벗을 1로 만든다
R212.5R2R_2 \leftarrow \frac{1}{2.5} R_2

[10.50.50.500010.60.20.4000.50.50.501]\Rightarrow \begin{bmatrix} 1 & 0.5 & 0.5 & 0.5 & 0 & 0 \\ 0 & 1 & 0.6 & -0.2 & 0.4 & 0 \\ 0 & -0.5 & -0.5 & -0.5 & 0 & 1 \end{bmatrix}

Step 4: 두 번째 열의 나머지를 0으로 만든다

  • R1R10.5R2R_1 \leftarrow R_1 - 0.5 \cdot R_2
  • R3R3+0.5R2R_3 \leftarrow R_3 + 0.5 \cdot R_2

결과:

[100.20.60.20010.60.20.40000.20.60.21]\begin{bmatrix} 1 & 0 & 0.2 & 0.6 & -0.2 & 0 \\ 0 & 1 & 0.6 & -0.2 & 0.4 & 0 \\ 0 & 0 & -0.2 & -0.6 & 0.2 & 1 \end{bmatrix}

Step 5: 세 번째 피벗을 1로 만든다
R3R3/(0.2)R_3 \leftarrow R_3 / (-0.2)

[100.20.60.20010.60.20.40001315]\Rightarrow \begin{bmatrix} 1 & 0 & 0.2 & 0.6 & -0.2 & 0 \\ 0 & 1 & 0.6 & -0.2 & 0.4 & 0 \\ 0 & 0 & 1 & 3 & -1 & -5 \end{bmatrix}

Step 6: 세 번째 열의 나머지를 0으로 만든다

  • R1R10.2R3R_1 \leftarrow R_1 - 0.2 \cdot R_3
  • R2R20.6R3R_2 \leftarrow R_2 - 0.6 \cdot R_3

결과:

[100001010213001315]\left[ \begin{array}{ccc|ccc} 1 & 0 & 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & -2 & 1 & 3 \\ 0 & 0 & 1 & 3 & -1 & -5 \end{array} \right]

➡ 왼쪽이 단위행렬, 오른쪽이 A1A^{-1}이 된다.

2. 여인자(cofactor)와 수반행렬(adjugate) 이용

A1=1det(A)adj(A)A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A)
  • adj(A): A의 수반행렬 (cofactor 행렬을 전치시킨 것)
  • 이 방식은 공식적으로 정의되지만, 계산량이 많아서 고차 행렬에서는 실용성이 떨어진다.

예시:

A=[4726]det(A)=4627=10A = \begin{bmatrix} 4 & 7 \\ 2 & 6 \end{bmatrix} \quad \Rightarrow \quad \det(A) = 4 \cdot 6 - 2 \cdot 7 = 10

수반행렬:

adj(A)=[6724]\text{adj}(A) = \begin{bmatrix} 6 & -7 \\ -2 & 4 \end{bmatrix}
A1=110[6724]A^{-1} = \frac{1}{10} \begin{bmatrix} 6 & -7 \\ -2 & 4 \end{bmatrix}

0개의 댓글