• 高斯消元


     板子来源于网络

    struct Gauss
    {
        /**** **** **** **** **** ****
        * Function Name : 高斯消元法
        * Description : 求解线性方程组
        *
        * void exchange_col(int p1,int p2,int n)
        * 交换 p1 行和 p2 行的所有数据
        *
        * bool gauss(int n)
        * 求解系数矩阵为 n 的线性方程组,方程组无解返回 false,否则 true
        *
        * x1 = x0 - f(x0)/f'(x0) 牛顿迭代法
        **** **** **** **** **** ****/
        static const int N = 15;
        double matrix[N][N + 1]; //系数矩阵,从 0 开始 
        double ans[N]; //结果数组
        void exchange_col(int p1, int p2, int n) //交换 p1 行和 p2 行的所有数据
        {
            double t;
            int i;
            for (i = 0; i <= n; i++)
                t = matrix[p1][i], matrix[p1][i] = matrix[p2][i], matrix[p2][i] = t;
        }
        bool gauss(int n) //求解系数矩阵为 n 的线性方程组
        {
            int i, j, k;
            int p;
            double r;
            for (i = 0; i < n - 1; i++)
            {
                p = i;
                for (j = i + 1; j < n; j++)   //寻找 i 列绝对值最大值位置
                {
                    if (abs(matrix[j][i]) > abs(matrix[p][i])) p = j;
                }
                if (p != i) exchange_col(i, p, n);
                if (matrix[i][i] == 0) return false;
                for (j = i + 1; j < n; j++)   //剩余列进行消元
                {
                    r = matrix[j][i] / matrix[i][i];
                    for (k = i; k <= n; k++) matrix[j][k] -= r * matrix[i][k];
                }
            }
            for (i = n - 1; i >= 0; i--)   //获得结果
            {
                ans[i] = matrix[i][n];
                for (j = n - 1; j > i; j--) ans[i] -= matrix[i][j] * ans[j];
                if (matrix[i][i] == 0) return false;
                ans[i] /= matrix[i][i];
            }
            return true;
        }
    
    }gs;
  • 相关阅读:
    java final修饰符
    java getClass()
    java color类简介
    JAVA本地方法详解,什么是JAVA本地方法?
    this 关键字
    main 静态方法 非静态方法
    Integer与int
    java创建一个对象时,内存中发生了什么
    java中静态变量在内存中的位置
    java使用new Date()和System.currentTimeMillis()获取当前时间戳
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/7632917.html
Copyright © 2020-2023  润新知