Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 처음 만나는 AI수학 with Python
- 자료구조와 함께 배우는 알고리즘 입문
- 목록처리
- d
- Kernighan의 C언어 프로그래밍
- 스프링부트핵심가이드
- 알파회계
- 코드로배우는스프링웹프로젝트
- 서버설정
- 자바편
- resttemplate
- 친절한SQL튜닝
- 네트워크 설정
- 페이징
- 스프링 시큐리티
- ㅒ
- GIT
- iterator
- 처음 만나는 AI 수학 with Python
- baeldung
- /etc/network/interfaces
- 데비안
- 코드로배우는스프링부트웹프로젝트
- 이터레이터
- 선형대수
- network configuration
- 티스토리 쿠키 삭제
- 구멍가게코딩단
- 자료구조와함께배우는알고리즘입문
- 리눅스
Archives
- Today
- Total
bright jazz music
선형대수: 10. 역행렬(inverse matrix)과 행렬식(determinant) 본문
역행렬 (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.]]
'Math > 선형대수' 카테고리의 다른 글
선형대수: 12. 선형변환(linear transformation) (0) | 2022.07.30 |
---|---|
선형대수: 11. 벡터 그리기 (화살표 그리기) (0) | 2022.07.30 |
선형대수 : 9. 단위행렬 (0) | 2022.07.28 |
선형대수 : 8. 전치(transpose) (0) | 2022.07.27 |
선형대수 : 7. 행렬의 요소별 곱(아다마르 곱) (0) | 2022.07.26 |
Comments