高斯消元 [模板]

const int maxn = 111; //方程大小 int m, n; // 行号 列号 double a[maxn][maxn], x[maxn]; //x为结果 void Gauss() { double d = 0, t = 0, sum = 0; int k = 1, l = 0, i = 0, j = 0; while (k <= n) { //*****选主元素***** d = a[k][k]; l = k; for (i = k + 1; i <= n; i++) { if (fabs(a[i][k]) > fabs(d)) { d = a[i][k]; l = i; } } if (l != k) { for (j = k; j <= n; j++) { swap( a[l][j] , a[k][j]); } swap( x[k] , x[l]); } //*****消元*****// for (j = k + 1; j <= n; j++) { a[k][j] = a[k][j] / a[k][k]; } x[k] = x[k] / a[k][k]; for (i = k + 1; i <= n; i++) { for (j = k + 1; j <= n; j++) { a[i][j] = a[i][j] - a[i][k] * a[k][j]; } j = 1; x[i] = x[i] - a[i][k] * x[k]; } k++; } //*****回代***** for (i = n - 1; i >= 1; i--) { sum = 0; for (j = i + 1; j <= n; j++) { sum = sum + a[i][j] * x[j]; } x[i] = x[i] - sum; } }