bam6o0の記憶域

忘備録になればいいな

C言語によるガウスの消去法

ガウスの消去法のC言語実装

Ax = bをプログラムで解く。
ピボットなし、エラー処理、解なしはそのうち対応するかも。

ソースコード

gaussian elimination

入力

標準入力であるため実行後に入力
最初の数字が行列のサイズで次に1行目から順に入力されていく

$ ./a.out
4 8 16 24 32 2 7 12 17 6 17 32 59 7 22 46 105 160 70 198 291

出力

Matrix A is
8.000 16.000 24.000 32.000 
2.000 7.000 12.000 17.000 
6.000 17.000 32.000 59.000 
7.000 22.000 46.000 105.000 
Vector b is
160.000 70.000 198.000 291.000 

--------------------------------------------
M1 is
1.000 0.000 0.000 0.000 
-0.250 1.000 0.000 0.000 
-0.750 0.000 1.000 0.000 
-0.875 0.000 0.000 1.000 
Num. of Mul./Div. = 4

M1A is
8.000 16.000 24.000 32.000 
0.000 3.000 6.000 9.000 
0.000 5.000 14.000 35.000 
0.000 8.000 25.000 77.000 
Num. of Mul./Div. = 68

B1 is
160.000 30.000 78.000 151.000 
Num. of Mul./Div. = 84

--------------------------------------------
M2 is
1.000 0.000 0.000 0.000 
0.000 1.000 0.000 0.000 
0.000 -1.667 1.000 0.000 
0.000 -2.667 0.000 1.000 
Num. of Mul./Div. = 87

M2A is
8.000 16.000 24.000 32.000 
0.000 3.000 6.000 9.000 
0.000 0.000 4.000 20.000 
0.000 0.000 9.000 53.000 
Num. of Mul./Div. = 151

B2 is
160.000 30.000 28.000 71.000 
Num. of Mul./Div. = 167

--------------------------------------------
M3 is
1.000 0.000 0.000 0.000 
0.000 1.000 0.000 0.000 
0.000 0.000 1.000 0.000 
0.000 0.000 -2.250 1.000 
Num. of Mul./Div. = 169

M3A is
8.000 16.000 24.000 32.000 
0.000 3.000 6.000 9.000 
0.000 0.000 4.000 20.000 
0.000 0.000 0.000 8.000 
Num. of Mul./Div. = 233

B3 is
160.000 30.000 28.000 8.000 
Num. of Mul./Div. = 249

--------------------------------------------
Answers after  = 249 mul/div is
x[1] = 4.000 
x[2] = 3.000 
x[3] = 2.000 
x[4] = 1.000