实验报告四线性方程组的求解迭代.docx
《实验报告四线性方程组的求解迭代.docx》由会员分享,可在线阅读,更多相关《实验报告四线性方程组的求解迭代.docx(27页珍藏版)》请在冰点文库上搜索。
![实验报告四线性方程组的求解迭代.docx](https://file1.bingdoc.com/fileroot1/2023-6/28/b17a686a-0758-4539-9d3d-4ea657edb62e/b17a686a-0758-4539-9d3d-4ea657edb62e1.gif)
实验报告四线性方程组的求解迭代
浙江大学城市学院实验报告
课程名称科学计算
实验项目名称线性方程组的求解-迭代法
实验成绩指导老师(签名)日期2012-4-6
一.实验目的和要求
1.掌握Jacobi迭代方法.Gauss-Seidel迭代方法.SOR迭代方法的编程思想.能够分别用分量形式和矩阵形式编写相关程序。
2.观察SOR迭代法中松弛因子变化情况对收敛的影响。
3.了解Hilbert矩阵的病态性和作为线性方程组系数矩阵的收敛性。
二.实验内容和原理
编程题2-1要求写出Matlab源程序(m文件).并有适当的注释语句;分析应用题2-2.2-3.2-4要求将问题的分析过程、Matlab源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1编程注释
设
对下述求解线性方程组的Matlab程序添上注释语句.其中
和
分别为线性方程组的系数矩阵和右端向量;
为迭代初始向量
;
为容许迭代最大次数.
为迭代终止条件的精度(容许误差).终止条件为前后两次迭代解的差的向量2-范数。
1)Jacobi迭代:
2)Gauss-Seidel迭代:
GaussSeidelmethod(A,b,x0,Nmax,eps)
3)松弛迭代:
SORmethod(A,b,x0,Nmax,eps,w)
2-2分析应用题
利用2-1中的程序来分析用下列迭代法解线性方程组:
的收敛性.并求出使
的近似解及相应的迭代次数.其中取迭代初始向量
为零向量。
1)Jacobi迭代法;
2)Gauss-Seidel迭代法;
3)松弛迭代法(松弛因子依次取1.334.1.95.0.95)。
2-3分析应用题
考虑方程组
.其中系数矩阵
为Hilbert矩阵.
选择问题的维数
分别为2、3、5、10.并通过首先给定解再定出右端的办法确定问题.解的给定可以使用函数
定义.并取迭代初始向量
为零向量.迭代误差为
.编写程序:
其中n为Hilbert矩阵的维数.分别构造求解该问题的Jacobi迭代和Gauss-Seidel迭代.看它们是否收敛。
2-4分析应用题
解线性方程组
的解向量.取
.其中
为任一非零的六元向量;编写程序输出结果:
认真观察之.能发现什么有趣的现象?
【MATLAB相关函数】
⏹提取(产生)对角阵
v=diag(x)若输入向量x.则输出v是以x为对角元素的对角阵;若输入矩阵x.则输出v是x的对角元素构成的向量
v=diag(diag(x))输入矩阵x.输出v是x的对角元素构成的对角阵.可用于迭代法中从A中提取D。
⏹提取(产生)上(下)三角阵
v=triu(x)输入矩阵x.输出v是x的上三角阵;
v=tril(x)输入矩阵x.输出v是x的下三角阵;
v=triu(x,1)输入矩阵x.输出v是x的上三角阵.但对角元素为0.可用于迭代法中从A中提取U。
v=tril(x,-1)输入矩阵x.输出v是x的下三角阵.但对角元素为0.可用于迭代法中从A中提取L。
⏹矩阵特征值
b=eig(A)输入矩阵A.输出b是A的所有特征值。
⏹范数
n=norm(x)输入x为向量或矩阵.输出为x的2范数;
n=norm(x,p)输入x为向量或矩阵.当p=1,inf时分别输出为x的1.无穷范数;
⏹Hilbert矩阵
h=hilb(n)输出h为n阶Hilbert矩阵
三.操作方法与实验步骤(包括实验数据记录和处理)
2-1编程注释
设
对下述求解线性方程组的Matlab程序添上注释语句.其中
和
分别为线性方程组的系数矩阵和右端向量;
为迭代初始向量
;
为容许迭代最大次数.
为迭代终止条件的精度(容许误差).终止条件为前后两次迭代解的差的向量2-范数。
1)Jacobi迭代:
function[X]=Jacobimethod(A,b,X0,P,Nmax,eps)
%A和b分别为线性方程组的系数矩阵和右端向量;x0为迭代初始向量X0;Nmax为容许迭代最大%次数.eps为迭代终止条件的精度(容许误差).终止条件为前后两次迭代解的差的向量2-范数%P=1.2.inf或’fro.’
%输出的量:
系数矩阵
的
的值和有关雅可比迭代收敛性的相关信息及AX=b的精确解jX和近似解X
[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:
Nmax
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(djwcXdisp('请注意:
雅可比迭代收敛.此方程的精确解jX和近似解X如下:
')
return
end
end
if(djwcX>eps)&&(xdwcX>eps)
disp('请注意:
雅可比迭代次数已经超过最大迭代次数Nmax')
end
a,X=X;jX=X1',
end
2)Gauss-Seidel迭代:
GaussSeidelmethod(A,b,x0,Nmax,eps)
function[x]=GaussSeidelmethod(A,b,x0,P,Nmax,wucha)
%输入的量:
线性方程组AX=b的系数矩阵A和b.初始向量x0.范数的名称P=1.2.inf或'fro.'.%近似解x的误差(精度)wucha和迭代的最大次数Nmax。
%输出的量:
以系数矩阵
的对角元构成对角矩阵D、A的上三角形矩阵U.但对角
%元为0、A的下三角矩阵L.但对角元为0和有关高斯-赛德尔迭代收敛性的相关信息及其AX=b
%的精确解jx和近似解x。
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:
Nmax
x1=B2*x+f2;djwcx=norm(x1-x,P);
xdwcx=djwcx/(norm(x,P)+eps);
if(djwcxreturn
else
k;x1';k=k+1;x=x1;
end
end
if(djwcxdisp('请注意:
高斯-赛德尔迭代收敛.此A的分解矩阵D.U,L和方程组的精确解jx和近似解如下:
')
else
disp('请注意:
高斯-赛德尔迭代的结果没有达到给定的精度.并且迭代次数已经超过最大迭代次数Nmax.方程组的精确解jx和迭代向量x如下:
')
x=x';jx=jx'
end
end
x=x';D,U,L,jx=jx'
3)松弛迭代:
SORmethod(A,b,x0,Nmax,eps,w)
function[x]=SORmethod(A,b,x,Nmax,wucha,w)
%输入的量:
线性方程组AX=b的系数矩阵A和b.初始向量x.范数名称P=1.2.inf.或'fro.'.%松弛因子w.近似解x的误差(精度)wucha和迭代的最大次数Nmax。
%输出的量:
谱半径mH.以系数矩阵A的对角元构成的对角矩阵D、A的上三角矩阵U.但对角%元为0、A的下三角矩阵L.但对角元为0.迭代次数i.有关超松弛迭代收敛性的相关信息
%及其AX=b的精确解jx和近似解x。
D=diag(diag(A));U=-triu(A,1);
L=-tril(A,-1);jx=A\b;[nm]=size(A);
iD=inv(D-w*L);B2=iD*(w*U+(1-w)*D);
H=eig(B2);mH=norm(H,inf);
fork=1:
Nmax
iD=inv(D-w*L);B2=iD*(w*U+(1-w)*D);
f2=w*iD*b;x1=B2*x+f2;
x=x1;djwcx=norm(x1-jx,inf);xdwcx=djwcx/(norm(x,inf)+eps);
if(djwcxdisp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jx.迭代次数i如下:
')
mH,D,U,L,jx=jx',i=k-1,
return
ifi>Nmax
disp('迭代次数已经超过最大迭代次数Nmax.谱半径mH.方程组的精确解jx.迭代次数i如下:
')
mH,D,U,L,jx=jx',i=k-1,
end
end
end
ifmH>=1
disp('请注意:
因为谱半径不小于1.所以超松弛迭代序列发散.')
disp('谱半径mH.A的分解矩阵D,U,L和方程组的精确解jx.迭代次数i和迭代序列x如下:
')
i=k-1,mH,D,U,L,jx,
else
disp('因为谱半径小于1.所以超松弛迭代序列收敛.近似解x如下:
')
end
2-2分析应用题
利用2-1中的程序来分析用下列迭代法解线性方程组:
的收敛性.并求出使
的近似解及相应的迭代次数.其中取迭代初始向量
为零向量。
1)Jacobi迭代法;
2)Gauss-Seidel迭代法;
3)松弛迭代法(松弛因子依次取1.334.1.95.0.95)。
解:
1)>>A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];
b=[0;5;-2;5;-2;6];
X0=[000000]';
X=Jacobimethod(A,b,X0,inf,0.0001,100)
请注意:
系数矩阵A是严格对角占优的.此方程组有唯一解.且雅可比迭代收敛
k=
1
X=
01.2500-0.50001.2500-0.50001.5000
k=
2
X=
0.62501.00000.50001.00000.50001.2500
k=
3
X=
0.50001.65630.31251.65630.31251.7500
k=
4
X=
0.82811.53130.76561.53130.76561.6563
k=
5
X=
0.76561.83980.67971.83980.67971.8828
k=
6
X=
0.91991.78130.89061.78130.89061.8398
k=
7
X=
0.89061.92530.85061.92530.85061.9453
k=
8
X=
0.96261.89790.94901.89790.94901.9253
k=
9
X=
0.94901.96510.93031.96510.93031.9745
k=
10
X=
0.98261.95240.97621.95240.97621.9651
k=
11
X=
0.97621.98370.96751.98370.96751.9881
k=
12
X=
0.99191.97780.98891.97780.98891.9837
k=
13
X=
0.98891.99240.98481.99240.98481.9944
k=
14
X=
0.99621.98960.99481.98960.99481.9924
k=
15
X=
0.99481.99650.99291.99650.99291.9974
k=
16
X=
0.99821.99520.99761.99520.99761.9965
k=
17
X=
0.99761.99830.99671.99830.99671.9988
k=
18
X=
0.99921.99770.99891.99770.99891.9983
k=
19
X=
0.99891.99920.99851.99920.99851.9994
k=
20
X=
0.99961.99890.99951.99890.99951.9992
k=
21
X=
0.99951.99960.99931.99960.99931.9997
k=
22
X=
0.99981.99950.99981.99950.99981.9996
k=
23
X=
0.99981.99980.99971.99980.99971.9999
k=
24
X=
0.99991.99980.99991.99980.99991.9998
k=
25
X=
0.99991.99990.99981.99990.99981.9999
k=
26
X=
1.00001.99990.99991.99990.99991.9999
k=
27
X=
0.99992.00000.99992.00000.99992.0000
请注意:
雅可比迭代收敛.此方程组的精确解jx和近似解x如下:
X=
0.99992.00000.99992.00000.99992.0000
2)
>>A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];
b=[0;5;-2;5;-2;6];
x0=[000000]';
x=GaussSeidelmethod(A,b,x0,inf,100,0.0001)
请注意:
因为对角矩阵D非奇异.所以此方程组有解.
k=
1
ans=
01.2500-0.18751.20310.11331.4814
k=
2
ans=
0.61331.38480.51731.56100.60681.7810
k=
3
ans=
0.73641.71510.76431.77690.81831.8956
k=
4
ans=
0.87301.86390.88411.89380.91331.9494
k=
5
ans=
0.93941.93420.94441.94930.95821.9756
k=
6
ans=
0.97091.96840.97331.97560.97991.9883
k=
7
ans=
0.98601.98480.98721.98830.99031.9944
k=
8
ans=
0.99331.99270.99381.99440.99541.9973
k=
9
ans=
0.99681.99650.99701.99730.99781.9987
k=
10
ans=
0.99841.99830.99861.99870.99891.9994
k=
11
ans=
0.99931.99920.99931.99940.99951.9997
k=
12
ans=
0.99961.99960.99971.99970.99981.9999
k=
13
ans=
0.99981.99980.99981.99990.99991.9999
x=
0.9998
1.9998
0.9998
1.9999
0.9999
1.9999
3)
当w=1.334:
A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];
b=[0;5;-2;5;-2;6];
x0=[000000]';
x=SORmethod(A,b,x,100,0.0001,1.334)
谱半径mH,A的分解矩阵D,U,L和方程组的精确解jx.迭代次数i如下:
mH=
0.4305
D=
400000
040000
004000
000400
000040
000004
U=
010100
001010
000101
000010
000001
000000
L=
000000
100000
010000
101000
010100
001010
jx=
1.00002.00001.00002.00001.00002.0000
i=
0
x=
0.9999
2.0000
1.0000
2.0000
1.0000
2.0000
当w=1.95:
>>A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];
b=[0;5;-2;5;-2;6];
x0=[000000]';
x=SORmethod(A,b,x,100,0.0001,1.95)
谱半径mH,A的分解矩阵D,U,L和方程组的精确解jx.迭代次数i如下:
mH=
0.9589
D=
400000
040000
004000
000400
000040
000004
U=
010100
001010
000101
000010
000001
000000
L=
000000
100000
010000
101000
010100
001010
jx=
1.00002.00001.00002.00001.00002.0000
i=
0
x=
1.0000
2.0000
1.0000
2.0000
1.0000
2.0000
当w=0.95:
>>A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];
b=[0;5;-2;5;-2;6];
x0=[000000]';
x=SORmethod(A,b,x,100,0.0001,0.95)
谱半径mH,A的分解矩阵D,U,L和方程组的精确解jx.迭代次数i如下:
mH=
0.5260
D=
400000
040000
004000
000400
000040
000004
U=
010100
001010
000101
000010
000001
000000
L=
000000
100000
010000
101000
010100
001010
jx=
1.00002.00001.00002.00001.00002.0000
i=
0
x=
1.0000
2.0000
1.0000
2.0000
1.0000
2.0000
2-3分析应用题
考虑方程组
.其中系数矩阵
为Hilbert矩阵.
选择问题的维数
分别为2、3、5、10.并通过首先给定解再定出右端的办法确定问题.解的给定可以使用函数
定义.并取迭代初始向量
为零向量.迭代误差为
.编写程序:
其中n为Hilbert矩阵的维数.分别构造求解该问题的Jacobi迭代和Gauss-Seidel迭代.看它们是否收敛。
2-4分析应用题
解线性方程组
的解向量.取
.其中
为任一非零的六元向量;编写程序输出结果:
认真观察之.能发现什么有趣的现象?
四.实验结果与分析