数值分析课程设计比较各种迭代收敛速度模板Word格式.docx
《数值分析课程设计比较各种迭代收敛速度模板Word格式.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计比较各种迭代收敛速度模板Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
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
高斯—塞德尔迭代误差计算:
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];
6
s(i)=(x1(i)-3.4286)^2+(x2(i)-3.7143)^2+(x3(i)-3.4286)^2;
sqrt(s(i))
表一
雅可比迭代
高斯—塞德尔迭代
次数
X1
X2
X3
误差
1
2.5000
2.0000
2.1594954
2.6250
3.1563
1.4570586
2
3.0000
3.2500
0.7635250
3.5781
3.3945
0.3063667
3
3.3125
3.5000
0.2699683
3.6973
3.4243
0.0383445
4
3.3750
3.6563
0.0954459
3.7122
3.4280
0.0048229
5
3.4141
3.6875
0.0337452
3.7140
3.4285
0.0006782
3.4219
3.7070
0.0119612
3.7143
3.4286
0.0000999
7
3.4268
3.7109
0.0042474
8
3.4277
3.7134
0.0015588
9
3.4283
3.7139
0.0005831
10
3.7142
0.0001732
11
注:
MATLAB计算的误差为16位有效数字,由于表的位置有限,这里只取8位有效数字
画图比较:
画图函数:
k=1:
12;
x=[2.15949540.76352500.26996830.09544590.03374520.01196120.00424740.00155880.00058310.00017320.00017320];
%J的迭代误差
plot(k,x,'
b'
)
holdon
y=[1.45705860.30636670.03834450.00482290.00067820.0];
%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.905
4.000
5.4096
max=
x0=
3.42857.77143.428
松弛因子
迭代次数
0.1000
45
0.2500
13
0.3000
24
0.1500
28
0.2550
0.3200
37
0.
19
0.2600
0.3400
66
x2=
3.7273.76313.727
ans=
0.00013.000
最佳松弛因子
=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)));
n
ifa(i)>
=0
disp('
系数矩阵A不是严格对角占优,此雅可比迭代不一定收敛'
return
ifa(i)<
系数矩阵A不是严格对角占优,方程有唯一解,且雅可比迭代收敛'
fork=1:
max1
k
X(j)=(b(j)-A(j,[1:
j-1,j+1:
m])*X0([1:
m]))/A(j,j);
X,djwcX=norm(X'
-X0,P);
xdwcX=djwcX/(norm(X'
P)+eps);
X0=X'
X1=A\b;
if(djwcX<
wucha)&
(xdwcX<
wucha)
雅可比迭代收敛,方程组的精确解jX和近似解如下'
if(djwcX>
(xdwcX>
雅可比迭代次数已经超过最大迭代次数max1'
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
因为对角矩阵D奇异,此方程组无解'
else
因为对角矩阵D非奇异,此方程组有解'
iD=inv(D-L);
B2=iD*U;
f2=iD*b;
jX=A\b;
X=X0;
X1=B2*X+f2;
djwcX=norm(X1-X,P);
xdwcX=djwcX/(norm(X,P)+eps);
wucha)|(xdwcX<
k,X1'
k=k+1;
X=X1;
G-S迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下'
G-S迭代的结果没有达到给定的精度,而且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和近似解X如下'
X=X'
jX=jX'
D,U,L,jX=jX'
附录三
D=eig(A)%求矩阵的特征值
max=D(1,1);
%经过循环求出最大特征值
fori=2:
ifD(i,1)>
=max
max=D(i,1);
max%矩阵A的最大特征值
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;
formatlong;
x2=[x2
(1)x2
(2)x2(3)]%迭代结果
[wk]%选取的松弛因子及迭代次数