数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组(6页).doc
-作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。可取初始向量 X(0) =(0,0,0);迭代终止条件|x(k+1)-x(k)|<=10e-6(1)=(2)=Jacobi迭代法:流程图开始判断b中的最大值有没有比误差大给x赋初值进行迭代求出x,弱到100次还没到,警告不收敛结束程序clear;clc;A=8,-1,1;2,10,01;1,1,-5;b=1;4;3;e=1e-6;x0=0;0;0'n=length(A);x=zeros(n,1);k=0;r=max(abs(b);while r>e for i=1:n d=A(i,i); if abs(d)<e warning('矩阵A输入有误'); return; end sum=0; for j=1:n if j=i sum=sum+A(i,j)*x0(j); end end x1(i)=(b(i)-sum)/A(i,i); end k=k+1; r=max(abs(x1-x0); x0=x1; fprintf('第%d次迭代:',k) fprintf('n与上次计算结果的距离:%f n',r) disp(x1); if k>100 warning('不收敛'); endendx=x0;程序结果(1)(2) Gauss-Seidel迭代法:程序clear;clc;%A=8,-1,1;2,10,01;1,1,-5;%b=1;4;3;A=5,2,1;-1,4,2;2,-3,10;b=-12;20;3;m=size(A);if m(1)=m(2) error('矩阵A不是方阵');endn=length(b);%初始化N=0;%迭代次数L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n);D=zeros(n);G=zeros(n);%G=-inv(D+L)*Ud=zeros(n,1);%d=inv(D+L)*bx=zeros(n,1);for i=1:n%初始化L和U for j=1:n if i<j L(i,j)=A(i,j); end if i>j U(i,j)=A(i,j); end endendfor i=1:n%初始化D D(i,i)=A(i,i);endG=-inv(D+L)*U;%初始化Gd=(D+L)b;%初始化d%迭代开始x1=x;x2=G*x+d;while norm(x2-x1,inf)>10(-6) x1=x2; x2=G*x2+d; N=N+1;endx=x2;程序结果(1) (2) -第 6 页-