グラム・シュミットの直交化法について述べる前に, 線形代数の基礎として内積空間,線型独立と線型従属,直交基底について説明する. **内積空間 [#a2497d01] 2つの実ベクトル&ref(ls_gram-schmidt.eq1.gif,nolink,70%);に対して, #ref(ls_gram-schmidt.eq2.gif,nolink,70%) の演算を内積(inner product)という.内積は&ref(ls_gram-schmidt.eq3.gif,nolink,70%);とも表記される. 内積の性質を以下に示す. -&ref(ls_gram-schmidt.eq4.gif,nolink,70%); -&ref(ls_gram-schmidt.eq5.gif,nolink,70%); -&ref(ls_gram-schmidt.eq6.gif,nolink,70%); -&ref(ls_gram-schmidt.eq7.gif,nolink,70%); ここで,&ref(ls_gram-schmidt.eq8.gif,nolink,70%);である. また,実行列&ref(ls_gram-schmidt.eq9.gif,nolink,70%);について, #ref(ls_gram-schmidt.eq10.gif,nolink,70%) ここで,&ref(ls_gram-schmidt.eq11.gif,nolink,70%);である. この性質は&ref(ls_gram-schmidt.eq12.gif,nolink,70%);から容易に導出できる. 実ベクトルだけでなく複素ベクトルに拡張する. &ref(ls_gram-schmidt.eq13.gif,nolink,70%);に対して, #ref(ls_gram-schmidt.eq14.gif,nolink,70%) を内積という.&ref(ls_gram-schmidt.eq15.gif,nolink,70%);は&ref(ls_gram-schmidt.eq16.gif,nolink,70%);の複素共役ベクトル(&ref(ls_gram-schmidt.eq17.gif,nolink,70%);を要素とすると,その共役&ref(ls_gram-schmidt.eq18.gif,nolink,70%);で構成されるベクトル)である. 複素ベクトルの内積の性質を以下に示す. -&ref(ls_gram-schmidt.eq19.gif,nolink,70%); -&ref(ls_gram-schmidt.eq5.gif,nolink,70%); -&ref(ls_gram-schmidt.eq6.gif,nolink,70%); -&ref(ls_gram-schmidt.eq20.gif,nolink,70%); ここで,&ref(ls_gram-schmidt.eq21.gif,nolink,70%);である. また,複素行列&ref(ls_gram-schmidt.eq22.gif,nolink,70%);について, #ref(ls_gram-schmidt.eq23.gif,nolink,70%) ここで,&ref(ls_gram-schmidt.eq24.gif,nolink,70%);であり, &ref(ls_gram-schmidt.eq25.gif,nolink,70%);は各要素の複素共役をとり,転置したものである(&ref(ls_gram-schmidt.eq26.gif,nolink,70%);). これらの内積が定義されたベクトル空間を内積空間(inner product space)という. **線型独立と線型従属 [#a59ed623] 内積空間&ref(ls_gram-schmidt.eq27.gif,nolink,70%);内のベクトル&ref(ls_gram-schmidt.eq28.gif,nolink,70%);について, #ref(ls_gram-schmidt.eq29.gif,nolink,70%) をベクトル&ref(ls_gram-schmidt.eq30.gif,nolink,70%);の線型結合(linear combination)と呼ぶ. ただし,&ref(ls_gram-schmidt.eq31.gif,nolink,70%);である. 線型結合が&ref(ls_gram-schmidt.eq32.gif,nolink,70%);となる,つまり, #ref(ls_gram-schmidt.eq33.gif,nolink,70%) を線型関係という. 線型関係となるのが,すべての係数&ref(ls_gram-schmidt.eq34.gif,nolink,70%);が&ref(ls_gram-schmidt.eq35.gif,nolink,70%);となる場合(自明な線型関係)のみのとき, ベクトル&ref(ls_gram-schmidt.eq36.gif,nolink,70%);は線型独立(linearly independent),もしくは,1次独立であるという. それに対して,&ref(ls_gram-schmidt.eq37.gif,nolink,70%);以外の解を持つとき,線型従属(linearly dependent)であるという. このような係数の組み合わせによる線型関係を非自明な線型関係という. -例1~ 方向が同じで,大きさが異なる2つのベクトル&ref(ls_gram-schmidt.eq38.gif,nolink,70%);があるとき, その関係は, #ref(ls_gram-schmidt.eq39.gif,nolink,70%) と表される.よって, #ref(ls_gram-schmidt.eq40.gif,nolink,70%) となり,係数&ref(ls_gram-schmidt.eq41.gif,nolink,70%);で線型結合が0となるので, 非自明な線型関係が存在し,この2つのベクトルは線型従属であるといえる. -例2~ 方向が異なる2つのベクトル&ref(ls_gram-schmidt.eq42.gif,nolink,70%);があるとき, その線型結合は, #ref(ls_gram-schmidt.eq43.gif,nolink,70%) となる.これが非自明な線型関係をもつとすると, #ref(ls_gram-schmidt.eq44.gif,nolink,70%) となり,&ref(ls_gram-schmidt.eq45.gif,nolink,70%);と&ref(ls_gram-schmidt.eq46.gif,nolink,70%);が同じ方向になってしまう. これは最初の仮定と矛盾する. よって,&ref(ls_gram-schmidt.eq38.gif,nolink,70%);は線型独立である. **正規直交基底 [#cf0ec93e] 2つのベクトル&ref(ls_gram-schmidt.eq47.gif,nolink,70%);の内積が0であるとき,&ref(ls_gram-schmidt.eq48.gif,nolink,70%);と&ref(ls_gram-schmidt.eq16.gif,nolink,70%);は直交する(orthogonal)といい, &ref(ls_gram-schmidt.eq49.gif,nolink,70%);と表す. そして,ベクトルの組&ref(ls_gram-schmidt.eq30.gif,nolink,70%);がすべて互いに直交するとき, これを直交系(orthogonal system)という.式で表すと以下となる. #ref(ls_gram-schmidt.eq50.gif,nolink,70%) また,&ref(ls_gram-schmidt.eq30.gif,nolink,70%);がすべて単位ベクトルのとき,正規直交系という. さて,体K上のベクトル空間Vのベクトル&ref(ls_gram-schmidt.eq30.gif,nolink,70%);の線型結合全体の集合を, #ref(ls_gram-schmidt.eq51.gif,nolink,70%) と表し,これをベクトル&ref(ls_gram-schmidt.eq52.gif,nolink,70%);によって張られる部分空間(もしくは,生成される部分空間)という (&ref(ls_gram-schmidt.eq53.gif,nolink,70%);と表される). ベクトル空間Vが線型独立なベクトル&ref(ls_gram-schmidt.eq30.gif,nolink,70%);で張られる空間とする. #ref(ls_gram-schmidt.eq54.gif,nolink,70%) このとき,ベクトルの組&ref(ls_gram-schmidt.eq55.gif,nolink,70%);をVの基底(basis)という. &ref(ls_gram-schmidt.eq52.gif,nolink,70%);がすべて単位ベクトルのとき正規基底(normal basis)といい, 直交系のとき直交基底(orthogonal basis),単位ベクトルでかつ直交系のとき 正規直交基底(orthonormal basis)という. また,基本ベクトルで構成される基底は標準基底(standard basis)という. まとめると, -正規基底:&ref(ls_gram-schmidt.eq56.gif,nolink,70%); -直交基底:&ref(ls_gram-schmidt.eq57.gif,nolink,70%); -正規直交基底:&ref(ls_gram-schmidt.eq58.gif,nolink,70%); -標準基底:&ref(ls_gram-schmidt.eq59.gif,nolink,70%); ここで,&ref(ls_gram-schmidt.eq60.gif,nolink,70%);はデルタ関数で&ref(ls_gram-schmidt.eq61.gif,nolink,70%);で1,&ref(ls_gram-schmidt.eq62.gif,nolink,70%);で0となる. &ref(ls_gram-schmidt.eq63.gif,nolink,70%);は基本ベクトルである(2次元だと(1,0)と(0,1)). **グラム・シュミットの直交化法 [#g267ac4a] 内積空間Vにおいて,ある基底を直交基底にすることを直交化(orthogonalize)という. 正規直交基底にするときは正規直交化(orthonormalize)という. 基底&ref(ls_gram-schmidt.eq55.gif,nolink,70%);に対して, 以下の処理を行うことで,正規直交基底&ref(ls_gram-schmidt.eq64.gif,nolink,70%);を得る. #ref(ls_gram-schmidt.eq65.gif,nolink,70%) このアルゴリズムをグラム・シュミットの正規直交化法(Gram-Schmidt orthonormalization)という. グラム・シュミットの直交化では, +&ref(ls_gram-schmidt.eq66.gif,nolink,70%);はそのまま用いる +&ref(ls_gram-schmidt.eq67.gif,nolink,70%);と&ref(ls_gram-schmidt.eq68.gif,nolink,70%);の内積に&ref(ls_gram-schmidt.eq67.gif,nolink,70%);を掛けることで,&ref(ls_gram-schmidt.eq68.gif,nolink,70%);内の&ref(ls_gram-schmidt.eq66.gif,nolink,70%);方向成分を算出し,それを&ref(ls_gram-schmidt.eq68.gif,nolink,70%);から引く. +&ref(ls_gram-schmidt.eq69.gif,nolink,70%);について,?と同様な処理で&ref(ls_gram-schmidt.eq70.gif,nolink,70%);を求める. の処理をnまで進めることで直交なベクトル群を得ている. この方法は1つの式で直接&ref(ls_gram-schmidt.eq71.gif,nolink,70%);を求められるので便利だが,一方で誤差の累積が起こる. これを軽減するのが次の修正グラム・シュミット法である. **修正グラム・シュミット法 [#m4969984] グラム・シュミット法の手順をC言語のプログラム風に書くと, > for(i = 1,2,...,n){~ &ref(ls_gram-schmidt.eq72.gif,nolink,70%); ~ &ref(ls_gram-schmidt.eq73.gif,nolink,70%); ~ } となる. 誤差の府移籍を軽減するために以下のように処理を修正する. 誤差の累積を軽減するために以下のように処理を修正する. > for(i = 1,2,...,n){~ for(j = 1,2,...,i-1){~ &ref(ls_gram-schmidt.eq74.gif,nolink,70%); ~ }~ &ref(ls_gram-schmidt.eq75.gif,nolink,70%); ~ } 例えば,i=3のとき,グラム・シュミット法では, #ref(ls_gram-schmidt.eq76.gif,nolink,70%) としていたのを,修正グラム・シュミットでは, #ref(ls_gram-schmidt.eq77.gif,nolink,70%) と逐次更新した&ref(ls_gram-schmidt.eq70.gif,nolink,70%);を使っている. もともと&ref(ls_gram-schmidt.eq78.gif,nolink,70%);のはずなので, 本来上記二つの結果は変わらない. ただしこれは&ref(ls_gram-schmidt.eq79.gif,nolink,70%);を求めるときに誤差がなければという前提条件付である. 例えば,もともと&ref(ls_gram-schmidt.eq66.gif,nolink,70%);と&ref(ls_gram-schmidt.eq68.gif,nolink,70%);が直交に近いと, &ref(ls_gram-schmidt.eq80.gif,nolink,70%);が&ref(ls_gram-schmidt.eq68.gif,nolink,70%);に比べて非常に小さくなり,丸め誤差が発生してしまう. 修正グラム・シュミットを使った場合,少なくとも&ref(ls_gram-schmidt.eq81.gif,nolink,70%);にはその誤差が影響しない.