관리 메뉴

bright jazz music

선형대수: 10. 역행렬(inverse matrix)과 행렬식(determinant) 본문

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 이므로 역행렬이 존재하지 않는다.

ad=0, 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



행과 열의 수가 많은 정방행렬은 역행렬을 손으로 계산할 때 아래와 같은 방법을 사용한다.


그러나 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.]]

 

 

Comments