• 高斯消元法


    有点线代的知识:

    const double EPS = 1e-8;
    typedef vector<double>  vec;
    typedef vector<vec>  mat;
    //Ax = b
    vec gauss_jordan(const mat &A, const vec &b)
    {
        int n = A.size();
        mat B(n,vec(n+1)); //定义大小
        for(int i=0;i < n;i++)
            for(int j=0;j < n;j++)
                B[i][j] = A[i][j];
        
        for(int i=0;i < n;i++) B[i][n] = b[i]; //把 b 放在 B 的右边一起运算
    
        for(int i=0;i < n;i++)                //把正在处理的未知数系数的绝对值最大的式子换到第i行(为什么是第i行)
        {
            int pivot = i;
            for(int j=i;j < n;j++)
                if(abs(B[j][i]) > abs(B[pivot][i]))
                    pivot = j;
    
            swap(B[pivot],B[i]);
    
            if(abs(B[i][i]) < EPS) return vec();    //这种情况下,无解或者是无穷多解。
    
            for(int j=i+1;j <= n;j++) B[i][j] = B[i][j]/B[i][i];  //把正在处理的未知数的系数变为1。
            
            for(int j=0;j < n;j++)
            {
                if(i != j)
                    for(int k=i+1;k <= n;k++)
                        B[j][k] -= B[j][i]*B[i][k];    //消参
            }
        }
        vec x(n);
        for(int i=0;i < n;i++) x[i] = B[i][n];
        return x;
    }

    先了解一下,以后拿例题练。

  • 相关阅读:
    python基础练习5-9
    python安装
    python虚拟环境
    python基础语法--逻辑实现
    python基础语法
    IDE(vscode)
    pycharm使用
    复习
    环境搭建+python基础
    ASP.NET 5行代码搞二维码
  • 原文地址:https://www.cnblogs.com/cunyusup/p/8452904.html
Copyright © 2020-2023  润新知