맨위로가기

LU 분해

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

LU 분해는 정사각 행렬을 하삼각 행렬(L)과 상삼각 행렬(U)의 곱으로 분해하는 방법이다. 이는 선형 연립방정식, 역행렬 계산, 행렬식 계산 등에 활용되며, 가우스 소거법을 기반으로 한다. LU 분해는 부분적 추축, 완전 추축, LDU 분해 등 다양한 변형이 존재하며, LUP 분해는 모든 정사각 행렬에 적용 가능하다.

더 읽어볼만한 페이지

  • 행렬 분해 - QR 분해
    QR 분해는 행렬을 직교 행렬과 상삼각 행렬의 곱으로 분해하는 방법으로, 실수 또는 복소수 행렬을 직교/유니터리 행렬 Q와 상삼각 행렬 R의 곱으로 표현하여 선형대수학의 계산 및 분석에 활용되며, 그람-슈미트 과정, 하우스홀더 변환, 기븐스 회전 등 다양한 계산 방법이 존재한다.
  • 행렬 분해 - 조르당 표준형
    조르당 표준형은 대수적으로 닫힌 체 위에서 정사각 행렬을 유사 변환하여 얻을 수 있는 특정한 형태의 행렬로, 조르당 블록으로 구성되며 고윳값, 중복도, 특성/최소 다항식과 관련 있고, 스펙트럼 사영 정리, 케일리-해밀턴 정리 등 다양한 정리 증명과 행렬 계산에 응용된다.
  • 수치선형대수학 - 가우스 소거법
    가우스 소거법은 연립 일차 방정식의 해를 구하기 위해 행렬을 사다리꼴로 변환하는 알고리즘이며, 기본 행 연산을 통해 전진 소거와 후퇴 대입 단계를 거쳐 해를 계산하고, 행렬식 계산 등 다양한 분야에 응용된다.
  • 수치선형대수학 - LINPACK
    LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다.
  • 선형대수학 - 벡터 공간
    벡터 공간은 체 위의 가군으로 정의되는 대수적 구조로, 벡터 덧셈과 스칼라 곱셈 연산을 가지며 특정 공리들을 만족하고, 기저, 차원, 선형 사상 등의 개념을 통해 수학과 물리학 등 다양한 분야에서 활용된다.
  • 선형대수학 - 선형 결합
    선형 결합은 벡터 공간에서 벡터들의 스칼라 곱의 합으로 표현되는 식으로, 벡터 집합의 선형 독립성 판단 및 부분 공간 생성과 관련되며, 계수 제약을 통해 다양한 종류의 결합을 정의할 수 있고, 위상 벡터 공간이나 가군으로 일반화될 수 있다.
LU 분해
개요
종류행렬 분해
분야선형대수학
명칭 유래L, U 행렬
고안자타데우시 바나히에비츠
상세 정보
LU 분해주어진 행렬을 하삼각 행렬(L)과 상삼각 행렬(U)의 곱으로 분해하는 행렬 분해 방법이다. 경우에 따라 치환 행렬(P)도 사용된다.
활용선형 방정식의 해를 구하거나, 행렬식을 계산하는 데 유용하게 사용된다.
수학적 표현A = LU 또는 PA = LU
요소A (분해될 행렬)
L (하삼각 행렬)
U (상삼각 행렬)
P (치환 행렬, 필요한 경우)
역사
최초 고안타데우시 바나히에비츠(1938)
체계화폴 드와이어(1951)

2. 정의

'''LU 분해'''는 정사각행렬 ''A''를 하삼각행렬 ''L''과 상삼각행렬 ''U''의 곱으로 분해하는 것을 의미한다.

: A = LU

여기서 하삼각행렬은 주대각선 위의 모든 성분이 0인 행렬이고, 상삼각행렬은 주대각선 아래의 모든 성분이 0인 행렬이다. 예를 들어, 3 × 3 행렬 ''A''의 LU 분해는 다음과 같은 형태를 가진다.

:

\begin{bmatrix}

a_{11} & a_{12} & a_{13} \\

a_{21} & a_{22} & a_{23} \\

a_{31} & a_{32} & a_{33}

\end{bmatrix} =

\begin{bmatrix}

\ell_{11} & 0 & 0 \\

\ell_{21} & \ell_{22} & 0 \\

\ell_{31} & \ell_{32} & \ell_{33}

\end{bmatrix}

\begin{bmatrix}

u_{11} & u_{12} & u_{13} \\

0 & u_{22} & u_{23} \\

0 & 0 & u_{33}

\end{bmatrix}



행렬의 성분에 따라서는 LU 분해가 바로 이루어지지 않을 수도 있다. 예를 들어, 행렬 곱셈의 정의에 따라 a_{11} = \ell_{11} u_{11}인데, 만약 a_{11} = 0이라면 \ell_{11} 또는 u_{11} 중 적어도 하나는 0이어야 한다. 이는 행렬 ''L'' 또는 ''U''가 특이 행렬(비가역행렬)임을 의미하며, 만약 원래 행렬 ''A''가 가역행렬이라면 문제가 발생할 수 있다. 이러한 경우에는 행렬의 행이나 열의 순서를 적절히 바꾸는 과정이 필요할 수 있다. (자세한 내용은 부분적 추축 및 완전 추축 참조)

LU 분해를 찾는 과정에서 해가 유일하게 결정되지 않는 경우가 있다. 예를 들어, 다음과 같은 2x2 행렬을 분해한다고 가정해 보자.

:

\begin{bmatrix}

4 & 3 \\

6 & 3

\end{bmatrix} =

\begin{bmatrix}

\ell_{11} & 0 \\

\ell_{21} & \ell_{22}

\end{bmatrix}

\begin{bmatrix}

u_{11} & u_{12} \\

0 & u_{22}

\end{bmatrix}



행렬 곱셈을 통해 방정식을 세우면 다음과 같다.

:\begin{align}

\ell_{11} \cdot u_{11} &= 4 \\

\ell_{11} \cdot u_{12} &= 3 \\

\ell_{21} \cdot u_{11} &= 6 \\

\ell_{21} \cdot u_{12} + \ell_{22} \cdot u_{22} &= 3

\end{align}

이 연립방정식은 미지수의 개수가 방정식의 개수보다 많아 해가 여러 개 존재한다(부정 방정식). 따라서 유일한 LU 분해를 얻기 위해서는 추가적인 제약 조건이 필요하다. 예를 들어, 하삼각행렬 ''L''의 대각 성분을 모두 1로 만드는 제약(즉, ''L''을 단위 삼각행렬로 만드는 것)을 가하면 해는 다음과 같이 유일하게 결정된다.

:\begin{align}

\ell_{11} = \ell_{22} &= 1 \\

\ell_{21} &= 1.5 \\

u_{11} &= 4 \\

u_{12} &= 3 \\

u_{22} &= -1.5

\end{align}

결과적으로 LU 분해는 다음과 같다.

:

\begin{bmatrix}

4 & 3 \\

6 & 3

\end{bmatrix} =

\begin{bmatrix}

1 & 0 \\

1.5 & 1

\end{bmatrix}

\begin{bmatrix}

4 & 3 \\

0 & -1.5

\end{bmatrix}



일반적으로 ''n''차 정사각행렬 ''A'' = ''LU''를 풀 때, 미지수(''L''과 ''U''의 성분)의 개수는 ''n''(''n'' + 1)개이고 방정식의 개수는 ''n''2개이다. 미지수가 더 많으므로 해를 유일하게 결정하기 위해 제약 조건을 추가하는 대표적인 방법에는 다음 두 가지가 있다.


  • '''두리틀(Doolittle) 방법''': 행렬 ''L''의 대각 성분을 모두 1로 놓는다. (위 2x2 예시에서 사용된 방법)
  • '''크라우트(Crout) 방법''': 행렬 ''U''의 대각 성분을 모두 1로 놓는다.

2. 1. 부분적 추축(Partial Pivoting)

행렬의 성분을 적절하게 정렬하지 않으면 LU 분해를 원래 목적대로 사용하기 어려울 수 있다. 예를 들어, 행렬 '''A'''의 첫 번째 행, 첫 번째 열의 성분 a_{11}이 0이라면, a_{11} = l_{11} u_{11} 관계식에 따라 l_{11} 또는 u_{11} 중 적어도 하나는 0이어야 한다. 이는 하삼각행렬 '''L''' 또는 상삼각행렬 '''U''' 중 적어도 하나가 비가역행렬임을 의미하는데, 만약 원래 행렬 '''A'''가 가역행렬이라면 이는 모순이다. 이런 경우 LU 분해를 바로 적용할 수 없으므로, '''A'''의 첫 번째 성분 자리에 0이 아닌 수가 오도록 행 교환을 수행해야 한다. 이러한 과정을 피벗팅(pivoting)이라고 하며, 특히 행 교환을 통해 피벗 원소(pivot element, 여기서는 a_{11} 자리에 오는 원소)를 선택하는 것을 부분 피벗팅(partial pivoting)이라고 한다.

이처럼 LU 분해 과정에서 행 교환이 필요한 경우, 행 교환을 나타내는 치환 행렬 '''P'''를 도입하여 분해를 수행한다. 즉, 원래 행렬 '''A''' 대신 행 교환이 이루어진 '''PA'''를 LU 분해하는 것이다. 이를 LUP 분해라고 하며, 다음과 같이 표현할 수 있다.

PA = LU

여기서 '''L'''은 하삼각행렬, '''U'''는 상삼각행렬, '''P'''는 행 교환을 나타내는 치환 행렬이다. 모든 정사각행렬은 LUP 형태로 분해될 수 있으며,[9][1] 이 방식은 수치적으로 안정적이라는 장점이 있다.[10] 따라서 실제 계산에서는 LUP 분해가 널리 사용된다. 일반적으로 '부분 피벗팅을 사용한 LU 분해'라고 하면 행 치환만을 이용하는 이 LUP 분해를 의미한다.

