Math/선형대수
선형대수: 10. 역행렬(inverse matrix)과 행렬식(determinant)
bright jazz music
2022. 7. 29. 08:45
역행렬 (inverse matrix)
- 스칼라에 그 역수를 곱하면 1이 된다. 예) 3 x 1/3 = 1
- 이와 같이 행렬에도 곱하면 단위행렬이 되는 행렬이 존재한다.
- 그것이 역행렬이다.
역행렬의 표시
LaTex | 수식 |
$A^{-1}$ | ![]() |
행렬과 역행렬의 관계
LaTex | 수식 |
$A^{-1}A = AA^{-1} = E$ | ![]() |
단, 위와 같은 관계가 되려면 행렬 A가 행과 열의 수가 같은 정방행렬(square matrix여야 한다)
- 아래의 경우 C와 D는 순서에 상관 없이 행렬곱을 해도 단위행렬이 된다.
- 따라서 역행렬 관계가 성립한다.
LaTex | 수식 |
$C = \begin{pmatrix} 1 & 2 \\ 1& 2 \end{pmatrix} D = \begin{pmatrix} 2 & -1 \\ -1 & 1 \end{pmatrix} \\ CD = DC =\begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}$ | ![]() |
행렬식(determinant)
- 행렬에 따라서 역행렬이 존재하지 않을 수 있다.
- 역행렬 존재 여부는 행렬식을 사용하여 판별할 수 있다.
*determinant : 결정자, 결정하는 것
행렬식의 표시
정방행렬 A가 존재한다.
이 행렬의 행렬식은 아래와 같다.
LaTex | 수식 |
$|A| = det A = ad-bc$ | ![]() |
행렬식이 0인 경우 (ad - bc = 0)
- 역행렬은 존재하지 않는다.
- 아래 행렬의 경우 ad - bc = 0 이므로 역행렬이 존재하지 않는다.
행렬식이 0이 아닌 경우(ad - bc != 0)
- 역행렬이 존재한다.
- 역행렬이 존재하는 경우 다음 공식을 사용해 역행렬을 구할 수 있다.
LaTex | 수식 |
$A^{-1} = \frac{1}{ad-bc}\begin{pmatrix} d & -b \\ -c & a \end{pmatrix}$ | ![]() |
파이썬에서의 행렬식 구현
NumPy의 linalg.det() 함수를 사용하여 행렬식을 구할 수 있다.
import numpy as np
a = np.array([[1, 2],
[3, 4]])
print(np.linalg.det(a)) #행렬식이 0이 되지 않는 경우
print()
b = np.array([[1, 2],
[0, 0]])
print(np.linalg.det(b)) #행렬식이 0이 되는 경우
# -2.0000000000000004
# 0.0
파이썬에서의 역행렬 구현
역행렬이 존재하는 경우 NumPy의 linalg.inv() 함수를 사용해 역행렬을 구할 수 있다.
import numpy as np
a = np.array([[1, 2],
[3, 4]])
print(np.linalg.inv(a)) #역행렬
print()
b = np.array([[1, 2],
[0, 0]])
print(np.linalg.inv(b)) #행렬식이 0인 경우. 역행렬이 존재하지 않으므로 에러 발생
# [[-2. 1. ]
# [ 1.5 -0.5]]
#numpy.linalg.LinAlgError: Singular matrix
- singular matrix: 특이행렬 (역행렬이 존재하지 않으므로 특이. singular가 특이하다는 의미로 사용됨.)
- non-singular matrix: 비특이행렬 (역행렬이 존재). 비특이 행렬은 가역행렬(invertable matrix), 또는 정칙행렬(regular matrix)라고도 부른다.
참고:https://forajont.tistory.com/269
행과 열의 수가 많은 정방행렬은 역행렬을 손으로 계산할 때 아래와 같은 방법을 사용한다.
- 가우스 소거법(https://url.kr/todmkr)
- 여인수법 (부분행렬, https://url.kr/xzqm4o)
- etc.
그러나 NumPy의 linalg.inv() 함수를 사용하면 간단하게 계산이 가능하다.
역행렬은 인공지능에서 변수 간 상관관계를 알아보는 회귀 분석에 이용된다.
실습
#행렬 a의 행렬식을 구하고 역행렬이 존재하는 경우 역행렬까지 구하라
import numpy as np
a = np.array([[1, 1],
[1, 2]])
#행렬식
if np.linalg.det(a) != 0:
print(np.linalg.det(a))
print()
print(np.linalg.inv(a))
else:
print('The matrix a has no determinant')
# 1.0
# [[ 2. -1.]
# [-1. 1.]]