logo资料库

数值分析求解线性方程组的迭代法的实验报告.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
实验名称: 求解线性方程组的迭代法 实验目的: 1. 实现三种迭代法; 2. 比较三种迭代法的差异; 3. 分析方程组的好坏以及算 l=0; for i=1:k while norm(x1-x0)>=eps(i) x0=x1; x1=B*x0+f; q=q+1; end fprintf('\n'); p(i)=q; fprintf('jocibi 迭代法解得根:'); fprintf('\n') x1 法的稳定性 实验内容: 求解方程组: 2 1 4      1  6 3  0 2  8      x 2 4  5           实验程序及数据 function yy=ddf(A,b,x0,eps) w=1.2; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; x1=B*x0+f; %jacobi 迭代法 G=(D-L)\U; f1=(D-L)\b; x2=G*x0+f1; %Gauss-Seidel 迭代法 B1=(D-L*w)\((1-w)*D+w*U); B2=w*((D-L*w)\b); x =B1*x0+B2; %ssor 迭代法 k=length(eps); p=zeros(1,k); s=zeros(1,k); n=zeros(1,k); q=0; t=0; end p plot(eps,p,'r') hold on for i=1:k while norm(x2-x0)>=eps(i) x0=x2; x2=G*x0+f1; t=t+1; end fprintf('\n'); s(i)=t; fprintf('Gauss-Seidel 迭代法解得根:'); fprintf('\n') x2 end s plot(eps,s,'g') hold on for i=1:k while norm(x-x0)>=eps(i) x0=x; x=B1*x0+B2; l=l+1; end fprintf('\n'); n(i)=l; fprintf('ssor 迭代法解得根:'); fprintf('\n') x end n
plot(eps,n,'b') title('相同精度条件下不同迭代法与所需迭 代次数关系图') xlabel('精度'); ylabel('迭代次数'); 实验结果 >> A=[2 -1 0;1 6 -2;4 -3 8]; >> b=[2;-4;5]; >> x0=[0;0;0]; >> eps=[10^(-10) 10^(-11) 10^(-12) 10^(-13) 10^(-14) 10^(-15)]; ddf(A,b,x0,eps) jocibi 迭代法解得根: x1 = 0.61999999998838 -0.75999999998893 0.02999999997998 jocibi 迭代法解得根: x1 = 0.62000000000120 -0.76000000000112 0.03000000000208 jocibi 迭代法解得根: x1 = 0.61999999999988 -0.75999999999989 0.02999999999978 jocibi 迭代法解得根: x1 = 0.62000000000001 -0.76000000000001 0.03000000000002 jocibi 迭代法解得根: x1 = 0.62000000000000 -0.76000000000000 0.03000000000000 jocibi 迭代法解得根: x1 = 0.62000000000000 -0.76000000000000 0.03000000000000 p = 37 34 31 40 Gauss-Seidel 迭代法解得根: x2 = 43 46 0.61999999998086 -0.75999999999349 0.03000000001201 Gauss-Seidel 迭代法解得根: x2 = 0.62000000000173 -0.76000000000040 0.02999999999899 Gauss-Seidel 迭代法解得根: x2 = 0.61999999999985 -0.75999999999998 0.03000000000008 Gauss-Seidel 迭代法解得根: x2 = 0.62000000000001 -0.76000000000000 0.02999999999999 Gauss-Seidel 迭代法解得根: x2 = 0.62000000000000 -0.76000000000000 0.03000000000000 Gauss-Seidel 迭代法解得根: x2 = 0.62000000000000 -0.76000000000000 0.03000000000000 s = 25 27 29 21 19 23 ssor 迭代法解得根: x = 0.62000000000462 -0.76000000001876 0.02999999999554 ssor 迭代法解得根: x = 0.62000000000029 -0.76000000000214 0.02999999999969
相 同 精 度 条 件 下 不 同 迭 代 法 与 所 需 迭 代 次 数 关 系 图 jocibi迭 代 法 Gauss-Seidel迭 代 法 ssor迭 代 法 50 45 40 35 30 25 20 数 次 代 迭 15 0 0.1 0.2 0.3 0.4 0.5 精 度 0.6 0.7 0.8 0.9 1 x 10-10 Ax  , RAb  * nn , , Rbx  n 。 如果解 x 关于问题的微小变化不 ssor 迭代法解得根: x = 0.62000000000001 -0.76000000000024 0.02999999999999 ssor 迭代法解得根: x = 0.61999999999998 -0.75999999999999 0.03000000000001 ssor 迭代法解得根: x = 0.62000000000000 -0.76000000000000 0.03000000000000 ssor 迭代法解得根: x = 0.62000000000000 -0.76000000000000 0.03000000000000 n = 33 36 39 43 46 49 结果分析: 敏感则问题就是好问题,反之就 1.我们可以用达到相同精度 是坏问题。对解上述方程组的算 三种方法所需迭代次数的多少来 法,如果关于问题的微小变化, 衡量方法的好坏。在相同精度的 算法求的解变化也很微小,则称 条件 Gauss-Seidel 迭代法达到 算法是稳定的,反之是不稳定的。 相同精度所需要的迭代次数比用 jacobi 迭代法所需的次数要少, 但是 ssor 迭代法所需要的迭代 次数受 w 的影响。 2.对于线性方程组
分享到:
收藏