编写C++程序用高斯消去法中的列主元法求解4次以上的线性方程具体要求为:1线性方程的系数可以由文本文件读入也可以手工录入;录入的系数可以保存到文本文件。2能够显示各趟消元的结果3清晰显示方程的解如果方程没有解也给出无解的结论。143验收要求1431功能验收要求1程序控制用户可以在提示下输入或导入要求解的线性方程系数并求解。一次求解执行完成后可以提示用户再次进行另一个线性方程的求解。由用户输入特殊字
下面是一个使用高斯消去法中的列主元法求解线性方程的C++程序示例:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
const double EPSILON = 1e-10; // 精度控制
void readCoefficients(double coefficients[][5], int n) {
std::cout << "请输入线性方程的系数矩阵:" << std::endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
std::cin >> coefficients[i][j];
}
}
}
void printCoefficients(double coefficients[][5], int n) {
std::cout << "线性方程的系数矩阵为:" << std::endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
std::cout << std::setw(10) << coefficients[i][j] << " ";
}
std::cout << std::endl;
}
}
void saveCoefficientsToFile(double coefficients[][5], int n) {
std::ofstream file("coefficients.txt");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
file << coefficients[i][j] << " ";
}
file << std::endl;
}
file.close();
std::cout << "线性方程的系数已保存到文件 coefficients.txt" << std::endl;
}
void loadCoefficientsFromFile(double coefficients[][5], int n) {
std::ifstream file("coefficients.txt");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
file >> coefficients[i][j];
}
}
file.close();
std::cout << "线性方程的系数已从文件 coefficients.txt 加载" << std::endl;
}
void swapRows(double coefficients[][5], int n, int row1, int row2) {
for (int j = 0; j < n+1; j++) {
double temp = coefficients[row1][j];
coefficients[row1][j] = coefficients[row2][j];
coefficients[row2][j] = temp;
}
}
void forwardElimination(double coefficients[][5], int n) {
for (int i = 0; i < n-1; i++) {
int maxRow = i;
for (int j = i+1; j < n; j++) {
if (std::abs(coefficients[j][i]) > std::abs(coefficients[maxRow][i])) {
maxRow = j;
}
}
if (std::abs(coefficients[maxRow][i]) < EPSILON) {
std::cout << "线性方程无解" << std::endl;
return;
}
swapRows(coefficients, n, i, maxRow);
for (int j = i+1; j < n; j++) {
double factor = coefficients[j][i] / coefficients[i][i];
for (int k = i+1; k < n+1; k++) {
coefficients[j][k] -= factor * coefficients[i][k];
}
coefficients[j][i] = 0;
}
}
}
void backwardSubstitution(double coefficients[][5], int n, double solution[]) {
for (int i = n-1; i >= 0; i--) {
double sum = 0;
for (int j = i+1; j < n; j++) {
sum += coefficients[i][j] * solution[j];
}
solution[i] = (coefficients[i][n] - sum) / coefficients[i][i];
}
}
void solveLinearEquations(double coefficients[][5], int n) {
double solution[5] = {0};
forwardElimination(coefficients, n);
if (std::abs(coefficients[n-1][n-1]) < EPSILON) {
std::cout << "线性方程无解" << std::endl;
return;
}
backwardSubstitution(coefficients, n, solution);
std::cout << "线性方程的解为:" << std::endl;
for (int i = 0; i < n; i++) {
std::cout << "x" << i+1 << " = " << solution[i] << std::endl;
}
}
int main() {
int n;
std::cout << "请输入线性方程的阶数(不小于4阶):";
std::cin >> n;
double coefficients[5][5] = {0};
std::cout << "请选择输入方式(1 - 手工录入,2 - 从文件导入):";
int option;
std::cin >> option;
if (option == 1) {
readCoefficients(coefficients, n);
} else if (option == 2) {
loadCoefficientsFromFile(coefficients, n);
}
printCoefficients(coefficients, n);
solveLinearEquations(coefficients, n);
std::cout << "是否将线性方程的系数保存到文件(1 - 是,0 - 否):";
std::cin >> option;
if (option == 1) {
saveCoefficientsToFile(coefficients, n);
}
return 0;
}
此程序使用二维数组存储线性方程的系数,通过函数实现各个计算过程,避免了重复的代码。用户可以选择手工录入系数或从文件导入系数,并可以选择将系数保存到文件。程序会先打印出输入的系数矩阵,然后通过高斯消去法求解线性方程,最后打印出方程的解。如果方程无解,则会给出无解的结论
原文地址: https://www.cveoy.top/t/topic/iKMj 著作权归作者所有。请勿转载和采集!