皆さん、こんにちは。
今回は線形代数ネタ第2弾、「グラム=シュミットの直交化」について紹介します。
この説明の中で、高校数学のベクトルで登場した「1次独立」という概念も改めて紹介します。
1. 1次独立
高校のベクトルの単元で「1次独立」という概念が出てきましたよね。「この2つのベクトルは1次独立だから、左辺と右辺で係数が同じだ」とかいう議論をするときに登場しました。
高校数学の範囲で「1次独立」を使う場面は2次元の平面図形を扱う場合が殆どだったので、「1次独立=2つのベクトルが互いに定数倍にならない=向きが同じにも逆向きにもならない」程度の認識で過ごしてきた人が大半だと思います。
もちろん、2次元ベクトルの場合はその認識で正しいです。ですが、大学以降は3次元、それ以上の次元を持ったベクトルがわんさか登場するようになります。そういうより一般的な状況での「1次独立」の定義をしっかり認識する必要があります。
というわけで前置きが長くなったので、「1次独立」の定義を紹介します。
左辺のようにベクトルを定数倍して和を取った形を「線形和」と呼びますが、
n本のベクトルの線形和を取った時に0ベクトルになるなら、各ベクトルの係数が0になるしかない。
これが一般の「1次独立」の定義です。
もしa1~anが1次独立でなかったら何が言えるのか、見ていきましょう。
例えば、もしc1≠0だったとすると、線形和の式は次のように変形できます。
a1が他のa2~anの線形和で書けてしまっています。こういう状況を1次従属と言います。1次独立ではないとき、あるベクトルが他のベクトルたちの線形和で書けてしまうわけです。
つまり1次独立とは、「他のベクトルたちの線形和で書けず、独立している」ということなのです。
高校数学でなじみ深いn=2のケースで見てみると、
a1とa2が1次従属であることと、a1がa2の定数倍で書けることが同値だと分かります。
これの対偶を取れば、a1がa2の定数倍で書けない=a1とa2は1次独立 というお馴染みの認識が得られるわけです。
そして、高校数学でお馴染みの係数比較については、次のように説明できます。
あるベクトルが、1次独立なn本のベクトルa1~anの線形和で2通りに書けたとします。
このとき、右辺のベクトルを丸ごと左辺に移項すれば、
と、a1~anの線形和が0になります。
このとき、上記の1次独立の定義から、こうなる場合は各係数が0になるしかないので、
が言えます。
最後の行を書き換えれば、
確かに左辺と右辺で各ベクトルの係数が等しいことが分かりました。
こういう理屈で、「この2つのベクトルは1次独立だから、左辺と右辺で係数が同じだ」という話ができていたというわけです。
2. ベクトル空間
1次独立に関連して、ベクトル空間という概念も紹介しておきましょう。
要するに1次独立なn本のベクトルa1~anの線形和で書けるベクトルたちを全部集めた集合を、ベクトル空間と呼ぶわけです。
この話は、高校数学でもちらっと登場しています。
「1次独立な2つのベクトルa,bによって張られる平面の上にあるベクトルxは実数s,tを用いてx=sa+tbの形で書ける」
こんな話を聞いたことがあるはずです。
ここで登場する「1次独立な2つのベクトルa,bによって張られる平面」こそが、基底a,bによるベクトル空間そのものです。
1次独立なベクトルが1本ならベクトル空間は直線、2本ならベクトル空間は平面、3本ならベクトル空間は3次元空間になります。
3. 正規直交基底
ここまで1次独立、ベクトル空間について説明してきました。
ベクトル空間には、n本の1次独立な基底ベクトルa1~anが対応していました。しかし、基底ベクトルa1~anの取り方は一つじゃありません。
これはn=2の場合を考えれば分かりやすいです。
a1=(1,2)、a2=(3,4)のつくるベクトル空間はxy平面全体ですが、xy平面をつくる基底は他に例えばb1=(1,0), b2=(0,1)もあります。
このように1つのベクトル空間に対応する基底a1~anには複数の取り方があるわけですが、どんな基底の取り方をすると便利でしょうか?
それは、「大きさが全部1で、互いに直交する(=内積が0になる)」じゃないでしょうか?そんな性質を持った基底b1~bnを正規直交基底と呼びます。
b1~bnが正規直交基底だと何が嬉しいのか?2つの例をあげてみます。
あるベクトルxが、正規直交基底b1~bnの線形和で次のように書けているとします。
このとき、ベクトルbkの係数ckが知りたいと思ったら、xとbkの内積を取ればよくなります。
bk以外のベクトルが内積0で全部消えてくれて、唯一生き残るbkの項は大きさ1なのでckそのものが残るというわけです。
また、xの大きさが知りたいとなった時にも、
各係数の2乗の和を計算するだけでよくなります。
(※この話を聞いて、フーリエ級数展開の「フーリエ係数」と「パーセバルの等式」と似ていると思った人は鋭いです。周期関数を三角関数の和で表現しよう ~フーリエ級数展開~ - ちょぴん先生の数学部屋 (hatenablog.com)
実は、フーリエ級数展開も、正規直交基底と密接な関係がある概念になっています。ただ、その説明をすると尺が足りなくなるため、ここでは割愛します)
このように、正規直交基底には便利な性質がたくさんあるため、ベクトル空間を正規直交基底で表現したい!というモチベーションが働くことになります。
4. グラム=シュミットの直交化
というわけで、それを叶える道具の1つが今回紹介する「グラム=シュミットの直交化」というアルゴリズムです。
これは、ある基底a1~anで作られるベクトル空間について、そのベクトル空間そのものは維持しながら基底をa1~anから正規直交基底b1~bnに変換する方法になります。
簡単のために、n=2の場合で、a1=(1,2), a2=(3,4)から正規直交基底b1,b2を作ることを考えることにします。
a1とa2で作られるベクトル空間はxy平面そのものですね。
なので、作られるベクトル空間はxy平面全体のままで、基底だけを正規直交基底b1, b2に作り替えます。
グラム=シュミットの直交化は3ステップに分かれています。
最初にすることは、a1の大きさを向きはそのままに1にすることです。これは、a1自身を|a1|で割ればいいだけなので簡単です。
次のステップは、高校物理ではお馴染みの「ベクトルの分解」です。最終的にa2からb1に垂直なベクトルを作らないといけないので、この工程が自ずと必要になります。
今、a1とa2のなす角をθとすると、a2のうちa1(つまりb1)に平行な成分cの大きさは|a2|cosθです。向きは単位ベクトルb1で決まるため、cは
このように内積を使った形で求まります。
b2は、b1に平行な成分cと垂直な成分dの和でかけるので、dは、
と計算できます。
次で最後です。
dを向きはそのままに大きさ1にすればb2の完成です。
以上の手順から、正規直交基底b1, b2を求めることができました。
この2つが作るベクトル空間もxy平面全体で変わっていません。
ここまで、基底が2本の1次独立なベクトルの場合を紹介しましたが、n本になっても本質的にはこの3ステップのアルゴリズムを繰り返せば正規直交基底が作れます。
例題のケースをpythonで実装すると次のようになります。
実行結果は
となって、確かに手計算と同じ結果になります。
以上がグラム=シュミットの直交化の概要になります。
このアルゴリズムが、後に「エルミート行列」「ユニタリ行列」が登場したときに役に立つことになります。