【C/C++】高斯列主元消元法求解线性方程组
方程组的解x1 1.0000x2 3.0000x3 2.0000验证结果3x1 - x2 x3 4.0000 (预期4)x1 x2 x3 6.0000 (预期6)2x1 3x2 - x3 12.0000 (预期12)#includestdio.h#includemath.h#define MAX_MATRIX 10/*** brief SwapRow 进行行交换* param m 待计算的矩阵* row 待交行的行* max_row 待交换的另一行* n 矩阵行数*/static void SwapRow(double m[][MAX_MATRIX], int row, int max_row, int n) {double swap;for (int k row; k n; k) {swap m[row][k];m[row][k] m[max_row][k];m[max_row][k] swap;}}/*** brief 组上三角矩阵* param m 待计算的矩阵* n 矩阵行数*/static void SelectColE(double m[][MAX_MATRIX], int n) {int max_row_e 0; //主元所在行double ratio 0; //消元因数for (int j 0; j n; j) {max_row_e j;for (int i j; i n; i) {if (fabs(m[i][j]) fabs(m[max_row_e][j])) {max_row_e i;}}if (max_row_e ! j) {SwapRow(m, j, max_row_e, n); //与最大主元所在行交换}//消元for (int i j 1; i n; i) {ratio m[i][j] / m[j][j];for (int k j; k n 1; k) {m[i][k] - m[j][k] * ratio;}}}}/*** brief: Gauss 高斯列主元消元法求解线性方程(A*X B)* param: m 由于A|B组成的增广矩阵,X为待求的解* n 求解的元数,n要小于MAX_MATRIX* result:所求结果存放在m[][n]中*/void Gauss(double m[][MAX_MATRIX], int n) {SelectColE(m, n); // 列选主元并消元成上三角// 回代求解,结果存在m[][n]中for(int i n - 1; i 0; i--) {for(int j i 1; j n; j) {m[i][n] - m[i][j] * m[j][n];}m[i][n] / m[i][i];}}double a[3][MAX_MATRIX] {{3,-1, 1, 4}, //A|B{1, 1, 1, 6},{2, 3,-1, 12}};int main(int argc ,char **argv) {Gauss(a, 3);printf(%f,%f,%f\r\n,a[0][3], a[1][3], a[2][3]);return 0;