係数行列
が下三角行列
と上三角行列
の積に展開でき
たとします。
 |
(18) |
下三角行列と上三角行列の要素を書き出すと
となります。
このようにLU分解できると、連立1次方程式は
 |
(20) |
となります。これをさらに書き換えると、
となります。これらの連立方程式の解
と
は、それぞれの係数
が三角行列なので容易に計算できます(ガウス消去法と後退代入の説明を見よ)。
の方は、係数が下三角行列なので
〜
まで前進代入により解きます。
具体的には、
です。この
が求まったならば、今度は係数が上三角行列の式(
)の
を求めます。これは、
〜
の順序で計算する後
退代入を使います。
これらの前進代入と後退代入は、コンピューターにとって非常に簡単に計算で
きます。これは、係数行列
をLU分解できれば、連立方程式は簡単に解ける
と言っています。次節でLU分解の方法を詳しく説明します。
いったんLU分解が出来てしまえば、式(1)の右辺
が変わっても、そのLU分解の形を変える必要がありません。右辺が変
わっても、LU分解は1回で済みます。これが、ガウスの消去法と後退代入を組
み合わせた方法やガウス・ジョルダン法に比べて、際立って優れている点です。
LU分解するということは、式(19)の
と
を計算することにほかなりません。この式の行列方程式は、
の未知数と
の式を含みます。未知数の数が方程式の数より多いの
で、
個の未知数を勝手に決めて残りを計算することが可能です。従って、
LU分解は一意に決まりませんので、計算しやすいように
個の未知数を決め
ることができます。ここでは、LU分解のクラウト(Crout)のアルゴリズムに従い、
 |
(25) |
とします。
それでは、クラウトのアルゴリズムによるLU分解の手順を示します。
-
とします。この操作により、解
くべき行列方程式(19)は
と変形できます。
- この式を見ると、
と
が次に示す順序で簡単
に求められることが分かります。まずは式を見て分かるように、
が直ちに計算できます。次に
を利用して、
を求めることができます。これ
で、
と
の第1列目が求められました。次に第2列目です。これも
は直ちに計算できます。そうして、これまで分かっている
と
を使うと、
を求めることができます。これで
第2列目は終わりで、同じことを繰り返すと、全ての
と
が計算できます。これをアルゴリズムにすると次のよう
になります。
という順序で計算していきます。
と
の
列目を計算することになります。具体的には、以下のよ
うにして、
列目の
と
を求めます。
この方法により、LU分解ができます。次に示すピボット選択をしなければ、ア
ルゴリズムは非常に単純です。
ここでも、ピボット選択の問題が出てきます。式(28)の
で割る部分です。安定な解を求めるためには、ピボット選択は必
要不可欠です。完全ピボット選択は複雑なので、部分ピボット選択で十分でしょ
う。
ではどうするかですが、これも途中(
列)まで分解した行列は崩したくあり
ません。そのためには、行列
の行を交換し、それに対応した行列
の行を交換すれば問題がもっとも少なくなります。当然、行列
は行も列も変化しません。最終的には行を交換した行列
のLU分解が出来上がります。連立1次方程式を解くときには、
同様に
の行も交換しておきます。ただし、行の交換であるため、解
の要素の順序は入れ替わりません。
つぎに、どのようにして交換する行を決めるかです。一般的には、
が大きくなるように選択すれば良い結果が得られます。クラウト
法のピボット選択は、次のように進めます。
列目のピボットを選択する場
合です。
- まずは、
列目までの行列
の各行の要素の最大値を1に規
格化します。同時に、対応する行列
の行も同じ係数をかけます。
- そうして、
を計算します。これは、式(27)と同じ、
式(28)と
で割ること以外は同じであ
ることに注意してください。
- 最大の
となるものをピボットと選択します。
- 最大のピボットとなる行が分かったので、後は元(規格化前)の
と
を用いて、式(28)と
を計算します。
これがピボット探索のルーチンです。実際には、ピボット作成用の関数を作成
して、計算をすることになります。
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年8月21日