소거의 아이디어와 피벗·승수, 3×3 예제, 첨가행렬과 기본 행 연산, 행 교환과 특이한 경우, 소거행렬과 치환행렬, 계산량과 피벗으로 구하는 행렬식
미지수가 수백 개인 연립방정식을 사람이나 컴퓨터가 실제로 어떻게 풀까요? 답은 고등학교에서 배운 소거법을 체계적으로 하는 가우스 소거입니다. 이 장에서는 소거를 행렬로 정리해, 어떤 순서로 무엇을 빼는지, 언제 행을 바꿔야 하는지, 계산이 얼마나 드는지 봅니다. 컴퓨터의 연립방정식 풀이와 9장의 LU 분해의 바탕입니다.
8.1 큰 연립방정식의 풀이
질문. 미지수 3개, 식 3개짜리 연립방정식은 손으로 풀 수 있습니다. 미지수 1000개짜리라면? 컴퓨터는 어떤 순서로 계산할까요? 그리고 해가 없거나 무수히 많은 경우를 계산 도중에 어떻게 알아챌까요?
1부에서는 연립방정식 Ax=b를 그림으로 보았습니다. 2부는 계산으로 시작합니다. 이 장의 방법인 가우스 소거(Gaussian elimination)는 중학교에서 배운 “한 식에서 다른 식의 배수를 빼서 미지수를 없애기”를 체계화한 것입니다. 체계화하면 두 가지를 얻습니다.
몇 개의 미지수든 똑같은 절차로 풀립니다. 그래서 컴퓨터가 쓸 수 있습니다.
절차가 어디서 멈추는지를 보면 해가 하나인지, 없는지, 무수히 많은지가 드러납니다.
8.2 소거의 아이디어
예제 8.1.
{x−2y=13x+2y=11
둘째 식에서 첫째 식의 3배를 빼면 x가 사라집니다.
{x−2y=13x+8y=8
이제 아래에서부터 풉니다. 둘째 식에서 y=1, 첫째 식에 넣어 x=3입니다.
이 계산에 쓰인 말을 정해 둡시다.
첫째 식의 x 계수 1을 피벗(pivot)이라 합니다. 피벗은 아래쪽 식에서 그 미지수를 없애는 데 쓰는 기준입니다.
둘째 식에서 첫째 식을 몇 배 뺐는지(ℓ21=3)를 승수(multiplier)라 합니다. 승수 = (없앨 계수) ÷ (피벗)입니다.
소거 후 둘째 식의 y 계수 8이 둘째 피벗입니다.
소거가 끝나면 계수가 계단 모양(위삼각)이 됩니다. 아래에서부터 차례로 푸는 것을 후진대입(back substitution)이라 합니다.
그림 8.1. 소거하면 둘째 직선이 수평선으로 바뀝니다. 직선은 달라졌지만 교점은 그대로입니다.
그림 8.1처럼 소거는 방정식(직선)을 바꿉니다. 그러나 교점, 즉 해는 바꾸지 않습니다. 이것이 소거가 정당한 이유이며 8.4절에서 증명합니다.
8.3 3 × 3 예제
예제 8.2.
2x+4y−2z4x+9y−3z−2x−3y+7z=2=8=10
1단계 (첫째 열 소거). 피벗은 2. 승수 ℓ21=4/2=2, ℓ31=−2/2=−1.
식2 −2×식1: y+z=4
식3 −(−1)×식1 (즉 식3 + 식1): y+5z=12
2단계 (둘째 열 소거). 새 식2의 y 계수 1이 둘째 피벗. 승수 ℓ32=1/1=1.
셋째 피벗 자리가 0이고, 아래에 바꿀 행도 없습니다. 마지막 식은 0x+0y+0z=b3−7입니다.
b3=7이면 0= (0이 아닌 수)가 되어 해가 없습니다.
b3=7이면 마지막 식은 0=0으로 아무 정보가 없습니다. z를 자유롭게 t로 정하면 y=3−2t, x=2−y−z=−1+t이므로 해가 무수히 많습니다: (x,y,z)=(−1+t,3−2t,t).
이 예의 행렬은 셋째 행이 (첫째 행) + (둘째 행)입니다. 셋째 식이 새로운 정보를 주지 못하고, 앞의 두 식과 모순되거나(b3=7) 그냥 반복될 뿐입니다(b3=7). 그림으로는 세 평면이 한 점에서 만나지 않습니다. 6장의 말로는 행렬식이 0이고, 3장의 말로는 세 열이 한 평면 위에 있어 span이 R3이 되지 못합니다.
직관.n×n 행렬 A의 소거 결과는 두 가지 중 하나입니다.
정칙(nonsingular): 행 교환을 허용하면 피벗이 n개 모두 나옵니다. 모든 b에 대해 해가 정확히 하나입니다.
특이(singular): 피벗이 n개보다 적습니다. b에 따라 해가 없거나 무수히 많습니다.
피벗이 몇 개 나오는지가 행렬의 본질적인 정보입니다. 이 개수를 랭크라 하며 11장의 주제입니다.
행 교환이 필요한 예제 8.7을 단계별로 소거합니다
이 위젯은 JavaScript가 필요합니다
▶ 문제 8.5–8.8
8.6 소거를 행렬곱으로 쓰기
소거의 각 단계는 행렬을 왼쪽에서 곱하는 것으로 쓸 수 있습니다. 5장에서 왼쪽에 곱하는 행렬은 행들의 일차결합을 만든다고 했습니다(정리 5.5의 (3)).
정의 8.9 (소거행렬).i=j에 대해 단위행렬의 (i,j) 성분을 −ℓ로 바꾼 행렬을 Eij라 합시다. EijA는 A의 제i행에서 제j행의 ℓ배를 뺀 행렬입니다. 이런 행렬을 소거행렬(elimination matrix)이라 합니다.
예제 8.10.E21=1−20010001이면
E2124−249−3−2−37=20−241−3−217.
E21의 제2행 (−2,1,0)은 “행1의 −2배 + 행2”를 뜻합니다.
예제 8.2의 소거 전체는
E32E31E21A=U=200410−214
입니다. 여기서 E31은 (3,1) 성분이 +1, E32는 (3,2) 성분이 −1입니다. 행렬 순서에 주의합시다. 가장 먼저 한 E21이 A에 가장 가깝습니다.
정의 8.11 (치환행렬). 단위행렬의 행 순서를 바꾼 행렬을 치환행렬(permutation matrix)이라 합니다. PA는 A의 행 순서를 같은 방식으로 바꾼 행렬입니다.
예를 들어 P23=100001010은 행2와 행3을 바꿉니다(문제 5.3에서 2×2 경우를 보았습니다).
소거행렬과 치환행렬은 모두 되돌릴 수 있습니다. Eij가 한 일(행j의 ℓ배 빼기)은 행j의 ℓ배를 다시 더하면 되돌아갑니다. 이 관찰이 9장에서 A=LU 분해로 이어집니다.
▶ 문제 8.9–8.10
8.7 계산량과 행렬식
8.7.1 소거의 계산량
n×n 행렬에서 첫째 열을 소거하려면 아래 n−1개 행 각각에서 n개쯤의 성분을 고쳐야 하므로 약 n2번의 곱셈이 필요합니다. 둘째 열은 약 (n−1)2번, …. 합하면
n2+(n−1)2+⋯+12=6n(n+1)(2n+1)≈3n3.
(문제 1.8의 공식입니다.) 후진대입은 약 2n2번으로 훨씬 적습니다.
n=1000이면 약 3.3×108번의 곱셈입니다. 오늘날 컴퓨터는 1초 안에 끝냅니다. 한편 15장에서 볼 크래머 공식을 그대로 쓰면 n!에 비례하는 계산이 필요한데, 1000!은 102567보다 큽니다. 이론적으로 아름다운 공식과 실제로 쓸 수 있는 알고리즘은 다를 수 있습니다.
8.7.2 소거로 행렬식 구하기
6장에서 층밀림은 넓이와 부피를 바꾸지 않는다고 했습니다. 교체 연산(한 행에서 다른 행의 배수를 빼기)은 층밀림입니다. 그러므로 교체 연산만으로 A를 U로 만들었다면 detA=detU이고, 위삼각행렬의 행렬식은 대각성분의 곱이므로
detA=(피벗들의곱).
행 교환이 있었다면 교환할 때마다 부호가 바뀝니다. 예제 8.2에서 detA=2⋅1⋅4=8입니다.
이 사실은 15장에서 행렬식의 성질로부터 증명합니다. 컴퓨터가 행렬식을 계산하는 방법도 바로 이것입니다.
▶ 문제 8.11–8.12
쓰이는 곳. 회로 해석, 구조물의 힘 계산, 유한요소법처럼 큰 연립방정식이 나오는 곳에서 컴퓨터가 쓰는 기본 알고리즘입니다. 계산량이 약 32n3이라는 것은 '변수가 두 배면 시간은 여덟 배'라는 감각으로 쓰입니다.
이 장의 요약
가우스 소거: 피벗 아래 성분을 (승수 = 성분/피벗)×피벗 행을 빼서 없앱니다. 위삼각 꼴이 되면 후진대입합니다.
기본 행 연산(교체, 교환, 0이 아닌 수의 스케일)은 되돌릴 수 있으므로 해를 바꾸지 않습니다.
피벗 자리가 0이면 아래 행과 교환합니다. 교환할 행이 없으면 특이 행렬이고, 해가 없거나 무수히 많습니다.
소거는 왼쪽에서 소거행렬 Eij와 치환행렬 P를 곱하는 것입니다.
계산량은 약 n3/3. detA는 피벗의 곱(행 교환마다 부호 변경).
문제
8.1 [계산] · 확인 문제
가우스 소거와 후진대입으로 풉니다. 피벗과 승수를 모두 적고, 원래 식에 대입해 검산합니다. (a) 2x+3y=8, 4x+7y=18 (b) x+y+z=6, 2x+3y+z=11, x−y+2z=5
문제 8.9의 행렬들에 대해 (a) E=E32E31E21을 계산합니다. E의 성분에 승수들이 그대로 나타날까요? (b) 각 Eij의 역행렬(한 일을 되돌리는 행렬)을 쓰고, L=E21−1E31−1E32−1을 계산합니다. L의 성분은 승수들과 어떤 관계일까요? (이 관찰이 9장의 A=LU 분해입니다.)
풀이
(a) E31E21=1−1−1010001. 여기에 E32를 곱하면 셋째 행이 (−1,0,1)−(−1,1,0)=(0,−1,1)이 되어 E=1−1001−1001. (3,1) 자리에 승수 ℓ31=1의 흔적이 없습니다. 승수가 섞입니다.
(b) Eij−1은 −ℓ을 +ℓ로 바꾼 것. L=E21−1E31−1E32−1=111011001. 승수 ℓ21=1, ℓ31=1, ℓ32=1이 정확히 제자리에 있습니다.
8.11 [계산] · 확인 문제
문제 8.1(b)의 계수행렬의 행렬식을 피벗의 곱으로 구하고, 6.7절의 첫째 행 전개 공식으로 구한 값과 비교합니다.
대각선과 그 바로 위아래 대각선에만 0이 아닌 성분이 있는 n×n 행렬을 삼중대각행렬이라 합니다(문제 8.2의 행렬이 그 예). 삼중대각행렬을 소거할 때(행 교환이 필요 없다고 합시다) 필요한 곱셈·나눗셈의 횟수가 n에 비례함을 설명합니다. 일반 행렬의 n3/3과 비교합니다.
풀이
각 단계에서 피벗 아래에 0이 아닌 성분은 하나뿐이므로 고칠 행은 하나입니다. 그 행에서도 바뀌는 성분은 피벗 열의 성분(0이 됨)과 바로 오른쪽 성분, 그리고 우변뿐입니다. 그래서 한 단계에 나눗셈 1번, 곱셈 2번 정도이고, n−1단계이므로 전체가 n에 비례합니다. 후진대입도 각 행에서 미지수가 둘뿐이라 n에 비례합니다. n=1000이면 몇천 번 대 3×108번입니다. 행렬에 0이 많다는 구조를 이용하면 계산이 극적으로 줄어듭니다(30장).