射影を引いて直角を作る - グラム・シュミットの正規直交化
から 方向の成分を引くと、残りは と直交します。引き算 1 回で直角が作れる。
この操作を、本数のぶんだけ繰り返すのがグラム・シュミットの正規直交化です[1]。最後に長さで割れば、正規直交基底ができます。
1 本目と 2 本目
はそのまま使います。長さで割って とする。
2 本目は、 から 方向の成分を引きます。引いた残りを とおく。
は、 を の張る直線へ落とした足です。垂線の足を引けば、垂線そのものが残る。
引いた残りが直交する理由
計算で確かめます。 と の内積をとる。
なので 。ちょうど打ち消し合います。
長さを にそろえてあるからこの形になる。そろえていない で引くなら、 で割る必要があります[1]。
一般の手順
本目では、すでに作った の全方向について、同じ引き算をします[1]。
引いたあと と の内積をとると、 の項だけが残って打ち消し合う。他の項は で消えます。
同じ計算が のすべてで通るので、 は前の全部と直交します。
途中までの張る空間は変わらない
本目まで見ると、もとの と新しい は同じ空間を張ります[1]。
は と前の の一次結合。逆に も で書けるので、両向きに含まれます。
この性質があるので、途中で止めても意味のある結果になる。 本だけ直交化すれば、その 本が張る空間の正規直交基底が手に入ります。
例: で 3 本を直交化する
とし、。 なので、係数は です[1]。
3 本目は 2 方向ぶん引きます。、、。
内積を確かめると 、。3 本とも直交しました。
長さで割ると、正規直交基底が出ます。
を 2 倍しても向きは同じなので、分数を消してから割ると計算が楽です。
一次独立でないと途中で止まる
が前の の一次結合なら、 はすでに に入っています。引くと何も残らない。
を長さで割れないので、そこで手順が止まります。 が出た時点で、一次従属だと分かる仕組みです。
判定に使えます。途中で が出れば従属、最後まで出なければ独立。
を作る
なら一次従属で終了
でなければ割って次へ
QR 分解が出てくる
を列に並べた行列を 、 を列に並べた行列を とします。
手順を逆に読むと、 が の一次結合で書けています。 以降は使いません。
この係数を第 列に縦に並べると、対角より下が の行列になります。上三角行列 です[2]。
の対角成分は 。一次独立なら全部正なので、 は正則になります。

例:QR を書き下す
上の 3 本を列に並べた行列で、 の成分を出します。 で、対角は です。
行列式は 。 なので になります。
もとの の行列式を直接計算しても 。分解が正しいことの確かめになります。
順番を変えると数値が変わる
引き算をどう並べるかで、丸め誤差の乗り方が変わります。数学的には同じでも、計算機では別物です[3]。
古典版は、もとの から全方向ぶんをまとめて引きます。修正版は、1 方向引いた結果からまた次を引く、と順に更新する。
内積を、更新前の ではなく更新後の でとるのが違いです。すでに引いた誤差が次の内積に反映されます。
内積をすべて でとる。直交性が完全に失われる場合がある
内積を更新後のベクトルでとる。崩れは条件数 に比例する形で押さえられる
修正版については、 が機械イプシロン と の積で押さえられると示されています[3]。
のような悪条件の行列だと、この上限でも直交性は残りません。古典版はさらに悪く、失われ方が実験で確かめられています[3]。
例:ほとんど平行な 2 本
、 を でとります。ほぼ同じ向きの 2 本です。
、。ところが は、倍精度では に足しても消えます。
引き算 で有効数字が全部落ちる。桁落ちと呼ばれる現象で、残った の向きは誤差だけで決まってしまいます。
安定させたいなら、直交化をもう一度かける方法があります。誤差の乗った を、 に対してさらに直交化し直す手順です。
やり直しは 1 回で足ります。2 回目を終えた時点で、直交性は機械精度まで戻ると示されています[3]。
より安定なのはハウスホルダー変換による QR 分解。こちらは引き算ではなく鏡映を重ねるので、桁落ちが起きません。
グラム・シュミットが崩れやすいのは、ほとんど平行なベクトルを引き算で分ける からです。
鏡映で直交化するハウスホルダー変換なら、大きさが変わらない操作だけを重ねるので誤差が増えない。
グラム・シュミットの途中で が出ました。何が分かりますか。
- 内積の計算を間違えた
- が前のベクトルの一次結合になっている
- が零ベクトルである
分解の形も確かめます。
で の対角成分は何にあたりますか。
- もとのベクトルの長さ
- 引いたあとに残った長さ
- つねに
と展開したときの の係数が対角成分です。前の方向ぶんを引いた残りの長さで、 より小さくなります。一次独立ならすべて正になります。
まちがえやすい点
垂線の足を引いて残りをとる。この 1 手を繰り返すだけで、どんな一次独立の組も正規直交基底に変わります。順番を変えると数値が変わる、という点だけが実装の分かれ目。












uk は vk から Ek−1 への射影を引いたものです。0 になるのは vk がすでに Ek−1 に入っているとき、つまり一次従属のときになります。vk 自身が零ベクトルとは限りません。