일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 김영평생교육원
- 컴공수학
- 가우스조르당소거법
- 한국기술교육대학교
- 가우스조던소거법
- 메가존아이티평생교육원
- 중간고사
- 학점은행제
- 컴퓨터공학
- lte라우터
- 학사
- 알고리즘
- determinant
- 행렬식의 정의
- 원격평생교육진흥원
- 라이프니츠 공식
- 정보처리기사 후기
- 행렬식
- 화웨이라우터
- 머신러닝
- LU분해 알고리즘 구현
- 정보처리기사 기출
- 정규방정식
- 행렬식 파이썬
- 여인수 전개
- 선형대수학
- 한국데이터산업진흥원
- LU분해
- LU분해 파이썬
- 선형회귀모델
- Today
- Total
gyeo-ri.com
수반행렬의 성질과 크래머의 공식 본문
수반행렬(Adjoint Matrix)의 정의
수반행렬은, 어떤 행렬의 각 원소에 대응하는 여인수 행렬을 만든 뒤, 그것을 전치시킨 것이다. 행렬 A가 정의되었을 때, 수반행렬 adj(A)는 다음과 같다.
A=|a11a12⋯a1na21a22⋯a2n⋮⋮⋮⋮an1an2⋯ann|⇔adj(A)=|C11C21⋯Cn1C12C22⋯Cn2⋮⋮⋮⋮C1nC2n⋯Cnn|
이때, 수반행렬 adj(A)는 여인수 행렬의 전치행렬이므로, 행렬 A와 행/열 인덱스의 순서가 반대이다(원소 aij에 대응하는 여인수 Cij는 adj(A)의 j행 i열에 위치).
* 이후 등장하는 공식에서 수반행렬의 각 원소 $C_{ji}의 인덱스에 유의하여야 한다.
행렬 A의 수반행렬을 구하는 코드는 다음과 같다(Github).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def adjoint_matrix(matrix_input):
matrix=matrix_input.copy()
dim = len(matrix)
adj = np.zeros((dim,dim)) #수반행렬을 담을 공간
for row in range(dim):
for col in range(dim): #행렬의 모든 원소를 반복
#해당 원소가 속한 행/열 제거
partial = np.delete(matrix,row,axis=0)
partial = np.delete(partial,col,axis=1)
C = det_gauss(partial) *(-1)**(row+col) #단일함수일 경우 행렬식 알고리즘을 그대로 구현
adj[col][row] = C #전치행렬이므로 행과 열을 반대로하여 adj에 삽입
return adj
|
cs |
임의의 4x4 행렬 A을 정의하고, 이 행렬의 수반행렬을 구한 결과는 다음과 같다.

