コレスキー分解
コレスキー分解(コレスキーぶんかい)とは、正定値エルミート行列Aを下三角行列LとLの共役転置L*との積に分解すること。
LU分解の特別な場合である。Lの対角成分は実数になり(符号の自由度があるが)通常は、対角成分を正に採る。またその場合、Lは一意に定まる。アンドレ=ルイ・コレスキーにちなんで名づけられた。
目次 |
アルゴリズムの例 [編集]
コレスキー法はガウスの消去法の改良版である。
ガウスの消去法はAの左方から順次Lを作用させ前進消去(LU分解に対応。)するが、
A(i)=LiA(i+1) ( または、A(i+1)=Li-1A(i) )
コレスキー法はAを順次LとL*で挟んで前進消去していくと考えればよい。
A(i)=LiA(i+1) Li* ( または、A(i+1)=Li-1A(i) Li*-1 )
このときA(i+1)のエルミート性は保たれる。
詳細は以下の解説を参照。Aが実行列の場合は単純に、エルミート→対称、共役転置→転置と読み替えればよい。
コレスキー分解の再帰的アルゴリズムでは、まず最初にA(1)を下のように置く(定義する)。
以下、i回目のステップ。エルミート性を保ちながらA(i)のi行とi列を前進消去して A(i+1)を生成することを考える。 A(i)はi-1行・列まで前進消去されたエルミート行列であるので、下式のように書ける。
ここで、Ii-1はi-1次の単位行列、 ai,iはi番目の対角要素、 biはi列目の下三角部、 B(i)は、A(i)のi+1行・列以降の部分でやはりエルミートある。次に、Liを
と定義するとA(i)は、
と書ける。( A(i+1) = Li-1 A(i) Li*-1 より。)ここで、A(i+1)は
である。( 注.ここでbi bi* は、行列の積。 )
以上が、i回目のステップ。A(i)からA(i+1)が計算出来たことになる。 nをAの次数として、このステップをn回繰り返すとA(n+1) = Inとなりコレスキー分解は終了する。
であり、
と置くと、(これが最終的に求めるLである。)
であることが確認できる。
コレスキー・バナキエヴィッツ法 [編集]
コレスキー・バナキエヴィッツ法 は直接下三角行列 L の各エントリを計算するための式を与える。行列 L の左上隅から始め行ごとに計算を進める。
コレスキー・クラウト法 [編集]
コレスキー・クラウト法 はコレスキー・バナキエヴィッツ法とは少し異なる方法で、下三角行列Lの各エントリを計算する。すなわち、行列Lの左上隅から始め列ごとに計算を進める。使用する計算式はコレスキー Banachiewicz 法と同一である。
修正コレスキー分解 [編集]
上述した分解法では、分解後の行列Lに無理数が現れることがほとんどで、コレスキー分解の結果を利用した計算が面倒となる。そこで、この欠点を解消するために考え出された方法が修正コレスキー分解である(改訂コレスキー分解と呼ぶことがある)。修正コレスキー分解では、Aが正定値行列である必要はなく
A=LDL*
の形に分解する。ここで、Dは対角行列で、行列Lの対角成分はすべて1とする。
不完全コレスキー分解 [編集]
不完全コレスキー分解は、修正コレスキー分解により行列Aを
- A=LDL*
と分解するところ、行列Lを後の計算が簡略化されるものに変更し、
- A=LDL*+N
と分解する手法である(Nはある行列)。
共役勾配法(傾斜法)の前処理の1つとして採用されることがある。











