[선형대수학] Gaussian Elimination

Vaughan·2022년 8월 1일
0

선형대수학

목록 보기
4/14
post-thumbnail

도입 및 소개

Gaussian Elimination이란?

이번 포스트에서는 Gaussian Elimination (가우스 소거법)에 대해서 소개하고자 한다.

사실 Gaussian Elimination 의 본질은 매우 간단하다. 중학교/고등학교에서 배웠던 연립방정식의 해를 구하고자 할 때 우리는 변수를 소거할 수 있도록 주어진 방정식에 적당한 수를 곱한뒤 빼서 값을 구하지 않는가?

가우스 소거법은 이런 과정을 행렬과 벡터로 나타내는 Ax=bAx=b 꼴에서 진행하는 것이다. 

Gaussian Elimination의 목표

선형방정식 Ax=bAx = b에서 행렬 AA를 Upper triangular form(상삼각행렬)꼴로 정리하는 것

Upper triangular나 Lower triangular 형태로 행렬을 정리하게 되면, 반드시 하나의 행에서는 1개의 변수만을 갖는 방정식(ex. 2x=12x = 1)이 존재하게 된다.

그 방정식을 이용하여 변수 하나의 값을 알게되면, 차례대로 구한 변수의 값만을 다른 방정식에 대입해가면서 모든 변수를 간단한 대입연산 만으로도 구할 수 있다는 이점이 존재하기 때문에 Gaussian Elimination을 진행하는 것이다.

*Upper triangular : 대각선상을 기준으로, 대각선상과 그 오른쪽 윗부분에만 0이아닌 값이 존재하는 행렬
(↔ Lower triangular)

[123045006]   [100230456]\begin{bmatrix} 1 & 2 & 3\\ 0 & 4 & 5\\ 0 & 0 & 6\\ \end{bmatrix}\ \ \ \begin{bmatrix} 1 & 0 & 0\\ 2 & 3 & 0\\ 4 & 5 & 6\\ \end{bmatrix}

왼쪽 : Upper triangular, 오른쪽 : Lower triangular


Gaussian Elimination Process

Row Operation (행연산)

  • Augmented matrix Form
    • Gaussian Elimination를 쉽게 진행하기 위해 고안한 행렬의 표현 방법.
    • 행렬과 벡터 표현으로 나타내는 Ax=bAx=b[Ab][A|b] 형태의 행렬로 나타낸다.
    • 변수들의 집합벡터인 xx는 미지수로 이루어져있기 때문에 계산에 영향을 주지 않아서 생략하고 Augmented matrix로 표현할 수 있다.
  • Row Operation의 3가지 방법
    • Subtracting a multiple of a row from another row (어떤 행에 상수배를 취한 행을 다른 행으로부터 빼낸다.)
      → 특정 변수를 소거
      (주로 이 과정에서 당하는 행에는 수를 곱하지 않는다.)
    • Exchanging rows (행의 순서를 바꾼다.)
      → 나열된 방정식의 순서를 바꿈
    • Scaling a row with nonzero scalar (행을 0이 아닌 스칼라 값으로 scaling하여 계수를 간단하게 표현한다.)

이처럼 행 연산은 기존 방정식을 변화시키지 않고, 방정식의 표현만 변화시키기 때문에 행연산을 수행하기 전후의 방정식은 변하지 않는다. 

연산과정 예시

주어진 연립방정식

{2x1+4x22x3=24x1+9x23x3=82x13x2+7x3=10\begin{cases} 2x_1 + 4x_2 - 2x_3 = 2 \\ 4x_1 + 9x_2 - 3x_3 = 8 \\ -2x_1 - 3x_2 + 7x_3 = 10 \end{cases}
  1. Ax=bAx = b 꼴로 표현

    [242493237][x1x2x3]=[2810]\begin{bmatrix} 2 & 4 & -2 \\ 4 & 9 & -3 \\ -2 & -3 & 7 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}=\begin{bmatrix} 2 \\ 8 \\ 10 \end{bmatrix}
  2. Augmented matrix Form*으로 표현

    [2422493823710]\left[ \begin{array}{ccc|c} 2 & 4 & -2 & 2 \\ 4 & 9 & -3 & 8 \\ -2 & -3 & 7 & 10 \\ \end{array} \right]
  1. 첫번째 행의 첫번째 요소 22로 아래 행의 요소를 소거
    [2422011401512]\left[ \begin{array}{ccc|c} 2 & 4 & -2 & 2 \\ \color{blue}0 & 1 & 1 & 4 \\ \color{blue}0 & 1 & 5 & 12 \\ \end{array} \right]
  • 두번째 행에는 첫번째 행에 2를 곱한 값을 빼주어서 소거를 진행한다.
    (2)2×(1)(2) - 2 \times (1)
  • 세번째 행에는 첫번째 행을 더해주어 소거를 진행한다.
    (3)+(1)(3) + (1)
  1. 두번째 행의 두번째 요소 11로 세번째 행의 두번째 요소를 소거 한다.
    (3)(2)(3) - (2)
    [242201140048]\left[ \begin{array}{ccc|c} 2 & 4 & -2 & 2 \\ 0 & 1 & 1 & 4 \\ 0 & \color{blue}0 & 4 & 8 \\ \end{array} \right]

