행렬A∈Rm×m 의 왼쪽에 곱해졌을 때 (i,j) 성분을 0 이 되도록 하는 행렬 Eij 를 A 에 대한 ij-소거연산자라고 정의해보자.
구체적으로 정방행렬(aij)∈Rm×m 에 대한 Eij 는 대각성분이 1 이고 (i,j)-성분이 −mij=−ajjaij, 나머지 성분이 0으로 구해진다. 이는 연립 방정식의 풀이에서 같은 변수끼리 계수를 맞춰서 소거하는 연산을 행렬로 나타낸 것이다. 이러한 소거는 연립 방정식의 해가 단 하나만 존재할 때 의미가 있으므로, 우리가 다룰 A 는 가역행렬로 가정한다.
예시
간단한 예로써
B:=210121012
라고 하면 E21B=200121012가 된다. 그리고 B=210121012이므로 B 에 대한 (2,1)-소거연산자는
E21=1−mij0010001=1−210010001
으로 구할 수 있다. 한편 이러한 연산을 여러번 취한
UB:=E32E31E21B=200120012
는 상삼각행렬이고, E21,E31,E32 은 모두 하삼각행렬이다. 하삼각행렬끼리의 곱은 하삼각행렬이므로 LB:=E21E31E32 도 하삼각행렬이고 L−1B=U 으로 나타낼 수 있다. 다시 B 에 대해 정리하면 B=LBUB 즉 하lower삼각행렬과 상upper삼각행렬의 곱으로 분해한 꼴이 된다.
이러한 분해법은 너무나 단순한 덕분에 A∈Rn×n 인 경우에 대해서도 별다른 문제 없이 일반화가 가능하다. 이를 이용한 연립방정식 Ax=b 의 풀이법을 생각해보면 A 가 A=LU 로 분해되므로
LUx=y:=bUx
라 둘 수 있다. 여기서 U 가 상삼각행렬이므로 y 는 후진대입법을 통해 쉽게 구할 수 있고,
L(Ux)=y=Lb
에서 L 이 하삼각행렬이므로 b 는 전진대입법을 통해 쉽게 구할 수 있다. 따라서 LU 분해를 실제로 구할 수 있다는 것은 상당히 많은 문제를 상당히 쉽고 빠르게 풀 수 있다는 뜻이 된다.
유도
이제 직접적으로 L 과 U 를 찾아내기 위해, A:=LU 를 만족하는 하삼각행렬 L 과 상삼각행렬U 를 다음과 같이 정의하자.
L:=U:=1l21l31⋮ln101l32⋮ln2001⋮ln3⋯⋯⋯⋱⋯000⋮1u1100⋮0u12u220⋮0u13u23u33⋮0⋯⋯⋯⋱⋯u1nu2nu3n⋮unn
여기서 L 은 소거연산자들의 곱이므로 대각성분들이 모두 1 임을 쉽게 확인할 수 있다. 위 정의에 따라 직접 A=(aij) 의 성분 aij 를 계산해보면
aij=s=1∑nlisusj=s=1∑min(i,j)lisusj
이 된다. 이제 aij 를 대각선 상에 있는 경우, 대각선 윗쪽에 있는 경우, 대각성 아랫쪽에 있는 경우로 나누어서 생각해보자.
를 얻을 수 있다. 비슷하게 k<j 일 땐
akj=s=1∑k−1lksusj+ukj
를, k<i 일 땐
aik=s=1∑k−1lisusk+likukk
를 얻을 수 있다. 이를 각각 ukj 와 lik 에 대해서 정리하면 다음을 얻는다.
ukj=lik=akj−s=1∑k−1lksusjukk1{aik−s=1∑k−1lisusk}
■
알고리즘
(aij)∈Rn×n 가 가역행렬이라고 하자.
Step 1. k=1
u1j=a1j 을 대입하고 li1=u111ai1 을 계산한다.
Step 2. k=2,3,⋯,n−1
Step 2-1. 다음을 계산한다.ukk=akk−s=1∑k−1lksusk
Step 2-2. j=k+1,k+2,⋯,n−1 에 대해 다음을 계산한다.ukj=akj−s=1∑k−1lksusj
Step 2-3. i=k+1,k+2,⋯,n−1 에 대해 다음을 계산한다.lik=ukk1{aik−s=1∑k−1lisusk}
Step 3. k=n 에 대해 다음을 계산한다.unn=ann−s=1∑n−1lnsusn
알고리즘을 잘 살펴보면 k 가 증가함에 따라 L 은 왼쪽에서 오른쪽으로, U 는 위에서 아래로 구해짐을 알 수 있다. 한 단계를 거칠 때 필요한 값들은 적어도 그 전 단계에서 모두 구해졌으므로 단계마다 계산하는 단위는 한 행이나 한 열이 된다.