[개발자를 위한 실전 선형대수학] 7.1 역행렬, 7.2 역행렬의 유형과 가역성의 조건, 7.3 역행렬 계산

[chapter7] 역행렬 : 행렬 방정식의 만능 키

1. 역행렬

행렬 A의 역행렬을 A와 곱해서 단위 행렬을 만드는 행렬 $A^{-1}$로, 행렬을 단위 행렬로 선형 변환하는 것이다.

하지만 모든 행렬에 역행렬이 존재하지는 않는다. 가역성에 대한 조건이 다른 세 가지 종류의 역행렬이 있다.

완전 역행렬

$A^{-1}A = AA^{-1} = I$를 의미한다.

행렬이 완전 역행렬을 가지려면 정방이면서, 최대계수(full rank)여야 한다.

모든 정방 최대계수 행렬은 역행렬을 가지고, 완전 역행렬을 갖는 모든 행렬은 정방이며 최대계수이다.

단방향 역행렬

단방향 역행렬은 정방이 아닌 행렬을 단위 행렬로 변환할 수 있지만, 하나의 곱셈 방향에 대해서만 동작한다.

높은 행렬 T는 왼쪽 역행렬을 가질 수 있다. 즉 $LT = I$지만 $ TL  \neq I$ 이다.

넓은 행렬 W는 오른쪽 역행렬을 가질 수 있다. 즉 $WR = I$지만  $ RW  \neq I$  이다.

정방이 아닌 행렬은 최대로 가능한 계수일 때만 단방향 역행렬을 가진다.

즉 높은 행렬은 계수가 N(최대열계수)이면 왼쪽 역행렬을 가지고, 넓은 행렬은 계수가 M(최대행계수)이면 오른쪽 역행렬을 가진다.

의사역행렬

모든 행렬에는 모양과 계수에 관계없이 의사역행렬(pseudo inverse)이 존재한다.

행렬이 정방 최대계수이면 의사역행렬은 완전 역행렬과 같다.

행렬이 정방이 아니면서 최대계수이면 의사역행렬은 왼쪽 역행렬 또는 오른쪽 역행렬과 같다.

축소계수 행렬 또한 의사역행렬을 가지며, 이때 의사 역행렬은 특이 행렬을 단위 행렬과 가깝지만 정확히는 다른 행렬로 변환한다.

완전 역행렬 또는 단방향 역행렬이 존재하지 않는 행렬을 특이 또는 비가역 행렬이라고 한다.

이는 행렬을 축소계수(reduced-rank) 또는 계수부족(rank-deficient)이라고 지칭하는 것과 같다.

2. 역행렬 계산

2x2 행렬의 역행렬

2x2 행렬의 역을 구하려면 대각 원소를 교환하고, 대각이 아닌 원소에 -1을 곱한다음, 행렬식으로 나눠야한다.

$$ A = \begin{bmatrix}a & b \\c & d \\\end{bmatrix},
A^{-1} = \frac{1}{ad-bc}\begin{bmatrix}d & -b \\-c & a \\\end{bmatrix}  $$

파이썬을 사용하면 아래와 같다.

A = np.array([[1,4],[2,7]])
Ainv = np.linalg.inv(A)
print(A@Ainv) 
#[[1. 0.]
# [0. 1.]]

하지만 이 식은 축소계수 행렬에서는 성립하지 않는다.

A = np.array([[1,4],[2,8]])
Ainv = np.linalg.inv(A)
print(A@Ainv) 
# LinAlgError: Singular matrix

임의의 정방 최대계수 행렬의 역행렬

역행렬을 계산하는 알고리즘에는 소행렬(minors matrix), 격자행렬(grid matrix), 여인수행렬(cofactors matrix), 수반행렬(adjugate matrix)이라고 하는 4개의 중간 행렬이 포함된다.

소행렬

소행렬은 부분행렬의 행렬식으로 구성된다. 

소행렬의 각 원소 $m_{i,j}$는 i번째 행과 j번째 열을 제외하고 만든 부분행렬의 행렬식이다.

$$ A = \begin{bmatrix}a_{11} & a_{12} & a_{13} \\a_{21} & a_{22} & a_{23} \\a_{31} & a_{32} & a_{33} \\\end{bmatrix} $$

행렬 A의 소행렬 $M_{22}$는 아래와 같다.

$$ M_{22} = \begin{bmatrix}a_{11} & a_{13} \\a_{31} & a_{33} \\\end{bmatrix} $$

격자행렬

격자행렬은 +1, -1을 교대로 사용하는 체스판같은 행렬이다. 아래 공식을 사용해 계산된다.

$$ g_{i,j} = -1^{i+j} $$

여인수행렬

여인수행렬은 소행렬과 격자행렬의 아다마르곱의 결과로 생성된다.

수반행렬

수반행렬은 여인수행렬의 전치이다.

정리해보면, 앞의 2x2 행렬에서의 역행렬을 구하는 식을 직관적으로 이해가능하다!

소행렬을 구하면, 그 소행렬의 원소는 행렬식이 된다.(소행렬은 행렬식으로 이루어진 행렬)

거기에 격자행렬을 아다마르곱하면 부호가 곱해지고 여인수행렬이된다.

그리고 여인수행렬을 전치한다. 이 과정을 거치면 원래 행렬에서 대각 원소를 서로 바꾸고, 대각 아닌 원소에 -1을 곱한 행렬에 행렬식이 곱해진 형태가 된다. 따라서 행렬식을 나누면 역행렬이 완성된다.

단방향 역행렬

단방향 역행렬을 찾는 방법은, 먼저 행렬 T를 정방으로 만들어야한다.

행렬 T를 정방으로 만들기 위해서는 전치를 곱하면된다.

비정방 행렬 $T$는 역행렬이 없지만, 최대열계수라면 $T^TT$는 정방·최대계수가 되어 역행렬을 가지며, 이를 이용해 왼쪽 역행렬을 구성할 수 있다.

왼쪽 역행렬은 아래 식처럼 구한다. 행렬 L은 행렬 T의 왼쪽 역행렬이다.(T가 최대열계수)

$$ L = (T^TT)^{-1}T^T $$

오른쪽 역행렬은 아래 식처럼 구한다. 행렬 R은 행렬 T의 오른쪽 역행렬이다.(T가 최대행계수)

$$R = T^T(TT^T)^{-1}$$