编写C++程序用高斯消去法中的列主元法求解4次以上的线性方程具体要求为:清晰显示方程的解如果方程没有解也给出无解的结论。还有无穷解的情况、除数为0的情况
以下是使用C++编写的高斯消去法中的列主元法来求解4次以上的线性方程的程序:
#include <iostream>
#include <cmath>
const double EPSILON = 1e-10; // 用于判断浮点数是否为0的阈值
// 打印矩阵
void printMatrix(double** matrix, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size + 1; j++) {
std::cout << matrix[i][j] << "\t";
}
std::cout << std::endl;
}
}
// 列主元法
void columnPivot(double** matrix, int size) {
for (int i = 0; i < size; i++) {
int pivotRow = i;
double maxElement = std::abs(matrix[i][i]);
// 寻找列主元素
for (int j = i + 1; j < size; j++) {
if (std::abs(matrix[j][i]) > maxElement) {
maxElement = std::abs(matrix[j][i]);
pivotRow = j;
}
}
// 交换行
if (pivotRow != i) {
for (int k = i; k < size + 1; k++) {
std::swap(matrix[i][k], matrix[pivotRow][k]);
}
}
// 消元
for (int j = i + 1; j < size; j++) {
double ratio = matrix[j][i] / matrix[i][i];
for (int k = i; k < size + 1; k++) {
matrix[j][k] -= ratio * matrix[i][k];
}
}
}
}
// 回代求解
void backSubstitution(double** matrix, int size) {
double* solutions = new double[size];
for (int i = size - 1; i >= 0; i--) {
double sum = 0.0;
for (int j = i + 1; j < size; j++) {
sum += matrix[i][j] * solutions[j];
}
solutions[i] = (matrix[i][size] - sum) / matrix[i][i];
}
std::cout << "方程的解为:" << std::endl;
for (int i = 0; i < size; i++) {
std::cout << "x" << i + 1 << " = " << solutions[i] << std::endl;
}
delete[] solutions;
}
// 高斯消去法求解线性方程
void gaussianElimination(double** matrix, int size) {
columnPivot(matrix, size);
// 判断是否有解或无穷解
for (int i = size - 1; i >= 0; i--) {
bool isZeroRow = true;
for (int j = 0; j < size; j++) {
if (std::abs(matrix[i][j]) > EPSILON) {
isZeroRow = false;
break;
}
}
if (isZeroRow && std::abs(matrix[i][size]) > EPSILON) {
std::cout << "方程无解。" << std::endl;
return;
}
}
// 判断是否有无穷解
int rank = 0;
for (int i = 0; i < size; i++) {
bool isZeroRow = true;
for (int j = 0; j < size; j++) {
if (std::abs(matrix[i][j]) > EPSILON) {
isZeroRow = false;
break;
}
}
if (!isZeroRow) {
rank++;
}
}
if (rank < size) {
std::cout << "方程有无穷解。" << std::endl;
} else {
backSubstitution(matrix, size);
}
}
int main() {
int size;
std::cout << "请输入线性方程的未知数个数:";
std::cin >> size;
double** matrix = new double*[size];
for (int i = 0; i < size; i++) {
matrix[i] = new double[size + 1];
std::cout << "请输入第" << i + 1 << "个方程的系数和常数项:" << std::endl;
for (int j = 0; j < size + 1; j++) {
std::cin >> matrix[i][j];
}
}
std::cout << "初始矩阵为:" << std::endl;
printMatrix(matrix, size);
gaussianElimination(matrix, size);
for (int i = 0; i < size; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
使用此程序,您可以输入线性方程的未知数个数以及方程的系数和常数项,并得到方程的解或相应的结论
原文地址: https://www.cveoy.top/t/topic/iLvy 著作权归作者所有。请勿转载和采集!