1、fj=d-1*b;x=x0,zeros(20,m-1); %初始化x,其中x1=x0,即初始值for k=1:m %人为规定迭代次数,防止不收敛迭代导致死循环x(:,k+1)=bj*x(:,k)+fj; %jacobi迭代 if norm(x(:,k+1)-x(:,k),inf)e %判断迭代后是否满足迭代中止条件: y=x(:,1:k+1); %赋给y所有中间值和迭代结果 sizej=k ; %若去掉;号,则输出迭代次数 break %并结束迭代 end %若不成立,继续迭代end %以下部分为验证迭代公式收敛的方法,仅需运行一次即可,因为收敛性完全由A矩阵决定,而A%在本题是固定不变的;通
2、过判断中B的谱半径或范数大小(B在jacobi迭代法中%为矩阵bj),即可得知收敛性:e=eig(bj) %输出全部特征值,若,则收敛n1=norm(bj,1); %计算1-范数n2=norm(bj); %计算2-范数nn=norm(bj,inf); %计算-范数q=min(n1 n2 nn) %由于谱半径不超过人以一种范数,所以只要范数的最小值q1,也可判断迭代法收敛2) Gauss迭代法:与Jacobi程序结构相同,不再注释function y=gauss(a,b,x0,e,m)bgs=(d-l)-1*u;fgs=(d-l)-1*b;m,k+1)=bgs*x(:,k)+fgs;ey=x(:
3、 sizeg=k; break endende=eig(bgs)n1=norm(bgs,1);n2=norm(bgs);nn=norm(bgs,inf);min(n1 n2 nn) 3) 操作函数:%构造矩阵An=20;a1=sparse(1:n,1:n,3,n,n); %按稀疏矩阵的输入法构造,比较方便a2=sparse(1:n-1,2:n,-0.5,n,n);a3=sparse(1:n-2,3:n,-0.25,n,n);a=a1+a2+a3+a2+a3;a=full(a); %还原为满矩阵%通过给定不同的初始向量x0或者右端项b,以及规定不同的误差要求,进行jacobi和gauss%迭代,
4、得到的结果y1、y2位两种迭代的次数,同时输出迭代结果,便于分析b=x0=e=m=y1=jacobi(a,b,x0,e,m);y2=gauss(a,b,x0,e,m);4) 改变矩阵A:先对jacobi函数作一定修正,方便分析,命名为jacobi2,如下:function y=jacobi2(a,b,x0,e,m) %计算范数nn=norm(bj,inf);q=min(n1 n2 nn); y(1)=q; %输出结果1:范数的最小值,判断收敛速度的方法e y(2)=k; %输出结果2:迭代次数 break %改变A矩阵主对角元素的值,比较jacobi迭代的收敛速度,即迭代误差满足%时的迭代次数
5、b=(1:20) %取定bx0=20*ones(20,1); %取定x0 e=10-5; %取定精度r=20; %设置主对角元素扩大的最大倍数 m=50;r; a1=k*sparse(1: %只需更改A的主对角元素 a=a1+a2+a3+a2 %重新构造A a=full(a);y(k,1:3)=k,jacobi2(a,b,x0,e,m);y %输出对角线扩大倍数最小范数迭代次数2、 运行结果分析1) 不同初值(x0)和右端项(b)条件下的解的情况表一:收敛性判断1-范数2-范数-范数Jacobi0.01630.0167Gauss0.00080.0084 可以看到,矩阵A无论是谱半径或是任意范数
6、的值都小于1,可知在A不变的情况下,Jacobi和Gauss法必然收敛。2) b取不同的值,x0=20*ones(20,1), e=10-5, m=50 条件下的情况对比B=1:20B=10:10:200B=20:-1:1B=20*ones(20,1)B=2000*ones(20,1)2426233016171520 根据1)分析的结果,可以证明无论b取任何值,采用两种方法迭代均收敛,但b的值的变化会影响迭代的次数;且Gauss迭代法总是比Jacobi迭代法收敛速度更快。 下表列出的是B=1:20情况下部分结算结果,可以很明显的看到两种迭代法的收敛速度不同:K=1K=2K=3K=4K=5K=6
7、 K=22K=23K=24标准值X15.33332.75001.53941.08740.88580.79820.7247X29.00004.33332.66441.92481.60821.46521.3444X311.00005.80563.71992.78012.36262.17172.0072K=6K=14K=15K=162.05401.13540.85390.76570.73776.55562.94321.84591.50331.39491.36057.53703.73862.55532.18152.06272.0249由于精度问题,在迭代的最后几次中从显示的数位已经不能看出标准值与计算
8、值得差别,但是若采用long显示设定,就可以看到更多位小数的显示,其结果符合最初设定的精度e,数据繁琐,略。3) x0取不同的值,b=20*ones(20,1), e=10-5, m=50 条件下的情况对比X0=1:X0=10:X0=20:X0=20*ones(20,1)X0=2000*ones(20,1)22273118 根据1)分析的结果,可以证明无论X0取任何值,采用两种方法迭代均收敛,但x0的值的变化会影响迭代的次数;下表列出的是x0=1:20情况下部分结算结果,可以很明显的看到两种迭代法的收敛速度不同:K=20K=217.25008.62509.22289.45369.55419.59749.63277.66679.958310.81411.18311.34111.41111.46838.166710.75711.81612.28212.48712.57912.6560K=138.93529.42679.57209.61509.62768.708310.65411.22811.39811.44811.4639.805611.81312.40812.58412.63612.650
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1