11강 / 20강

가우스 소거법 — 계단 꼴로 만들어 푼다

쓸 수 있는 손놀림은 딱 세 가지

가우스 소거법 — 계단 꼴로 만들어 푼다
소거법은 방정식을 계단 모양으로 정리해 아래에서부터 풀어 올립니다.

미지수가 셋, 넷, 백 개가 되면 눈으로 푸는 건 불가능합니다. 그래서 절대 실패하지 않는 절차가 필요해요. 그것이 가우스 소거법입니다.

핵심은 이겁니다 — 방정식을 주물러도 해가 변하지 않는 손놀림이 세 가지 있습니다.

① 두 줄의 순서를 바꾼다 (식을 쓴 순서는 답과 무관)

② 한 줄에 0이 아닌 수를 곱한다 (양변에 같은 수를 곱한 것)

③ 한 줄에 다른 줄의 몇 배를 더한다 (같은 값을 양변에 더한 것)

이 셋만 써서 첨가행렬을 계단 꼴로 만듭니다. 왼쪽 아래가 전부 0이 되면, 마지막 줄부터 거꾸로 값을 구해 올라갈 수 있어요.

축(피벗)을 1로 만들고, 그 아래를 0으로 지웁니다. 이것을 왼쪽부터 반복합니다.
Python 브라우저에서 실행

🎮 한 단계씩 밟아 보세요

"다음 단계" 를 누를 때마다 소거가 한 번씩 진행되고, 무엇을 왜 했는지가 아래에 적힙니다. 어느 칸이 방금 0이 되었는지도 표시돼요. "해가 없음"과 "해가 무수히" 예제도 꼭 끝까지 돌려 보세요.

가우스-조던 소거를 한 걸음씩 — 왜 그 줄을 골랐는지까지
불러오는 중…

피벗이 0 이면 어떡하나

축으로 삼으려는 자리가 0 이면 나눌 수 없습니다. 이때는 아래 줄과 자리를 바꿉니다(손놀림 ①). 바꿀 줄이 없다면? 그 열에는 축을 세울 수 없으니 다음 열로 넘어갑니다 — 이때 자유변수가 생겨요 (12강).

실제 컴퓨터는 한 걸음 더 나갑니다. 0이 아니어도 절댓값이 가장 큰 수를 축으로 골라 줄을 바꿉니다. 이것을 부분 피벗팅이라고 해요.

왜 그럴까요? 아주 작은 수로 나누면 오차가 크게 부풀기 때문입니다. 0.0001 로 나누면 원래 있던 작은 오차가 만 배가 되어 버려요. 수학적으로는 아무 수로 나눠도 되지만, 컴퓨터의 실수 계산에서는 큰 차이가 납니다.

수학적으로는 같아도, 컴퓨터에서는 나누는 수의 크기가 정확도를 좌우합니다.
Python 브라우저에서 실행

소거법이 알려 주는 것들

소거법은 답만 주는 게 아닙니다. 끝까지 돌려 놓으면 이 행렬에 대한 거의 모든 것이 드러납니다.

소거 결과알 수 있는 것
피벗의 개수랭크 (12강)
피벗이 없는 열자유변수 → 영공간의 차원 (15강)
[0 0 0 | 5] 같은 줄해가 없음
대각선의 곱행렬식 (부호는 줄바꿈 횟수로)
[A | I] 를 소거오른쪽에 A⁻¹ 이 나타남

마지막 줄이 재미있습니다. A 옆에 단위행렬을 붙여 놓고 A 쪽을 I 로 만들면, 같은 손놀림을 받은 오른쪽이 저절로 A⁻¹ 이 됩니다. 역행렬을 구하는 실제 방법이 이거예요.

소거법 하나로 방정식도 풀고 역행렬도 구합니다.
Python 브라우저에서 실행
🤔 확인 문제
가우스 소거법에서 허용되지 않는 손놀림은?
🤔 확인 문제
소거 끝에 [0 0 0 | 7] 이라는 줄이 나왔습니다. 무슨 뜻인가요?
🤔 확인 문제
컴퓨터가 절댓값이 가장 큰 수를 축으로 고르는 까닭은?