next up previous
次へ: LU分解を利用して逆行列を求める(InvMatLU) 上へ: 簡易ベクトル・行列演算ライブラリ 戻る: 行列の無限大ノルム(InfNormMat)

LU分解(LUdecomp)

逆行列を求めるときや連立1次方程式を解く際にとても有効な手法、LU分解の メソッド LUdecomp を実装した。この際に参考にしたサイトを最後 (参考文献) に挙げておく。これらのプログラムに比べて私の実装したものの良い点を以下に示す。
  1. ピボット選択を行っていること(というかメソッド中ほとんどがこのコード)
  2. ピボット選択の際、行のスケーリング(重みづけ)を[きちんと]していること
  3. 行列式も求められること。ただし計算量は全く変わらない。
  4. 行の入れ換え操作はオーダー1でできること(これは上で述べた)
  5. 与えられた行列に対して破壊的な操作を行わないこと
  6. LU分解した情報を保持できる形で返していること

5. は、与えられた行列をコピーした新しい行列を用意してそれに操作すれば いいものを、与えられた行列そのものに対して操作をしてしまうという プログラムがあったことを言っている。

6. については、LU分解した情報を何度も使いまわせるということがLU分解の 利点であるはずなのに、その情報を捨ててしまうものが多かったということで ある。逆行列はそれでもガウス・ジョルダンの方法と計算量は変わらないが、 連立1次方程式を解く際にはLU分解をしなければいけない分、計算量がガウスの 消去法よりも増えてしまう。1回連立1次方程式を解くだけなら ガウスの消去法で解く SolvLinEqGauss メソッドを使えば十分である。 同じ行列を使って何回も問題を解く場合は、LUdecomp と以下の SolvLinEqLU を 使うとよい。



Tomoaki Okayama 平成16年8月5日