高斯消元 [模板]

高 斯 消 元 高斯消元

简介

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

基本步骤

  1. 按顺序枚举 未知数 x x x, 在 没有使用过的方程 中选出 x x x 系数最大的方程. (为了减少误差)
  2. 将其移动到 i i i 行.
  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\n"); 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\n", A[i][N+1]);
        return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值