高斯消元
简单的讲,高斯消元就是模拟小学生解多元一次方程组的过程。只不过这种方法更有规律可循,更适合计算机去解决。
对于方程组
{k11x+k12y+k13z=d1k21x+k22y+k23z=d2k31x+k32y+k33z=d3}
我们把它保存为一个增广矩阵, 这个矩阵的意思就是每个未知数在每个方程中的系数,添上一列为未知数与系数积的和。
{k11k12k13|d1k21k22k23|d2k31k32k33|d3}
然后通过以下几种简单的操作,将这个矩阵变换
1. 将矩阵的某一行同时乘一个数
2. 将矩阵的某一行同时减去另一行
3. 交换两行的顺序(即交换方程组中两个方程的顺序)
通过这些操作,我们的目标是将矩阵变换为如下的形式 (就简称三角矩阵吧)
{a11a12a13|d10a22a23|d200a33|d3}
这样,可知 z=d3a33
将 z代入 2 式又知 y=d2−a23za22
将 y,z带入 1 式又知 x=d1−a13z−a12ya11
这个过程也可以称为 “回代”
然而,如何获得一个三角矩阵呢?
这其实就是我们常用的加减消元法,对于 A 式和 B 式,通过给 A 式乘一个数,使两式主元系数相同,再由 B 式减去 A 式即可。这样原矩阵可以变成:(用 2,3 式减去 1 式)
{xxx|x0xx|x0xx|x}
进而变成 (用 3 式减去 2 式)
{xxx|x0xx|x00x|x}
由此获得了一个三角矩阵。这个过程也称为 “消元”。
总结一下,高斯消元的总体过程就是:
消元->回代 (废话)
但是这也会遇到几个问题:1. 由于不断的乘除操作,未知数系数的误差会逐渐增大,以至结果十分离谱。2. 如果方程无解或有无数解,我们又该如何知道呢?
对于问题 1,我们可以采用分子分母表示法计算,或用实数计算时采用 “列主消元”,就是每次用主元(要消的元)最大的方程去减其余的方程。请自行百度。
对于问题 2,我们分情况讨论
1. 可以变换成为严格的三角矩阵:有唯一解
如果无法构造出严格的三角矩阵,那么至少可以构造出如下的阶梯矩阵。
{xxxx…x|x10xxx…x|x2000x…x|x3……………x|…0000…x|xn−20000…0|xn−10000…0|xn}
3 条评论
彭书博 · 2017年6月23日 8:23 下午
%%%%%%%dalao%%%%%%%%
konnyakuxzy · 2017年6月1日 10:25 上午
哇好高端。。。
不怎么看得懂啊 Orz。。。
还是看您的例题去算了
【题解】【模板】高斯消元法 高斯消元 LUOGU – 3389 | K-XZY · 2017年6月21日 10:01 下午
[…] boshi:http://k-xzy.cf/?p=1398 […]