预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

安徽工业大学 数理科学与工程学院 病态线性方程组的求解 专业数学与应用数学 班级数***班 学号******* 姓名*** 指导教师*** 二○一五年五月 一、设计目的: 为了更加透彻的熟悉数值分析课程,学习各种数学软件的使用,锻炼自己对知识的实际运用能力。 二、引言: 用直接法求解AX=F线性方程组,对于系数矩阵A对角占优是很有效的。方程阶数不高时,人们经常使用;而当方程组阶数大时,由于积累误差,导致结果失真。为了克服误差积累问题,通常用迭代法。它具有可达到所要求的精度和对计算内存要求不大的优点,对求解大型线性方程组,迭代法计算时间远比直接法少,所以在实际计算中,迭代法也被人们广泛使用。然而迭代法要研究迭代格式的收敛性,如Jacobi迭代对系数矩阵为病态矩阵不收敛,为此我们提供一种修改的Jacobi迭代,并给出一些数值例子来说明有较好的效果。 三、解线性方程组迭代法的描述 设线性方程组AX=P,这里A:{a},X:{x},F:{f},1i,jn,为了更广泛地应用,对A只限制实的非奇异矩阵,那么,若给定初值x,我们熟知的有: Jacobi迭代: x=(f-)/aj,1in 四、求解病态线性方程组的另一种迭代解法 设线性方程BX=F,这里系数矩阵B是病态的,指的是矩阵条件数是较大的。条件数越大,就越难求得准确解,为此,我们将方程的两端同加DX项,那么相应的Jacobi迭代有: X(1) 这里,A为B的对角阵,即A:{b},H:{b}j1i,jn, 记M=,,那么有: 由此可见(1)式收敛,迭代矩阵M的谱半径应满足p(M)<1,谱半径若用M的特征值判断,则较为繁锁;若B不可约,根据线性代数对角占优简单迭代必收敛的性质,为简单起见,我们取D为对角线阵,即D:{d},为保证收敛就得取d=Sign{},符号Sign{a,b}的含义是与b同号,数值取a,这是充分条件,实际计算中有时可放宽处理,比如可取d=Sign{}或者d=Sign{}j,因而相应的Jacobi迭代修改为: x=(f-)/(b+d)(2) 下面列举普通Jacobi迭代不收敛,解不出正确结果,而用修改的Jacobi迭代可求出满意结果的例子: 例1: A=F= 精确解为X=,普通Jacobi迭代不收敛,取 d=Sign{}j,1i,j3 用(2)式迭代40步,X= 例2: 方程系数为Hilbert阵 H:{}F:{}1i,jn 精确解X=,普通Jacobi迭代发散,取d=Sign{}用修改的(2)式迭代,n=1200时迭代10870步结果摘录如下: 五、结论与问题 以上数值试验表明该迭代算法对求解病态线性方程组是有效的,其优点是可达到预定的精度。 求解病态方程组大条件数的系数矩阵,要获得较正确的解是很困难的。本文的算法迭代虽能保证收敛,但与精确解的误差到底怎样,还应将解代入原方程,衡量、检验求得解的可信程度;另外,如何克服求解病态线性方程组收敛缓慢的问题,还有待于进一步工作。 附录 例1的matlab计算程序: clear m=40; n=3; A=[2-11;111;11-2]; F=[-2-30]; x=zeros(n,m); fori=1:n x(i,1)=0; end fori=1:n ifi==1 d(i)=max(abs(A(i,2:n)))*A(i,i)/abs(A(i,i)); elseifi==n d(i)=max(abs(A(i,1:n-1)))*A(i,i)/abs(A(i,i)); else d(i)=max(max(abs(A(i,1:i-1))),max(abs(A(i,i-1:n))))*A(i,i)/abs(A(i,i)); end end fork=2:m fori=1:n x(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)); end end x(:,m) 例2的matlab计算程序: clear n=1200; m=10870; fori=1:n forj=1:n H(i,j)=1/(i+j-1); end end fori=1:n f(i)=sum(H(i,:)); end fori=1:n d(i)=sum(abs(H(i,:)))*H(i,i)/abs(H(i,i)); end fori=1:n x(i,1)=0; end fork=1:m fori=1:n x(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)); end end x(:,m)