您好,欢迎来到六九路网。
搜索
您的当前位置:首页数值分析课程设计:比较各种迭代收敛速度

数值分析课程设计:比较各种迭代收敛速度

来源:六九路网


数值分析课程设计

比较各种迭代收敛速度

分别用雅可比迭代法(J)、高斯—塞德尔迭代法(G-S)、超松弛迭代法(SOR)计算方

410x110x=8 141程组2014x310并比较哪一种迭代方法收敛的速度更快

方实值计算:

A=[4-10;-14-1;0-14];b=[10810]'; jX=A\\b

得到结果:

3.42863.71433.4286

雅可比迭代:

首先编写jacdd.m的函数文件(见附录一) 调用程序,在命令窗口分别输入如下语句: A=[4-10;-14-1;0-14]; b=[10;8;10];

X0=[000]';X=jacdd(A,b,X0,inf,0.00001,100) 结果见表一

高斯—塞德尔迭代:

首先编写gsdddy.m的函数文件(见附录二) 调用程序,在命令窗口分别输入如下语句: A=[4-10;-14-1;0-14];b=[10;8;10]; X0=[000]';

X=gsdddy(A,b,X0,inf,0.00001,100) 结果见表一

雅可比迭代误差计算:

x0=[3.42863.71433.4286];%此为方程组的真实值

x1=[2.50003.00003.31253.37503.41413.42193.42683.42773.42833.42853.42853.4286];

x2=[2.00003.25003.50003.65633.68753.70703.71093.71343.71393.71423.71423.7143];

x3=[2.50003.00003.31253.37503.41413.42193.42683.42773.42833.42853.42853.4286];

formatlong

%循环求二范数的平方 fori=1:12

t(i)=(x1(i)-3.4286)^2+(x2(i)-3.7143)^2+(x3(i)-3.4286)^2; sqrt(t(i)) end

结果见表一

高斯—塞德尔迭代误差计算:

x0=[3.42863.71433.4286];%此为方程组的真实值 x1=[2.50003.15633.39453.42433.42803.42853.4286]; x2=[2.62503.57813.69733.71223.71403.71433.7143]; x3=[3.15633.39453.42433.42803.42853.42863.4286]; formatlong

%循环求二范数的平方 fori=1:6

s(i)=(x1(i)-3.4286)^2+(x2(i)-3.7143)^2+(x3(i)-3.4286)^2; sqrt(s(i)) end

结果见表一 表一 次数 1 2 3 4 5 6 7 8 9 10 11 12 X1 2.5000 3.0000 3.3125 3.3750 3.4141 3.4219 3.4268 3.4277 3.4283 3.4285 3.4285 3.4286 雅可比迭代 X2 X3 2.0000 3.2500 3.5000 3.6563 3.6875 3.7070 3.7109 3.7134 3.7139 3.7142 3.7142 3.7143 2.5000 3.0000 3.3125 3.3750 3.4141 3.4219 3.4268 3.4277 3.4283 3.4285 3.4285 3.4286 误差 2.15949 0.7635250 0.2699683 0.09459 0.0337452 0.0119612 0.0042474 0.0015588 0.0005831 0.0001732 0.0001732 0 次数 1 2 3 4 5 6 7 8 9 10 11 12 高斯—塞德尔迭代 X1 X2 X3 2.5000 3.1563 3.3945 3.4243 3.4280 3.4285 3.4286 2.6250 3.5781 3.6973 3.7122 3.7140 3.7143 3.7143 3.1563 3.3945 3.4243 3.4280 3.4285 3.4286 3.4286 误差 1.4570586 0.3063667 0.0383445 0.0048229 0.0006782 0.0000999 0 注:MATLAB计算的误差为16位有效数字,由于表的位置有限,这里只取8位有效数字 画图比较:

画图函数: k=1:12;

x=[2.159490.76352500.26996830.094590.03374520.01196120.00424740.00155880.00058310.00017320.00017320];%J的迭代误差 plot(k,x,'b') holdon

y=[1.45705860.30636670.03834450.00482290.00067820.0000999000000];%G-S的迭代误差 plot(k,y,'-.')

