• 高斯消元 [模板]


    高斯消元

    简介

    高斯消元是用来解线性方程组的一种 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;
    }
    
    
    
  • 相关阅读:
    form表单介绍
    if条件语句
    表格.html
    列表.html
    CSS Js链接HTML文件
    DQL
    mysql介绍
    第一次接触mysql
    逻辑运算、作用域问题、DOM
    Js数据类型具体分析
  • 原文地址:https://www.cnblogs.com/zbr162/p/11822622.html
Copyright © 2020-2023  润新知