您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 病态线性方程组的求解
安徽工业大学数理科学与工程学院病态线性方程组的求解专业数学与应用数学班级数***班学号*******姓名***指导教师***二○一五年五月1一、设计目的:为了更加透彻的熟悉数值分析课程,学习各种数学软件的使用,锻炼自己对知识的实际运用能力。二、引言:用直接法求解AX=F线性方程组,对于系数矩阵A对角占优是很有效的。方程阶数不高时,人们经常使用;而当方程组阶数大时,由于积累误差,导致结果失真。为了克服误差积累问题,通常用迭代法。它具有可达到所要求的精度和对计算内存要求不大的优点,对求解大型线性方程组,迭代法计算时间远比直接法少,所以在实际计算中,迭代法也被人们广泛使用。然而迭代法要研究迭代格式的收敛性,如Jacobi迭代对系数矩阵为病态矩阵不收敛,为此我们提供一种修改的Jacobi迭代,并给出一些数值例子来说明有较好的效果。三、解线性方程组迭代法的描述设线性方程组AX=P,这里A:{aij},X:{xi},F:{fi},1i,jn,为了更广泛地应用,对A只限制实的非奇异矩阵,那么,若给定初值x)0(,我们熟知的有:Jacobi迭代:x)1(ki=(fi-njkjijxa)()/aiiji,1in四、求解病态线性方程组的另一种迭代解法设线性方程BX=F,这里系数矩阵B是病态的,指的是矩阵条件数是较大的。条件数越大,就越难求得准确解,为此,我们将方程的两端同加DX项,那么相应的Jacobi迭代有:X])([)()(1)1(kkXHDFAD(1)这里,A为B的对角阵,即A:{bii},H:{bij}ji1i,jn,2记M=)()(1HDAD,)()1()(kkkXXX,那么有:)0()1()(XMXMXkkk由此可见(1)式收敛,迭代矩阵M的谱半径应满足p(M)1,谱半径若用M的特征值判断,则较为繁锁;若B不可约,根据线性代数对角占优简单迭代必收敛的性质,为简单起见,我们取D为对角线阵,即D:{di},为保证收敛就得取di=Sign{jiiijbb|,|},符号Sign{a,b}的含义是与b同号,数值取a,这是充分条件,实际计算中有时可放宽处理,比如可取di=Sign{iiijijbbMax|,|}或者di=Sign{iiijjbbMax|,|}ji,因而相应的Jacobi迭代修改为:x)1(ki=(fi-ijkiikjijxdxb)()()/(bii+di)(2)下面列举普通Jacobi迭代不收敛,解不出正确结果,而用修改的Jacobi迭代可求出满意结果的例子:例1:A=211111112F=032精确解为X=T111,普通Jacobi迭代不收敛,取di=Sign{iiijjaaMax|,|}ji,1i,j3用(2)式迭代40步,X=T000003.1000053.1000035.1例2:方程系数为Hilbert阵3H:{)1/(1jihij}F:{jijihf}1i,jn精确解X=T111,普通Jacobi迭代发散,取di=Sign{jiiijhh|,|}用修改的(2)式迭代,n=1200时迭代10870步结果摘录如下:10.9999691.0002780.9995930.9998561.000061.0001411.0001491.0001241.0000861.0000494911.0000021.0000021.0000021.0000021.0000021.0000021.0000021.0000021.0000021.0000018910.9999980.9999980.9999980.9999980.9999980.9999980.9999980.9999980.9999980.99999811911.0000041.0000041.0000041.0000041.0000041.0000041.0000041.0000041.0000041.000004x(i)iterate10870stepsvaluasioniteration=10870maxerror=4.070000000000462e-04系数为Hilbert阵1200阶的结果五、结论与问题以上数值试验表明该迭代算法对求解病态线性方程组是有效的,其优点是可达到预定的精度。求解病态方程组大条件数的系数矩阵,要获得较正确的解是很困难的。本文的算法迭代虽能保证收敛,但与精确解的误差到底怎样,还应将解代入原方程,衡量、检验求得解的可信程度;另外,如何克服求解病态线性方程组收敛缓慢的问题,还有待于进一步工作。4附录例1的matlab计算程序:clearm=40;n=3;A=[2-11;111;11-2];F=[-2-30];x=zeros(n,m);fori=1:nx(i,1)=0;endfori=1:nifi==1d(i)=max(abs(A(i,2:n)))*A(i,i)/abs(A(i,i));elseifi==nd(i)=max(abs(A(i,1:n-1)))*A(i,i)/abs(A(i,i));elsed(i)=max(max(abs(A(i,1:i-1))),max(abs(A(i,i-1:n))))*A(i,i)/abs(A(i,i));endendfork=2:m5fori=1:nx(i,k)=(F(i)-A(i,:)*x(:,k-1)+A(i,i)*x(i,k-1)+d(i)*x(i,k-1))/(A(i,i)+d(i));endendx(:,m)例2的matlab计算程序:clearn=1200;m=10870;fori=1:nforj=1:nH(i,j)=1/(i+j-1);endendfori=1:nf(i)=sum(H(i,:));endfori=1:nd(i)=sum(abs(H(i,:)))*H(i,i)/abs(H(i,i));endfori=1:n6x(i,1)=0;endfork=1:mfori=1:nx(i,k+1)=(f(i)-H(i,:)*x(:,k)+H(i,i)*x(i,k)+d(i)*x(i,k))/(H(i,i)+d(i));endendx(:,m)
本文标题:病态线性方程组的求解
链接地址:https://www.777doc.com/doc-5408112 .html