《数值分析知识内容 (6).pdf》由会员分享,可在线阅读,更多相关《数值分析知识内容 (6).pdf(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 3.2 高斯主元素消去法 用高斯消去法解bAx,其中A为非奇异矩阵,可能出现0)(kkka的情况,这时必须进行带行交换的高斯消去法.但在实际计算中即使0)(kkka但其绝对值很小时,用)(kkka作除数,会导致中间结果矩阵)(kA元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠(即算法数值不稳定).本节讨论高斯主元素消去法(Pivot Element).例 3 用高斯消去法解方程组.00.357.404.100.2,00.224.563.200.1,00.100.200.10120.0321321321xxxxxxxxx 解 方程组的精确解舍入到 3 位有效数字为:Tx)266.
2、0,476.0,645.0(*.利用高斯消去法求解(用具有舍入的 3 位浮点数进行计算).00.357.404.100.200.224.563.200.100.100.200.10120.0bA16432916603.811627.80000.100.200.10120.01673.833121ll 00.300.5003.811627.80000.100.200.10120.006.232l.解出Tx)60.0,197.0,25.0(.与精确解比较,这是一个很坏的结果.例 3 计算失败的原因,是用了一个绝对值较小的数(小主元)作除数,使消元的乘数较大,引起中间结果数量级严重增长,再舍入就使得
3、最后的计算结果不可靠.【注】(1)设bAx,其中A为n阶非奇异矩阵,可以应用高斯消元法求解.(2)消元过程中,即使0)(kkka,用小主元)()(/kkkkikikaal 作除数会导致计算中间结果数量级严重增长和舍入误差的累积、扩大,最后使得计算结果不可靠.(3)应避免采用小主元)(kkka;对一般的系数矩阵,最好保持乘数1ikl,因此,在高斯消去法中应引进选主元技巧,以便减少计算过程中舍入误差对求解的影响.3.2.1 列主元素消去法 列主元素消去法的基本思想:在每轮消元之前,选列主元素(绝对值最大的元素),使乘数1ikl.列主元素消去法的步骤:设已经完成第 1 步到第1k步的按列选主元、交换
4、两行、消 元计算,得到矩阵)()()()()()()2(2)2(2)2(2)2(22)1(1)1(1)1(1)1(12)1(11)()(,knknnknkkkkknkkknknkkkbaabaabaaabaaaabA.第k步计算如下:对于1,2,1nk,(1)选列主元素,即确定0i使)()(max0kiknikkkiaa;(2)如果0)(0kkia,则方程组解不唯一,或者A接近奇异矩阵,停止运算;(3)如果ki 0,则交换,bA第0i行与第k行元素;(4)消元计算:.,2,1,/,)()()1()()()()()1(nkkjiblbbaalalaakkikkikikkkkikikkkjikki
5、jkij (5)回代计算:nijiijijiinnnnnniaxabxabx1.1,2,2,1,/)(,/例如,用列主元素消去法解例 3.解 100.0390.00050.353.715.3000.357.404.100.202.103.201.1050.353.715.3000.357.404.100.200.100.200.10120.000.224.563.200.100.357.404.100.2 00.357.404.100.200.224.563.2100.100.200.10120.0321.015.3006.0500.000.2323121lllbA主元并换行选主元 回代求解,
6、得:Tx)256.0,498.0,655.0(.对于用具有舍入的 3 位浮点数进行运算,这是一个很好的计算结果.3.2.2 行主元素消去法 行主元素消去法即是每次选主元时,仅依次按行选取绝对值最大的元素作为主元素,且仅交换两列,再进行消元计算.假设已经完成第 1 步到第1k步运算,得到 )()()()()()()2(2)2(2)2(2)2(22)1(1)1(1)1(1)1(12)1(11)()(,knknnknkkkkknkkknknkkkbaabaabaaabaaaabA.第k步计算选主元素的范围为njkki,,选行主元素,即在第k行确定0j使)()(,max0kkjnjkkjkaa.具体算
7、法步骤省略.3.2.3 完全主元素消去法 完全主元素消去法即是每次选主元时,依次按行、列选取绝对值最大的元素作为主元素,然后交换两行、两列,再进行消元计算.完全主元素消去法的步骤:设已经完成第 1 步到第1k步的选主元、交换行和列、消元计算,得到矩阵)()()()()()()2(2)2(2)2(2)2(22)1(1)1(1)1(1)1(12)1(11)()(,knknnknkkkkknkkknknkkkbaabaabaaabaaaabA.第k步计算选主元素的范围为njik,,即确定00,ji使)(,)(,max00kijnjikkjiaa.第k步计算如下:对于1,2,1nk,(1)选主元素,即
8、确定00,ji使)(,)(,max00kijnjikkjiaa;(2)如果0)(,00kjia,则方程组解不唯一,或者A接近奇异矩阵,停止运算;(3)如果ki 0,则交换,)()(kkbA第0i行与第k行元素;如果kj 0,则交换,)()(kkbA第0j列与第k列元素;(4)消元计算:;,2,1,/,)()()1()()()()()1(nkkjiblbbaalalaakkikkikikkkkikikkkjikkijkij (5)回代求解.【注】完全主元消去法是解低阶稠密矩阵方程组的有效方法,但完全主元消去法解方程组,在选主元素时要化费较多的计算机时间,行主元消去法与列主元消去法运算量大体相 同
9、,实际计算时,用列主元消去法即可满足一定的精度要求.对同一数值问题,用不同的计算方法,所得结果的精度大不一样.对于一个算法来说,如果计算过程中舍入误差能得到控制,对计算结果影响较小,则称此算法是数值稳定的;否则,如果计算过程中舍入误差增长迅速,计算结果受舍入误差影响较大,则称此算法为数值不稳定的.因此,我们解数值问题时,应选择和使用数值稳定的算法,否则如果使用数值不稳定的算法,就可能导致计算失败.列主元素消去法的 MATLAB 程序:Gauss_col.m function x,det,index=Gauss_col(A,b)%求线性方程组的列主元消去法,其中,%A为方程组的系数矩阵;%b为方
10、程组的右端项;%x为方程组的解;%det为系数矩阵A的行列式的值;%index为指标变量,index=0表示计算失败,index=1表示计算成功.n,m=size(A);nb=length(b);%当方程组行与列的维数不相等时,停止计算,并输出出错信息.if n=m error(The rows and columns of matrix A must be equal!);return;end%当方程组与右端项的维数不匹配时,停止计算,并输出出错信息.if m=nb error(The columns of A must be equal the length of b!);return;e
11、nd%开始计算,先赋初值 index=1;det=1;x=zeros(n,1);for k=1:n-1%选主元 a_max=0;for i=k:n if abs(A(i,k)a_max a_max=abs(A(i,k);r=i;end end if a_maxk for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z;end z=b(k);b(k)=b(r);b(r)=z;det=-det;end%消元过程 for i=k+1:n m=A(i,k)/A(k,k);for j=k+1:n A(i,j)=A(i,j)-m*A(k,j);end b(i)=b(i)-m*b
12、(k);end det=det*A(k,k);end det=det*A(n,n);%回代过程 if abs(A(n,n)a_max a_max=abs(A(i,k);r=i;end end if a_maxk for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z;end z=b(k);b(k)=b(r);b(r)=z;end%消元计算 b(k)=b(k)/A(k,k)for j=k+1:n A(k,j)=A(k,j)/A(k,k);end for i=1:n if i=k for j=k+1:n A(i,j)=A(i,j)-A(i,k)*A(k,j);end b(i)=b(i)-A(i,k)*b(k);end end end%输出x for i=1:n x(i)=b(i);end 调用函数 Gauss_Jordan.m 解例 4.输入 A=1 2 3;2 4 5;3 5 6;b=1 0 0;x,index=Gauss_Jordan(A,b)得到 x=1.0000 index=1 计算成功.-3.0000 2.0000