• 高斯消元 [模板]


    高斯消元

    简介

    高斯消元是用来解线性方程组的一种 O(N3)O(N^3) 算法.

    基本步骤

    1. 按顺序枚举 未知数 xx, 在 没有使用过的方程 中选出 xx 系数最大的方程. (为了减少误差)
    2. 将其移动到 ii 行.
    3. 将该方程 系数化一
    4. 使用该方程对 没有使用过的方程 进行消元.
    5. 最后得到 上三角矩阵, 将最后一个 未知数 回带即可解出所有 未知数 .

    模板 高斯消元

    Code

    #include<bits/stdc++.h>
    #define reg register
    
    const int maxn = 105;
    
    int N;
    double A[maxn][maxn];
    double Ans[maxn];
    
    int main(){
            scanf("%d", &N);
            for(reg int i = 1; i <= N; i ++)
                    for(reg int j = 1; j <= N+1; j ++)
                            scanf("%lf", &A[i][j]);
            for(reg int i = 1; i <= N; i ++){
                    int max_id = i;
                    for(reg int j = i+1; j <= N; j ++)
                            if(fabs(A[max_id][i]) < fabs(A[j][i])) max_id = j;
                    if(fabs(A[max_id][i]) < 1e-14){ printf("No Solution
    "); return 0; } 
                    std::swap(A[i], A[max_id]);
                    double tmp = A[i][i];
                    for(reg int j = i; j <= N+1; j ++) A[i][j] /= tmp;
                    for(reg int j = i+1; j <= N; j ++){
                            tmp = A[j][i];
                            for(reg int k = i; k <= N+1; k ++)
                                    A[j][k] -= A[i][k] * tmp;
                    }
            }
            for(reg int i = N; i >= 1; i --)
                    for(reg int j = i+1; j <= N; j ++) A[i][N+1] -= A[i][j]*A[j][N+1];
            for(reg int i = 1; i <= N; i ++) printf("%.2lf
    ", A[i][N+1]);
            return 0;
    }
    
    
    
  • 相关阅读:
    iOS真机调试配置
    C语言-09-文件操作
    C语言-08-预处理器
    UILabel和NSAttributedString那些事
    验证码倒计时按钮
    验证码/密码按位分割输入框
    CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
    UISearchBar改变搜索框的高度
    二维码名片的生成与读取
    设计模式-02-单例
  • 原文地址:https://www.cnblogs.com/zbr162/p/11822622.html
Copyright © 2020-2023  润新知