高斯消元
板子来源于网络
struct Gauss { /**** **** **** **** **** **** * Function Name : 高斯消元法 * Description : 求解线性方程组 * * void exchange_col(int p1,int p2,int n) * 交换 p1 行和 p2 行的所有数据 * * bool gauss(int n) * 求解系数矩阵为 n 的线性方程组,方程组无解返回 false,否则 true * * x1 = x0 - f(x0)/f'(x0) 牛顿迭代法 **** **** **** **** **** ****/ static const int N = 15; double matrix[N][N + 1]; //系数矩阵,从 0 开始 double ans[N]; //结果数组 void exchange_col(int p1, int p2, int n) //交换 p1 行和 p2 行的所有数据 { double t; int i; for (i = 0; i <= n; i++) t = matrix[p1][i], matrix[p1][i] = matrix[p2][i], matrix[p2][i] = t; } bool gauss(int n) //求解系数矩阵为 n 的线性方程组 { int i, j, k; int p; double r; for (i = 0; i < n - 1; i++) { p = i; for (j = i + 1; j < n; j++) //寻找 i 列绝对值最大值位置 { if (abs(matrix[j][i]) > abs(matrix[p][i])) p = j; } if (p != i) exchange_col(i, p, n); if (matrix[i][i] == 0) return false; for (j = i + 1; j < n; j++) //剩余列进行消元 { r = matrix[j][i] / matrix[i][i]; for (k = i; k <= n; k++) matrix[j][k] -= r * matrix[i][k]; } } for (i = n - 1; i >= 0; i--) //获得结果 { ans[i] = matrix[i][n]; for (j = n - 1; j > i; j--) ans[i] -= matrix[i][j] * ans[j]; if (matrix[i][i] == 0) return false; ans[i] /= matrix[i][i]; } return true; } }gs;