ベクトル集合の正規直交化
グラム・シュミット過程の最初の2つのステップ
数学 、特に 線形代数 と 数値解析 において 、 グラム・シュミット過程 またはグラム・シュミットアルゴリズムは、互いに垂直な 2 つ以上のベクトルの集合を見つける方法です。
技術的な定義によれば、これは内積空間 ( 最も一般的には 標準の内積 を備えた ユークリッド空間)の ベクトル の集合から 正規直交基底 を構築する方法です 。グラム・シュミット過程は 、 k ≤ n に対して 有限の 線形独立な ベクトルの集合を取り 、 と 同じ 次元の部分空間に張られる 直交集合 を生成します 。
R
ん
{\displaystyle \mathbb {R} ^{n}}
S
=
{
ヴ
1
、
…
、
ヴ
け
}
{\displaystyle S=\{\mathbf {v} _{1},\ldots ,\mathbf {v} _{k}\}}
S
′
=
{
あなた
1
、
…
、
あなた
け
}
{\displaystyle S'=\{\mathbf {u} _{1},\ldots ,\mathbf {u} _{k}\}}
け
{\displaystyle k}
R
ん
{\displaystyle \mathbb {R} ^{n}}
S
{\displaystyle S}
この方法は、ヨルゲン・ペダーセン・グラム と エアハルト・シュミット にちなんで名付けられました が、 ピエール=シモン・ラプラスは グラムとシュミットより前にこの方法に精通していました。 [1] リー群分解 の理論では、この方法は 岩澤分解 によって一般化されています 。
グラム・シュミット過程を全列 ランク 行列の列ベクトルに適用すると、 QR分解( 直交行列 と 三角行列 に分解) が得られます 。
グラム・シュミット法
修正されたグラム・シュミット過程は、 の基底の 3 つの線形独立な非直交ベクトルに対して実行されます 。詳細については画像をクリックしてください。修正については、この記事の数値安定性のセクションで説明されています。
R
3
{\displaystyle \mathbb {R} ^{3}}
ベクトルの 非零ベクトルへの ベクトル 射影は 次のように定義されます [注 1] 。
ここで、は ベクトル とベクトルの 内積 を表します。これは、 が の が張る直線へ の 直交射影 である ことを意味します 。が 零ベクトルの場合、 は 零ベクトルとして定義されます。
ヴ
{\displaystyle \mathbf {v} }
あなた
{\displaystyle \mathbf {u} }
プロジェクト
あなた
(
ヴ
)
=
⟨
ヴ
、
あなた
⟩
⟨
あなた
、
あなた
⟩
あなた
、
{\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )={\frac {\langle \mathbf {v} ,\mathbf {u} \rangle }{\langle \mathbf {u} ,\mathbf {u} \rangle }}\,\mathbf {u} ,}
⟨
ヴ
、
あなた
⟩
{\displaystyle \langle \mathbf {v} ,\mathbf {u} \rangle }
あなた
{\displaystyle \mathbf {u} }
ヴ
{\displaystyle \mathbf {v} }
プロジェクト
あなた
(
ヴ
)
{\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )}
ヴ
{\displaystyle \mathbf {v} }
あなた
{\displaystyle \mathbf {u} }
あなた
{\displaystyle \mathbf {u} }
プロジェクト
あなた
(
ヴ
)
{\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )}
ベクトル が与えられると、 グラム・シュミット過程はベクトルを 次のように定義します。
け
{\displaystyle k}
ヴ
1
、
…
、
ヴ
け
{\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{k}}
あなた
1
、
…
、
あなた
け
{\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}}
あなた
1
=
ヴ
1
、
e
1
=
あなた
1
‖
あなた
1
‖
あなた
2
=
ヴ
2
−
プロジェクト
あなた
1
(
ヴ
2
)
、
e
2
=
あなた
2
‖
あなた
2
‖
あなた
3
=
ヴ
3
−
プロジェクト
あなた
1
(
ヴ
3
)
−
プロジェクト
あなた
2
(
ヴ
3
)
、
e
3
=
あなた
3
‖
あなた
3
‖
あなた
4
=
ヴ
4
−
プロジェクト
あなた
1
(
ヴ
4
)
−
プロジェクト
あなた
2
(
ヴ
4
)
−
プロジェクト
あなた
3
(
ヴ
4
)
、
e
4
=
あなた
4
‖
あなた
4
‖
⋮
⋮
あなた
け
=
ヴ
け
−
∑
じ
=
1
け
−
1
プロジェクト
あなた
じ
(
ヴ
け
)
、
e
け
=
あなた
け
‖
あなた
け
‖
。
{\displaystyle {\begin{aligned}\mathbf {u} _{1}&=\mathbf {v} _{1},&\!\mathbf {e} _{1}&={\frac {\mathbf {u} _{1}}{\|\mathbf {u} _{1}\|}}\\\mathbf {u} _{2}&=\mathbf {v} _{2}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{2}),&\!\mathbf {e} _{2}&={\frac {\mathbf {u} _{2}}{\|\mathbf {u} _{2}\|}}\\\mathbf {u} _{3}&=\mathbf {v} _{3}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{3})-\operatorname {proj} _{\mathbf {u} _{2}}(\mathbf {v} _{3}),&\!\mathbf {e} _{3}&={\frac {\mathbf {u} _{3}}{\|\mathbf {u} _{3}\|}}\\\mathbf {u} _{4}&=\mathbf {v} _{4}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{4})-\operatorname {proj} _{\mathbf {u} _{2}}(\mathbf {v} _{4})-\operatorname {proj} _{\mathbf {u} _{3}}(\mathbf {v} _{4}),&\!\mathbf {e} _{4}&={\mathbf {u} _{4} \over \|\mathbf {u} _{4}\|}\\&{}\ \ \vdots &&{}\ \ \vdots \\\mathbf {u} _{k}&=\mathbf {v} _{k}-\sum _{j=1}^{k-1}\operatorname {proj} _{\mathbf {u} _{j}}(\mathbf {v} _{k}),&\!\mathbf {e} _{k}&={\frac {\mathbf {u} _{k}}{\|\mathbf {u} _{k}\|}}.\end{aligned}}}
シーケンスは 、直交ベクトルの必須のシステムであり、正規化されたベクトルは 正規直交セット を形成します 。シーケンスの計算は グラム・シュミット 直交化 と呼ばれ 、シーケンスの計算は グラム・シュミット正規 直交化 と呼ばれます 。
u
1
,
…
,
u
k
{\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}}
e
1
,
…
,
e
k
{\displaystyle \mathbf {e} _{1},\ldots ,\mathbf {e} _{k}}
u
1
,
…
,
u
k
{\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{k}}
e
1
,
…
,
e
k
{\displaystyle \mathbf {e} _{1},\ldots ,\mathbf {e} _{k}}
これらの式が直交数列を生成することを確認するには、まず 上記の式を に代入して計算します。ゼロになります。次にこれを使用して 、式を に代入して再度 計算します 。ゼロになります。任意の については、 数学的帰納法 によって証明できます 。
⟨
u
1
,
u
2
⟩
{\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{2}\rangle }
u
2
{\displaystyle \mathbf {u} _{2}}
⟨
u
1
,
u
3
⟩
{\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{3}\rangle }
u
3
{\displaystyle \mathbf {u} _{3}}
k
{\displaystyle k}
幾何学的には、この方法は次のように進行します。 を計算するために、 によって生成された 部分空間に直交 投影します。この部分空間は、 によって生成された部分空間と同じです 。次に、ベクトルは、 とこの投影 の差として定義され 、部分空間 内のすべてのベクトルに直交することが保証されます 。
u
i
{\displaystyle \mathbf {u} _{i}}
v
i
{\displaystyle \mathbf {v} _{i}}
U
{\displaystyle U}
u
1
,
…
,
u
i
−
1
{\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{i-1}}
v
1
,
…
,
v
i
−
1
{\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{i-1}}
u
i
{\displaystyle \mathbf {u} _{i}}
v
i
{\displaystyle \mathbf {v} _{i}}
U
{\displaystyle U}
グラム・シュミット過程は、線形独立な 可算無限 列 { v i } i にも適用されます。結果は、 自然数 nに対して次のようになる直交(または正規直交)列 { u i } i です。 の代数的範囲は の代数的範囲と同じです 。
v
1
,
…
,
v
n
{\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{n}}
u
1
,
…
,
u
n
{\displaystyle \mathbf {u} _{1},\ldots ,\mathbf {u} _{n}}
グラム・シュミット過程を線形従属シーケンスに適用すると、が の 線形結合である と仮定して、 番目のステップ で 0 ベクトルが出力されます。正規直交基底を生成する場合、アルゴリズムは出力内のゼロベクトルをテストし、ゼロベクトルの倍数の長さが 1 になることはないため、ゼロベクトルを破棄する必要があります。アルゴリズムによって出力されるベクトルの数は、元の入力によって張られる空間の次元になります。
i
{\displaystyle i}
v
i
{\displaystyle \mathbf {v} _{i}}
v
1
,
…
,
v
i
−
1
{\displaystyle \mathbf {v} _{1},\ldots ,\mathbf {v} _{i-1}}
グラム・シュミット過程の変形で、 超限再帰法 を(おそらく非可算な)無限ベクトル列に適用すると 、 任意の に対して の成就の 完備化が の成就と同じになるような を持つ 正規直交ベクトルの集合が得られます 。特に、 ヒルベルト空間 の(代数的)基底 (または、より一般的には、任意の稠密部分空間の基底)に適用すると、(関数解析的)正規直交基底が得られます。一般的なケースでは、 開始集合が線型独立であっても厳密な不等式が成り立つことが多く、 の成就は の成就の部分空間である必要はなく (むしろ、その完備化の部分空間である)、ことに注意してください。
(
v
α
)
α
<
λ
{\displaystyle (v_{\alpha })_{\alpha <\lambda }}
(
u
α
)
α
<
κ
{\displaystyle (u_{\alpha })_{\alpha <\kappa }}
κ
≤
λ
{\displaystyle \kappa \leq \lambda }
α
≤
λ
{\displaystyle \alpha \leq \lambda }
{
u
β
:
β
<
min
(
α
,
κ
)
}
{\displaystyle \{u_{\beta }:\beta <\min(\alpha ,\kappa )\}}
{
v
β
:
β
<
α
}
{\displaystyle \{v_{\beta }:\beta <\alpha \}}
κ
<
λ
{\displaystyle \kappa <\lambda }
(
u
α
)
α
<
κ
{\displaystyle (u_{\alpha })_{\alpha <\kappa }}
(
v
α
)
α
<
λ
{\displaystyle (v_{\alpha })_{\alpha <\lambda }}
例
ユークリッド空間
(通常の 内積 を持つ)
における次のベクトルの集合を考える。
R
2
{\displaystyle \mathbb {R} ^{2}}
S
=
{
v
1
=
[
3
1
]
,
v
2
=
[
2
2
]
}
.
{\displaystyle S=\left\{\mathbf {v} _{1}={\begin{bmatrix}3\\1\end{bmatrix}},\mathbf {v} _{2}={\begin{bmatrix}2\\2\end{bmatrix}}\right\}.}
ここで、グラム・シュミット法を実行して、直交ベクトルの集合を取得します。
u
1
=
v
1
=
[
3
1
]
{\displaystyle \mathbf {u} _{1}=\mathbf {v} _{1}={\begin{bmatrix}3\\1\end{bmatrix}}}
u
2
=
v
2
−
proj
u
1
(
v
2
)
=
[
2
2
]
−
proj
[
3
1
]
[
2
2
]
=
[
2
2
]
−
8
10
[
3
1
]
=
[
−
2
/
5
6
/
5
]
.
{\displaystyle \mathbf {u} _{2}=\mathbf {v} _{2}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{2})={\begin{bmatrix}2\\2\end{bmatrix}}-\operatorname {proj} _{\left[{\begin{smallmatrix}3\\1\end{smallmatrix}}\right]}{\begin{bmatrix}2\\2\end{bmatrix}}={\begin{bmatrix}2\\2\end{bmatrix}}-{\frac {8}{10}}{\begin{bmatrix}3\\1\end{bmatrix}}={\begin{bmatrix}-2/5\\6/5\end{bmatrix}}.}
ベクトル とが 実際に直交していることを確認します。2
つのベクトルの ドット積 が 0 であれば、それらは直交している
ことに注意してください。
u
1
{\displaystyle \mathbf {u} _{1}}
u
2
{\displaystyle \mathbf {u} _{2}}
⟨
u
1
,
u
2
⟩
=
⟨
[
3
1
]
,
[
−
2
/
5
6
/
5
]
⟩
=
−
6
5
+
6
5
=
0
,
{\displaystyle \langle \mathbf {u} _{1},\mathbf {u} _{2}\rangle =\left\langle {\begin{bmatrix}3\\1\end{bmatrix}},{\begin{bmatrix}-2/5\\6/5\end{bmatrix}}\right\rangle =-{\frac {6}{5}}+{\frac {6}{5}}=0,}
ゼロ以外のベクトルの場合は、上記のようにサイズを分割してベクトルを正規化できます。
e
1
=
1
10
[
3
1
]
{\displaystyle \mathbf {e} _{1}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}3\\1\end{bmatrix}}}
e
2
=
1
40
25
[
−
2
/
5
6
/
5
]
=
1
10
[
−
1
3
]
.
{\displaystyle \mathbf {e} _{2}={\frac {1}{\sqrt {40 \over 25}}}{\begin{bmatrix}-2/5\\6/5\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}-1\\3\end{bmatrix}}.}
プロパティ
グラム・シュミット過程をベクトルの集合に適用した結果 を と表記します 。これにより、マップ が生成されます 。
GS
(
v
1
,
…
,
v
k
)
{\displaystyle \operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})}
v
1
,
…
,
v
k
{\displaystyle \mathbf {v} _{1},\dots ,\mathbf {v} _{k}}
GS
:
(
R
n
)
k
→
(
R
n
)
k
{\displaystyle \operatorname {GS} \colon (\mathbb {R} ^{n})^{k}\to (\mathbb {R} ^{n})^{k}}
次の特性があります:
それは継続的である
それは、という意味で 方向 保存です 。
or
(
v
1
,
…
,
v
k
)
=
or
(
GS
(
v
1
,
…
,
v
k
)
)
{\displaystyle \operatorname {or} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})=\operatorname {or} (\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k}))}
これは直交写像と可換である:
を(与えられた内積に関して)直交すると
する。すると、
g
:
R
n
→
R
n
{\displaystyle g\colon \mathbb {R} ^{n}\to \mathbb {R} ^{n}}
GS
(
g
(
v
1
)
,
…
,
g
(
v
k
)
)
=
(
g
(
GS
(
v
1
,
…
,
v
k
)
1
)
,
…
,
g
(
GS
(
v
1
,
…
,
v
k
)
k
)
)
{\displaystyle \operatorname {GS} (g(\mathbf {v} _{1}),\dots ,g(\mathbf {v} _{k}))=\left(g(\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})_{1}),\dots ,g(\operatorname {GS} (\mathbf {v} _{1},\dots ,\mathbf {v} _{k})_{k})\right)}
さらに、グラム・シュミット過程のパラメータ化されたバージョンは、 一般線型群の 直交群への(強い) 変形後退を もたらす。
G
L
(
R
n
)
{\displaystyle \mathrm {GL} (\mathbb {R} ^{n})}
O
(
R
n
)
{\displaystyle O(\mathbb {R} ^{n})}
数値安定性
このプロセスをコンピュータで実装すると、 丸め誤差 のため、ベクトルは完全に直交しなくなることがよくあります 。上記のグラム・シュミット過程(「古典的なグラム・シュミット」と呼ばれることもあります)では、この直交性の喪失は特にひどいため、(古典的な)グラム・シュミット過程は 数値的に不安定である と言われています。
u
k
{\displaystyle \mathbf {u} _{k}}
グラム・シュミット過程は、小さな修正を加えることで安定化できます。このバージョンは、 修正グラム・シュミット法 または MGS と呼ばれることもあります。このアプローチでは、正確な演算では元の式と同じ結果が得られ、有限精度の演算では誤差が小さくなります。
ベクトル u kを
次のように
計算
する代わりに、
u
k
=
v
k
−
proj
u
1
(
v
k
)
−
proj
u
2
(
v
k
)
−
⋯
−
proj
u
k
−
1
(
v
k
)
,
{\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{k})-\operatorname {proj} _{\mathbf {u} _{2}}(\mathbf {v} _{k})-\cdots -\operatorname {proj} _{\mathbf {u} _{k-1}}(\mathbf {v} _{k}),}
u
k
(
1
)
=
v
k
−
proj
u
1
(
v
k
)
,
u
k
(
2
)
=
u
k
(
1
)
−
proj
u
2
(
u
k
(
1
)
)
,
⋮
u
k
(
k
−
2
)
=
u
k
(
k
−
3
)
−
proj
u
k
−
2
(
u
k
(
k
−
3
)
)
,
u
k
(
k
−
1
)
=
u
k
(
k
−
2
)
−
proj
u
k
−
1
(
u
k
(
k
−
2
)
)
,
e
k
=
u
k
(
k
−
1
)
‖
u
k
(
k
−
1
)
‖
{\displaystyle {\begin{aligned}\mathbf {u} _{k}^{(1)}&=\mathbf {v} _{k}-\operatorname {proj} _{\mathbf {u} _{1}}(\mathbf {v} _{k}),\\\mathbf {u} _{k}^{(2)}&=\mathbf {u} _{k}^{(1)}-\operatorname {proj} _{\mathbf {u} _{2}}\left(\mathbf {u} _{k}^{(1)}\right),\\&\;\;\vdots \\\mathbf {u} _{k}^{(k-2)}&=\mathbf {u} _{k}^{(k-3)}-\operatorname {proj} _{\mathbf {u} _{k-2}}\left(\mathbf {u} _{k}^{(k-3)}\right),\\\mathbf {u} _{k}^{(k-1)}&=\mathbf {u} _{k}^{(k-2)}-\operatorname {proj} _{\mathbf {u} _{k-1}}\left(\mathbf {u} _{k}^{(k-2)}\right),\\\mathbf {e} _{k}&={\frac {\mathbf {u} _{k}^{(k-1)}}{\left\|\mathbf {u} _{k}^{(k-1)}\right\|}}\end{aligned}}}
この方法は、前のアニメーションで、 青いベクトルを直交化するときに中間ベクトルが使用されるときに使用されます 。
v
3
′
{\displaystyle \mathbf {v} '_{3}}
v
3
{\displaystyle \mathbf {v} _{3}}
修正されたアルゴリズムの別の説明を次に示します。ベクトル が与えられた場合 、最初のステップでは、 の方向に沿って成分を削除することによってベクトルを生成します 。式では、です 。このステップの後には、必要な直交ベクトル 2 つ 、つまり が既にあります が、 も 既に に直交しています 。次に、残りのベクトルを に対して直交させます。これは、 減算によって 計算することを意味します。これで、 最初の 3 つのベクトルが既にある場所に ベクトルを格納し 、残りのベクトルが既に に直交しています 。これで明らかなように、次のステップで は に対して直交させます 。このように進めていくと、直交ベクトルの完全なセットが見つかります 。正規直交ベクトルが必要な場合は、減算式の分母が 1 になるように正規化していきます。
v
1
,
v
2
,
…
,
v
n
{\displaystyle \mathbf {v} _{1},\mathbf {v} _{2},\dots ,\mathbf {v} _{n}}
v
1
,
v
2
(
1
)
,
…
,
v
n
(
1
)
{\displaystyle \mathbf {v} _{1},\mathbf {v} _{2}^{(1)},\dots ,\mathbf {v} _{n}^{(1)}}
v
1
{\displaystyle \mathbf {v} _{1}}
v
k
(
1
)
:=
v
k
−
⟨
v
k
,
v
1
⟩
⟨
v
1
,
v
1
⟩
v
1
{\displaystyle \mathbf {v} _{k}^{(1)}:=\mathbf {v} _{k}-{\frac {\langle \mathbf {v} _{k},\mathbf {v} _{1}\rangle }{\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle }}\mathbf {v} _{1}}
u
1
,
…
,
u
n
{\displaystyle \mathbf {u} _{1},\dots ,\mathbf {u} _{n}}
u
1
=
v
1
,
u
2
=
v
2
(
1
)
{\displaystyle \mathbf {u} _{1}=\mathbf {v} _{1},\mathbf {u} _{2}=\mathbf {v} _{2}^{(1)}}
v
3
(
1
)
,
…
,
v
n
(
1
)
{\displaystyle \mathbf {v} _{3}^{(1)},\dots ,\mathbf {v} _{n}^{(1)}}
u
1
{\displaystyle \mathbf {u} _{1}}
u
2
=
v
2
(
1
)
{\displaystyle \mathbf {u} _{2}=\mathbf {v} _{2}^{(1)}}
v
3
(
2
)
,
v
4
(
2
)
,
…
,
v
n
(
2
)
{\displaystyle \mathbf {v} _{3}^{(2)},\mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}}
v
k
(
2
)
:=
v
k
(
1
)
−
⟨
v
k
(
1
)
,
u
2
⟩
⟨
u
2
,
u
2
⟩
u
2
{\displaystyle \mathbf {v} _{k}^{(2)}:=\mathbf {v} _{k}^{(1)}-{\frac {\langle \mathbf {v} _{k}^{(1)},\mathbf {u} _{2}\rangle }{\langle \mathbf {u} _{2},\mathbf {u} _{2}\rangle }}\mathbf {u} _{2}}
v
1
,
v
2
(
1
)
,
v
3
(
2
)
,
v
4
(
2
)
,
…
,
v
n
(
2
)
{\displaystyle \mathbf {v} _{1},\mathbf {v} _{2}^{(1)},\mathbf {v} _{3}^{(2)},\mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}}
u
1
,
u
2
,
u
3
{\displaystyle \mathbf {u} _{1},\mathbf {u} _{2},\mathbf {u} _{3}}
u
1
,
u
2
{\displaystyle \mathbf {u} _{1},\mathbf {u} _{2}}
v
4
(
2
)
,
…
,
v
n
(
2
)
{\displaystyle \mathbf {v} _{4}^{(2)},\dots ,\mathbf {v} _{n}^{(2)}}
u
3
=
v
3
(
2
)
{\displaystyle \mathbf {u} _{3}=\mathbf {v} _{3}^{(2)}}
u
1
,
…
,
u
n
{\displaystyle \mathbf {u} _{1},\dots ,\mathbf {u} _{n}}
アルゴリズム
次の MATLAB アルゴリズムは、古典的なグラム・シュミット正規直交化を実装します。ベクトル v 1 、...、 v k (行列 の列 V、つまり V(:,j)番目 のベクトル) は、同じ部分空間にまたがる正規直交ベクトル ( の列 ) に置き換えられます。
j
{\displaystyle j}
U
関数 U = グラムシュミット ( V )
[ n , k ] = サイズ ( V );
U = ゼロ ( n 、 k );
U (:, 1 ) = V (:, 1 ) / ノルム ( V (:, 1 ));
i = 2 の場合 : k
U (:, i ) = V (:, i );
j = 1の 場合 : i - 1
U (:, i ) = U (:, i ) - ( U (:, j ) '* U (:, i )) * U (:, j );
終わり
U (:, i ) = U (:, i ) / ノルム ( U (:, i ));
終わり
終わり
このアルゴリズムのコストは漸近的に O( nk2 ) 回 の浮動小数点演算であり、ここで nは ベクトルの次元である。
ガウス消去法による
行 { v 1 , ..., v k } が行列として書かれる場合 、 ガウス消去法を 拡張行列に適用すると 、 の代わりに直交ベクトルが生成されます 。ただし、行列は、 ある行のスカラー倍数を別の行に追加する 行演算 のみを使用して、 行階段形式 にする必要があります。 [3] たとえば、 上記のように取ると、
A
{\displaystyle A}
[
A
A
T
|
A
]
{\displaystyle \left[AA^{\mathsf {T}}|A\right]}
A
{\displaystyle A}
A
A
T
{\displaystyle AA^{\mathsf {T}}}
v
1
=
[
3
1
]
,
v
2
=
[
2
2
]
{\displaystyle \mathbf {v} _{1}={\begin{bmatrix}3&1\end{bmatrix}},\mathbf {v} _{2}={\begin{bmatrix}2&2\end{bmatrix}}}
[
A
A
T
|
A
]
=
[
10
8
3
1
8
8
2
2
]
{\displaystyle \left[AA^{\mathsf {T}}|A\right]=\left[{\begin{array}{rr|rr}10&8&3&1\\8&8&2&2\end{array}}\right]}
これを階段状 に縮小すると 、
[
1
.8
.3
.1
0
1
−
.25
.75
]
{\displaystyle \left[{\begin{array}{rr|rr}1&.8&.3&.1\\0&1&-.25&.75\end{array}}\right]}
正規化されたベクトルは
上記の例のようになります。
e
1
=
1
.3
2
+
.1
2
[
.3
.1
]
=
1
10
[
3
1
]
{\displaystyle \mathbf {e} _{1}={\frac {1}{\sqrt {.3^{2}+.1^{2}}}}{\begin{bmatrix}.3&.1\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}3&1\end{bmatrix}}}
e
2
=
1
.25
2
+
.75
2
[
−
.25
.75
]
=
1
10
[
−
1
3
]
,
{\displaystyle \mathbf {e} _{2}={\frac {1}{\sqrt {.25^{2}+.75^{2}}}}{\begin{bmatrix}-.25&.75\end{bmatrix}}={\frac {1}{\sqrt {10}}}{\begin{bmatrix}-1&3\end{bmatrix}},}
グラム・シュミット過程の結果は、 行列式 を使用した非再帰式で表現できます。
e
j
=
1
D
j
−
1
D
j
|
⟨
v
1
,
v
1
⟩
⟨
v
2
,
v
1
⟩
⋯
⟨
v
j
,
v
1
⟩
⟨
v
1
,
v
2
⟩
⟨
v
2
,
v
2
⟩
⋯
⟨
v
j
,
v
2
⟩
⋮
⋮
⋱
⋮
⟨
v
1
,
v
j
−
1
⟩
⟨
v
2
,
v
j
−
1
⟩
⋯
⟨
v
j
,
v
j
−
1
⟩
v
1
v
2
⋯
v
j
|
{\displaystyle \mathbf {e} _{j}={\frac {1}{\sqrt {D_{j-1}D_{j}}}}{\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j-1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j-1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j-1}\rangle \\\mathbf {v} _{1}&\mathbf {v} _{2}&\cdots &\mathbf {v} _{j}\end{vmatrix}}}
u
j
=
1
D
j
−
1
|
⟨
v
1
,
v
1
⟩
⟨
v
2
,
v
1
⟩
⋯
⟨
v
j
,
v
1
⟩
⟨
v
1
,
v
2
⟩
⟨
v
2
,
v
2
⟩
⋯
⟨
v
j
,
v
2
⟩
⋮
⋮
⋱
⋮
⟨
v
1
,
v
j
−
1
⟩
⟨
v
2
,
v
j
−
1
⟩
⋯
⟨
v
j
,
v
j
−
1
⟩
v
1
v
2
⋯
v
j
|
{\displaystyle \mathbf {u} _{j}={\frac {1}{D_{j-1}}}{\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j-1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j-1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j-1}\rangle \\\mathbf {v} _{1}&\mathbf {v} _{2}&\cdots &\mathbf {v} _{j}\end{vmatrix}}}
ここで 、およびは グラム行列式 である 。
D
0
=
1
{\displaystyle D_{0}=1}
j
≥
1
{\displaystyle j\geq 1}
D
j
{\displaystyle D_{j}}
D
j
=
|
⟨
v
1
,
v
1
⟩
⟨
v
2
,
v
1
⟩
⋯
⟨
v
j
,
v
1
⟩
⟨
v
1
,
v
2
⟩
⟨
v
2
,
v
2
⟩
⋯
⟨
v
j
,
v
2
⟩
⋮
⋮
⋱
⋮
⟨
v
1
,
v
j
⟩
⟨
v
2
,
v
j
⟩
⋯
⟨
v
j
,
v
j
⟩
|
.
{\displaystyle D_{j}={\begin{vmatrix}\langle \mathbf {v} _{1},\mathbf {v} _{1}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{1}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{1}\rangle \\\langle \mathbf {v} _{1},\mathbf {v} _{2}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{2}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{2}\rangle \\\vdots &\vdots &\ddots &\vdots \\\langle \mathbf {v} _{1},\mathbf {v} _{j}\rangle &\langle \mathbf {v} _{2},\mathbf {v} _{j}\rangle &\cdots &\langle \mathbf {v} _{j},\mathbf {v} _{j}\rangle \end{vmatrix}}.}
の式は「正式な」行列式であることに注意してください。つまり、行列にはスカラーとベクトルの両方が含まれます。この式の意味は 、ベクトルの行に沿った
補因子展開 の結果として定義されます。
u
k
{\displaystyle \mathbf {u} _{k}}
グラム・シュミットの行列式は、上記の再帰アルゴリズムよりも計算的に(指数的に)遅く、主に理論的な興味の対象です。
幾何代数を用いて表現する
幾何代数学 で使用される表記法を使用して表現すると 、グラム・シュミット過程の非正規化結果は次のように表すことができます
。
これは、上で定義された演算子を使用した式と同等です。 結果は、
上記の行列式を使用した式と密接に関連している
[4]と同等に表すことができます。
u
k
=
v
k
−
∑
j
=
1
k
−
1
(
v
k
⋅
u
j
)
u
j
−
1
,
{\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}-\sum _{j=1}^{k-1}(\mathbf {v} _{k}\cdot \mathbf {u} _{j})\mathbf {u} _{j}^{-1}\ ,}
proj
{\displaystyle \operatorname {proj} }
u
k
=
v
k
∧
v
k
−
1
∧
⋅
⋅
⋅
∧
v
1
(
v
k
−
1
∧
⋅
⋅
⋅
∧
v
1
)
−
1
,
{\displaystyle \mathbf {u} _{k}=\mathbf {v} _{k}\wedge \mathbf {v} _{k-1}\wedge \cdot \cdot \cdot \wedge \mathbf {v} _{1}(\mathbf {v} _{k-1}\wedge \cdot \cdot \cdot \wedge \mathbf {v} _{1})^{-1},}
代替案
その他の 直交化 アルゴリズムでは、 ハウスホルダー変換 または ギブンズ回転 が使用されます。ハウスホルダー変換を使用するアルゴリズムは、安定化されたグラム・シュミット過程よりも安定しています。一方、グラム・シュミット過程は、反復 の後に 番目の直交化ベクトルを生成しますが、 ハウスホルダー反射 を使用した直交化では最後にのみすべてのベクトルが生成されます。このため、 アーノルディ反復法 などの 反復法 にはグラム・シュミット過程のみが適用されます 。
j
{\displaystyle j}
j
{\displaystyle j}
さらに別の代替案は、 線形最小二乗法における正規方程式の行列を反転する ために コレスキー分解を使用することを動機としています。 を、列を直交化する必要がある 完全な列ランク 行列と します 。 行列は エルミート かつ 正定値 で あるため、 コレスキー分解 を使用すると と記述できます。 対角要素が正である 下三角行列は 可逆 です。 この場合、行列の列は 正規直交 であり 、 元の行列の列と同じ部分空間 を張ります 。 積を明示的に使用すると、特に積の 条件数 が大きい場合は、アルゴリズムが不安定になります 。 ただし、このアルゴリズムは、その高い効率性と単純さから、実際に使用され、一部のソフトウェア パッケージに実装されています。
V
{\displaystyle V}
V
∗
V
{\displaystyle V^{*}V}
V
∗
V
=
L
L
∗
,
{\displaystyle V^{*}V=LL^{*},}
L
{\displaystyle L}
U
=
V
(
L
−
1
)
∗
{\displaystyle U=V\left(L^{-1}\right)^{*}}
V
{\displaystyle V}
V
∗
V
{\displaystyle V^{*}V}
量子力学 には、 オリジナルのグラム・シュミット法よりも特定の用途に適した特性を持つ直交化スキームがいくつかあります。それでも、グラム・シュミット法は、最大の電子構造計算でも人気があり効果的なアルゴリズムです。 [5]
実行時の複雑さ
グラム・シュミット直交化は強多項式時間 で実行できる 。実行時間分析は ガウス消去法 のそれと似ている。 [6] : 40
参照
参考文献
^ チェイニー、ウォード、キンケイド、デイビッド (2009)。線形代数:理論と応用。マサチューセッツ州サドベリー:ジョーンズ&バートレット。pp. 544, 558。ISBN 978-0-7637-5020-6 。
^ Pursell, Lyle; Trimble, SY (1991 年 1 月 1 日). 「ガウス消去法によるグラム・シュミット直交化」. アメリカ数学月刊誌 . 98 (6): 544–549. doi :10.2307/2324877. JSTOR 2324877.
^ ドラン、クリス、ラセンビー、アンソニー (2007)。 物理学者のための幾何代数 。ケンブリッジ大学出版局。p. 124。ISBN 978-0-521-71595-9 。
^ パーセル・ユキヒロ他 (2011)。「京コンピュータによる10万原子のシリコンナノワイヤの電子状態の第一原理計算」。 2011年国際高性能コンピューティング、ネットワーキング、ストレージ、分析会議の議事録 。pp . 1:1–1:11。doi : 10.1145 /2063384.2063386。ISBN 9781450307710 . S2CID 14316074。
^ マーティン・グレッチェル ; Lovász, ラスロー ; Schrijver、Alexander (1993)、幾何学的アルゴリズムと組み合わせ最適化、Algorithms and Combinatorics、vol. 2 (第 2 版)、Springer-Verlag、ベルリン、 doi :10.1007/978-3-642-78240-4、 ISBN 978-3-642-78242-8 、 MR 1261419
注記
^ 複素数の場合、これは内積が最初の引数では線形であり、2番目の引数では共役線形であると仮定します。物理学では、2番目の引数が線形であるという慣例の方が一般的であり、その場合次のように定義します。
proj
u
(
v
)
=
⟨
u
,
v
⟩
⟨
u
,
u
⟩
u
.
{\displaystyle \operatorname {proj} _{\mathbf {u} }(\mathbf {v} )={\frac {\langle \mathbf {u} ,\mathbf {v} \rangle }{\langle \mathbf {u} ,\mathbf {u} \rangle }}\,\mathbf {u} .}
出典
Bau III, David; Trefethen, Lloyd N. (1997)、 数値線形代数 、フィラデルフィア: Society for Industrial and Applied Mathematics、 ISBN 978-0-89871-361-9 。
ゴルブ、ジーン H. ; ヴァン・ローン、チャールズ F. (1996)、 マトリックス計算 (第 3 版)、ジョンズ・ホプキンス、 ISBN 978-0-8018-5414-9 。
グルーブ、ヴェルナー(1975)、 線形代数 (第4版)、シュプリンガー 。
Soliverez, CE; Gagliano, E. (1985)、「平面上の直交化: 幾何学的アプローチ」 (PDF) 、 Mex. J. Phys. 、 31 (4): 743–758、2014-03-07に オリジナル (PDF)からアーカイブ、 2013-06-22 に 取得 。
外部リンク
数学ポータル
「直交化」、 数学百科事典 、 EMS Press 、2001 [1994]
ハーヴェイ・マッド・カレッジのグラム・シュミット法に関する数学チュートリアル
数学用語の最も古い使用例: G 「グラム・シュミット直交化」の項目には、この方法の起源に関する情報と参考文献が記載されています。
デモ: 平面におけるグラム・シュミット過程と空間におけるグラム・シュミット過程
グラム・シュミット直交化アプレット
m次のnベクトルのNAGグラム-シュミット直交化ルーチン
証明: Raymond Puzio、Keenan Kidwell。「Gram-Schmidt 直交化アルゴリズムの証明」(バージョン 8)。PlanetMath.org。