LU分解プログラム
2007/05/30 東京工芸大学 後 保範 ( 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) プログラム : FORTRAN |
とC |
(GLU1.c)のソースプログラム
(2) 特異性チェック付きプログラム
(a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
(b) プログラム : FORTRAN |
とC |
(GLU2.c)のソースプログラム
3. 部分軸交換付きプログラム
(1) 対象行全体を交換するプログラム
(a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
(b) プログラム : FORTRAN |
とC |
(GLU3.c)のソースプログラム
(2) 対象行の右側行だけ交換するプログラム
(a) 計算方法 : Aをガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
(b) プログラム : FORTRAN |
とC |
(GLU4.c)のソースプログラム
4. テスト用プログラム
(1) テストメインプログラム
(a) テスト対象: 4種類のLU分解プログラムを一回にテストする。
1000次元までの乱数データの行列で、結果の精度、計算速度及びMFLOPSを
各LU分解法ごとに出力する。計算する次元数(N)を画面より与える。
(b) プログラム : FORTRAN |
とC |
(TGLU.c)のソースプログラム
(2) 行列作成プログラム
(a) 作成行列: IDAは行列の種類でIDA=0は非対角行列が全て1で対角が1+SIG(入力値)となる。
IDA=1なら全要素を0.0〜1.0の一様乱数で作成する。
IDBは右辺行列の指定であるが、現在は解xが1.0となるようにbを作成。
(b) プログラム : FORTRAN |
とC |
(DRMAT.c)のソースプログラム