一次执行后,嵌套for循环出现意外/未见的中断:高斯消去



试图使一个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]

最新更新