QR은 행렬을 회전과 삼각형으로 가른다
행렬의 열은 보통 비뚤어져 있다. 서로 직각이 아니고 길이도 제각각이다. QR은 이 열을 두 조각으로 가른다. 먼저 열을 그람-슈미트로 곧게 펴 서로 수직인 단위벡터로 바꾸는데, 이것이 Q이고 길이도 각도도 건드리지 않는 회전 또는 반사예요. 펴면서 깎아 낸 길이와 겹침을 모아 둔 것이 R이고, 위쪽만 채워진 삼각형이다. A = QR. 회전 하나와 삼각형 하나. 이 한 줄이 최소제곱을 안정적으로 푸는 길이고, 수치 선형대수가 자주 부르는 분해예요. 격자가 정사각형으로 남는 것이 Q가 회전이라는 증거다. 비스듬한 열이 A이고, 곧게 편 열이 Q다.
버튼으로 단계를 밟는다. 0단계는 A의 두 열 a1, a2다. 비스듬하고 길이도 다르다. 1단계로 가면 그람-슈미트가 이 둘을 곧게 편다. a1 방향을 단위길이로 줄인 게 q1, a2에서 q1쪽 그림자를 빼고 남은 직교 성분을 단위화한 게 q2예요. 이제 q1과 q2는 정확히 직각이고 둘 다 길이 1이라 점곱이 0으로 뜬다. 2단계에서 R이 나온다. R = Qᵀ A라서 자동으로 위가 채워진 삼각형이고, 왼쪽 아래 칸 r21은 0이에요. A는 비뚤어진 열, Q는 곧게 편 직교 열, R은 그 사이를 잇는 작은 삼각형이다. 이것이 A = QR이에요.
Q의 두 열은 서로 수직인 단위벡터다. 그래서 Q를 평면에 작용시키면 격자가 일그러지지 않고 통째로 돌아가기만 해요. 슬라이더로 각을 돌리면 칸은 늘어나거나 찌그러지지 않고 정사각형은 정사각형으로 남는다. 길이도 각도도 보존되기 때문이다. 반사 버튼을 누르면 거울처럼 뒤집히는데, 열은 여전히 직교 단위라 모양은 변하지 않아요. 이것이 직교행렬의 정의다. QᵀQ = I. 화면 아래 QᵀQ를 보면 어떤 각에서도 단위행렬에 머문다. Q가 회전이거나 반사일 뿐이라는 증거예요.
R이 왜 위쪽 삼각형만 채워질까. 각 칸은 rij = qi · aj, 곧 i번째 곧게 편 방향에 j번째 원래 열을 비춘 그림자의 길이다. 칸을 켜면 점곱 값이 확인돼요. 핵심은 대각선 아래 칸이다. r21 = q2 · a1인데, q2는 a1을 빼고 남은 직교 성분이라 a1과 정확히 수직이다. 수직이면 점곱이 0이라 r21은 0이에요. 뒤에서 만든 방향 qi는 앞선 열 aj(j < i)에 쓰이지 않는다. 그 열은 이미 앞 방향들로 표현됐기 때문이다. 그래서 대각선 아래는 통째로 0이고, R은 위삼각이에요.
이번에는 거꾸로 R을 쥐고 A를 다시 짓는다. Q는 20도 회전으로 고정하고 슬라이더로 R의 세 칸을 움직이면 A = QR이 바로 다시 그려져요. r11은 첫 열 a1의 길이를 정해서 키우면 a1이 길어진다. r22는 두 번째 방향으로 얼마나 뻗는지, 곧 직교 성분의 길이다. r12는 전단이라 두 번째 열을 첫 번째 방향으로 얼마나 기울일지 정한다. 이 세 숫자가 길이와 기울임을 담고, Q는 그 결과를 통째로 20도 돌릴 뿐이에요. R이 모양을, Q가 방향을 맡는 분업이 보인다.
QR이 실제로 일하는 곳은 최소제곱이다. 데이터에 가장 잘 맞는 직선은 세로 점선인 잔차의 제곱합을 가장 작게 만드는 선이었다. 슬라이더로 기울기와 절편을 움직여 제곱오차 합을 줄일 수 있어요. 보통은 AᵀA를 만들어 정규방정식을 푸는데, AᵀA는 오차에 민감해서 수치적으로 불안정할 때가 많다. QR은 그 단계를 건너뛴다. A = QR을 넣으면 정규방정식이 R x = Qᵀ b로 줄어들고, R이 삼각형이라 뒤부터 대입하면 끝나요. 버튼을 누르면 그 QR 해로 건너뛰어 제곱오차 합이 최소가 된다. AᵀA를 만들지 않고 같은 답을 더 안정적으로 얻는 것이 QR의 쓰임이다. 제곱오차 합이 최소인 직선이 QR이 찾는 답이다.