도구스학업·수학

QR 분해(그람–슈미트) 계산기

행렬을 직교행렬 Q와 상삼각행렬 R의 곱으로 쪼갭니다. 고전 그람–슈미트와 수정 그람–슈미트를 함께 돌려 QᵀQ가 단위행렬에서 얼마나 벗어나는지 견주고, R x = Qᵀb로 최소제곱 해까지 구합니다.

한 줄에 한 행씩. 열이 행보다 많으면 열들이 반드시 종속이라 받지 않습니다.

수정 그람–슈미트 — 직교성 오차 ‖QᵀQ − I‖

4.510e-16

QR = A 오차는 0입니다. 두 값이 모두 작아야 분해가 맞은 것입니다 — 뒤쪽만 작으면 속습니다.

고전 방식의 직교성 오차4.510e-16
수정 방식의 직교성 오차4.510e-16
두 값의 비1.00000배
고전 방식의 QR = A 오차0
수정 방식의 QR = A 오차0
열이 종속인지독립입니다

Q — 열들이 서로 직각이고 길이가 1

0.169030.89709
0.507090.27603
0.84515-0.34503

R — 위삼각. 깎아 낸 양이 그대로 들어 있다

5.916087.43736
00.82808

A x ≈ b를 가장 덜 어긋나게 푸는 x를 구합니다. 값 3개.

최소제곱 해 x-1.66667, 1.41667
잔차 ‖Ax − b‖0.40825
푼 방법R x = Qᵀb를 뒤에서부터 대입
최소제곱을 정규방정식으로 풀지 않는 이유가 여기 있습니다. AᵀA x = Aᵀb를 그대로 풀면 조건수가 제곱돼 정밀도를 크게 잃습니다. QR로 쪼개면 R x = Qᵀb가 되고 R이 위삼각이라 뒤에서부터 대입만 하면 됩니다 — 조건수를 제곱하지 않으므로 훨씬 안정적입니다.
고전과 수정의 차이는 코드 한 줄입니다. 고전은 언제나 «원래 열» 과 내적하고, 수정은 «지금까지 깎인 열» 과 내적합니다. 종이 위에서는 같은 계산인데 부동 소수점에서는 갈립니다. 위 예제에서 라우흘리 행렬을 눌러 보면 그 차이가 자릿수 단위로 벌어집니다. 실무에서는 이보다도 안정적인 하우스홀더 반사를 쓰지만, 그람–슈미트는 「직교화한다」는 생각이 그대로 코드가 되어 배우기에 좋습니다.

계산 방법

  1. 1행렬 A를 한 줄에 한 행씩 적습니다.
  2. 2Q와 R을 확인하고 QᵀQ = I, QR = A 오차를 봅니다.
  3. 3고전 방식과 수정 방식의 직교성 오차를 견줍니다.
  4. 4b를 넣으면 최소제곱 해 x와 잔차가 나옵니다.
  5. 5라우흘리 행렬 예제를 눌러 두 방식이 갈라지는 것을 봅니다.

자주 묻는 질문

행렬 A를 직교행렬 Q와 위삼각행렬 R의 곱으로 쪼개는 것입니다. Q는 열들이 서로 직각이고 길이가 1인 행렬이라 QᵀQ가 단위행렬이 됩니다. 열들을 하나씩 앞의 것들과 직각이 되게 깎아 나가는 그람–슈미트 직교화로 구할 수 있고, 깎아 낸 양이 R의 성분이 됩니다.

정규방정식 AᵀA x = Aᵀb를 그대로 풀면 조건수가 제곱돼 정밀도를 크게 잃기 때문입니다. QR로 쪼개면 R x = Qᵀb가 되고, R이 위삼각이라 뒤에서부터 대입만 하면 됩니다. 조건수를 제곱하지 않으므로 훨씬 안정적입니다.

종이 위에서는 같고 컴퓨터에서만 다릅니다. 고전 방식은 각 열을 언제나 「원래 열」과 내적해 한꺼번에 빼고, 수정 방식은 「지금까지 깎인 열」과 내적해 이어서 뺍니다. 코드로는 한 줄 차이인데, 열들이 서로 거의 나란할 때 고전 방식은 오차가 증폭돼 Q가 직교하지 않게 됩니다.

자릿수 단위로 갈립니다. 라우흘리 행렬(첫 행이 모두 1이고 아래는 아주 작은 ε이 대각으로 놓인 행렬)에서 ε = 10⁻⁸이면 고전 방식의 ‖QᵀQ − I‖가 0.7까지 오르는 반면 수정 방식은 10⁻⁸ 수준입니다. Q가 직교하지 않으면 그 뒤의 계산이 모두 무너집니다.

아닙니다. 이것이 이 주제의 함정입니다. 고전 방식이 무너진 경우에도 QR = A는 여전히 아주 잘 맞습니다 — 깎은 양을 그대로 R에 적어 두었으니 곱하면 되돌아오기 때문입니다. 문제는 Q가 더 이상 직교하지 않는다는 것이고, 그래서 QᵀQ = I를 따로 확인해야 합니다.

하우스홀더 반사나 기븐스 회전을 씁니다. 수정 그람–슈미트보다도 안정적이고, 큰 행렬에서는 계산량도 유리합니다. 다만 그람–슈미트는 「직교화한다」는 생각이 그대로 코드가 되어 배우기에 좋습니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력한 행렬은 이 기기에만 남습니다.

알아두면 좋은 점

  • 정답지는 QᵀQ = I와 QR = A를 실제로 계산해 보는 것입니다. 무작위 행렬 200개(3~8행, 2~5열)에서 두 오차가 모두 10⁻¹⁰ 아래인 것을 두 방식 모두에서 확인했습니다.
  • R이 위삼각인 것, 대각 성분이 0 이상인 것도 검사합니다. 열이 이미 직교하고 길이가 5인 예제에서 R의 대각이 정확히 5, 5가 나오는 것도 고정했습니다.
  • 라우흘리 행렬(ε = 10⁻⁸)에서 고전 방식의 직교성 오차가 0.5를 넘고 수정 방식은 10⁻⁶ 아래인 것, 둘의 비가 10⁶을 넘는 것을 검사값으로 박았습니다.
  • 같은 라우흘리 행렬에서 고전 방식의 QR = A 오차는 여전히 10⁻¹² 아래인 것도 함께 검사합니다. 「재구성 오차만 보면 속는다」는 것이 요점이라 그 함정을 검사로 남겼습니다.
  • ε이 크면 두 방식 모두 멀쩡한 것도 확인합니다 — 「고전 방식은 언제나 나쁘다」가 아니라 「거의 나란한 열에서 무너진다」가 맞는 말이기 때문입니다.
  • 최소제곱은 해가 정확히 있는 경우와 없는 경우를 나눠 검사합니다. 없는 경우에는 구한 해 언저리를 흔들어 봐도 잔차가 더 작아지지 않는지 확인합니다.
  • 직선 맞추기 예제 (1,1) (2,2) (3,3) (4,5)에서 기울기 1.3, 절편 −0.5가 나오는 것을 고정했습니다.
  • 행렬은 12행 8열까지, 열이 행보다 많으면 열들이 반드시 종속이므로 받지 않습니다. 열이 종속이면 최소제곱 해를 내지 않고 그 사실을 알립니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.