以下是使用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;
}

使用此程序,您可以输入线性方程的未知数个数以及方程的系数和常数项,并得到方程的解或相应的结论

编写C++程序用高斯消去法中的列主元法求解4次以上的线性方程具体要求为:清晰显示方程的解如果方程没有解也给出无解的结论。还有无穷解的情况、除数为0的情况

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

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