高斯-若尔当 消元法小结

突然发现经过了很久的文化课学(tao)习(ke),自己忘了高斯消元(我太弱了

 

所以今天就来学(gao一下这个东西

 

高斯-若尔当(约旦)消元法!

(以下内容转自某度)

1
数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。<br>但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有<br>过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。当用<br>于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及<br>未知数。亦有一些方法特地用来解决一些有特别排列的系数的方程组 [1]  。

好强!

不过,这个算法马起来感觉简单很多

于是我这个蒟蒻就偷个懒吧

大概思路就是这样的:

  1.找一个“主元”,(显然这个zhu元应该是没选择过的未知数)

  2.把此方程中的主元系数化一

  3.通过加减消元,把其他方程中这个未知数全消去

  4.重复上述步骤,直到得到一个对角矩阵(这里与高斯消元的三角矩阵不同)

然而其实在做的过程中,是将左边的矩阵化成了单位矩阵,此时右边的矩阵就是原矩阵的腻矩阵辣!

   这里纸位置不够了,我就不写了/doge(咕咕咕

 把代码留在这吧: (毒奶以后用远不考)

 题目来源:洛谷P3389【模板】睾♂斯消元法

复制代码
#include<bits/stdc++.h>
using namespace std;
double a[110][110];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n+1;++j)
        {
            scanf("%lf",&a[i][j]);
        }
    }
    for(int i=1;i<=n;++i)
    {
        int maxx=i;
        for(int j=i+1;j<=n;++j)
            if(fabs(a[i][j])-fabs(a[maxx][j])) maxx=j;
        for(int j=1;j<=n+1;++j)
            swap(a[maxx][j],a[i][j]);
        if(!a[i][i]) 
        {
            cout<<"No Solution"<<endl;
            return 0;
        }
        else
        {
            for(int j=1;j<=n;++j)
            {
                if(i==j) continue;
                double temp=a[j][i]/a[i][i];
                for(int k=i+1;k<=n+1;++k)
                {
                    a[j][k]-=a[i][k]*temp;
                }
            }
            a[i][n+1]/=a[i][i];
        }
    }
    for(int i=1;i<=n;++i)
    {
        printf("%.2lf\n",a[i][n+1]);
    }
}
复制代码

 

posted @   ZzTzZ  阅读(880)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示