/ /ガウスの消去によって正しい項が除去されない - c ++、matrix、gaussian

ガウスの消去は正しい項を排除しません - c ++、matrix、gaussian

 for(count = 0; count < max; count ++)
{
for (row=(count+1); row < max; row++)
{
for(column = 0; column < max; column ++)
{
double t = matrix[row][count]/matrix[count][count];
matrix[row][column] = (matrix[row][column] - (t*matrix[count][column]));
}
}
}

これはガウス消去プロセスのコードです。すべての変数は以前に宣言されています。元の行列は次のとおりです。

1.4 2.1 2.1 7.4 9.6

1.6 1.5 1.1 0.7 5.0

3.8 8.0 9.6 5.4 8.8

4.6 8.2 8.4 0.4 8.0

2.6 2.9 0.1 9.6 7.7

私が得ている出力は次のとおりです。

行のスワップを実行するので、行列は次のようになります。

4.6 8.2 8.4 0.4 8

3.8 8 9.6 5.4 8.8

1.4 2.1 2.1 7.4 9.6

2.6 2.9 0.1 9.6 7.7

1.6 1.5 1.1 0.7 5

私が得ている出力は次のとおりです。

4.6 8.2 8.4 0.4 8

0 8 9.6 5.4 8.8

0 0 2.1 7.4 9.6

0 0 0 9.6 7.7

0 0 0 0 5

見て分かるように、プロセスは部分的に機能しており、各行の先頭の項を削除します。しかし、それは残りの項を減算していません。例えばガウス消去後の行スワップ= 8と行列[1] [1]の後も元の行列の行列[1] [1]はまだ8です。

誰かが私の問題が何かを知ることができないかどうか、私はそれを見つけることができないのだろうかと思っていた。

回答:

回答№1の場合は3

この行:

double t = matrix[row][count]/matrix[count][count];

行の前にする必要があります:

for(column = 0; column < max; column ++)

問題は、最初の column あなたが設定したループ matrix[1][0] = 0;。しかし、列ループの2回目の反復では、 t を使用して matrix[1][0]/matrix[0][0]しかし、それは今です 0 あなたが設定したばかりなので matrix[1][0]0.

NB。デバッグを支援するには printf出力を追加しました 正確にどのような計算が行われているかを確認します。これはデバッガを使用した場合に比べて基本的なものですが、あなたのベルトに置くには便利なツールです。