LU 분해 계산기 쉽게 이해하기 — 개념과 원리
이 계산기는 부분 피벗팅을 써서 정사각행렬을 P·A = L·U로 분해합니다. L은 대각 성분이 1인 하삼각행렬, U는 상삼각행렬이고, P는 행 교환을 기록합니다. 행 교환 횟수와 행렬식도 알려 줍니다. 수치 선형대수, 같은 행렬로 여러 연립방정식을 풀 때, 가우스 소거 손계산을 확인할 때 쓸 수 있습니다.
계산 방법
- 각 열 k에서 절댓값이 가장 큰 성분이 피벗이 되도록 행을 바꾸고(부분 피벗팅), 그 교환을 P에 기록합니다.
- 피벗 아래 성분을 소거하며, 각 승수 l_ik = u_ik ÷ u_kk를 L에 저장합니다.
- 남는 것이 상삼각행렬 U입니다.
det(A) = (−1)^(행 교환 횟수) × (U의 대각 성분의 곱)
원리
가우스 소거는 행의 배수를 빼서 A를 상삼각행렬로 만듭니다. 그 배수들을 L에 기록해 두면 소거를 되돌릴 수 있어서 L·U가 (P의 순서로 바뀐 행의) A를 다시 만듭니다. L과 U를 알면 A x = b를 빠른 삼각 대입 두 번으로 풀 수 있으므로, 비싼 소거는 한 번만 하고 여러 우변에 다시 쓸 수 있습니다. 가장 큰 성분을 피벗으로 쓰면 모든 승수의 크기가 1 이하가 되어 반올림 오차가 줄어듭니다.
예제 풀이
기본값: A = [2 1 1; 4 −6 0; −2 7 2], 부분 피벗팅.
- 1열에서 가장 큰 성분은 4(2행)이므로 1행과 2행을 바꿉니다: P = [0 1 0; 1 0 0; 0 0 1], 행 교환 1번입니다.
- 승수는 2행이 2/4 = 1/2, 3행이 −2/4 = −1/2이며, 소거 뒤 두 번째 피벗은 4입니다.
- 2열의 승수는 4/4 = 1이고, 마지막 피벗은 1입니다.
- L = [1 0 0; 1/2 1 0; −1/2 1 1], U = [4 −6 0; 0 4 1; 0 0 1]입니다.
- det(A) = (−1)¹ × 4 × 4 × 1 = −16입니다.
결과 해석
U의 대각 성분이 피벗이며, 피벗이 0이면 특이행렬입니다. L·U를 곱하면 P가 정한 순서로 행이 바뀐 A가 나와야 합니다. 행 교환 횟수는 행렬식의 부호에만 영향을 줍니다. 연립방정식의 우변이 여러 개라면 L과 U를 한 번 구해 두고 대입만 반복하면 되므로 계산이 크게 줄어듭니다.
흔한 실수
- 행을 바꿀 때 L에 이미 저장한 승수도 함께 바꾸지 않는 경우
- 승수를 반대 부호로 저장하는 경우
- P를 고려하지 않고 L·U = A를 기대하는 경우
- 피벗팅을 생략해 가역행렬인데도 피벗 0에서 막히는 경우
자주 묻는 질문
LU 분해는 어디에 쓰이나요?
연립방정식을 효율적으로 풀고, 행렬식과 역행렬을 구하는 데 쓰입니다.
왜 부분 피벗팅을 하나요?
0이나 아주 작은 피벗으로 나누는 것을 피해 반올림 오차를 줄이기 위해서입니다.
LU로 행렬식은 어떻게 구하나요?
U의 대각 성분을 곱하고, 행을 바꾼 횟수만큼 부호를 바꿉니다.
출처: J. Demmel, UC Berkeley Math 221 lecture notes, Lecture 5 (2020), Gaussian elimination with partial pivoting