gyeo-ri.com

수반행렬의 성질과 크래머의 공식 본문

Study Note/선형대수학

수반행렬의 성질과 크래머의 공식

겨리_Gyeori 2021. 1. 14. 07:47

수반행렬(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$을 정의하고, 이 행렬의 수반행렬을 구한 결과는 다음과 같다.

행렬식 계산은 이전 포스팅에서 정의한 det_gauss 함수 사용

 

 

 

 

 

 

수반행렬의 성질


 

 

  행렬과 그 행렬의 수반행렬의 행렬곱을 $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)

  

 

 

 

 

Comments