zoukankan      html  css  js  c++  java
  • 高斯消元 [模板]

    高斯消元

    简介

    高斯消元是用来解线性方程组的一种 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;
    }
    
    
    
  • 相关阅读:
    C# vb实现浮雕特效滤镜效果
    一张图看懂SharpImage
    C#控制操控操作多个UVC摄像头设备
    C#读写修改设置调整UVC摄像头画面-缩放
    继承多态绕点 Java篇
    继承多态绕点 C#篇
    lock关键字理解
    关于C#迭代器
    关于排列组合中组合结果
    C#与Java中相等关系
  • 原文地址:https://www.cnblogs.com/zbr162/p/11822621.html
Copyright © 2011-2022 走看看