行列でガウス ジョーダン消去法を実行する前方消去法を拡張したアルゴリズムを設計する必要があります。私のプログラムは、数値の対角線を実行して作成していますが、すべてが 1 ではありません。また、最初の行と最初の列にアクセスしてそれらを 0 に変更することもありません。そして、答えがあるはずの最後の列は変わりません。解決策に近づくために私ができることはありますか?
#include <cmath>
using namespace std;
double BetterForwardElimination(double A[8][9])
{
//Implements Gaussian elimination with partial pivoting
//Input: Matrix A[1..n,1..n] and column-vector b[1..n]
//Output: An equivalent upper-triangular matrix in place ofAand the
//corresponding right-hand side values in place of the (n+1)st column
//size of array
int n = 8;
//int n = sizeof(A)/sizeof(A[0]);
for (int i = 1; i<n; i++)
{
int pivotrow = i;
for (int j=i+1; j<n; j++)
{
if (A[j][i] > A[pivotrow][i])
{
pivotrow = j;
}
}
for (int k=i; k<n-1; k++)
{
swap(A[i][k], A[pivotrow][k]);
}
for (int j=i+1; j<n; j++)
{
//int temp = A[j][i]/A[i][i];
for (int k = i; k<n; k++)
{
A[j][k] = A[j][k] - A[i][k]*(A[j][i]/A[i][i]);
}
A[i][j] = 0;
}
}
return A[n][n];
}
私の出力は次のようなものです:
1 1 1 1 1 1 1 1 0
1 2 0 0 0 0 0 0 0
1 0 3 0 0 0 0 0 0
1 0 0 4 0 0 0 0 0
11 0 0 0 5 0 0 0 20
1 0 0 0 0 1 0 0 34
1 0 0 0 0 0 1 0 -51
1 0 0 0 0 0 0 -1 -6
予想される出力は次のとおりです。
1 0 0 0 0 0 0 0 2
0 1 0 0 0 0 0 0 3
0 0 1 0 0 0 0 0 5
0 0 0 1 0 0 0 0 7
0 0 0 0 1 0 0 0 -7
0 0 0 0 0 1 0 0 -5
0 0 0 0 0 0 1 0 -3
0 0 0 0 0 0 0 1 -2