线性方程组的数值解法.ppt
《线性方程组的数值解法.ppt》由会员分享,可在线阅读,更多相关《线性方程组的数值解法.ppt(119页珍藏版)》请在三一办公上搜索。
1、第4章 线性方程组的数值解法,4.1 引言,在工程技术和科学研究中,很多科学计算的问题往往直接或间接地归结为求解线性代数方程组。常见的线性代数方程组是方程个数和未知量个数相同的阶线性方程组,它的一般形式是 其中,、为常数,为待求的未知量,(4.1),用矩阵形式表示是 其中:一般。当系数矩阵 非奇异(行列式不为零),即 时,方程组(4.1)有惟一解。,对于线性代数方程组的解法大致可分为两类,即直接解法和迭代解法。直接解法是指在假设没有舍入误差的条件下,经过有限次算数运算就能求得方程组精确解的方法。然而实际计算中由于舍入误差的影响,这类方法也只能求得近似解;迭代解法就是从一个已知的初始近似值开始,
2、按一定的法则逐步求出解的各个更准确的近似值的方法,它是用某种极限过程去逐步逼近精确解的方法。在本章中主要介绍高斯消去法、列主元高斯消去法、约当消去法、三角分解法等直接解法以及雅可比、高斯赛德尔和超松弛等迭代解法。,4.2 高斯(Gauss)消去法,4.2.1 高斯消去法的基本思想 高斯消去法是最古老的求解线性代数方程组的方法之一,高斯消去法是消去法的一种特殊形式,它包括消元与回代两个过程。,设,对行计算乘数用 乘以第 个方程后加到第 个方程到第 个方程中,消去 第个方程到第 个方程的未知数,得到,只要设 就可以继续进行消元,直到经过 次消元后,将线性方程组(4.1)化为(4.2)所示上三角方程
3、组(以上计算过程称为消元过程)。(4.2)消元过程结束后,只要设,对上三角方程组就可以自下而上逐步回代,依次求得,即,4.2.2 实现高斯消去法的基本步骤(1)输入方程组的阶数 n,系数矩阵A和右端常数矩阵b。(2)消元过程:设,对,计算:(3)回代过程(4)输出方程组的解。(5)结束。,例4.1 用高斯消去法求解线性方程组,式中,#define N 3/*N为方程组系数矩阵的阶数*/int Gauss(float aNN,float bN)int i,j,k,flag=1;float t;for(i=0;iN-1;i+)if(aii=0)flag=0;break;else for(j=i+1
4、;jN;j+)/*消元过程开始*/t=-aji/aii;bj=bj+t*bi;for(k=i;kN;k+)ajk=ajk+t*aik;return(flag);,void zg_matric(float aNN,float bN)/*输出增广矩阵*/int i,j;for(i=0;iN;i+)for(j=0;jN;j+)printf(%10f,aij);printf(%10f,bi);printf(n);printf(n);,main()static float aNN=0.1,0.3,0.5,3.0,1.0,-1.0,3.0,5.0,4.0;float bN=1.0,5.0,3.0;floa
5、t xN=0,0,0;int i,j,flag;zg_matric(a,b);flag=Gauss(a,b);if(flag=0)/*无解*/printf(Gauss method does not run.);else/*回代过程开始*/xN-1=bN-1/aN-1N-1;for(i=N-2;i=0;i-)xi=bi;for(j=i+1;jN;j+)xi=xi-aij*xj;xi=xi/aii;for(i=0;iN;i+)/*输出方程组的解*/printf(x%d=%11.7fn,i+1,xi);,程序运行结果:0.100000 0.300000 0.500000 1.000000 3.00
6、0000 1.000000-1.000000 5.000000 3.000000 5.000000 4.000000 3.000000 x1=5.4583359 x2=-6.5416689 x3=4.8333344,4.3 列主元高斯消去法,4.3.1 列主元高斯消去法的基本思想 高斯消去法,一直是在假设 的情况下进行的,并且是按照方程组中各方程所给定的顺序进行的,所以这种方法又称为顺序消去法。但当 时,消元过程就无法进行。另外,即使,但其绝对值很小时,用它作除数时,根据数值运算中“用绝对值很小的数做除数,舍入误差会增大,而且严重影响计算结果的精度”的原则,这种方法在一定程度上也具有局限性。为
7、了克服这一局限性,产生了列主元高斯消去法。这种消去法在高斯消去法每次进行消元之前先选取绝对值最大的元素作为主元素(位于主对角线上的在消去过程中用作除数的元素称为主元素,简称主元)进行消去。,列主元高斯消去法,是在高斯消去法的消去过程中,第 步()增加选主元操作,成为:首先在第 列中,从 中选出绝对值最大的元素,经过行交换(把绝对值最大者所在的行与第 行交换)把绝对值最大的元素交换到 的单元中;然后作Gauss消去法的消去过程中第 步,初等变换产生第 列的 个零元素。回代过程与Gauss消去法的回代过程相同。以上就是列主元高斯消去法的操作步骤。由于,可证明,中至少有一个元素不为零,从理论上保证了
8、列主元高斯消去法的可行性。,4.3.2 实现列主元高斯消去法的基本步骤(1)输入方程组的阶数n,系数矩阵A和右端常数矩阵b。(2)列主元素 对,从 中选出绝对值最大的元素,将 行和 行交换后,再作第 次消元操作。(3)消元过程:对,计算:,(4)回代过程:(5)输出方程组的解。(6)结束,例 4.2 用列主元高斯消去法求解线性方程组,式中,void ColGauss(float aNN,float bN)float t,max_fab;int i,j,k,l;for(i=0;imax_fab)l=j;max_fab=fabs(aji);if(il)/*交换i、l两行*/t=bi;bi=bl;b
9、l=t;for(j=i;jN;j+)t=aij;aij=alj;alj=t;for(j=i+1;jN;j+)/*消元过程开始*/t=-aji/aii;bj=bj+t*bi;for(k=i;kN;k+)ajk=ajk+t*aik;,void zg_matric(float aNN,float bN)/*输出增广矩阵*/int i,j;for(i=0;iN;i+)for(j=0;jN;j+)printf(%10f,aij);printf(%10f,bi);printf(n);printf(n);,#include#define N 4/*N为方程组系数矩阵的阶数*/main()float aNN=
10、1.003,0.333,1.504,-0.333,-2.011,1.455,0.506,2.956,4.329,-1.952,0.006,2.087,5.113,-4.004,3.332,-1.112;float bN=3.005,5.407,0.136,3.772;float xN=0,0,0,0;int i,j;zg_matric(a,b);ColGauss(a,b);xN-1=bN-1/aN-1N-1;/*回代过程开始*/for(i=N-2;i=0;i-)xi=bi;for(j=i+1;jN;j+)xi=xi-aij*xj;xi=xi/aii;for(i=0;iN;i+)/*输出方程组的
11、解*/printf(x%d=%11.7fn,i+1,xi);,程序运行结果:1.003000 0.333000 1.504000-0.333000 3.005000-2.011000 1.455000 0.506000 2.956000 5.407000 4.329000-1.952000 0.006000 2.087000 0.136000 5.113000-4.004000 3.332000-1.112000 3.772000 x1=-0.325438 x2=0.327990 x3=2.372718 x4=1.040163,列主元高斯消去法,虽然保证了当前的主元素 是第 列中 以下元素中的
12、绝对值最大者,但还不能保证它是同一行(既第 行)中的绝对值最大者。因此,经过列选主元后,虽然避免了 的情况发生,但其计算过程还是不稳定的,不适于求解较大规模的线性方程组,因而这种方法在一定程度上也具有局限性。为了克服这一局限性,产生了全主元高斯消去法。列主元高斯消去法当变换到第 步时,从系数矩阵的右下角 阶子矩阵中选取绝对值最大的元素,然后通过行变换与列变换将它交换到主元素 的位置上。回代过程与Gauss消去法的回代过程相同,请读者参考有关书籍。,4.4 约当(Jordan)消去法,4.4.1 约当消去法的基本思想 约当(Jordan)消去法是一种无回代过程的求解线性方程组的直接解法,基本思想
13、是,将线性方程组的系数矩阵通过初等变换,化为一个等价的对角阵(只有主对角线上的元素不为0,其余元素均为0),从而方便地求出方程组的解。,假如我们将此增广矩阵通过次初等变换,化成下列等价形式(式中每个元素右上角圆括号内的数字表示消去计算的次数)由此可立即求得方程组的解:,4.4.2 实现约当消去法的基本步骤,例 4.3 用约当消去法求解线性方程组,式中,,,#define N 3/*N为方程组的系数矩阵的阶数*/int joydan(float aNN+1)float r;int i,j,k,flag=1;for(k=0;kN;k+)if(akk=0)/*当akk为0时,约当消去法不能进行*/f
14、lag=0;break;else for(i=0;iN;i+)r=aik/akk;if(i!=k)if(aik!=0)for(j=0;j=N;j+)aij=aij-r*akj;return(flag);,void print_matric(float aNN+1)/*输出增广矩阵*/int i,j;for(i=0;iN;i+)for(j=0;j=N;j+)printf(%12f,aij);printf(n);printf(n);,main()float aNN+1=1,-1,1,-4,5,-4,3,-12,2,1,1,11;float xN;int i,k;clrscr();print_mat
15、ric(a);/*输出增广矩阵的初始数据*/k=joydan(a);if(k=1)/*当k=1时约当消去法正常进行*/print_matric(a);/*输出初等变换后的增广矩阵*/for(i=0;iN;i+)xi=aiN/aii;printf(x%d=%11.6fn,i+1,xi);/*输出方程组的解*/else/*当k=0时输出约当消去法不能进行的信息*/printf(Joydan method does not run!n);,程序运行结果:1.000000-1.000000 1.000000-4.000000 5.000000-4.000000 3.000000-12.000000 2
16、.000000 1.000000 1.000000 11.000000 1.000000 0.000000 0.000000 3.000000 0.000000 1.000000 0.000000 6.000000 0.000000 0.000000 5.000000-5.000000 x1=3.000000 x2=6.000000 x3=-1.000000 约当消取法能否进行,取决于每一步能否满足,否则约当消取法将无法进行。另外,即使,但其绝对值很小时,仍用它作除数时,就会导致舍入误差增大,严重影响计算结果的精度。为解决这一问题,可以采用选主元的技术进行计算,具体算法可参考有关书籍。,4.5
17、 三角分解法,三角分解法是高斯消去法的一种变形解法。用高斯消去法去解 阶线性方程组,经过 次消元之后,得出一个等价的上三角形方程组,对上三角形方程组用逐步回代的方法就可以求出解来。上述消元过程也可以通过矩阵分解来实现。,4.5.1 三角分解法的基本思想 设 阶线性方程组(4.1)的系数矩阵 非奇异,并且系数矩阵,能分解为两个三角形矩阵之积,即(4.3)其中 为一个下三角阵,为一个上三角阵,那么方程组 就化为(4.4)从而使问题转化为求解两个简单的三角形方程组:(4.5),矩阵 分解为两个矩阵、之积,一般不是惟一的,但规定了、的形式之后,由矩阵的乘法运算法则知,这种分解便是惟一的。由于 和、的形
18、式不同,就得到矩阵的不同解法,相应地就有解线性代数方程组的几种解法.本节介绍直接三角分解法、乔里斯基(Cholesky)分解法、追赶法和对称高斯法(分解法)。,4.5.2 直接三角分解法 设线性方程组(4.1)的系数矩阵非奇异,并且系数矩阵,能分解为同阶的单位下三角形矩阵和同阶的上三角矩阵之积,或能分解为同阶的下三角形矩阵和同阶的单位上三角矩阵之积,即写成矩阵元素的形式如下:,或 则称为直接三角分解法。将矩阵 分解为 时,当 是单位下三角形矩阵,是上三角矩阵时,称为Dolittle分解;当 是下三角形矩阵,是单位上三角矩阵时,称为Courant分解。Dolittle分解法和Courant分解法
19、的基本思想相同,本章只介绍Courant分解法。,4.5.3 实现Courant分解法的基本步骤,#define N 3/*N为方程组系数矩阵的阶数*/void Lu(float aNN,float LNN,float UNN)/*LU分解*/int i,j,k;for(k=0;kN;k+)for(i=k;iN;i+)/*计算L矩阵的第k列元素*/Lik=aik;for(j=0;j=k-1;j+)Lik-=(Lij*Ujk);for(j=k+1;jN;j+)/*计算U矩阵的第k列元素*/Ukj=akj;for(i=0;i=k-1;i+)Ukj-=(Lki*Uij);Ukj/=Lkk;,void
20、 solve(float bN,float LNN,float UNN,float xN)int j,k;float yN;for(k=0;k=0;k-)/*计算Ux=y中的x*/xk=yk;for(j=k+1;jN;j+)xk=xk-Ukj*xj;,void zg_matric(float aNN,float bN)/*输出增广矩阵*/int i,j;for(i=0;iN;i+)for(j=0;jN;j+)printf(%10f,aij);printf(%10f,bi);printf(n);printf(n);,main()static float aNN=1,2,-1,1,-1,5,4,1
21、,-2;float bN=3,0,2;float xN=0,0,0;float UNN=1,0,0,0,1,0,0,0,1;float LNN;int i;zg_matric(a,b);Lu(a,L,U);solve(b,L,U,x);for(i=0;iN;i+)/*输出方程组的解*/printf(x%d=%11.7fn,i+1,xi);,程序运行结果:1.000000 2.000000-1.000000 3.000000 1.000000-1.000000 5.000000 0.000000 4.000000 1.000000-2.000000 2.000000 x1=0.2500000 x
22、2=1.5000000 x3=0.2500000,在直接三角分解法中计算时,如果分母(甚至可能为零)绝对值很小,仍用它作除数时,就会导致舍入误差增大,严重影响计算结果的精度。为解决这一问题,可以配合按列选主元的技术进行计算,具体算法可参考有关书籍。,4.5.4 乔里斯基(Cholesky)分解法 在工程和科学计算中,有时归结为求一个特殊的线性代数方程组,例如系数矩阵是一个对称正定矩阵,为此,这里介绍系数矩阵为对称正定矩阵的方程组的三角解法乔里斯基分解法。,对 阶线性方程组,当系数矩阵 为对称正定时可以惟一地分解为,其中 为上三角矩阵。即写成矩阵元素的形式如下:且。,4.5.5 实现乔里斯基分解
23、法的基本步骤,实现乔里斯基分解法的NS图,例 4.5 用乔里斯基分解法求解线性方程组,式中,#include#define N 4/*N为方程组系数矩阵的阶数*/void chodec(float aNN,float lNN)int i,j,k;float s;for(i=0;iN;i+)li0=ai0/sqrt(a00);for(i=1;iN;i+)s=0.0;for(k=0;k=i-1;k+)s=s+lik*lik;lii=sqrt(aii-s);for(j=i+1;jN;j+)s=0.0;for(k=0;k=i-1;k+)s=s+ljk*lik;lji=(aji-s)/lii;,void
24、 solve(float aNN,float bN,float xN)int i,j,k;float s;for(k=0;k=0;k-)s=bk;for(j=k+1;jN;j+)s-=ajk*xj;xk=s/akk;,void zg_matric(float aNN,float bN)/*输出增广矩阵*/int i,j;for(i=0;iN;i+)for(j=0;jN;j+)printf(%10f,aij);printf(%10f,bi);printf(n);printf(n);,main()static float aNN=1,2,1,-3,2,5,0,-5,1,0,14,1,-3,-5,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性方程组 数值 解法

链接地址:https://www.31ppt.com/p-5008350.html