试图使一个c++代码高斯消去,到目前为止,我达到了一个点,我必须在最大的绝对元素以下的元素归零,使用这个代码。问题是,它只适用于每行中的第一个元素。
void Zero(double (&M)[row][column], int C){
for (int i = C+1; i < row; i++) //to pass throw rows
{
cout << "R" << i + 1 << " = R" << i + 1 << " - R" << C + 1 << "*" << M[i][C] << "/" << (M[i - 1][C]) << endl;
for (int j = C ; j < column; j++)
{
M[i][j] = (M[i][j] - ( (M[C][j]) * (M[i][C]) / (M[C][C]) ) );
}
}
cout << endl;
}
主2D数组4*4 | C=0
.
6 1 -6 -5
2 2 3 2
4 -3 0 1
0 2 0 1
——运行后
6 1 -6 -5
0 2 3 2
0 -3 0 1
0 2 0 1
对于给定的行i
,您的第一步是更改M[i][C]
,然后您继续更改M[i][C+1]
等。但是如果你在第一步中将M[i][C]
设置为0,那么对于后面的元素,你只会有效地获得M[i][j]=M[i][j];
。
我建议将j
-loop更改为
for (int j = column-1 ; j >= C; j--){}
或保存M[i][C]
的值,然后将其归零(即在每个j
-循环之前),并在M[i][j]=M[i][j]-...
的表达式中使用该值,而不是M[i][C]
。