일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한국데이터산업진흥원
- LU분해
- determinant
- 행렬식 파이썬
- LU분해 알고리즘 구현
- lte라우터
- 정보처리기사 기출
- 행렬식의 정의
- 중간고사
- 가우스조던소거법
- 머신러닝
- 원격평생교육진흥원
- 선형회귀모델
- 컴퓨터공학
- 화웨이라우터
- 학사
- 정규방정식
- 한국기술교육대학교
- 선형대수학
- 학점은행제
- 알고리즘
- 여인수 전개
- LU분해 파이썬
- 컴공수학
- 라이프니츠 공식
- 가우스조르당소거법
- 정보처리기사 후기
- 행렬식
- 메가존아이티평생교육원
- 김영평생교육원
- Today
- Total
gyeo-ri.com
수반행렬의 성질과 크래머의 공식 본문
수반행렬(Adjoint Matrix)의 정의
수반행렬은, 어떤 행렬의 각 원소에 대응하는 여인수 행렬을 만든 뒤, 그것을 전치시킨 것이다. 행렬 $A$가 정의되었을 때, 수반행렬 $adj(A)$는 다음과 같다.
$A = \begin{vmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \vdots & \vdots\\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{vmatrix} \;\;\; \Leftrightarrow \;\;\; adj(A) = \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}$
이때, 수반행렬 $adj(A)$는 여인수 행렬의 전치행렬이므로, 행렬 $A$와 행/열 인덱스의 순서가 반대이다(원소 $a_{ij}$에 대응하는 여인수 $C_{ij}$는 $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 \cdot adj(A) = X$일 때, $1 \leq i,j \leq n$인 $i,j$에 대하여 $X$의 $i$행 $j$열의 원소 $x_{ij}$를
$x_{ij} = a_{i1} \cdot C_{j1} + a_{i2} \cdot C_{j2} + \cdots + a_{in} \cdot C_{jn} = \displaystyle \sum_{k=1}^{n} a_{ki} \cdot C_{kj} $ 로 나타낼 수 있다.
이때 $i, j = c$로 $i$,$j$가 동일한 값을 가질 때, $x_{cc} = \displaystyle \sum_{k=1}^{n} a_{ck} \cdot C_{ck}$로, 행렬식 $det(A)$를 구하기 위해 $c$행 전개한 여인수 전개의 식과 동일하다. 즉 $X$의 대각원소는 모두 $det(A)$와 동일히다.
반면에, $i=p, j=q$로 $i \neq j$일 경우, 행렬식과 유사하지만 동일하지는 않은 식이 전개되는데, $X$의 대각원소가 아닌 원소 $x_{pq}$의 값은 $\displaystyle\sum_{k=1}^{n} a_{pk}\cdot C_{qk}$로, 행렬의 원소 $a_{pk}$와 여인수 $C_{qk}$가 서로 대응하지 않는다.
$x_{pq}$는 행렬식을 구하기 위해 $p$행을 여인수 전개 할 때, $p$행과 $k$열을 소거하여 추출한 여인수 C_{kp}가 아닌, $q$행과 $k$열을 소거한 여인수 $C_{kq}$를 대응되는 원소에 곱해준 것과 같다. 일반적으로는 서로 대응하지 않는 원소와 여인수를 곱하는 것은 의미가 없지만, 만약 $p \neq q$이지만, $A$의 행 $r_{p} = r_{q}$가 완전히 동일할 때는 행을 바꾸어 적용하여도 관계가 없다. 즉, $x_{pq}$를 포함한 $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 |