legend('J迭代','G-S迭代')%画出图形,标明各曲线的含义 title('误差图');%加上标题

text(k(1),x(1),'start')%注明起始和终止点 text(k(11),x(11),'end')

xlabel('K迭代次数');%标注横,纵坐标 ylabel('误差'); gridon%画出网格

结论:

从数据图表可观察到:雅可比的迭代次数明显比高斯塞德尔的迭代次数要多,所以高斯塞德尔比雅可比迭代的收敛速度快.

G-S迭代与J迭代在本质上没有必然的联系,求解方程组时,J迭代的速度与G-S迭代收敛的速度没有确定的关系,但在此题中,J迭代比G-S迭代的收敛速

度慢。

超松弛迭代法最佳松弛因子选取

编写文件名为sor.m的M文件(见附录三)

得到结果如下表(全部结果的部分,包含最少迭代次数的松弛因子): D=

2.5857837626905 4.000000000000000 5.414213562373096 max=

5.414213562373096 x0=

3.4285714285714283.7142857142857143.428571428571428 松弛因子 迭代次数 松弛因子 迭代次数 松弛因子 迭代次数 0.1000 45 0.2500 13 0.3000 24 0.1500 28 0.2550 13 0.3200 37 0.2000 19 0.2600 13 0.3400 66 x2= 3.4285703243697273.7142801602446313.428570324369727 ans=

0.25500000000000013.000000000000000 结论:

最佳松弛因子=0.2550,使得迭代次数最少且结果最接近真实值。 附录一:

functionX=jacdd(A,b,X0,P,wucha,max1) [nm]=size(A); forj=1:m

a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j))); end

fori=1:n

ifa(i)>=0

disp('系数矩阵A不是严格对角占优,此雅可比迭代不一定收敛')

return end end

ifa(i)<0

disp('系数矩阵A不是严格对角占优,方程有唯一解,且雅可比迭代收敛') end

fork=1:max1

k

forj=1:m

X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1:j-1,j+1:m]))/A

(j,j);

end

X,djwcX=norm(X'-X0,P);xdwcX=djwcX/(norm(X',P)+eps);X0=X';X1=A\\b;

if(djwcXif(djwcX>wucha)&(xdwcX>wucha)

disp('雅可比迭代次数已经超过最大迭代次数max1')

end

a,X=X;jX=X1', 附录二

functionX=gsdddy(A,b,X0,P,wucha,max1)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);dD=det(

D);

ifdD==0

disp('因为对角矩阵D奇异,此方程组无解') else

disp('因为对角矩阵D非奇异,此方程组有解') iD=inv(D-L);B2=iD*U;f2=iD*b;jX=A\\b;X=X0; [nm]=size(A); fork=1:max1

X1=B2*X+f2;djwcX=norm(X1-X,P); xdwcX=djwcX/(norm(X,P)+eps); if(djwcXk,X1',k=k+1;X=X1; end end

if(djwcXdisp('G-S迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下') else

disp('G-S迭代的结果没有达到给定的精度,并且迭代次数已经超过最大迭代

次数max1,方程组的精确解jX和近似解X如下')

X=X';jX=jX' end end

X=X';D,U,L,jX=jX' 附录三

A=[4-10;-14-1;0-14];

D=eig(A)%求矩阵的特征值

max=D(1,1);%通过循环求出最大特征值 fori=2:3

ifD(i,1)>=max max=D(i,1); end end

max%矩阵A的最大特征值 b=[10;8;10];

x0=inv(A)*b%求方程组的精确解

%通过松弛因子的不同选取及Richardson迭代求解 %并依据迭代次数的不同选出最佳松弛因子

forw=0.1:0.005:(2/max)%松弛因子取值范围最大到矩阵A的最大特征值分之2 x1=[0;0;0]; B=eye(3)-w*A; f=w*b; k=0;

whilenorm(x1-x0)>=1e-5%迭代结果与精确解二范数之差小于10e-5迭代结束 x2=B*x1+f; x1=x2; k=k+1; end

formatlong;

x2=[x2(1)x2(2)x2(3)]%迭代结果 [wk]%选取的松弛因子及迭代次数 end

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务