그람-슈미트는 비뚤어진 기저를 곧게 편다
두 벡터가 비스듬히 붙어 있다고 하자. 같은 평면을 펴기는 하지만 서로 직각도 아니고 길이도 제각각이라 계산에는 영 불편하다. 그람-슈미트는 이 비뚤어진 기저를 곧게 펴는 절차예요. 첫 방향은 그대로 살리고, 둘째 벡터에서는 첫째 쪽으로 비치는 그림자인 사영을 빼 버린다. 그러면 첫째와 정확히 수직인 성분만 남는다. 마지막으로 둘 다 길이를 1로 맞추면 직각으로 만나는 깔끔한 단위 프레임이 나와요. 첫 위젯에서 단계를 하나씩 밟으며 기울어진 두 벡터가 어떻게 정규직교가 되는지 따라간다. 이게 바로 다음 강 QR 분해의 Q예요.
버튼으로 단계를 하나씩 밟아 나간다. 0단계는 비스듬한 입력 a1, a2 그대로다. 1단계는 a1을 길이 1로 줄여 첫 초록 단위벡터 u1을 만든다. 2단계는 a2가 u1 쪽으로 드리우는 그림자, 곧 사영 (a2·u1)u1을 골드로 그려요. a2 안에 u1 방향이 얼마나 들어 있는지 보여 주는 것이다. 3단계는 a2에서 그 사영을 빼 남은 수직 성분 w를 주황으로 만들고, 길이를 1로 맞춰 둘째 단위벡터 u2를 얻는다. 이제 u1과 u2가 정확히 직각으로 만나요. 비뚤어진 둘이 곧은 정규직교 한 쌍으로 펴진 것이다.
그람-슈미트의 핵심 동작 하나만 떼서 손에 쥔다. u1을 x축 위 단위벡터로 고정해 두고 파란 벡터 a2를 마음대로 끌어 본다. 골드 화살표는 a2가 u1 위에 드리우는 사영 (a2·u1)u1이에요. a2 안에 들어 있는 u1 성분만 뽑아낸 것이다. 주황 화살표는 그 사영을 뺀 나머지 a2 − 사영이다. a2를 어디로 끌든 이 주황 나머지는 늘 u1과 정확히 직각을 이뤄요. 사영을 빼면 평행한 성분이 사라지고 수직 성분만 남기 때문이다. 바로 이 한 번의 빼기가 비뚤어진 둘째 벡터를 곧게 세우는 그람-슈미트의 심장이에요.
이번에는 입력이 얼마나 비뚤어지든 출력은 늘 곧다는 걸 본다. a1은 고정해 두고 슬라이더로 a2의 기울기 각을 이리저리 돌린다. 흐릿한 두 벡터가 비스듬한 입력 a1, a2이고, 진하게 그려진 직각의 단위 프레임 u1, u2가 그람-슈미트로 펴낸 출력이에요. 입력을 아무리 기울여도 출력 u1과 u2는 언제나 길이 1에 서로 직각을 유지한다. 단 하나 위험한 자리가 있다. a2를 a1과 거의 나란하게 만들면 둘이 같은 방향이라 펼 평면이 사라지고 수직 성분이 0에 가까워져요. 그 순간 정규직교 프레임을 만들 수 없어 경고가 뜬다. 거의 평행한 기저는 곧게 펼 수 없다는 뜻이다.
그람-슈미트는 어느 벡터에서 출발하느냐에 따라 결과가 달라진다. 첫 벡터의 방향만큼은 그대로 보존되기 때문이에요. 토글로 출발 순서를 바꿀 수 있다. a1 먼저로 두면 u1이 a1 방향을 그대로 따라가고 u2는 거기에 직각으로 세워진다. a2 먼저로 바꾸면 이번에는 u1이 a2 방향을 따라가고 u2가 그 직각이 돼요. 같은 두 입력으로 같은 평면을 펴는데도 만들어진 정규직교 프레임은 서로 다르게 돌아가 있다. 둘 다 똑같이 올바른 정규직교 기저다. 다만 그람-슈미트는 첫 방향을 닻으로 삼는 절차라, 누구를 첫째로 부르느냐가 답을 정해요.
이제 펴낸 두 단위벡터를 한 행렬에 모은다. 토글로 u1, u2를 하나씩 켜면 각각 행렬 Q의 1열과 2열로 자리를 잡아요. 아래 숫자판에 그 2×2 Q가 뜨는데, 초록 열이 u1, 주황 열이 u2다. Q의 두 열은 서로 직각인 단위벡터라, Q는 길이도 각도도 건드리지 않는 순수 회전인 직교행렬이다. 그래서 Qᵀ Q = I가 성립해요. 이렇게 모은 Q가 바로 다음 강 QR 분해의 Q다. 어떤 행렬 A든 A = QR로 쪼개는데, Q는 그람-슈미트로 펴낸 이 정규직교 열들이고 R은 그 과정에서 빼낸 사영 계수들을 담은 위삼각 행렬이에요.