中学理科1633649 views
数学講師2913151 views
中学社会670081 views
りんご220229 views
小学社会311570 views
小学算数1203731 views
高校化学2933198 views
教育150077 views
高校日本史191026 views
小学理科721729 views
Help
Tools

English

射影を引いて直角を作る - グラム・シュミットの正規直交化

から 方向の成分を引くと、残りは と直交します。引き算 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 分解。こちらは引き算ではなく鏡映を重ねるので、桁落ちが起きません。

グラム・シュミットが崩れやすいのは、ほとんど平行なベクトルを引き算で分ける からです。

鏡映で直交化するハウスホルダー変換なら、大きさが変わらない操作だけを重ねるので誤差が増えない。

グラム・シュミットの途中で が出ました。何が分かりますか。

  • 内積の計算を間違えた
  • が前のベクトルの一次結合になっている
  • が零ベクトルである
__RESULT__

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

分解の形も確かめます。

で の対角成分は何にあたりますか。

  • もとのベクトルの長さ
  • 引いたあとに残った長さ
  • つねに
__RESULT__

と展開したときの の係数が対角成分です。前の方向ぶんを引いた残りの長さで、 より小さくなります。一次独立ならすべて正になります。

まちがえやすい点

ではなく正規化前の で引くとき、 で割るのを忘れる。長さが でないと打ち消し合いません。
2 本目までしか引かずに 4 本目を作る。 本目では 方向すべてを引きます。
引く前のベクトルどうしで内積をとる。修正版では、更新後のベクトルでとります。
を正規化せずに次の段へ進む。次の内積の係数がずれます。

垂線の足を引いて残りをとる。この 1 手を繰り返すだけで、どんな一次独立の組も正規直交基底に変わります。順番を変えると数値が変わる、という点だけが実装の分かれ目。

出典

Sergei Treil. *Linear Algebra Done Wrong*, Chapter 5. Brown University.
David Austin. *Finding Orthogonal Bases*. Understanding Linear Algebra.
Luc Giraud, Julien Langou, Miroslav Rozloznik. *On the loss of orthogonality in the Gram-Schmidt orthogonalization process*. CERFACS Technical Report TR/PA/03/25.
$v_2$ から $v_1$ 方向の成分を引けば、残りは $v_1$ と直交します。内積をとると $\langle v_2, e_1 \rangle$ が二度出てきて打ち消し合う、それだけの仕掛け。$k$ 本目では $k-1$ 方向ぶん引き、最後に長さで割ります。$(1,1,1)$、$(0,1,2)$、$(1,0,2)$ を直交化する計算例を追い、係数を縦に並べると上三角の $R$ が現れて $A = QR$ になるところまで。途中で $u_k = 0$ が出れば一次従属と分かる。ほとんど平行な 2 本で桁落ちが起きる理由、内積を更新後のベクトルでとる修正版が安定する理由も扱いました。