总结:高斯消元

news/2025/2/26 8:07:03/文章来源:https://www.cnblogs.com/nueryim/p/18735874

高斯消元

\(O(n^2m)\) 求解 \(n\)线性方程组 + 判断解的情况(可以是模意义下)
\(O(\frac{n^2m}{w})\) 求解 \(n\)异或方程组 + 判断解的情况


求解有唯一解的 \(n\)线性方程组

高斯消元基础

#1:高斯消元法

这里总结一下,对于一个有唯一解的增广矩阵,高斯消元分 5 步:

  1. 找主元
  2. 当前行的方程主元系数化为一
  3. 当前行以下的方程消去主元
  4. 如果还有别的主元,回到 1
  5. 对于消完的上三角矩阵一行行回带

版子:

inline void gauss()
{int i, j, k;double div;for (k = 1; k <= n; k ++){//1. 找主元int mi = k;for (i = k + 1; i <= n; i ++)if (fabs(g[i][k]) > fabs(g[mi][k]))mi = i;swap(g[mi], g[k]);//2. 将**当前行**的方程主元系数化为一div = g[k][k];for (j = k; j <= n + 1; j ++)g[k][j] /= div;//3. 将**当前行以下**的方程消去主元for (i = k + 1; i <= n; i ++){div = g[i][k];for (j = k; j <= n + 1; j ++)g[i][j] -= g[k][j] * div;}//4. 如果还有别的主元,回到 1}//5. 对于消完的上三角矩阵一行行回带for (k = n; k >= 1; k --){a[k] = g[k][n + 1];for (j = k + 1; j <= n; j ++)a[k] -= g[k][j] * a[j];}
}   

#2:高斯-约旦消元法

注意到高斯消元法只将当前行以下的方程消去主元,这使得最后消完为一个上三角矩阵,导致还要一行行回带

如果这里我们直接将除了当前行以外的所有行都消去主元,最后的结果为一溜斜着的 1,可以省去回带

总结一下即分 4 步:

  1. 找主元
  2. 当前行的方程主元系数化为一
  3. 除当前行以外的方程消去主元
  4. 如果还有别的主元,回到 1

版子:

inline void gauss_jordan()
{int i, j, k;double div;for (k = 1; k <= n; k ++){//1. 找主元int mi = k;for (i = k + 1; i <= n; i ++)if (fabs(g[i][k]) > fabs(g[mi][k]))mi = i;swap(g[k], g[mi]);//2. 将**当前行**的方程主元系数化为一div = g[k][k];for (j = 1; j <= n + 1; j ++)g[k][j] /= div;//3. 将**除当前行以外**的方程消去主元for (i = 1; i <= n; i ++){if (i == k)continue;div = g[i][k];for (int j = 1; j <= n + 1; j ++)g[i][j] -= g[k][j] * div;}//4. 如果还有别的主元,回到 1}//无需回带for (i = 1; i <= n; i ++)a[i] = g[i][n + 1];
}

求解不保证有唯一解的 \(n\) 元线性方程组

这里探讨一下什么情况会出现无解和有无数解:

  • 无解:解着解着发现形如 \(0=4\) 的神秘东西
  • 无数解:方程给的太少或消成了 \(0=0\) 的东西

做法:

高斯消元法与高斯-约旦消元法是一样的

如果出现上述任意情况会在某一列找不到主元,就去下一列找。

同时维护一个变量 \(c\) 为待消去的主元编号,即整个过程进行完后 \(c\sim n\) 的方程未知数系数全为 0;

if (g[mi][k] == 0)continue;
swap(g[c], g[mi]);/*
和模版一样
*/c ++;

最后根据是 \(0=0\) 的情况还是 \(0=?\) 的情况判断有无解

if (c <= n)
{for (; c <= n; c ++)if (g[c][n + 1] != 0){printf("No Solution\n");exit(0);}printf("Infinity Solution\n");exit(0);
}

求解方程数量不保证等于未知数数量的 \(n\) 元线性方程组。

设方程数量为 \(m\),则无论是高斯消元法还是高斯-约旦消元法的做法都一样

记得改变一些枚举变量的上界,并在判断解的情况时注意分讨即可

if (c <= max(n, m))
{for (; c <= m; c ++)if (g[c][n + 1] != 0){printf("No Solution\n");exit(0);}if (c <= n){printf("Infinity Solution\n");exit(0);}
}

求解模 \(p\) 意义下的 \(n\) 元线性方程组

\(p\) 为质数

这种情况下可以直接除法改逆元,做就好了

\(p\) 为合数

做除法时暴力对被除数加 \(p\) 知道能整除为止,这个过程的复杂度没有保证,一般这种题出题人会有说明


例题:

P3389 【模板】高斯消元法
P2455 [SDOI2006] 线性方程组

求解不保证有唯一解的 \(n\) 元线性方程组

UVA1564 Widget Factory
SP2883 WIDGET - Widget Factory

求解模 \(p\) 意义下方程数量不保证等于未知数数量的 \(n\) 元线性方程组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889945.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读DAMA数据管理知识体系指南05数据治理(中)

数据治理需支持业务战略,明确治理责任,评估能力,制定战略框架,参与变革与问题管理,确保法规遵从,通过监控和评估提升数据质量和治理效果。1. 规划组织的数据治理 1.1. 数据治理工作必须支持业务战略和目标1.1.1. 一个组织的业务战略和目标影响着组织的数据战略,以及数据…

记录绘制立体平面网格分块图像

绘制如下图所示的图片方法: ​​ 首先在drawio中为图片画好网格,如下图所示 ​​ 然后将该图片导出,(推荐导出为svg格式,无损清晰),将导出的图片导入PPT中 在PPT中通过开始=》形状效果=》三维旋转=》离轴 2:上​来将图片转换成立体效果。 ​​ ​​ 最后右键单击PPT中已…

开源一款数据转换扩展板-FreakStudio多米诺系列

数据转换板通过I2C接口进行信号采集和输出,支持最多16通道输入和2通道输出。具备860Hz采样率和50KHz输出频率,采用16位ADC和12位DAC芯片,适用于精确信号采集。小尺寸设计,支持堆叠级联。原文链接: FreakStudio的博客 摘要 数据转换板通过I2C接口进行信号采集和输出,支持最…

【CodeForces训练记录】Codeforces Round 1006 (Div. 3)

训练情况赛后反思 结束前打表看出来了 F 有一点进制的规律,太极限了来不及写了 A题 显然不合法的情况就是所有元素绝对值的和都比和的绝对值小,这种情况无论怎么凑都到不了 \(k\),剩下的就是把和均摊到值域上,除以值域向上取整就是答案点击查看代码 #include <bits/stdc…

西湖论剑2025Misc—cscs

西湖论剑2025cscs详解 Cobalt Strike流量主要是找beacon,主要以两种形式呈现 一小段shellcode(几百个字节),通常叫做stager shellcode,这段代码下载整个的beacon。 一个完全的beacon:一个可以反射性加载的PE文件 先来了解下cs流量的特征 cs流量特征: 1,基础特征:心跳包…

轻松驾驭Docker!Windows Docker Desktop部署Portainer全攻略

轻松驾驭Docker!Windows Docker Desktop部署Portainer全攻略 一、引言 在当今的软件开发领域,Docker 已经成为构建、部署和运行应用的标准之一。它通过容器化技术使得开发者可以轻松地打包应用程序及其依赖,并确保它们可以在任何环境中一致地运行。 为了更好地管理和监控这些…

部署 VS2022 驱动开发环境-解决无法编译驱动的问题

使用 VS2022 安装驱动开发环境,创建默认的驱动项目是无法直接编译出驱动的文件的,需要使用 NuGet 给项目安装【Microsoft.Windows.WDK.x64】1、下载安装 VS2022(最低支持的 WDK 版本:10.0.26100) 下载地址:https://visualstudio.microsoft.com/zh-hans/downloads 1.1 组件选…

web开发 辅助学习管理系统开发日记 day2

Q1:遇到的api返回结果数据封装的问题,在老版本的springboot中当实现类的类名和数据库中的类名不一致的是不会自动封装返回,因此返回结果值会显示null,但是在新版貌似已经会自动识别,所以我没有遇到该问题,如果遇到用手动结果映射的方法解决。Q2:在进行前后端联桥时,前端服…

右值引用和移动语义

右值引用(Rvalue reference)和移动语义(Move semantics) 左值(lvalue)和右值(rvalue)左值(也称为 locator value)是一个可以被修改的存储位置,指向内存中的某个位置 例子:变量、数组元素、解引用指针等判断左值的方法是:能够获得这个表达式的引用 或者取地址右值 …

【vulhub】redis 4-unacc (redis未授权访问)

渗透环境 攻击机: IP: 192.168.66.130(Kali) 漏洞收录于:vulhub/redis/4-unacc 涉及知识点:redis未授权访问 影响版本:redis 版本 < 6.x 漏洞的产生条件有以下两点:Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接…

再论支付账务

支付账务是金融领域中复杂且关键的一环,涉及资金流动、风险控制和业务效率等多个方面。本文从支付结算的专业视角出发,深入剖析了支付账务的核心逻辑,包括会计科目设置、对账结算流程以及账务核算的关键要点。学习账务的时候你是否经常有这些疑问“待结算和待清算是什么?为…

分享[清华大学DeepSeek教程全家桶]下载地址

干货分享,最新整理的清华大学DeepSeek教程全家桶,内容如下:内容展示下载地址🎁🎁 文末福利,后台回复[603]获取下载地址 📢📢 喜欢这篇文章?欢迎大家✨关注 ❤️点赞 ➡️转发 分享给那些需要的朋友!如果认为此文对您有帮助,别忘了支持一下哦!声明:本博客原创文…