2. 2. 완전 추축(Full Pivoting)

완전 추축(Full Pivoting)은 행 교환만 수행하는 부분 피벗과 달리, 행과 열의 순서를 모두 바꾸어 피벗 원소의 절댓값을 최대로 만드는 방법이다. 행 교환은 치환행렬 '''P''', 열 교환은 치환행렬 '''Q'''로 나타낸다. 따라서 행렬 '''A'''의 완전 추축을 이용한 LU 분해는 다음과 같이 표현된다.[11]

: PAQ = LU

여기서 '''L'''은 하삼각행렬, '''U'''는 상삼각행렬이고, '''P'''와 '''Q'''는 각각 행과 열을 재배열하는 치환행렬이다.

LU 분해는 정사각 행렬뿐만 아니라 직사각 행렬 '''A'''에 대해서도 일반화할 수 있다. 직사각 행렬의 경우, '''L'''은 '''A'''와 행의 수가 같은 정사각 하삼각행렬이고, '''U'''는 '''A'''와 같은 차원을 가지는 상삼각행렬 형태가 된다. 여기서 상삼각행렬 형태란 주대각선 아래의 모든 원소가 0인 형태를 의미하며, 이는 행렬 '''A'''의 행 사다리꼴에 해당한다.

2. 3. LDU 분해

LDU 분해는 대각행렬 ''D''를 추가하여 행렬 ''A''를 다음과 같이 분해하는 방법이다.

A = LDU

월시 행렬의 LDU 분해


여기서 ''D''는 대각행렬이고, ''L''과 ''U''는 단위삼각행렬이다. 단위삼각행렬이란 행렬의 대각선 성분이 모두 1인 삼각행렬을 의미한다. 즉, ''L''은 대각 성분이 모두 1인 하삼각행렬이고, ''U''는 대각 성분이 모두 1인 상삼각행렬이다.

LDU 분해는 주로 정사각행렬에 적용되지만, 직사각 행렬로도 일반화할 수 있다. 이 경우 ''L''과 ''D''는 ''A''와 같은 수의 행을 갖는 정사각 행렬이며, ''U''는 ''A''와 동일한 차원을 갖는다. 이때 '상삼각'이라는 용어는 행렬의 왼쪽 위 모서리에서 시작하는 주대각선 아래의 모든 성분이 0인 행렬로 해석해야 한다.

3. 존재성과 유일성

일반적인 정사각행렬 '''A'''의 LU 분해는 항상 가능한 것은 아니다. 예를 들어, 행렬 곱셈의 정의에 따라 ''a''11 = ''l''11''u''11이 성립하는데, 만약 ''a''11 = 0이라면 ''l''11 또는 ''u''11 중 적어도 하나는 0이어야 한다. 이는 하삼각행렬 '''L''' 또는 상삼각행렬 '''U''' 중 적어도 하나가 특이 행렬(비가역행렬)임을 의미하며, 만약 '''A'''가 가역행렬이라면 이는 불가능하다. 이런 경우 '''A'''는 바로 LU 분해될 수 없다. 이 문제를 해결하기 위해 '''A'''의 행 순서를 바꾸어 첫 번째 성분 ''a''11이 0이 아니도록 만들어야 한다.

이처럼 행 교환이 필요한 경우, 치환행렬 '''P'''를 도입하여 '''PA''' = '''LU''' 형태로 분해하며, 이를 LUP 분해라고 한다. 모든 정사각행렬 '''A'''는 LUP 분해가 가능하다.[9][12][1] 산술적인 결과도 잘 부합한다.[10]

만약 '''A'''가 가역행렬이고 모든 선도 주 소행렬식(leading principal minor)이 0이 아니라면, 치환행렬 '''P''' 없이 바로 LU 분해가 가능하다.[13][2] 역으로, '''A'''가 가역 행렬일 때 LU 분해가 가능하려면 모든 선도 주 소행렬식이 0이 아니어야 한다.[2] 예를 들어, 첫 행이 [0 1], 둘째 행이 [1 0]인 2x2 행렬은 가역행렬이지만 첫 번째 선도 주 소행렬식이 0이므로 LU 분해가 불가능하다. 만약 '''A'''가 랭크 ''k''인 특이 행렬(비가역 행렬)이라면, 처음 ''k''개의 선도 주 소행렬식이 0이 아닌 경우에 한해 LU 분해가 가능하다. 그러나 그 역은 성립하지 않는다.[14]

LU 분해는 LDU 분해로 확장될 수 있다. 이는 대각 행렬 '''D'''를 이용하여 '''A''' = '''LDU'''와 같이 분해하는 것이다. 여기서 '''L'''과 '''U'''는 주대각선 성분이 모두 1인 하삼각행렬과 상삼각행렬이다.

분해의 유일성에 관해서는 다음과 같다. 만일 정사각행렬이며 가역행렬인 '''A'''가 LDU 분해될 수 있다면 (즉, '''L'''과 '''U'''의 주대각선 성분이 모두 1인 분해), 그 분해는 유일하다.[13][2] 따라서 '''L'''이나 '''U''' 중 하나의 주대각선 성분을 모두 1로 제한하면, LU 분해도 유일하게 결정된다.[2]