가우스 소거를 이용하여 얻은 방정식의 해

(3) 4x3=8x3=2(2) x2+x3=x2+2=4x2=2(1) 2x1+4x22x3=2x1+84=2x1=1(3)\ 4x_3 = 8 \rightarrow x_3 = 2\\ (2)\ x_2 + x_3 = x_2 + 2 = 4 \rightarrow x_2 = 2\\ (1)\ 2x_1 + 4x_2 -2x_3 = 2x_1 + 8 -4 = 2 \rightarrow x_1 = -1\\

Breakdown; 소거법의 붕괴

더 이상 소거를 진행할 수 없는 상황을 만났을 때

Temporary Breakdown

  • 아래행의 요소에는 값이 남아있는데, 윗행의 요소가 00이 되어 윗행을 이용하여 아래행을 소거할 수 없는 상황
  • 소거하고자하는 요소와 동일한 열에 00 이 아닌 다른값을 가지고 있는 행과 행교환 해주어 문제를 해결한다.
[111200280212]  = [111202120028]\left[ \begin{array}{ccc|c} 1 & 1 & 1 & 2\\ 0 & \color{red}0 & -2 & 8\\ 0 & -2 & 1 & 2\\ \end{array} \right]\ \ = \ \left[ \begin{array}{ccc|c} 1 & 1 & 1 & 2\\ 0 & -2 & 1 & 2\\ 0 & 0 & -2 & 8\\ \end{array} \right]

Permanent Breakdown

  • Temporary Breakdown상황이 발생했을 때, 교체가능한 행이 없는 경우
    (소거하려는 요소와 동일한 열의 모든 요소가 00 이 된 상황)
  • 일단 그 다음 열의 요소로 소거를 진행한다.
  • 그렇게 만들어지는 결과행렬은 00 으로만 이루어진 행을 무조건 가지게 된다.
    • [00...00][0 0 ... 0 | 0]
      → 해가 무수히 많다.
    • [00...0c][0 0 ... 0 | c] (cc는 상수)
      → 모순. 따라서 해가 없다.

Pivots and Multipliers

Row Echelon Form

가우스 소거법을 끝낸 결과로 나타난 upper triangular matrix를 지칭하는 말

  • 00 으로만 이루어진 행은 존재하지 않거나, 아래부터 위치한다. (2)
  • k+1k+1 번째 행에 처음으로 나타나는 00 이 아닌 값은, 바로 위의 행(kk 행)보다 오른쪽에 위치한다. (1, 2, 3)
[1204] , [111012000] , [111110021000011]\begin{bmatrix} \color{blue}1 & 2\\ 0 & \color{blue}4 \end{bmatrix}\ ,\ \begin{bmatrix} \color{blue}1 & 1& 1\\ 0 & \color{blue}1& 2\\ \color{green}0 & \color{green}0 &\color{green}0 \end{bmatrix}\ ,\ \begin{bmatrix} \color{blue}1 &1 &1 &1 &1 \\ 0 &0 &\color{blue}2 &1 &0 \\ 0 &0 &0 &\color{blue}1 &1 \end{bmatrix}

pivot

Row Echelon Form에서 각 행에 대하여 첫번째로 나타나는 0이 아닌 값.

  • n개의 미지수로 이루어진 n개의 방정식이 주어진 연립방정식에서 만약 피봇의 개수가 n개라면, 해당 방정식의 해는 항상 존재하며 유일하다.
  • 위를 행렬 표현으로 바꾸면, n×nn\times n 행렬 AA를 Gaussian Elimination한 결과로 얻어진 pivot의 개수가 n개라면, 벡터 xx의 요소들(미지수 해)은 유일하게 존재한다.

따라서 행렬에 있어서 pivot이 굉장히 중요한 역할을 하게 된다.

multiplier

행에 어떤 값을 곱해 다른행의 요소를 소거할 때, 해당 행에 곱해주는 값

multiplier = 소거하려는 요소의  값 / pivot 을 이용하여 구할 수 있다.

[242493237]=[242011237]\begin{bmatrix} 2 & 4 & -2 \\ \color{red}4 & 9 & -3 \\ -2 & -3 & 7 \end{bmatrix} = \begin{bmatrix} \color{red}2 & 4 & -2 \\ 0 & 1 & 1 \\ -2 & -3 & 7 \end{bmatrix}

위 예시에서 multiplier는 2이다.

  • l21l_{21} = 소거할 값 / pivot = 4 / 2 = 2
  • *l21l_{21} : AA(2,1)(2,1) 요소를 지우기 위해 사용하는 multiplier.

GE를 이용한 행렬의 분해

LU Factorization

(이때 L은 low triangular matrix, U는 upper triangular matrix를 의미한다.)

