LU分解プログラム

        2003/08/18 日立製作所 & 早稲田大学 後 保範 ( Ushiro Yasunori )

1. 概要

 密実行列を係数とする連立一次方程式Ax=bの係数AをGauss消去法でLU分解し、
数値解xを計算するFORTRAN及びCのソースプログラムを掲載する。
本プログラムは内容を理解してもらうことを目的とし、計算時間及び使用メモリ量の効率化
は目的としていない。本格的なプログラムは金田研究室から他のプログラムと合わせて
公開する予定。配列の格納順はCの場合もFORTRANに合わせてある。Cでは2次元配列は使用
しないで、2次元の添え字値はA(i,j)=A[i+j*ND]で求めている。

2. 軸交換のないプログラム

(1) 特異性チェックの無いプログラム

 (a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

(2) 特異性チェック付きプログラム

 (a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

3. 部分軸交換付きプログラム

(1) 対象行全体を交換するプログラム

 (a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

(2) 対象行の右側行だけ交換するプログラム

 (a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

4. テスト用プログラム

(1) テストメインプログラム

 (a) テスト対象: 4種類のLU分解プログラムを一回にテストする。
       1000次元までの乱数データの行列で、結果の精度、計算速度及びMFLOPSを
       各LU分解法ごとに出力する。計算する次元数(N)を画面より与える。
 (b) プログラム : FORTRANCのソースプログラム

(2) 行列作成プログラム

 (a) 作成行列: IDAは行列の種類でIDA=0は非対角行列が全て1で対角が1+SIG(入力値)となる。
       IDA=1なら全要素を0.0〜1.0の一様乱数で作成する。
       IDBは右辺行列の指定であるが、現在は解xが1.0となるようにbを作成。
 (b) プログラム : FORTRANCのソースプログラム