资源描述:
《杨顶辉_数值分析大作业.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验3.1(主元的选取与算法的稳定性)(一)问题提出Gauss消去法是我们在线性代数中已经熟悉的,但是由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选取。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。(二)实验内容nnn考虑线性方程组AxbARbR,,,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss消去过程。(三)实验要求61786115*T(
2、1)取矩阵A,b,则方程有解x1,1,,1。取n10计算矩861158614阵的条件数,分别用顺序Gauss消元、列主元Gauss消元和完全选主元Gauss消去方法求解,结果如何?(2)现选择程序中手动选取主元的功能,每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又会如何?分析实验的结果。(3)取矩阵阶数n20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差
3、异,说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。(四)算法分析及程序实现本题的完整程序参考附件中的experiment_3_1.m.下面是对关键部分进行说明。1.顺序Gauss法该方法分为消去和回代两个步骤。消去步骤及主要思想如下:forstep=1:n-1%第step步计算fori=step+1:n;l(i,step)=A(i,step)/A(step,step);%计算第step+1~n行的消元因子b(i)=b(i)-l(i,step)
4、*b(step);forj=step:nA(i,j)=A(i,j)-l(i,step)*A(step,j);endendend回代步骤:x(n)=b(n)/A(n,n);fori=n-1:-1:1x(i)=(b(i)-sum(x(i+1:n)'.*A(i,i+1:n)))/A(i,i);endii用顺序Gauss消去法,必须要求a0,否则还是需要选取主元;且就算a0,若iiiiia接近零,可能使得消元因子变得很大,给计算带来较大的误差。ii2.列主元Gauss消去法与Gauss消去法相比,列主元Gauss消去法只是
5、在进入每一步消元之前,进行一个选主元的过程:forstep=1:n-1ifmethod==2%列主元Gauss消去法¨[main,i_step]=max(abs(A(step:n,step)));%选出最大的列主元i_step=i_step+step-1;%最大列主元所处的列midA=A;%交换A的两行A(i_step,:)=A(step,:);A(step,:)=midA(i_step,:);midb=b;%交换b的两行b(i_step)=b(step);b(step)=midb(i_step);end……一般来说,列主元消去法
6、是比较有效的算法,舍入误差一般已经较小,是实际计算中常用的方法。3.完全选主元高斯消去法与Gauss消去法相比,完全选主元方法多了两个步骤。一是在进入每一步消元之前,选主元:forstep=1:n-1ifmethod==3%完全选主元方法¨[row,col]=find(A(step:n,step:n)==max(max(abs(A(step:n,step:n)))),1);row=row+step-1;col=col+step-1;%找到矩阵A右下角(n+1-step)阶方阵中的最大值midA=A;%交换A中行的位置A(row,:
7、)=A(step,:);A(step,:)=midA(row,:);midA=A;%交换A中列的位置A(:,col)=A(:,step);A(:,step)=midA(:,col);midb=b;%交换b中行的位置b(row)=b(step);b(step)=midb(row);midx=x_p;%将列交换对x中元素排列的影响记录下来x_p(step)=x_p(col);x_p(col)=midx(step);end……另外,由于x中的元素在选主元的过程中重新排列了,所以最后求出的结果需要重排回原来的顺序:if(method==3
8、)or(method==4)midx=x;fori=1:nx(i)=midx(find(x_p==i));endend完全选主元素的计算量较大,实际中应用较少。且在本题中,与列主元Gauss消去法最终得到的矩阵A也没有区别。4.选取模尽可能小的非零