#include \n#include \n#include \n\nusing namespace std;\n\n// 打印矩阵\nvoid printMatrix(const vector<vector>& matrix) {\n for (const auto& row : matrix) {\n for (const auto& num : row) {\n cout << num << " ";\n }\n cout << endl;\n }\n}\n\n// 高斯消元法求解线性方程组\nvector solveLinearEquations(vector<vector>& matrix) {\n int n = matrix.size();\n vector result(n);\n\n // 消元过程\n for (int i = 0; i < n - 1; i++) {\n // 选取主元\n int maxRow = i;\n double maxVal = matrix[i][i];\n for (int j = i + 1; j < n; j++) {\n if (abs(matrix[j][i]) > abs(maxVal)) {\n maxRow = j;\n maxVal = matrix[j][i];\n }\n }\n\n // 交换行\n if (maxRow != i) {\n swap(matrix[maxRow], matrix[i]);\n }\n\n // 消元\n for (int j = i + 1; j < n; j++) {\n double factor = matrix[j][i] / matrix[i][i];\n for (int k = i + 1; k < n + 1; k++) {\n matrix[j][k] -= factor * matrix[i][k];\n }\n }\n }\n\n // 回代求解\n for (int i = n - 1; i >= 0; i--) {\n double sum = 0.0;\n for (int j = i + 1; j < n; j++) {\n sum += matrix[i][j] * result[j];\n }\n result[i] = (matrix[i][n] - sum) / matrix[i][i];\n }\n\n return result;\n}\n\nint main() {\n char choice;\n do {\n int n;\n cout << "请输入线性方程的阶数:";\n cin >> n;\n\n vector<vector> matrix(n, vector(n + 1));\n\n // 选择输入方式\n cout << "请选择输入方式(1-手工输入,2-从文件导入):";\n int inputChoice;\n cin >> inputChoice;\n\n if (inputChoice == 1) {\n // 手工输入系数\n cout << "请按行输入线性方程组的系数矩阵(每行" << n + 1 << "个数,用空格分隔):" << endl;\n for (int i = 0; i < n; i++) {\n for (int j = 0; j < n + 1; j++) {\n cin >> matrix[i][j];\n }\n }\n } else if (inputChoice == 2) {\n // 从文件导入系数\n string filename;\n cout << "请输入包含系数的文件名:";\n cin >> filename;\n\n ifstream file(filename);\n if (!file) {\n cerr << "无法打开文件" << filename << endl;\n continue;\n }\n\n for (int i = 0; i < n; i++) {\n for (int j = 0; j < n + 1; j++) {\n file >> matrix[i][j];\n }\n }\n\n file.close();\n } else {\n cout << "无效的选择" << endl;\n continue;\n }\n\n // 求解线性方程组\n vector result = solveLinearEquations(matrix);\n\n // 打印消元过程和结果\n cout << "消元过程:" << endl;\n printMatrix(matrix);\n\n cout << "方程的解:" << endl;\n for (int i = 0; i < n; i++) {\n cout << "x" << i + 1 << " = " << result[i] << endl;\n }\n\n // 选择输出方式\n cout << "请选择输出方式(1-打印到控制台,2-保存到文件):";\n int outputChoice;\n cin >> outputChoice;\n\n if (outputChoice == 1) {\n // 打印到控制台\n cout << "将结果打印到控制台:" << endl;\n for (int i = 0; i < n; i++) {\n cout << "x" << i + 1 << " = " << result[i] << endl;\n }\n } else if (outputChoice == 2) {\n // 保存到文件\n string filename;\n cout << "请输入保存结果的文件名:";\n cin >> filename;\n\n ofstream file(filename);\n if (!file) {\n cerr << "无法打开文件" << filename << endl;\n continue;\n }\n\n file << "方程的解:" << endl;\n for (int i = 0; i < n; i++) {\n file << "x" << i + 1 << " = " << result[i] << endl;\n }\n\n file.close();\n } else {\n cout << "无效的选择" << endl;\n continue;\n }\n\n // 继续求解\n cout << "是否继续求解(Y/N)?";\n cin >> choice;\n } while (choice == 'Y' || choice == 'y');\n\n return 0;\n}

C++ 高斯消元法解线性方程组(列主元法)

原文地址: https://www.cveoy.top/t/topic/qryg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录