内部ループのi,jの範囲が違う気がする。
とりあえず、Java でメソッドにしてみた。
計算誤差の点では割り算は最後に回すのがよい。先に数値を小さくしてしまうと、他のデータとの桁そろえが難しくなって、誤差が発生する。数桁の整数係数、正数解を得るものなら、誤差は出ないはずだけど。
/** 1次 n連立方程式
* @param double[][] a : [n][n+1] column方向のn番は 右辺用定数項
* @return double[] x : 各変数の解
* */
double[] calc(double[][] a) {
int n = a.length;
x = new double[n];
for(int k=0; k\u0026lt;n-1; k++) {
/* k番の変数を消去 , k行k列以下のデータは編集してはいけない。 */
for(int i=k+1; i\u0026lt;n; i++){
a[i][n] -= a[k][n]*a[i][k] / a[k][k] ; // 定数項
/* a'[i][j] は k+1.. n-1 までを計算 */
for(int j=k+1; j\u0026lt;n; j++) a[i][j] -= a[i][k]*a [k][j] / a[k][k];
}
}
for(int i=n-1; i\u0026gt;=0; i--){
/* 定数項位置a[i][n] に x[i] を算出、 k の消去順を逆算 */
for(int j = i+1; j\u0026lt;n; j++) a[i][n] -= a[i][j]*a[j][n];
a[i][n] /= a[i][i];
x[i] = a[i][n] ;
}
return x;
}
以下のような配列を与えると
{{1,1,1,1,1, 15}
,{2,-2,1,-1,1, 2}
,{-1,10,1,-3,2,20}
,{5,-4,3,-2,1, 3}
,{-1,1,-1,1,-1,-3}
}
解は、{1.0000,2.0000,3.0000,4.0000,5.0000}