高斯消元原理
来源:互联网 发布:openstack网络 编辑:程序博客网 时间:2024/05/01 01:15
高消一直是ACM中高层次经常用到的算法,虽然线性代数已经学过,但高消求解的问题模型及高消模板的应用变化是高消的最复杂之处。
先介绍一下高消的基本原理:引入互联网czyuan的帖子:
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。
高斯消元法的原理是:
若用初等行变换将增广矩阵
所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。
以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。
首先,先介绍程序中高斯消元法的步骤:
(我们设方程组中方程的个数为equ,变元的个数为var,注意:一般情况下是n个方程,n个变元,但是有些题目就故意让方程数与变元数不同)
1.
2.
枚举k从0到equ
3.
①
当方程中出现(0,
②
条件是k
③
条件是k
首先,自由变元有var
以上介绍的是求解整数线性方程组的求法,复杂度是O(n3)。浮点数线性方程组的求法类似,但是要在判断是否为0时,加入EPS,以消除精度问题。
以上czyuan帖子的基本原理就介绍完了。
--------------------------我对上面的步骤做一下说明-------------------------------------------
高斯消元求解的详细步骤:
1)
很多人认为这就行了,但有时存在如下情况:
消元后的矩阵化为行阶梯,上面主对角线元素的主元并没有连续,还应将第4列和第3列交换才行。
这是网络上很多的模板所没有的,也是造成关键时候出错的根源所在。
所以模板还要增加对列进行检查的代码。
2)
3)
啥是回带?
1
0
0
0
(行阶梯)
因为4个变量,才3行,4-3=1>
如果第4行不都是0,回带可以求出这个唯一解。如下:
X1
0
0
0
最后1行,有x4=b4;
第3行:
这就是回带。
回带总结:从最后1行,逐一往回带,从最后1行代回到第1行。
最关键的时候到了:当无穷多解时,最后几行都是0;没法回带;而某些题目在无穷多解时还要你求最小或最优解,没办法,就得枚举最后行为0的那几个解;
如:
可见最后的x4没法解,如果题中给定x4的范围,那就枚举x4,然后回带;枚举1次x4就回带1次得到一组(x1
- 高斯消元原理
- 高斯消元原理
- 高斯消元原理
- 原理
- 原理
- 原理
- 加法原理乘法原理
- Win32ASM原理
- win32asm原理
- 编译原理
- 创新原理
- 数字签名原理
- 变速箱原理
- 搜索引擎原理
- 乱码原理
- 搜索引擎原理
- 搜索引擎原理
- 彼得原理
- 【USACO题库】1.2.3 Name That Number命名那个数字
- 【数论】hdu1402 A * B Problem Plus(FFT)
- React+Webpack+ES6从环境搭建到HelloWorld
- 【转】程序包com.sun.image.codec.jpeg不存在 问题的完美解决
- NFC
- 高斯消元原理
- MFC 中 CString 如何转换为 LPCWSTR
- HDU 2085 核反应堆
- 与CNTK见面
- PSring MVC 学习总结(二)——控制器定义与@RequestMapping详解
- java过滤特殊字符
- css 图标定位二三事
- 利用Ajax FormData实现无刷新带进度条文件上传
- C#+Arcengine调用GP进行裁剪