LU Factorization을 사용하는 이유

  • A=LUA=LU로 분해할 수 있다면, Ax=bAx=b 방정식을 쉽게 해결할 수 있다.
    • A=LUA = LUAx=bAx = b에 적용하면, LUx=bLUx = b
    • UxUxyy라는 새로운 벡터로 가정하면, Ly=bLy = b
  • 따라서 Ax=b라는 방정식을 간단한 형태의 두 방정식으로 바꿔 표현할 수 있다.
    • Ux=yUx=y
    • Ly=bLy=b
  • upper triangular matrix와 low triangular matrix로 표현된 방정식을 해결하는 것은 간단하기에 (단순대입), 쉽게 방정식을 사용할 수 있다.
  • 실제 상황에서는 행렬 A는 변하지 않는데 결과벡터인 b가 계속해서 변화하는 경우, 변화하는 각각의 경우마다 모두 가우스 소거법을 적용하는 것 보다는 LU로 표현하여 계산하는 것이 더 간단하다.

LU Factorization 적용방법

기본 아이디어는 Ax=bAx=b로 표현된 방정식의 양변에 어떤 행렬을 곱해야 가우스 소거가 완료된 표현으로 변하는가? 이다.
→ GE 과정을 하나의 행렬곱으로 표현하고자 한다.

  • 가우스 소거를 마친 행렬 AA는 Upper triangular matrix이므로 UU로 표기한다.
  • 아이디어를 표현하여 어떤 행렬 EEAA에 곱하여 UU를 만들 수 있다고 가정하자.
    (행렬 EE를 곱한것만으로도 GE를 수행한 것과 동일한 행렬을 얻음)
    • EA=UEA = U
  • 양변에 EE의 역행렬을 곱하면, A=E1UA = E^{-1}U로 표현된다.
  • 이때 EE의 역행렬은 Low triangular matix (LL)로 나타낼 수 있다. *예시 참고
    A=LUA = LU

실제 LU Factorization 적용예시
LU Factorization을 적용할 행렬 AA

A=[242493237]A = \begin{bmatrix} 2 & 4 & -2 \\ 4 & 9 & -3 \\ -2 & -3 & 7 \end{bmatrix}
  1. AA(2,1)(2,1)요소를 지우기 위해 사용하는 행렬 E21E_{21}.

    l21=2l_{21} = 2
    E21=[100210001]E_{21} = \begin{bmatrix} 1 & 0 & 0 \\ \color{blue}-2 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

    EE는 곱하더라도 요소에 변화가 없는 항등행렬을 base로 활용하고 지우고자하는 요소의 위치에 (- multipler) 를 대입한 행렬으로 표현할 수 있다.

  2. AA(3,1)(3,1)요소를 지우기 위해 사용하는 행렬 E31E_{31}.

    l31=1l_{31} = -1
    E31=[100010101]E_{31} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \color{blue}1 & 0 & 1 \end{bmatrix}
  3. AA(3,2)(3,2)요소를 지우기 위해 사용하는 행렬 E32E_{32}.

    l32=1l_{32} = 1
    E32=[100010011]E_{32} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & \color{blue}-1 & 1 \end{bmatrix}
  4. 각 단계에 사용되는 행렬 E들과 행렬 A를 모두 차례대로 곱하면 실제 Gauss Elimination을 진행한 것과 동일한 Upper triangular matrix를 얻을 수 있다.

    E32E31E21A=[242011004]=UE_{32}E_{31}E_{21}A = \begin{bmatrix} 2 & 4 & -2 \\ 0 & 1 & 1 \\ 0 & 0 & 4 \end{bmatrix} = U
  5. 이후 행렬 E들의 곱의 역행렬을 계산하면 Low triangular matrix가 되며, 최종적으로는 A = LU라는 행렬을 얻을 수 있다.

A=(E32E31E21)1U=E211E311E321UA = (E_{32}E_{31}E_{21})^{-1} U = E_{21}^{-1}E_{31}^{-1}E_{32}^{-1}U
=[100210001][100010101][100010011]U= \begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -1 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 1 & 1 \end{bmatrix}U
=[100210111][242011004]=\begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & 1 & 1 \end{bmatrix}\begin{bmatrix} 2 & 4 & -2 \\ 0 & 1 & 1 \\ 0 & 0 & 4 \end{bmatrix}

LDU Factorization

  • UU대각행렬DD를 이용하여 다시 표현하여 분리시킨 것
  • A=LDUA = LDU

실제 LDU Factorization 적용예시

A=[100210111][242011004]A =\begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & 1 & 1 \end{bmatrix}\begin{bmatrix} 2 & 4 & -2 \\ 0 & 1 & 1 \\ 0 & 0 & 4 \end{bmatrix}
=[100210111][200010004][121011001]=\begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & 1 & 1 \end{bmatrix}\begin{bmatrix} 2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 4 \end{bmatrix}\begin{bmatrix} 1 & 2 & -1 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{bmatrix}
profile
우주의 아름다움도 다양한 지식을 접하며 스스로의 생각이 짜여나갈 때 불현듯 나를 덮쳐오리라.

0개의 댓글