일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그래프
- DP
- MYSQL
- String
- union find
- Stored Procedure
- SQL
- two pointer
- 스토어드 프로시저
- 다익스트라
- Dijkstra
- Two Points
- binary search
- Hash
- Brute Force
- 이진탐색
- Trie
- Today
- Total
codingfarm
LU 분해(LU factorization) 본문
행렬분해(matrix factorization)
하나의 행렬을 여러개의 행렬의 곱으로 표현하는것
ex)
[3−19−5]=[1031][3−10−2]
LU 분해(LU factorization)
A가 정사각행렬이라고 하자. L은 단위하삼각행렬이고 U는 상삼각행렬인 분해 A=LU를 A의 LU분해(LU factorization)라고 한다.
L은 대각성분이 1이고 위의 모든 성분이 0인 아래와 같은 형태의 행렬이다.
L=[10⋯0∗1⋯0⋮⋮⋱⋮∗∗⋯1]
주의
∙ A가 LU분해를 가지기 위해선 행줄임의 수행에서 어떠한 행교환도 있어서는 안된다.
행교환이 없으므로 행줄임에 적용되는 모든 기본행렬은 단위하삼각행렬이다. 단위 하삼각행렬들의 역행렬과 곱은 다시 단위하삼각행렬이므로 L은 단위하삼각행렬이 된다.
∙ 행렬 U를 단지 행사다리꼴만 요구한다면 정사각행렬이 아닌 행렬에도 LU분해를 적용 할 수 있다.
∙ 개념서에 따라서는 LU분해에서 L이 하삼각행렬이고 U는 상삼각행렬인 임의의 분해 A=LU로 정의하기도 한다.
가우스소거법으로 행렬을 분해하여 연립방정식을 효율적으로 풀 수 있다.
가령 Ax=b 꼴의 연립방정식이 있다. A는 n×n 행렬이다. 이 A를 행렬분해 하여 해를 손쉽게 얻을 수 있다.
A가 어떤 행교환도 하지 않고 행사다리꼴로 변형될 수 있는 정사각행렬이면, A는 LU분해를 갖는다.
LU분해의 어디가 유용한것인지 알아보자.
연립일차방정식 Ax=b를 생각해보자. 여기서, 계수행렬은 LU분해 A=LU를 갖는다. Ax=b는 LUx=b 또는 L(Ux)=b로 나타낼 수 있다. 만일 y=Ux로 두면, 다음의 두 단계로 x를 구할 수 있다.
1. 전진대입법으로 Ly=b를 y에 대하여 푼다.
2. 후진대입법으로 Ux=y를 x에 대하여 푼다.
L과 U는 삼각행렬이므로 방정식을 쉽게 풀 수 있다.
앞선 과정에서 행렬 L을 기본행렬의 곱으로 구하였다. 하지만 이렇게 할 필요 없이 행줄임 과정 만으로 연립일차방정식의 직접 계산이 가능하다. A는 행교환을 하지 않고 행사다리꼴로 유도될 수 있다고 가정한다. 그렇다면 Ri−kRj 형태의 기본 행변환만을 사용하면 된다. 대각성분을 1로 강제할 필요가 없기 때문에 kRi의 기본 행변환은 안해도 된다. 변환 Ri−kRj에서 스칼라 k를 승수(multiplier)라고 한다.
예를통해 확인하자
행렬[2134−13−255] 을 단위 하삼각행렬 L로 바꾸기 위한 기본 행변환은 아래와 같다.
R2−2R1(multiplier=2)R3+R1=R3−(−1)R1(multiplier=−1)R3+2R2=R3−(−2)R2(multiplier=−2)
이때 승수는 L의 대각성분 아래의 성분이다.
L=[100210−1−21]
실제로 L21=2,L31=−1,L32=−2 이다.
즉, 기본 행변환 Ri−kRj는 L의 (i,j)성분에 위치한 승수 k를 갖는다.
주의
∙ 이 방법은기본 행변환 Ri−kRj시에 위로부터 아래로 그리고 왼쪽 열에서 오른쪽열로 행해져야한다. 이 규칙을 따르지 않으면 결과가 틀리게 나온다.
∙ L을 만드는 다른 방법은 pivot을 이용하는것이다.
A=[2134−13−255]R2−2R1−−−−−▹[2130−3−3068]R3+R2−−−−−▹[2130−3−3002]
첫 번째 pivot 성분은 2이므로 이것을 pivot이 속한 열의 모든 성분에다가 나누어 주면
12[24−2]=[12−1]
다음 pivot 성분은 -3으로 마찬가지로 속한 열에 있는 모든 성분에 나누어 준다.
1−3[−36]=[1−2]
마지막 pivot 성분은 2이므로 속한 열에 있는 모든 성분을 나누어 준다.
12[2]=[1]
이렇게 구한 3개의 열벡터를 행렬로 나타내면
L=[121−1−21]
◼
행렬의 행사다리꼴은 유일하지 않다. 그러나 가역행렬 A가 LU분해 A=LU를 갖는다면 이 분해는 유일하다.
A가 LU분해를 갖는 가역행렬이면, L과 U는 유일하다.
증명
A의 분해인 L과 U가 유일하지 않다고 가정한다. 즉, A=LU와 A=L1U1가 두 LU분해라고 가정하자. 여기서, L와 L1은 단위 하삼각행렬이고 U와 U1은 상삼각행렬이다. 사실 U와 U1는 A의 두 개의 행사다리꼴이다.
L은 기본행렬들의 곱이므로 가역이다.
U가 가역인지 증명하는 방법은 2가지 있다.
1. A=LU 는 U=L−1A가 될 수 있다. L과 A가 둘다 가역이므로 (L−1A)−1=A−1L 로써 L−1A도 가역이다. 그러므로 U−1이 존재하므로 U 또한 가역이다.
2. A가 가역행렬이므로 가역행렬의 기본정리에 의해 기약 행 사다리꼴은 단위행렬 I이다. 그러므로 U는 L이외에 추가적인 기본행렬을 곱함으로써 I의 기약행사다리꼴로 변형될 수 있다. 따라서 U는 가역행렬이다.
L과 U가 둘다 가역이므로
L1−1(LU)U−1=L1−1(L1U1)U−1에서 (L1−1L)(UU−1)=(L1−1L1)(U1U−1) 이므로
(L1−1L)I=I(U1U−1),∴
가 성립한다.
L과 {L_1}^{-1}은 둘다 기본행렬의 곱이므로 단위하삼각행렬이다. 그러므로 L{L_1}^{-1} 또한 단위하삼각행렬이다.
그리고 U는 상삼각행렬이며 U^{-1}=A^{-1}L로써 U^{-1}은 임의의 행렬 A^{-1}에 단위하삼각행렬 L을 곱한것이므로 U^{-1} 상삼각행렬이다.(수정 필요)
결국 {L_{1}}^{-1}L 는 단위하삼각행렬이며, U_1U^{-1}은 상삼각행렬이므로 {L_{1}}^{-1}L=U_1U^{-1}를 만족하는 행렬은 단위행렬 밖에 없다. 따라서 {L_1}^{-1}L=I=U_1U^{-1}=I 이므로 이 식을 이항하면 L=L_1 이고 U=U_1이다. 따라서 A는 LU분해는 유일하다.
P^TLU 분해(P^TLU factorization)
가우스 소거법을 적용할때, 행교환이 가능한 경우에 사용되는 행렬분해이다.
가령 A=\begin{bmatrix}1&2&-1\\3&6 &2\\-1&1&4\end{bmatrix} 에 행줄임 과정을 적용하면
A \rightarrow B = \begin{bmatrix} 1&2&-1 \\ 0&0&5 \\ 0&3&3 \end{bmatrix}
인데 이는 상삼각행렬이 아니다. 그러나 2행과 3행을 교환하면
U = \begin{bmatrix} 1&2&-1 \\ 0&3&3 \\ 0&0&5 \end{bmatrix}
의 상삼각행렬을 얻는다.
U를 얻기 위해서 행한 행교환을 기본행렬 P로 표현한다.
P=\begin{bmatrix}1&0&0\\ 0&0&1\\ 0&1&0 \end{bmatrix}
PA를 U로 바꾸는 기본행렬의 곱이 E이면
EPA=U
이므로
PA=E^{-1}U=LU
즉, E^{-1}=L은 단위하삼각행렬이다.
여기서 A=(EP)^{-1}U=P^{-1}E^{-1}U=P^{-1}LU 이다.
일반적으로 행교환 기본행렬 P는 순서에 따른 모든 행교환행렬
P_1,P_2,\cdots,P_k의 곱 P=P_k \cdots P_2P_1이 될것이다.
이러한 행렬 P를 치환행렬(Permutation matrix)라고한다.
즉, 치환행렬이란 P^TLU분해에 필요한 행교환 기본행렬의 곱이다.
치환행렬의 예
\begin{bmatrix}0&1\\1&0 \end{bmatrix}\;\;\; \begin{bmatrix}0&0&1\\1&0&0\\0&1&0 \end{bmatrix}\;\;\; \begin{bmatrix}0&1&0&0\\ 0&0&0&1\\ 1&0&0&0\\ 0&0&1&0 \end{bmatrix}
P가 치환행렬이면, P^{-1}=P^T이다.
증명
P^TP=I 임을 보인다.
P^T의 i번째 행은 P의 i번째 열과 같고 P는 치환행렬 이므로 이들은 동일한 기본 단위벡터 e와 같다.
즉, 하나의 성분만 1이고 나머지는 모든 0인 벡터이다.
그러므로
(P^TP)_{ii}=(P^T의\;i번째\;행)(P의\;i번째\;행)=e^Te=e\cdot e=1
즉, P^TP의 대각성분은 모두 1이다.
한편 j \neq i이면 P의 j번째 열은 P^T의 i번째 열과 다른 e'벡터이다.
e\cdot e' = 0 이므로
(P^TP)_{ij}=(P^T의\;i번째\;행)(P의\;j번째\;행)=e^Te'=e\cdot e'=0
즉, 대각성분 이외의 모든 성분은 0이다.
\therefore P^TP는 단위행렬이다. 그러므로 P^{-1}=P^T 이다.
\begin{align*} A&=P^TLU\\ P&=P_k\cdots P_2P_1&&(P_i:i번째로\;적용한\;행교환의\;기본행렬)&\\ L&={E_1}^{-1}{E_2}^{-1}\cdots{E_k}^{-1},\;단위\;하\;삼각\;행렬&&(E_i:i번째로\;적용한\;행연산의\;기본행렬)&\\ U&=A의\;행사다리꼴,상\;삼각\;행렬 \end{align*}
A가 정사각행렬이라 하자, P가 치환행렬, L은 단위하삼각행렬, U는 상삼각행렬일 때, A=P^TLU로서의 A분해를 A의 P^TLU분해(P^TLU factorization) 이라 한다.
모든 정사각행렬은 P^TLU분해를 갖는다.
주의
가역행렬 일지라도 P^TLU분해는 유일하지 않다.
가령 [예제 3.16]을 보면 풀이와는 달리
A\begin{bmatrix}0&0&6 \\ 1&2&3\\ 2&1&4 \end{bmatrix} \overset{R_1 \Leftrightarrow R_3}{---\blacktriangleright} \begin{bmatrix}2&1&4 \\ 1&2&3\\ 0&0&6 \end{bmatrix} \overset{R_2 - \frac{1}{2}R_1}{---\blacktriangleright} \begin{bmatrix}2&1&4 \\ 1&\frac{3}{2}&1\\ 0&0&6 \end{bmatrix}
으로 R_1 \Leftrightarrow R_3 한번의 행교환 만으로 행사다리꼴을 만들수 있다.
하지만 P가 결정되면 L과 U는 유일하다.
계산적인 고려
'수학 > 선형대수학' 카테고리의 다른 글
연립일차방정식의 해 (0) | 2020.05.07 |
---|---|
부분공간 (0) | 2020.05.07 |
역행렬(Inverse Matrix) (0) | 2020.04.01 |
행렬 대수 (0) | 2020.04.01 |
연립 일차 방정식 (0) | 2020.03.06 |