본 글은 [장철원 저 - 선형대수와 통계학으로 배우는 머신러닝 with 파이썬]을 읽고, 개인적으로 찾아본 내용을 더해 정리한 글입니다.
본 글에 나오는 소스코드들의 원본은 출판사의 github 레포지토리(https://github.com/bjpublic/LinearAlgebra) 에서 찾아볼 수 있습니다.
까먹었을 때 바로바로 확인하기 위한 용도로 정리하는 것이기에, 제 필요에 따라 생략, 변형 및 추가된 내용이 많습니다.
책의 내용을 그대로 담지 않도록 노력하였으나, 혹여 문제가 있다면 cuffyluv.1@gmail.com으로 연락주시기 바랍니다.
- 행렬식(determinant)
: 정사각 행렬을 스칼라로 변환하는 함수
: det(A) 또는 |A| 로 표기.
: 행렬식을 구한다는 것은 부피(또는 넓이)를 구한다는 것과 동일.
- 2x2 행렬의 행렬식
: 너무 쉬워서 생략
- 3x3 행렬의 행렬식
: 다변수미적분학에서 배운 것처럼 하면 됨.
- 원소 aij의 소행렬식(minor of entry aij)
: 행렬의 i행과 j행을 제외하고 구성된 부분 행렬의 행렬식
: 표기 : Mij
- 원소 aij의 여인수(cofactor of entry aij)
: Cij = [ (-1)^(i+j) ]*Mij
- 여인수 전개(cofactor expansion) 또는 라플라스 전개(Laplace Expansion)
: 특정 행을 정하고 해당 행에 대한 원소와 여인수를 곱한 값을 모두 합하여 행렬식을 계산하는 방법.
(증명 방법은 따로 기재 안돼있길래 찾아봤는데 좀 많이 어려워보여서 일단 넘어가…)
- 삼각 행렬의 행렬식 = 주 대각 원소의 곱
** 증명 : 여인수 전개
https://blockchainstudy.tistory.com/129
- 대각 행렬의 행렬식 = 주 대각 원소의 곱
→ (자연스레) 단위 행렬의 행렬식 또한 주 대각 원소의 곱임.
** 증명 : 여인수 전개
- 전치 행렬의 행렬식
행렬 A가 정사각 행렬이면, det(A) = det(A^T) 임.
** 증명 : 여인수 전개
- 특정 행 또는 열의 원소가 모두 0일 때의 행렬식 = 0
(여인수가 모두 0이되기 때문.)
** 증명 : 라이프니츠 공식
- 행렬의 기본 행 연산과 행렬식
a) 한 행에 영이 아닌 상수를 모두 곱한다.
: 행렬 A의 특정 행 또는 열을 k배 한 행렬을 행렬 B라고 하면,
→ kdet(A) = det(B)
** 증명 : 여인수 전개
b) 두 행을 교환한다.
: 정사각 행렬 A의 두 행 또는 두 열을 교환해서 만든 행렬을 행렬 B라고 하면,
→ -det(A) = det(B)
** 증명 : 두 행을 교환하는 기본행렬(즉, 치환행렬)의 행렬식 = -1 사용
c) 한 행의 배수를 다른 행에 더한다.
: 정사각 행렬 A의 하나의 행 또는 열의 배수를 다른 행에 더해서 만든 행렬을 행렬 B라고 하면,
→ det(A) = det(B)
** 증명 : 스칼라배 하여 더하는 기본행렬(즉, 삼각행렬)의 행렬식 = 1 사용
- 중복된 행 또는 열을 갖는 행렬의 행렬식 = 0
** 증명1 : 중복되는 두 행 또는 열을 교환할 경우 det(B) = - det(A) 인데 B = A 이므로 det(A) = - det(A)임 따라서 det(A) = 0
** 증명2 : 중복되는 행에 -1을 곱해서 다른 행에 더해주면 한 행이 통째로 0이 되고 따라서 det = 0
→ 증명2가 더 잘 와닫는듯?
- 비례하는 행 또는 열을 갖는 행렬의 행렬식 = 0
** 증명 : 비례되는 행에 비례상수*(-1)을 곱한 후 다른 행에 더해주면 한 행이 통째로 0이 되고 따라서 det = 0
- 임의의 행렬 A를 가우스 소거법으로 소거하는 과정에서 만들어지는 모든 행렬은 원래의 행렬 A와 같은 행렬식을 가진다.
** 단, 상수배를 했을 경우 k만큼 곱해줘야 하며, 교환 연산을 했을 시 부호가 반대로 됨.
** 증명 : 기본 행 연산
(주의할 것!!! 해당 글 참고 : https://cuffyluv.tistory.com/38)
- 상삼각행렬의 행렬식은 대각 원소 d1, d2, ... dn들의 곱으로 구할 수 있다.
→ 결론 : A가 특이 행렬(singular matrix)이 아닐 때, 행렬식을 대각 원소들의 곱만으로 계산할 수 있다. (가우스 소거법을 하면 결국 대각 행렬의 꼴이 될 때까지 행렬식이 변하지 않으니)
** 증명 : 위쪽 방향으로의 가우스 소거법 사용.
- 정사각 행렬 A, B가 존재할 때, det(AB) = det(A)det(B)
** 증명 : 기본행렬로 나눠서 이해
책에 나온 것 외에도 더 많은 성질들이 많지만, 당장은 일단 이정도만 알아두고 넘어가자!
책에는 증명이 나와있지 않아서 일일이 구글링해서 찾아봐야 했다 ㅠㅠ
근데 다른 글들도 증명이 다 같진 않고 개개인 또는 책마다 다른 걸 보면 어느정도 와닫기만 하면 될 듯하다.
# 행렬식 계산 넘파이 실습
import numpy as np
A = np.array([[3,2,0], [-1,-3,6], [2,3,-5]])
detA = np.linalg.det(A)
print(detA)
# 5.000000000000002
# 부동 소수점때메 정확힌 안나옴
참고한 글들)
https://velog.io/@pdestiny2537/행렬식의-성질
이번 장은 책의 설명이 개인적으로 아쉬웠다. 성질들도 일부밖에 설명하지 않았고 증명도 생략되어 있어서 일일이 인터넷으로 찾아보며 보충 정리했다.
'Mathematics > Linear Algebra' 카테고리의 다른 글
[선형대수학] 8장 - 벡터 공간 <알고리즘 구현으로 배우는 선형대수 with 파이썬> (0) | 2024.09.03 |
---|---|
[선형대수학] 7장 - 역행렬 <알고리즘 구현으로 배우는 선형대수 with 파이썬> (0) | 2024.08.19 |
[선형대수학] 가우스 소거법에서 pivot은 1이어야 하는가? NO! (0) | 2024.08.19 |
[선형대수학] 5장 - 선형 시스템 <알고리즘 구현으로 배우는 선형대수 with 파이썬> (0) | 2024.08.19 |
[선형대수학] 4장 - 다양한 행렬 <알고리즘 구현으로 배우는 선형대수 with 파이썬> (0) | 2024.08.16 |