수반행렬의 성질
행렬과 그 행렬의 수반행렬의 행렬곱을 X라고 정의하면, 즉 A⋅adj(A)=X일 때, 1≤i,j≤n인 i,j에 대하여 X의 i행 j열의 원소 xij를
xij=ai1⋅Cj1+ai2⋅Cj2+⋯+ain⋅Cjn=n∑k=1aki⋅Ckj 로 나타낼 수 있다.
이때 i,j=c로 i,j가 동일한 값을 가질 때, xcc=n∑k=1ack⋅Cck로, 행렬식 det(A)를 구하기 위해 c행 전개한 여인수 전개의 식과 동일하다. 즉 X의 대각원소는 모두 det(A)와 동일히다.
반면에, i=p,j=q로 i≠j일 경우, 행렬식과 유사하지만 동일하지는 않은 식이 전개되는데, X의 대각원소가 아닌 원소 xpq의 값은 n∑k=1apk⋅Cqk로, 행렬의 원소 apk와 여인수 Cqk가 서로 대응하지 않는다.
xpq는 행렬식을 구하기 위해 p행을 여인수 전개 할 때, p행과 k열을 소거하여 추출한 여인수 C_{kp}가 아닌, q행과 k열을 소거한 여인수 Ckq를 대응되는 원소에 곱해준 것과 같다. 일반적으로는 서로 대응하지 않는 원소와 여인수를 곱하는 것은 의미가 없지만, 만약 p≠q이지만, A의 행 rp=rq가 완전히 동일할 때는 행을 바꾸어 적용하여도 관계가 없다. 즉, xpq를 포함한 X의 비대각원소의 값은, 동일한 두 행을 가진 어떤 행렬A′의 행렬식과 같다고 할 수 있다.
사실, A`가 어떤 값을 가지는지와 관계 없이, 어떤 행렬이 완전히 동일한 두 행을 가진 경우, 그 행렬은 비가역행렬이며, det(A') = 0이다. 이전 포스팅에서 설명한 내용들을 포함하여, 이를 간단히 다음과 같이 증명할 수 있다.
1. 행렬 A'의 r_{p} 행에 r_{q} 행을 빼는 기본행연산(행의 상수배 덧셈)을 수행한다.
2. A' 행의 상수배 덧셈한 행렬 A''의 행렬식은 det(A'') = - det(A')이다(가우스 소거법을 활용한 행렬식 계산 참조).
3. det(A'')는 기본행 연산을 통해 모든 원소의 값이 0인 r_{p} 행이 존재하며, 모든 원소가 0인 행이 존재할 경우 그 행렬은 비가역행렬이다(행렬식의 연산에 행의 각 원소인 0이 모두 곱해져 행렬식의 값이 0이다).
\therefore det(A') = - det(A'') = 0
그러므로, X의 모든 비대각원소의 값은 0이다. X의 대각원소의 값은 det(A)이므로, 결국 X는 단위행렬을 행렬식의 값만큼 상수배(det(A) \cdot I)한 것과 같다. 이러한 성질을 바탕으로 아래의 공식들을 유도할 수 있다.
- 역행렬을 구하는 공식
- 크래머의 공식(Cramer's Rule)
역행렬(Inverse Matrix)
행렬 A의 역행렬 A^{-1}는 원래 행렬과 곱하여 단위 행렬 I를 반환하는 행렬이다. 모든 행렬이 역행렬을 가지는 것은 아니며, 행렬식 det(A) \neq 0일 경우에만 역행렬이 존재한다. 역행렬이 있는 행렬은 가역행렬, 그렇지 않을 경우 비가역행렬이라고 부른다. 가역행렬의 경우 항상 유일한 역행렬을 가진다.

역행렬은 넘파이 모듈의 np.linalg.inv(matrix) 메서드로 즉시 계산할 수 있으며, 가우스-조르당 소거법의 Back Substitution 알고리즘을 이용하여 직접 구현할 수도 있지만(Github), 이 경우 행렬과 역행렬의 곱을 연립방정식으로 놓고 해를 구하는 형태이므로, 메모리와 연산 소요시간 모두 상당하기 때문에 비효율적이다. 따라서 역행렬을 직접 구현할 경우 다른 공식을 사용하는데, 이 공식이 앞서 다룬 행렬식의 성질과 관련이 깊다.
앞선 파트에서 det(A) \cdot I = A \cdot adj(A)임을 증명하였다. 이때, A가 가역행렬일 경우, A를 역행렬을 취해 좌변으로 넘긴 다음 A^{-1}에 대한 식으로 정리할 수 있다. 좌변에 있던 det(A)는 역수인 \frac{1}{det(A)}가 되어 우변에 곱해지고, 식이 다음과 같이 정리된다.
A^{-1} = \frac{1}{det(A)} \cdot adj(A)
이것이 바로 역행렬의 공식이다.
크래머의 공식(Cramer's Rule)
크래머의 공식은 연립방정식의 해를 구하는 공식으로, 여태까지 설명했던 행렬식과 역행렬의 원리를 이용한다. 행렬식이나 역행렬을 쉽게 구할 수 있는 경우 간편하게 해를 구할 수 있지만, 일반적으로 행렬의 차수가 높아질 경우 연산 과정이 비효율적이다. 대안인 가우스-조르당 소거법에 대하여 이미 설명했으므로, 간단히만 소개할 것이다.
연립방정식이 Ax = b와 같이 주어졌을 때, 이 식을 x에 대하여 정리하면 x = A^{-1}\cdot b가 된다. 여기서 역행렬의 성질에 의해 x = \frac{1}{det(A)} \cdot adj(A) \cdot b로 나타낼 수 있다. 그리고 다음과 같이 표현할 수 있다.
\begin{vmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{vmatrix}= \frac{1}{det(A) } \cdot \begin{vmatrix} C_{11} & C_{21} & \cdots & C_{n1} \\ C_{12} & C_{22} & \cdots & C_{n2} \\ \vdots & \vdots & \vdots & \vdots\\ C_{1n} & C_{2n} & \cdots & C_{nn} \end{vmatrix} \cdot \begin{vmatrix} b_{1} \\ b_{2} \\ \vdots \\ b_{n} \end{vmatrix}
수반행렬 adj(A)와 방정식의 결과에 해당하는 열벡터 b의 곱을 열벡터 v라고 했을 때, v의 i번째 값인 v_{i}는 (1 \leq i \leq n, n은 행렬의 차수) b_{1} \cdot C_{1i} + b_{2} \cdot C_{2i} + \cdots + b_{n} \cdot C_{ni}이다.
이 식은 i열 여인수 전개식(식의 행 인덱스는 순차 증가하고, 열 인덱스는 i로 고정되므로)에서, 대응되는 각각의 여인수와 곱해지는 행렬 A의 i열 \begin{Bmatrix} a_{1i}, a_{2i}, \cdots, a_{ni} \end{Bmatrix} 이 b = \begin{Bmatrix} b_{1}, b_{2}, \cdots, b_{n} \end{Bmatrix} 로 교체되고, i열을 제외한 나머지 열들은 행렬 A와 동일한 새로운 행렬의 행렬식과 같다. 이것 A_{i}라고 한다면, 이 행렬의 행렬식은 det(A_{i})이다.
위 정리에 따라 adj(A) \cdot b = |det(A_{1}), det(A_{2}), \cdots det(A_{n}) |^{T}로 나타낼 수 있게 되었다. 따라서 해 벡터 x의 i번째 원소는 $x_{i} = {A_{i}/{det(A)$이라는 공식이 도출되며, 결과적으로 아래 공식을 바탕으로 방정식의 해를 구할 수 있다.
\begin{vmatrix} x_{1} \\ x_{2} \\ x_{3} \\ \vdots \\ x_{n} \end{vmatrix}= \begin{vmatrix} det(A_{1})/det(A) \\ det(A_{2})/det(A) \\ det(A_{3})/det(A) \\ \vdots \\ det(A_{n})/det(A) \end{vmatrix}
참고자료
1. 프로그래머를 위한 선형대수(히라오카 카즈유키 저, 이창신 옮김) - 길벗(2017)
2. [Youtube] 쑤튜브 : 10분 선형대수 강의 모음(youtu.be/x-Ewz1ukXEA)
3. 크라메르 공식 위키백과(ko.wikipedia.org/wiki/%ED%81%AC%EB%9D%BC%EB%A9%94%EB%A5%B4_%EA%B3%B5%EC%8B%9D)
'Study Note > 선형대수학' 카테고리의 다른 글
사영(Projection)과 최소제곱법(Least Squared Method) (0) | 2021.01.21 |
---|---|
행렬식(Determinant) - 여인수 전개와 가우스 소거법을 이용한 방법 (0) | 2021.01.13 |
행렬식(Determinant) - 라이프니츠 공식 (0) | 2021.01.12 |
LU 분해(LU Decomposition) - (2) 해 도출(Forward/Back Substitution) (0) | 2021.01.11 |
LU 분해(LU Decomposition) - (1) 분해 과정 (2) | 2021.01.07 |