

线性方程组的直接解法——Gauss消去法 - WeShiko睡大觉
source link: https://www.cnblogs.com/wsk2333/p/17013337.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

考虑线性方程组
其中,A=(aij)n×n,b=[b1,b2,⋯,bn]T。在线性代数的课程中,我们已经学习过Gauss消元法,具体操作是将矩阵A转化为“阶梯型”矩阵。为方便起见,本文仅仅讨论系数矩阵非奇异的方程组,此时,目标是将矩阵A转化为上三角矩阵,再执行回代过程,即可给出方程组的解。本文将给出在计算机上的具体操作及实例代码。
一、基本Gauss消去法
我们仅仅讨论对矩阵第一列的操作,剩余的操作可以以此类推,因而不再赘述。
在执行Gauss消去法时,我们将第一列对角元以下的元素全部变为零。记第一列消元操作后的增广矩阵为[A(1),b(1)],容易知道
观察到重复出现的结构ai1a11,我们记它为li1,称为消元因子,并将它存储在原来ai1的位置。在计算的过程中,先计算消元因子并存储在相应位置,再执行后续的算法。
对于后续部分的运算,在第k步,只要对矩阵A(k−1)(k:n,k:n)执行相同操作即可。
二、列主元Gauss消去法
在执行Gauss消元法的过程中,如果akk(k−1)相对于其他元素绝对值较小,则会产生较大的舍入误差,影响计算精度,为此,我们引入了列主元Gauss消去法,基于交换矩阵的行不影响线性方程组的解。
记执行完k-1步消元后的增广矩阵为[A(k−1),b(k−1)]。考虑第k列对角元及其以下的部分。选择绝对值最大的元所在行,与当前行执行行交换,再进行Gauss消元法。
三、计算实例
用列主元Gauss消去法解以下线性方程组:
#include <iostream> #include <math.h> using namespace std; int main() { double A_Extended[3][4]={0.5,1.1,3.1,6,2,4.5,3.6,0.02,5,0.96,6.5,0.96}; double X_solution[3]; for (int i=0;i<=2;i++) { int n=i; for (int p=i+1;p<=2;p++) { if (fabs(A_Extended[p][i])>fabs(A_Extended[n][i])) { n=p; } } for (int p=i;p<=2+1;p++) { double k=A_Extended[n][p]; A_Extended[n][p]=A_Extended[i][p]; A_Extended[i][p]=k; } for (int p=i+1;p<=2;p++) { A_Extended[p][i]=-A_Extended[p][i]/A_Extended[i][i]; for (int pco=i+1;pco<=2+1;pco++) { A_Extended[p][pco]=A_Extended[p][pco]+A_Extended[p][i]*A_Extended[i][pco]; } } } X_solution[2]=A_Extended[2][3]/A_Extended[2][2]; for (int i=1;i>=0;i--) { double sum=0; for (int k=2;k>i;k--) { sum=sum+A_Extended[i][k]*X_solution[k]; } X_solution[i]=(A_Extended[i][3]-sum)/A_Extended[i][i]; } cout<<X_solution[0]<<" "<<X_solution[1]<<" "<<X_solution[2]<<endl; return 0; }
__EOF__
Recommend
-
47
系统设计的万能解法:SNAKE原则
-
62
“还记得八皇后的解法吗?” “上个世纪的事情,不记得了。” “…… 现在回忆一下?” “开会,回头说。” “ fuck u ” “ u shit ” 我有一个C++基友,这么称呼是因为他入行时用的是C
-
46
2B运营需要在每一个业务环节提供给用户专业精准的内容和服务,帮助他们选择与成长,最终实现收益与口碑的共赢。 2018年,个体用户流量接近天花板,产品互联网概念兴起,提出通过互联网大数据、云计算、智能终端以及网络优化等优势,提高跨行业协同的效率,重构制造...
-
28
好好的生活和工作,就是对逝去者最大的缅怀。 疫情仍旧没有结束,没有到放松的时候。请大家继续坚持。本人居家隔离中。 最近在做一件很好玩的事情,涉及到网络的基础知识。更具体一些的话,会涉及P2P的一些技...
-
7
约瑟夫问题的两个O(log n)解法 这个是学习编程时的一个耳熟能详的问题了: n个人(编号为0,1,...,n-1)围成一个圈子,从0号开始依次报数,每数到第m
-
13
LeetCode Best Time to Buy and Sell Stock IV(k不重叠最大子段和)线性解法 Best Time to Buy and Sell Stock IV...
-
14
多元一次方程组,又称为线性代数方程组。在数值分析领域里有很多算法都会用到线性代数方程组的求解,比如三次样条曲线拟合时用到的插值算法。求解线性代数方程组可以用高斯消元法,高斯消元法是一种代数的方法,其主要思想是通过对系数矩阵进行...
-
11
大规模线性方程组求解简史(上)清雨影2020年11月01日开始,禁止老实人评论这篇文章...
-
6
LaTex之方程组和等式对齐 2021年1月9日 / 11次阅读MathJax 本文总结如何使用LaTex语法编写漂亮的方程组,以及如何进行等式对齐。 如何写一个方程组: \begin{cases} 3x +...
-
16
V2EX › 问与答 想去法罗群岛养羊,有希望吗? str...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK