一次执行后嵌套for循环中意外/看不见的中断:高斯消除

时间:2015-09-24 20:32:54

标签: c++ for-loop multidimensional-array

尝试制作用于高斯消除的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

1 个答案:

答案 0 :(得分:1)

对于给定的行Y,您的第一步是更改i,然后继续更改M[i][C]等。但如果您在第一步中将M[i][C+1]设置为零,你做的,然后对于后来的元素,你才能有效地M[i][C]

我建议将M[i][j]=M[i][j]; - 循环更改为

j

或保存for (int j = column-1 ; j >= C; j--){} 的值,然后将其归零(即在每个M[i][C] - 循环之前),并在表达式j而不是M[i][j]=M[i][j]-...中使用该值。