일반적으로, 모든 정사각 행렬 ''A''''n'' × ''n''은 다음 세 가지 경우 중 하나에 해당한다:

# 고유한 LU 분해를 가짐 (위에서 언급한 조건 만족 시).

# 처음 (''n''−1)개의 열 중 어느 하나라도 선형 종속인 경우, 무한히 많은 LU 분해를 가짐.

# 처음 (''n''−1)개의 열이 선형 독립이지만, 최소한 하나의 선도 주 소행렬식이 0인 경우, LU 분해가 존재하지 않음.

세 번째 경우, 0인 선도 주 소행렬식을 피하기 위해 대각선 요소 ''a''''jj''를 ''a''''jj'' ± ε (아주 작은 값 ε)으로 변경하여 LU 분해를 근사적으로 구할 수 있다.[3]

4. 예시

다음과 같은 2x2 행렬을 LU 분해해 보자.

A = \begin{bmatrix} 4 & 3 \\ 6 & 3 \end{bmatrix}

이 행렬 A를 하삼각행렬 L과 상삼각행렬 U의 곱으로 나타내야 한다.

\begin{bmatrix} 4 & 3 \\ 6 & 3 \end{bmatrix} = \begin{bmatrix} \ell_{11} & 0 \\ \ell_{21} & \ell_{22} \end{bmatrix} \begin{bmatrix} u_{11} & u_{12} \\ 0 & u_{22} \end{bmatrix}

행렬 곱셈을 수행하면 다음과 같은 연립방정식을 얻는다.

\begin{align} \ell_{11} \cdot u_{11} &= 4 \\ \ell_{11} \cdot u_{12} &= 3 \\ \ell_{21} \cdot u_{11} &= 6 \\ \ell_{21} \cdot u_{12} + \ell_{22} \cdot u_{22} &= 3 \end{align}

이 방정식 시스템은 미지수가 6개(l11, l21, l22, u11, u12, u22)인데 방정식은 4개뿐이므로 해가 유일하게 결정되지 않는 부정 방정식이다. 고유한 LU 분해를 찾기 위해서는 L 또는 U 행렬에 제약을 가해야 한다. 일반적으로 하삼각행렬 L의 주대각선 성분을 모두 1로 설정하는 방법을 사용한다 (드울리틀 분해). 즉, \ell_{11} = 1, \ell_{22} = 1로 둔다.

\begin{bmatrix} 4 & 3 \\ 6 & 3 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ \ell_{21} & 1 \end{bmatrix} \begin{bmatrix} u_{11} & u_{12} \\ 0 & u_{22} \end{bmatrix}

다시 행렬 곱셈을 하여 방정식을 세우면 다음과 같다.

\begin{align} 1 \cdot u_{11} + 0 \cdot 0 &= 4 \\ 1 \cdot u_{12} + 0 \cdot u_{22} &= 3 \\ \ell_{21} \cdot u_{11} + 1 \cdot 0 &= 6 \\ \ell_{21} \cdot u_{12} + 1 \cdot u_{22} &= 3 \end{align}

위 방정식들을 차례로 풀면 다음과 같은 결과를 얻는다.


  • u_{11} = 4
  • u_{12} = 3
  • \ell_{21} \cdot 4 = 6 \implies \ell_{21} = 6/4 = 1.5
  • 1.5 \cdot 3 + u_{22} = 3 \implies 4.5 + u_{22} = 3 \implies u_{22} = 3 - 4.5 = -1.5


따라서 LU 분해는 다음과 같다.

\begin{bmatrix} 4 & 3 \\ 6 & 3 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 1.5 & 1 \end{bmatrix} \begin{bmatrix} 4 & 3 \\ 0 & -1.5 \end{bmatrix}

=== 사다리꼴행렬을 이용한 LU 분해 ===

다음 3x3 행렬 A를 가우스 소거법과 유사한 과정을 통해 LU 분해해 보자. 이 과정은 행렬 A를 상삼각행렬 U로 변환하는 동시에, 변환에 사용된 연산을 하삼각행렬 L에 기록하는 방식으로 진행된다. L은 초기에 단위행렬 I로 시작한다.

초기 상태:

A = \begin{pmatrix} 2 & 1 & 1 \\ 4 & -6 & 0 \\ -2 & 7 & 2 \end{pmatrix}

'''1단계:''' 1열의 첫 번째 요소(2) 아래 성분들을 0으로 만든다.

  • 2행 연산: R_2 \leftarrow R_2 - 2 R_1. 승수 2를 L_{21}에 기록한다.
  • 3행 연산: R_3 \leftarrow R_3 - (-1) R_1. 승수 -1을 L_{31}에 기록한다.


이 단계의 결과는 다음과 같이 표현할 수 있다. (왼쪽 행렬은 L 행렬의 중간 형태, 오른쪽 행렬은 U 행렬의 중간 형태)

\begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & 0 & 1 \end{pmatrix} \begin{pmatrix} 2 & 1 & 1 \\ 0 & -8 & -2 \\ 0 & 8 & 3 \end{pmatrix}

'''2단계:''' 2열의 두 번째 요소(-8) 아래 성분을 0으로 만든다.

  • 3행 연산: R_3 \leftarrow R_3 - (-1) R_2. 승수 -1을 L_{32}에 기록한다.


이 단계까지의 결과를 반영하면 다음과 같다.

\begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & -1 & 1 \end{pmatrix} \begin{pmatrix} 2 & 1 & 1 \\ 0 & -8 & -2 \\ 0 & 0 & 1 \end{pmatrix}

오른쪽 행렬이 상삼각행렬 U가 되었으므로 분해가 완료되었다. 최종적으로 얻어진 L과 U는 다음과 같다.

L = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & -1 & 1 \end{pmatrix} , \quad U = \begin{pmatrix} 2 & 1 & 1 \\ 0 & -8 & -2 \\ 0 & 0 & 1 \end{pmatrix}

두 행렬의 곱 LU는 원래 행렬 A와 같다.

LU = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & -1 & 1 \end{pmatrix} \begin{pmatrix} 2 & 1 & 1 \\ 0 & -8 & -2 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 2 & 1 & 1 \\ 4 & -6 & 0 \\ -2 & 7 & 2 \end{pmatrix} = A

5. LU 분해 알고리즘

다음 알고리즘은 기본적으로 가우스 소거법의 변형된 형태이다. 이 알고리즘을 사용하여 LU 분해를 계산하는 데에는 하위 차수 항을 무시하고 \tfrac{2}{3} n^3 부동 소수점 연산이 필요하다. 부분 피벗팅(Pivot element)은 2차 항만 추가한다.

행렬 ''A''가 주어졌을 때, 가우스 소거법을 통해 상삼각 행렬 ''U''로 변환하는 과정에서 사용된 기본 행 연산 정보를 이용하여 하삼각 행렬 ''L''을 구성할 수 있다. 구체적으로, ''k''번째 열의 주대각선 아래 원소들을 제거하기 위해 ''i''번째 행(i > k)에서 ''k''번째 행의 \ell_{i,k} 배수를 빼는 연산을 수행했다고 하면, ''L'' 행렬의 (''i'', ''k'') 위치에 \ell_{i,k} 값을 저장한다 (두리틀 방식 기준, ''L''의 대각 원소는 1).

수학적으로 이 과정은 일련의 하삼각 행렬 L_n을 곱하는 것으로 표현할 수 있다.

: A^{(n)} := L^{-1}_n A^{(n-1)}

여기서 A^{(0)} = A이고, L_n^{-1}은 ''n''번째 단계의 소거 연산을 나타내는 행렬이다. 최종적으로 상삼각 행렬 U = A^{(N-1)}를 얻으며, 하삼각 행렬 ''L''은 다음과 같이 정의된다.

: L = L_1 \dotsm L_{N-1}

여기서 L_n = (L_n^{-1})^{-1}이며, 다음과 같은 형태를 가진다.

:L_n =

\begin{pmatrix}

1 & & & & & \\

& \ddots & & & & \\

& & 1 & & & \\

& & \ell_{n+1,n} & & & \\

& & \vdots & & \ddots & \\

& & \ell_{N,n} & & & 1

\end{pmatrix}



이 과정을 통해 A = LU 분해가 완성된다.

이 알고리즘이 성공적으로 수행되려면 각 단계에서 주대각선 원소(피벗)가 0이 아니어야 한다. 만약 0인 피벗을 만나면, 해당 행을 아래 행 중 피벗 위치에 0이 아닌 원소를 가진 행과 교환하는 피벗팅이 필요하다. 행 교환을 포함하는 경우, 분해는 치환 행렬 ''P''를 사용하여 PA = LU 형태(LUP 분해)가 된다. 모든 정사각 행렬은 LUP 형태로 분해될 수 있으며, 이 방식은 수치적으로 안정적이다.[1]

LU 분해를 구하는 구체적인 방법에는 '''두리틀 방법'''과 '''크라우트 방법'''이 있다. 이들은 ''L'' 또는 ''U'' 행렬의 대각 성분에 제약을 가하여 유일한 해를 구한다.


  • '''두리틀 방법''' (Doolittle method): 행렬 ''L''의 대각 성분을 모두 1로 놓는다 (\ell_{ii} = 1). 가우스 소거 과정을 통해 자연스럽게 얻어지는 형태이다. 계산 순서는 보통 ''U''의 행과 ''L''의 열을 번갈아 가며 구한다.
  • '''크라우트 방법''' (Crout method): 행렬 ''U''의 대각 성분을 모두 1로 놓는다 (u_{ii} = 1). 계산 순서는 보통 ''L''의 열과 ''U''의 행을 번갈아 가며 구한다. 행렬 ''A''의 전치(A^\textsf{T})에 대해 두리틀 분해(A^\textsf{T} = L_0 U_0)를 구한 뒤, L = U_0^\textsf{T}U = L_0^\textsf{T}로 설정하여 크라우트 분해를 얻을 수도 있다.


LUP 분해는 재귀적인 방식으로도 계산할 수 있다. 행렬 ''A''를 다음과 같이 분할하고,

:

P_1 A = \left( \begin{array}{c|ccc}

a & & w^\textsf{T} & \\ \hline

v & & A' &

\end{array} \right)



여기서 ''P1''은 첫 행의 피벗을 위한 치환 행렬이다. a \neq 0일 때 c=1/a (아니면 c=0)라 하면, 이를 다음과 같이 변형한 후,

:

P_1 A = \left( \begin{array}{c|ccc}

1 & & 0 & \\ \hline

cv & & I_{n-1} &

\end{array} \right)

\left( \begin{array}{c|c}

a & w^\textsf{T} \\ \hline

0 & A'- cv w^\textsf{T}

\end{array} \right) .



부분 행렬 A' - cv w^\textsf{T} (슈어 보수)에 대해 재귀적으로 LUP 분해 P' (A' - cv w^\textsf{T}) = L' U'를 찾는다. v' = P'v라 하면, 최종 분해는 이 결과들을 조합하여 얻어진다.

:

\left( \begin{array}{c|ccc}

1 & & 0 & \\ \hline

0 & & P' &

\end{array} \right) P_1 A

= \left( \begin{array}{c|ccc}

1 & & 0 & \\ \hline

cv' & & L' &

\end{array} \right)

\left( \begin{array}{c|ccc}

a & & w^\textsf{T} & \\ \hline

0 & & U' &

\end{array} \right)


6. 응용

LU 분해는 행렬을 아래 삼각행렬(L)과 위 삼각행렬(U)의 곱으로 나타내는 방법으로, 다양한 수학 및 공학 문제 해결에 효과적으로 활용된다. 주요 응용 분야는 다음과 같다.


  • '''선형 연립방정식 풀이''': 복잡한 선형 연립 방정식 시스템 A\mathbf{x} = \mathbf{b}를 효율적으로 풀 수 있다. 특히 계수 행렬 A는 동일하고 우변 벡터 \mathbf{b}만 달라지는 여러 방정식을 반복해서 풀어야 할 때 계산 효율성이 매우 높다. LU 분해를 통해 가우스 소거법 과정을 저장해두고, 전진 대입과 후진 대입만으로 해를 빠르게 구할 수 있다.
  • '''역행렬 계산''': 행렬의 역행렬을 구하는 데 사용될 수 있다. A\mathbf{x} = \mathbf{e}_i 형태의 연립방정식을 각 단위 행렬의 열벡터 \mathbf{e}_i에 대해 풀어 역행렬의 각 열을 구할 수 있으며, A^{-1} = U^{-1}L^{-1} 공식을 이용할 수도 있다.
  • '''행렬식 계산''': 삼각행렬의 행렬식은 주대각선 성분들의 곱으로 간단히 계산된다는 성질을 이용한다. A = LU 또는 PA = LU 형태로 분해하면, \det(A) = \det(L)\det(U) 또는 \det(A) = (-1)^S \det(L)\det(U) 와 같이 행렬식을 쉽게 계산할 수 있다. 여기서 S는 행 교환 횟수이다.

6. 1. 선형 연립방정식 풀이

선형 연립 방정식 A\mathbf{x} = \mathbf{b}가 주어졌을 때, 행렬 A를 LU 분해하여 해 \mathbf{x}를 구할 수 있다.

만약 행렬 A를 LU 분해하는 과정에서 행 교환이 필요하다면, 치환행렬 P를 사용하여 PA = LU 형태로 분해한다. 이를 LUP 분해라고 부른다. 모든 정사각행렬은 LUP 분해가 가능하며,[9] 수치적으로도 안정적인 결과를 제공한다.[10]

LUP 분해를 이용하면 원래의 연립방정식 A\mathbf{x} = \mathbf{b}는 다음과 같이 변형된다.

:PA\mathbf{x} = P\mathbf{b} \implies LU\mathbf{x} = P\mathbf{b}

이제 해 \mathbf{x}는 다음 두 단계로 나누어 구할 수 있다.

# '''전진 대입''': 먼저 L\mathbf{y} = P\mathbf{b}를 풀어 중간 해 \mathbf{y}를 구한다.[6] 하삼각행렬 L의 특성을 이용하여 전진 대입법으로 간단히 계산할 수 있다.

# '''후진 대입''': 다음으로 U\mathbf{x} = \mathbf{y}를 풀어 최종 해 \mathbf{x}를 구한다.[7] 상삼각행렬 U의 특성을 이용하여 후진 대입법으로 간단히 계산할 수 있다.

이 두 단계는 가우스 소거법을 다시 수행할 필요 없이 직접 풀 수 있다. 물론, LU 분해 자체를 계산하는 데는 가우스 소거법과 유사한 과정이 필요하다.

LU 분해를 이용한 풀이 방법은 계수 행렬 A는 동일하고 우변 벡터 \mathbf{b}만 바뀌는 여러 개의 선형 연립방정식을 풀어야 할 때 특히 유용하다.[5] 이 경우, A의 LU 분해는 한 번만 계산하고, 각기 다른 \mathbf{b}에 대해 전진 대입과 후진 대입 과정만 반복하면 되므로 계산 효율성이 매우 높아진다. 매번 가우스 소거법을 사용하는 것보다 훨씬 빠르고 편리하다. 행렬 LU는 가우스 소거 과정을 "저장"하고 있다고 생각할 수 있다.

계산 비용 측면에서, 크기가 n \times n인 행렬 A에 대한 LU 분해는 대략 \frac{2}{3} n^3의 부동소수점 연산이 필요하다. 이는 하우스홀더 변환을 사용하는 QR 분해 기반 해법(약 \frac{4}{3} n^3 연산)보다 약 두 배 빠르기 때문에, 선형 연립방정식 풀이에 LU 분해가 일반적으로 선호된다.

6. 2. 역행렬 계산

방정식 시스템을 풀 때는 보통 벡터 ''b''를 다루지만, 행렬의 역행렬을 구할 때는 벡터 ''b'' 대신 행렬 ''B''를 사용한다. 여기서 ''B''는 ''n''×''p'' 행렬이고, 우리가 찾으려는 행렬 ''X'' 역시 ''n''×''p'' 행렬이다.

:AX = LUX = B.

이 방정식은 앞서 설명한 방법과 동일하게 행렬 ''X''의 각 열을 계산하여 풀 수 있다. 만약 ''B''가 크기가 ''n''인 단위 행렬 ''I''라면, 계산 결과로 얻어지는 행렬 ''X''는 바로 행렬 ''A''의 역행렬 ''A''-1이 된다.

행렬 ''A''를 LU 분해하면, 그 역행렬 ''A''-1은 다음 공식을 통해 구할 수도 있다.

:A^{-1} = U^{-1}L^{-1}

또한, 다음과 같은 방정식을 푸는 방법도 있다.

:LU\boldsymbol{x_i}=\boldsymbol{e_i} \quad (i=1,2,\dots ,n)

여기서 \boldsymbol{e_i}는 단위 행렬 ''I''의 ''i''번째 열 벡터를 의미한다. 이 방정식의 해 \boldsymbol{x_i}들을 열 벡터로 하여 구성한 행렬 X=[\boldsymbol{x_1},\boldsymbol{x_2},\dots ,\boldsymbol{x_n}]은 ''AX'' = ''I''를 만족시키므로, 이 행렬 ''X''가 바로 ''A''의 역행렬 ''A''-1이 된다.

6. 3. 행렬식 계산

삼각행렬행렬식은 주대각선 성분들의 곱과 같다는 성질이 있다. LU 분해는 주어진 행렬을 아래 삼각행렬(L)과 위 삼각행렬(U)의 곱으로 나타내므로, 이를 이용하면 행렬식을 비교적 쉽게 계산할 수 있다.

만약 행렬 '''A'''가 순수한 LU 분해, 즉 '''A''' = '''LU''' 형태로 분해될 수 있다면, 행렬식은 다음과 같이 간단히 계산된다.

:|A| = \det(A) = \det(L)\det(U) = \left( \prod_{i=1}^n l_{ii} \right) \left( \prod_{i=1}^n u_{ii} \right)

이는 삼각행렬 '''L'''과 '''U'''의 행렬식이 각각의 대각 성분들의 곱으로 표현되기 때문이다.

일반적으로 행 교환이 필요한 경우, LUP 분해 형태인 PA = LU 또는 A = P^{-1}LU를 사용한다. 여기서 '''P'''는 치환행렬이다. 치환행렬은 P^{-1}=P^{T}를 만족하는 직교 행렬이므로 \det(P^{-1})=\det(P)라는 성질을 가진다. 치환행렬 '''P'''의 행렬식은 행 교환 횟수(''S'')에 따라 (-1)^S 값을 갖는다. 따라서 LUP 분해를 이용한 행렬식 계산은 다음과 같다.

:\det(A) = \det(P^{-1})\det(L)\det(U) = \det(P)\det(L)\det(U) = (-1)^{S}\left( \prod_{i=1}^n l_{ii} \right) \left( \prod_{i=1}^n u_{ii} \right)

여기서 ''S''는 LU 분해 과정에서 수행된 행 교환의 총 횟수를 의미한다. 만약 행 교환이 필요 없는 경우(''S''=0), 이 식은 순수한 LU 분해의 행렬식 계산과 동일해진다.

전체 피벗팅(full pivoting)을 사용한 LU 분해의 경우에도 유사한 방법으로 행렬식을 계산할 수 있다. 이때 ''S''는 행 교환과 열 교환의 총 횟수가 된다.

7. 변형

LU 분해는 주어진 행렬을 하삼각 행렬과 상삼각 행렬의 곱으로 나타내는 기본적인 방법 외에 여러 변형된 형태를 가진다.

=== 부분 피벗팅을 사용한 LU 분해 (LUP 분해) ===

행렬 분해 과정에서 특정 원소가 0이 되어 분해가 불가능해지는 문제를 해결하기 위해 행의 순서를 바꾸는 방법을 사용한다. 이를 부분 피벗팅(partial pivoting)이라 하며, 이 방식을 적용한 LU 분해를 '''LUP 분해'''라고 부른다. LUP 분해는 다음과 같은 형태로 표현된다.

: PA = LU

여기서 ''L''은 하삼각 행렬, ''U''는 상삼각 행렬이며, ''P''는 행의 순서를 바꾸는 치환 행렬(permutation matrix)이다. 모든 정사각 행렬은 LUP 분해가 가능하며,[1] 이 방식은 수치적으로 안정적이어서 실제 계산에서 널리 사용된다.

=== 전체 피벗팅을 사용한 LU 분해 ===

부분 피벗팅이 행의 순서만 바꾸는 것과 달리, 전체 피벗팅(full pivoting)은 행과 열의 순서를 모두 바꾼다. 이 분해는 다음과 같은 형태를 가진다.

: PAQ = LU

여기서 ''L'', ''U'', ''P''는 LUP 분해와 동일하게 정의되며, ''Q''는 열의 순서를 바꾸는 치환 행렬이다.

=== LDU 분해 ===

'''LDU 분해'''는 행렬 ''A''를 하삼각 행렬 ''L'', 대각 행렬(diagonal matrix) ''D'', 상삼각 행렬 ''U''의 곱으로 나타내는 방식이다.

: A = LDU

이때 ''L''과 ''U''는 특별히 대각 성분이 모두 1인 단위삼각 행렬(unit triangular matrix)이다.

=== 직사각 행렬로의 일반화 ===

LU 분해 및 그 변형들은 정사각 행렬뿐만 아니라 직사각 행렬에 대해서도 일반화될 수 있다. 이 경우, 행렬 ''A''를 ''m'' × ''n'' 행렬이라고 하면, LDU 분해에서 ''L''과 ''D''는 ''m'' × ''m'' 정사각 행렬이 되고, ''U''는 ''A''와 동일한 ''m'' × ''n'' 차원을 가진다. 이때 '상삼각 행렬' ''U''는 주 대각선 아래의 모든 성분이 0인 행렬, 즉 행 사다리꼴 형태를 의미하는 것으로 해석된다.

=== 분해의 존재성과 유일성 ===

모든 정사각 행렬 ''A''는 LUP 분해 (또는 PLU 분해)가 항상 존재한다.[1] 그러나 ''LU'' 분해 또는 ''LDU'' 분해는 특정 조건을 만족해야 존재한다. 만약 ''A''가 가역 행렬(invertible matrix)이라면, 모든 선행 주 소행렬식(leading principal minor)이 0이 아닐 경우에만 ''LU'' 분해 (또는 ''LDU'' 분해)가 존재한다.[2] 예를 들어, \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} 와 같은 행렬은 가역이지만 선행 주 소행렬식 a_{11}=0이므로 ''LU'' 또는 ''LDU'' 분해가 존재하지 않는다. 만약 ''A''가 특이 행렬(singular matrix)이고 랭크(rank)가 ''k''라면, 처음 ''k''개의 선행 주 소행렬식이 0이 아닐 경우 ''LU'' 분해가 존재할 수 있지만, 그 역은 성립하지 않는다.

만약 정사각 가역 행렬이 LDU 분해(''L''과 ''U''의 대각 성분이 모두 1)를 가진다면, 그 분해는 유일하다.[2] 이 경우, ''L'' 또는 ''U'' 중 하나의 대각 성분이 모두 1이라는 조건을 추가하면 ''LU'' 분해도 유일하게 결정된다.

일반적으로 정사각 행렬 A_{n \times n}의 LU 분해는 다음 세 가지 경우 중 하나에 해당한다.

# 유일한 LU 분해가 존재한다.

# 처음 (''n''−1)개 열 중 어느 하나라도 선형 종속인 경우, 무한히 많은 LU 분해가 존재한다.

# 처음 (''n''−1)개 열이 선형 독립이지만 최소한 하나의 선행 주 소행렬식이 0인 경우, LU 분해가 존재하지 않는다.

세 번째 경우처럼 LU 분해가 존재하지 않을 때, 대각 성분 a_{jj} 에 아주 작은 값 \varepsilon를 더하거나 빼서 ( a_{jj} \pm \varepsilon) 0인 선행 주 소행렬식을 피함으로써 LU 분해를 근사적으로 구할 수 있다.[3]

8. 관련 자료

참조

[1] harvp
[2] harvp
[3] 학술지 Examining Possible LU Decomposition 2021
[4] 학술지 Randomized LU Decomposition 2016
[5] 서적 コンピュータによる流体力学 シュプリンガー・フェアラーク東京
[6] 문서
[7] 문서
[8] 저널 On matrix factorization and efficient least squares solution
[9] harvtxt
[10] harvtxt
[11] harvtxt
[12] harvtxt
[13] harvtxt
[14] harvtxt



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com