Gram-Schmidt の正規直交化法

blog.li.nu >
この記事が役に立ったら

正射影

 ある 2 つのベクトルがあるとき、片方のベクトルを、もう片方のベクトルへ投影したときの長さを正射影といいます。
001.png
ちょっと見にくいかもしれませんが、要するに、2 つのベクトルを原点をくっつけて並べたとき、片方から片方の延長 (あるいは縮小) に垂線を引いて、原点からその足までの長さをもったベクトルのことを正射影のベクトルと呼びます。長さは当然、なす角を θ とすると、上でいえばベクトル v2 の大きさを ||v2|| と表示することにすれば (絶対値と混同しないように、ベクトルの大きさ [ノルム] は、| を 2 つで囲んだりする)、大きさは ||v2||cosθ となります。ベクトルで表現すれば、これは v1 ベクトル方向の単位ベクトル u1 を用いて、
002.png
となります。もし、単位ベクトルでない場合、大きさが変わってしまうため正射影とはいいませんので、わざわざ単位ベクトルを用いています。また、内積の定義より、||v2||cosθ というのは、
003.png
という内積の形で書くことも出来ます。片方は大きさが 1 の単位ベクトルだからこういう書き方ができるんですね。したがって、v2 の v1 方向への正射影ベクトルは、
004.png
と表示されることがわかりました。内積で表示するとベクトル祭りなので何がスカラーで何がベクトルか混乱してしまいそうですが、かっこで囲まれている中は内積、つまりただのスカラーなので係数です。要するに、これはただのベクトルのスカラー倍ですね。

2 次元の正規直交化

 基底の個数は、次元と同じ数だけ存在しました。たとえば 2 次元の任意のベクトルは、2 つの一次独立なベクトルを使えば、必ず表現できました。要するに 2 次元の場合は、一次従属 (2 つのベクトルが平行) でなければ、その 2 つのベクトルの組み合わせで他の全てのベクトルが表現できてしまうので、それが任意のベクトルの "基 (もと)" という意味で、基底と呼ばれるのでした。
 3 次元も同じです。3 つの一次独立なベクトルの組み合わせで、3 次元空間の任意のベクトルが表現できるので、そのときの 3 つの組み合わせは、全て基底となります。そしてもちろん、そのような基底の組み合わせは無限にありますが、2 次元、3 次元、そしてどうなってるか知らないけど 4 次元・・・いずれの場合にせよ、互いに斜めなんかのへんな基底を考えるよりも、やっぱり 2 つ (3 つ) とも綺麗に直交していた基底の方が、直感的にわかりやすいわけです。
 そこで、基底が与えられたとき、その任意の基底の組み合わせを全部正規直交基底 (正規とは、大きさが 1 のことをいう)、つまり大きさが 1 で全部直交している基底に直す方法が編み出されました。その方法のことを Gram-Schmidt の正規直交化法 (グラム・シュミットの正規直交化法) といいます。
 そのアイデアは非常に単純明快で、やや名前負けしている感がありますが、とりあえず 2 次元で考えてみましょう。まず、2 本のベクトルを用意します。どちらかを基準にします。もう片方はその基準となったベクトルに直交するように作り変えられることになるのです。どうやってというと、まさに上の正射影を活用します。最初の画像で作った正射影ベクトルと、正射影になる前のベクトルの差を考えて見てください。 u1 と直交しているのが分かると思います。このようにベクトルを決めてやれば、直交するベクトルが作れるのです。正規化 (大きさを 1 にすること) は、当然そのあとでそのベクトルの大きさを求め、その大きさで元のベクトルを割ればいいだけですね。二次元の場合はこのアイデアを用いて計算していきます。
 まず、基準となるベクトルを用意します。
005.png
単位ベクトルにしておかないとあとで内積を計算したとき、正射影にはならないので、正規化します。大きさで割ればいいだけなので、正規化したベクトルは u (単位 unit の頭文字) とおくと
006.png
となります。
007.png
イメージとしてはこのようになりました。次に、もう一つの正規直交化したいベクトルを持ってきます。今回はイメージしやすい例を持ってきましたが、なかなか想像が難しい場合でも手順は全く同じです。
008.png
これの u1 (v1) 方向への正射影を取り、 u1 と直交するベクトルを作ります。
009.png
この図でいうと、まず正射影ベクトルを作り、そして u2 と 正射影ベクトルの差を作ります。その差ベクトルがまさに u1 との直交ベクトルになるわけです。ちゃんとこのベクトルを表現すると、
010.png
となります。これで、直交するベクトルが作れますが、作りたいのは "正規" 直交基底なので、正規化が必要です。したがって、このベクトルを用いると
011.png
と表現できます (ベクトルの添え字に ⊥ を入れ忘れたので補完しておいてください)。これで、2 本の大きさ 1 で直交するベクトルが作れました。
012.png

3 次元の正規直交化

 3 次元だとさらに一本ベクトルがありますから、それも考慮します。3 次元になっても 2 つの正規直交基底を作る方法は全く同じなので、すでに 2 本はそうなったという前提のもとで、もう 1 個はどうするかを考えます。
 アイデアとしては、まず 2 本の正規化された直交するベクトルを考えます。ちょうど正方形を張っているような形になります。そこに、新たなベクトルが伸びています。そのベクトルの先から、先ほどの 2 本のベクトルで張る平面に垂線を下ろします。すると、この "垂線" にあたるベクトルが、ちょうど今まで作った二本のベクトルと直交することになるわけです。では、このベクトルは一体どう表現すればいいのか、ということになりますが、それは、今まで作ってきた 2 本のベクトルそれぞれへの正射影ベクトルを考えることで実現できます。
013.png
u1, u2 はすでに作れたので、それらへの正射影ベクトルはそれぞれ、
014.png
となります。上の絵の 2 つの緑のベクトルにあたるものですね。上の絵でいう、緑のベクトルを作りたいわけですが、これは v3 と、2 つの緑のベクトル、正射影ベクトルで作った長方形の対角線に当たるベクトルとの差をとればいいことがわかると思います。この対角線にあたるベクトルは当然 2 つの正射影ベクトルの和ですから、垂線に当たるベクトルの表現は結局、
015.png
ということになります。これで三つの直交するベクトルが出来たので、あとは正規化します。
016.png
(ベクトルの添え字に ⊥ を入れ忘れたので補完しておいてください) これらの手順により、3 つの基底が正規直交化されました。
 一般に、正規直交基底の組み合わせは無限にあります。xyz 軸をぐりぐり回せば、いくらでも正規直交基底が出来るのが直感的に分かると思います。こんなものを作ったとして、一体何に使うのかというのは、後の記事で記述することにします。

例題

017.png
 上記の手法は公式でも書けますが、その公式は丸覚えでなく、今作っているのは何か、を念頭において、常にイメージを作成しながらやっていくと身につくと思います。公式だけ覚えても何をやっているのか分からなければ価値がありません。
 まず、左から 2 つめまでを使い、順に加工していきます。v1 の正規化からいくと、
018.png
です。次に v2 を u1 と直交するように直します。正射影ベクトルを作ればいいだけですね。
019.png
あとは、正規化します。
020.png
最後が一番面倒ですね。今作った 2 つの正規直交化されたベクトルへの正射影ベクトルを作るため、内積を 2 種類計算します。
021.png
これらを用いて、垂線ベクトルを計算するのでした。

その他の記事

コメント

名前 :
電子メール :
URL :
コメント