首页 > 其他分享 >高斯消元

高斯消元

时间:2023-09-24 15:56:26浏览次数:34  
标签:ch 矩阵 高斯消 include 元法 define

问题

求解线性方程组

算法思想

高斯消元法的实现主要分为两种,一种是普通的高斯消元,将系数矩阵消为上三角矩阵,再一步步回代求出所有未知数;第二种是高斯-约旦消元法,将系数矩阵消为对角矩阵,不需要回代即可直接解出未知数,这里展示第二种做法。

代码实现

例题:P3389 【模板】高斯消元法

#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<string>
#include<cstdio>
#include<queue>
#include<cmath>

#define il inline
#define ll long long
#define db double

using namespace std;

il int read(){
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48); ch=getchar();}
    return x*f;
}

const int N=110;

int n;
db a[N][N];

int Guass(){
    for(int i=1;i<=n;i++){
        int mx=i;
        for(int j=i+1;j<=n;j++){
            if(fabs(a[mx][i])<fabs(a[j][i])) mx=j;
        }
        for(int j=1;j<=n+1;j++) swap(a[mx][j],a[i][j]);
        if(!a[i][i]) return 0;
        for(int j=1;j<=n;j++){
            if(i!=j){
                db d=a[j][i]/a[i][i];
                for(int k=i+1;k<=n+1;k++){
                    a[j][k]-=a[i][k]*d;
                }
            }
        }
    }
    return 1;
}

int main(){
    n=read();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            a[i][j]=read();
        }
    }
    int f=Guass();
    if(!f) printf("No Solution");
    else{
        for(int i=1;i<=n;i++){
            printf("%.2lf\n",a[i][n+1]/a[i][i]);
        }
    }
    return 0;
}

标签:ch,矩阵,高斯消,include,元法,define
From: https://www.cnblogs.com/imyhy/p/17726075.html

相关文章

  • 浅谈高斯消元法
    2023.6.16:发布2023.8.29:修缮,加上自己觉得通俗易懂的理解,更新矩阵求逆。高斯消元高斯消元可以用于线性方程组求解或者行列式计算,求矩阵的逆等等,也算是比较基础的一个思想。消元法定义消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其带入到另一方程中,......
  • 【学习笔记】简单数论-高斯消元与线性空间
    友情提示本博客内部分内容因缺乏样例,可能晦涩难懂,建议参考蓝书或者数论小白都能看懂的线性方程组及其解法。线性方程组线性方程组是由\(M\)个\(N\)元一次方程共同构成的。线性方程组的所有系数可以写成一个\(M\)行\(N\)列的系数矩阵,再加上每个方程等号右侧的常数,可......
  • 高斯消去法python代码
    高斯消去法实现多元线性方程组求解1.流程概述高斯消去法(GaussianElimination)是一种用于求解多元线性方程组的常用方法。它通过将方程组表示为增广矩阵的形式,然后进行一系列的行变换,将增广矩阵转化为上三角矩阵,最后利用回代法求解方程组。以下是高斯消去法的流程:步骤操作......
  • 高斯消元法
    高斯消元法-约当消元法\(m\)个一次方程,\(n\)个变量,可以得到\(m\)行\(n+1\)列的增广矩阵将增广矩阵通过行初等变换为行最简形我们观察增广矩阵,线性方程组的解有\(3\)种情况唯一解有无穷多组解无解高斯-约旦消元法,是高斯消元法的一种,消元的结果是一个简化阶梯矩阵、消......
  • 高斯消元法求线性方程组
    高斯消元法作用可以快速求解n元线性方程组:\[\begin{cases}a_{11}x_1+a_{12}x_2+a_{13}x_3+\dots+a_{1n}x_n=b_1\\a_{21}x_1+a_{22}x_2+a_{23}x_3+\dots+a_{2n}x_n=b_2\\\dots\\a_{n1}x_1+a_{n2}x_2+a_{n3}x_3+\dots+a_{nn}x_{n}=b_n\\\end{cases}\]思路利用线性代数......
  • 【高斯消元】 HDOJ 5257 翻转游戏
    如果第一行的状态确定了,那么矩阵的所有状态也会随之确定。。。那么我们就将第一行写成变量,这样能够推出矩阵的m个方程。。。然后对于k,可以写出k个限制方程。。因此我们总共列出m+k个方程,高斯消元,bitset优化即可。。。#include<iostream>#include<queue>#include<stack>#inclu......
  • 「学习笔记」高斯消元
    简单说:高斯消元就是我们初中学的解方程组时用的加减消元法和代入消元法,只是高斯这个人最后总结了一下过程给定方程组\[\left\{\begin{aligned}3x+2y+z=10\quad&(1)\\5x+y+6z=25\quad&(2)\\2x+3y+4z=20\quad&(3)\\\end{aligned}\right.\]我们用......
  • [浅谈] 高斯消元
    \(\color{purple}\text{P3389【模板】高斯消元法}\)所谓高斯消元就是解个\(n\)元一次方程。用矩阵记录每个方程的系数满足第\(i\)个方程:\(a[i][1]x_1+a[i][2]x_2+\dots+a[i][n]x_n=a[i][n+1]\)然后从消元,一个一个项消元,如消除\(i\)项。先选定一个此项系数绝对值最大的......
  • Codeforces Gym 103119B - Boring Problem(高斯消元)
    考虑建出AC自动机,朴素做法是高斯消元,\(f_i=\sum\limits_{j=0}^{k-1}f_{to_{i,j}}p_j+1\),复杂度\(O(n^3m^3)\),不能接受。考虑优化高斯消元的过程,我们定义以下节点为“关键点”:根节点对于一个trie树(也就是未经过AC自动机getfail操作得到的树)上有超过两个儿子的节点\(x......
  • 高斯消元学习笔记
    一、前言讲一下高斯-约旦消元法。它适用于处理\(n\)元1次方程组。误差较小并且好写。二、步骤主要用消元的方式求解,就是一列列处理,每一次处理消掉这一列所有其它的未知数。处理第\(i\)列:找到当前这一列的所有系数的绝对值的最大值,确定在第\(x\)行。如果这一列全......