数学实验 5线性代数方程组的数值解法概要Word文档格式.docx
《数学实验 5线性代数方程组的数值解法概要Word文档格式.docx》由会员分享,可在线阅读,更多相关《数学实验 5线性代数方程组的数值解法概要Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
fj=d^-1*b;
x=[x0,zeros(20,m-1)];
%初始化x,其中x1=x0,即初始值
fork=1:
m%人为规定迭代次数,防止不收敛迭代导致死循环
x(:
k+1)=bj*x(:
k)+fj;
%jacobi迭代
ifnorm(x(:
k+1)-x(:
k),inf)<
e
%判断迭代后是否满足迭代中止条件:
y=x(:
1:
k+1);
%赋给y所有中间值和迭代结果
sizej=k;
%若去掉;
号,则输出迭代次数
break%并结束迭代
end%若不成立,继续迭代
end
%以下部分为验证迭代公式收敛的方法,仅需运行一次即可,因为收敛性完全由A矩阵决定,而A
%在本题是固定不变的;
通过判断中B的谱半径或范数大小(B在jacobi迭代法中%为矩阵bj),即可得知收敛性:
e=eig(bj)
%输出全部特征值,若,则收敛
n1=norm(bj,1);
%计算1-范数
n2=norm(bj);
%计算2-范数
nn=norm(bj,inf);
%计算-范数
q=min([n1n2nn])
%由于谱半径不超过人以一种范数,所以只要范数的最小值q<
1,也可判断迭代法收敛
2)Gauss迭代法:
与Jacobi程序结构相同,不再注释
functiony=gauss(a,b,x0,e,m)
bgs=(d-l)^-1*u;
fgs=(d-l)^-1*b;
m
k+1)=bgs*x(:
k)+fgs;
e
y=x(:
sizeg=k;
break
end
end
e=eig(bgs)
n1=norm(bgs,1);
n2=norm(bgs);
nn=norm(bgs,inf);
min([n1n2nn])
3)操作函数:
%构造矩阵A
n=20;
a1=sparse(1:
n,1:
n,3,n,n);
%按稀疏矩阵的输入法构造,比较方便
a2=sparse(1:
n-1,2:
n,-0.5,n,n);
a3=sparse(1:
n-2,3:
n,-0.25,n,n);
a=a1+a2+a3+a2'
+a3'
;
a=full(a);
%还原为满矩阵
%通过给定不同的初始向量x0或者右端项b,以及规定不同的误差要求,进行jacobi和gauss
%迭代,得到的结果y1、y2位两种迭代的次数,同时输出迭代结果,便于分析
b=
x0=
e=
m=
y1=jacobi(a,b,x0,e,m);
y2=gauss(a,b,x0,e,m);
4)改变矩阵A:
先对jacobi函数作一定修正,方便分析,命名为jacobi2,如下:
functiony=jacobi2(a,b,x0,e,m)
%计算范数
nn=norm(bj,inf);
q=min([n1n2nn]);
y
(1)=q;
%输出结果1:
范数的最小值,判断收敛速度的方法
e
y
(2)=k;
%输出结果2:
迭代次数
break
%改变A矩阵主对角元素的值,比较jacobi迭代的收敛速度,即迭代误差满足%时的迭代次数
b=(1:
20)'
%取定b
x0=20*ones(20,1);
%取定x0
e=10^-5;
%取定精度
r=20;
%设置主对角元素扩大的最大倍数
m=50;
r;
a1=k*sparse(1:
%只需更改A的主对角元素
a=a1+a2+a3+a2'
%重新构造A
a=full(a);
y(k,1:
3)=[k,jacobi2(a,b,x0,e,m)];
y%输出对角线扩大倍数\最小范数\迭代次数
2、运行结果分析
1)不同初值(x0)和右端项(b)条件下的解的情况
表一:
收敛性判断
1-范数
2-范数
-范数
Jacobi
0.0163
0.0167
Gauss
0.0008
0.0084
可以看到,矩阵A无论是谱半径或是任意范数的值都小于1,可知在A不变的情况下,Jacobi和Gauss法必然收敛。
2)b取不同的值,x0=20*ones(20,1),e=10^-5,m=50条件下的情况对比
B=[1:
20]’
B=[10:
10:
200]’
B=[20:
-1:
1]’
B=20*ones(20,1)
B=2000*ones(20,1)
24
26
23
30
16
17
15
20
根据1)分析的结果,可以证明无论b取任何值,采用两种方法迭代均收敛,但b的值的变化会影响迭代的次数;
且Gauss迭代法总是比Jacobi迭代法收敛速度更快。
下表列出的是B=[1:
20]’情况下部分结算结果,可以很明显的看到两种迭代法的收敛速度不同:
K=1
K=2
K=3
K=4
K=5
K=6
…
K=22
K=23
K=24
标准值
X1
5.3333
2.7500
1.5394
1.0874
0.8858
0.7982
0.7247
X2
9.0000
4.3333
2.6644
1.9248
1.6082
1.4652
1.3444
X3
11.0000
5.8056
3.7199
2.7801
2.3626
2.1717
2.0072
K=6
K=14
K=15
K=16
2.0540
1.1354
0.8539
0.7657
0.7377
6.5556
2.9432
1.8459
1.5033
1.3949
1.3605
7.5370
3.7386
2.5553
2.1815
2.0627
2.0249
由于精度问题,在迭代的最后几次中从显示的数位已经不能看出标准值与计算值得差别,但是若采用long显示设定,就可以看到更多位小数的显示,其结果符合最初设定的精度e,数据繁琐,略。
3)x0取不同的值,b=20*ones(20,1),e=10^-5,m=50条件下的情况对比
X0=[1:
X0=[10:
X0=[20:
X0=20*ones(20,1)
X0=2000*ones(20,1)
22
27
31
18
根据1)分析的结果,可以证明无论X0取任何值,采用两种方法迭代均收敛,但x0的值的变化会影响迭代的次数;
下表列出的是x0=[1:
20]’情况下部分结算结果,可以很明显的看到两种迭代法的收敛速
度不同:
K=20
K=21
7.2500
8.6250
9.2228
9.4536
9.5541
9.5974
9.6327
7.6667
9.9583
10.814
11.183
11.341
11.411
11.4683
8.1667
10.757
11.816
12.282
12.487
12.579
12.6560
K=13
8.9352
9.4267
9.5720
9.6150
9.6276
8.7083
10.654
11.228
11.398
11.448
11.463
9.8056
11.813
12.408
12.584
12.636
12.650