係数行列

が下三角行列

と上三角行列

の積に展開でき
たとする.
 |
(14) |
下三角行列と上三角行列の要素を書き出すと
となる.
このようにLU分解できると,連立1次方程式は
 |
(16) |
と書ける.これをさらに書き換えると,
となる.これらの連立方程式の解

と

は,それぞれの係数
が三角行列なので容易に計算できる(ガウス消去法と後退代入の説明を見よ).

の方は,係数が下三角行列なので

〜

まで前進代入により解ける.
具体的には,
である.この

が求まったならば,今度は係数が上三角行列の式(
![[*]](crossref.png)
)の

を求める.これは,

〜

の順序で計算する後
退代入を使う.
これらの前進代入と後退代入は,コンピューターにとって非常に簡単に計算できる.これ
は,係数行列
をLU分解できれば,連立方程式は簡単に解けると言っている.次節でLU
分解の方法を詳しく説明する.
いったんLU分解が出来てしまえば,式(1)の右辺
が変わっ
ても,そのLU分解の形を変える必要がない.右辺が変わっても,LU分解は1回で済む.こ
れが,ガウスの消去法と後退代入を組み合わせた方法やガウス・ジョルダン法に比べて,
際立って優れている点である.
LU分解するということは,式(
15)の

と

を計算することにほかならない.この式の行列方程式は,

の未知数と

の式を
含む.未知数の数が方程式の数より多いので,

個の未知数を勝手に決めて残りを計算
することが可能である.従って,LU分解は一意に決まらない,計算しやすいように

個
の未知数を決めることができる.ここでは,LU分解のクラウト(Crout)のアルゴリズムに
従い,
 |
(21) |
とする.
それでは,クラウトのアルゴリズムによるLU分解の手順を示すことにする.
-
とします.この操作により,解
くべき行列方程式(15)は
と変形できる.
- この式を見ると,
と
が次に示す順序で簡単に求められ
ることが分かる.まずは式を見て分かるように,
が直ちに計算できる.
次に
を利用して,
を求める
ことができる.これで,
と
の第1列目が求められた.次に第2列目である.こ
れも
は直ちに計算できる.そうして,これまで分かっている
と
を使うと,
を求めることができる.これで第2列目は終わりで,同じことを繰り返すと,全て
の
と
が計算できる.これをアルゴリズムにすると次の
ようになる.
という順序で計算する.
と
の
列目を計算することになる.具体的には,以下のようにして,
列目の
と
を求める.
この方法により,LU分解ができる.次に示すピボット選択をしなければ,アルゴリズムは
非常に単純である.
ここでも,ピボット選択の問題が出てくる.式(
24)の

で割る部分である.安定な解を求めるためには,ピボット選択は必要不可欠ということで
ある.完全ピボット選択は複雑なので,部分ピボット選択で十分であろう.
ではどうするかですが,これも途中(
列)まで分解した行列は崩したくない.そのため
には,行列
の行を交換し,それに対応した行列
の行を交換すれば問題
がもっとも少なくなる.当然,行列
は行も列も変化しない.最終的には行を交換
した行列
のLU分解が出来る.連立1次方程式を解くときには,同様に
の行も交換しておく.ただし,行の交換であるため,解
の要素の順序は
入れ替わらない.
つぎに,どのようにして交換する行を決めるかである.一般的には,
が大き
くなるように選択すれば良い結果が得られる.クラウト法のピボット選択は,次のように
進める.
列目のピボットを選択する場合についてである.
- まずは,
列目までの行列
の各行の要素の最大値を1に規
格化する.同時に,対応する行列
の行も同じ係数を掛ける.
- そうして,
を計算する.これは,式(23)と同じ,
式(24)と
で割ること以外は同じであ
ることに注意が必要である.
- 最大の
となるものをピボットとして選択する.
- 最大のピボットとなる行が分かったので,後は元(規格化前)の
と
を用いて,式(24)と
を計算する.
これがピボット探索のルーチンである.実際には,ピボット作成用の関数を作成
して,計算をすることになる.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年10月16日