数值分析实验3
- 格式:doc
- 大小:71.50 KB
- 文档页数:11
实验三 解线性方程组的迭代法实验目的1.深入理解Jacobi 迭代法和Gauss-Seidel 迭代法2.通过对两种迭代法的程序设计,提高程序设计能力3.应用编写的程序解决具体问题,掌握两种基本迭代法的使用,通过结果的分析了解每一种迭代法的特点实验要求(1) 认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对收敛速度的影响。
(2) 迭代法收敛速度试验、病态的线性方程组的求解实验题目3.1 用迭代法求解方程组b Ax =,其中2020⨯∈R A ,它的每条对角钱元素是常数,为⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--------------=32/14/12/132/14/14/12/132/14/14/12/132/14/12/13 A(1)选取不同的初始向量)0(x 和不同的方程组右端项向量b ,给定迭代误差要求,用Jacobi 迭代法和Gauss-Seidel 迭代法计算,观测得到的迭代向量序列是否均收敛?若收敛;记录迭代次数,分析计算结果并得出你的结论;(2)取定右端向量b 和初始向量)0(x ,将A 的主对角线元素成倍增长若干次,非主对角线元素不变,每次用Jacobi 迭代法计算,要求迭代误差满足5)()1(10||||-∞+<-k k x x 。
比较收敛速度,分析现象并得出你的结论。
(1) 1.选取初始向量为)0(x =zeros(20,1),右端向量b=ones(20,1),eps=1.0e-5;①实验程序(Jacobi 迭代法)function [x,n]=jacobi(A,b,x0,eps,M)%A 为方程组得系数矩阵%b为方程组得右端项%x0为初始向量%eps为精度要求%M为最大迭代次数%x为方程组的解%n为迭代次数eps=1.0e-5;%精度要求M=200;%最大迭代次数A=zeros(20,20);for i=1:1:20A(i,i)=3;endfor i=1:1:20for j=1:1:20if abs(i-j)==1A(i,j)=-1/2;endendendfor i=1:1:20for j=1:1:20if abs(i-j)==2A(i,j)=-1/4;endendendb=ones(20,1);x0=zeros(20,1);D=diag(diag(A));%取A的对角阵L=-tril(A,-1);%取A的下三角阵U=-triu(A,1);%取A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;n=1;disp(['第',num2str(n),'步求解结果为:']);disp(x);while norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;disp(['第',num2str(n),'步求解结果为:']); disp(x);if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endenddisp('最终结果为:');disp('x=');disp(x);disp(['n=',num2str(n)]);实验结果最终结果为:x=0.48160.57340.63280.65210.66090.66430.66570.66630.66650.66660.66660.66650.66630.66570.66430.66090.65210.63280.57340.4816n=18②实验程序(Gauss-Seidel迭代法)function[x,n]=gauseidel(A,b,x0,eps,M)%A为方程组得系数矩阵%b为方程组得右端项%x0为迭代初始向量%eps为精度要求%M为最大迭代次数%x为方程组的解%n为迭代次数eps=1.0e-5;%精度要求M=200;%最大迭代次数A=zeros(20,20);for i=1:1:20A(i,i)=3;endfor i=1:1:20for j=1:1:20if abs(i-j)==1A(i,j)=-1/2;endendendfor i=1:1:20for j=1:1:20if abs(i-j)==2A(i,j)=-1/4;endendendb=ones(20,1);x0=zeros(20,1);D=diag(diag(A));%取A的对角阵L=-tril(A,-1);%取A的下三角阵U=-triu(A,1);%取A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;n=1;disp(['第',num2str(n),'步求解结果为:']);disp(x);while norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;disp(['第',num2str(n),'步求解结果为:']);disp(x);if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endenddisp('最终结果为:');disp('x=');disp(x);disp(['n=',num2str(n)]);实验结果最终结果为:x=0.48160.57340.63280.65210.66090.66430.66570.66630.66650.66660.66660.66650.66630.66570.66430.66090.65210.63280.57340.4816n=182.选取初始向量为)0(x=zeros(20,1),右端向量b=1.001*ones(20,1),eps=1.0e-5;①实验程序(Jacobi迭代法)修改:b=1.001*ones(20,1),其余同上实验结果最终结果为:x=0.48210.57400.63340.65280.66160.66500.66640.66690.66720.66720.66720.66720.66690.66640.66500.66160.65280.63340.57400.4821n=18②实验程序(Gauss-Seidel迭代法)同上实验结果最终结果为:x=0.48210.57400.63340.65280.66160.66500.66640.66690.66720.66720.66720.66720.66690.66640.66500.66160.65280.63340.57400.4821n=183.选取初始向量为)0(x=ones(20,1),右端向量b=ones(20,1),eps=1.0e-5;①实验程序(Jacobi迭代法)修改:)0(x=ones(20,1),b=ones(20,1),其余同1 实验结果最终结果为:x=0.48160.57340.63280.65210.66090.66430.66570.66630.66650.66660.66660.66650.66630.66570.66430.66090.65210.63280.57340.4816n=17②实验程序(Gauss-Seidel迭代法)同上实验结果最终结果为:x=0.48160.63280.65210.66090.66430.66570.66630.66650.66660.66660.66650.66630.66570.66430.66090.65210.63280.57340.4816n=17结果分析:不管用哪种迭代法,改变初始向量,右端向量,用有限的迭代次数,都能得到收敛结果且满足误差要求。
(2)取定初始向量为)0(x=zeros(20,1),右端向量b=ones(20,1),eps=1.0e-5;1.A的主对角元素增长为6,用雅克比迭代法:实验程序将(1)1的程序中改为A(i,i)=6;实验结果最终结果为:x=0.19340.21030.22000.22150.22210.22220.22220.22220.22220.22220.22220.22220.22220.22220.22210.22150.22000.21030.1934n=102.A的主对角元素增长为12,用雅克比迭代法:实验结果最终结果为:x=0.08920.09300.09500.09520.09520.09520.09520.09520.09520.09520.09520.09520.09520.09520.09520.09520.09520.09500.09300.0892n=83.A的主对角元素增长为21,用雅克比迭代法:实验结果最终结果为:x=0.04940.05060.05120.05130.05130.05130.05130.05130.05130.05130.05130.05130.05130.05130.05130.05130.05130.05120.05060.0494n=64.A的主对角元素增长为45,用雅克比迭代法:实验结果最终结果为:x=0.02260.02290.02300.02300.02300.02300.02300.02300.0230班级:自动化1201 姓名:董鸣丹学号:20123072014310.02300.02300.02300.02300.02300.02300.02300.02300.02300.02290.0226n=5结果分析:增大倍数越多,收敛速度越快,但收敛加速度越小。
且最终的解趋向于0.心得体会:通过本次实验,是我加深了对Jacobi迭代法和Gauss—Seidel迭代法的原理及内在含义的认识、了解和掌握,同时也使我体会到了一些数值计算理论的研究规律,由浅入深,由表及里,由特殊到一般。