实验一线性方程组迭代法实验

更新时间:2023-11-08 06:22:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 线性方程组迭代法实验

一、

实验目的

1.掌握用迭代法求解线性方程组的基本思想和计算步骤;

2.能熟练地写出Jacobi迭代法的迭代格式的分量形式,并能比较它们各自的特点及误差估计;

3.理解迭代法的基本原理及特点,并掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代格式的分量形式、矩阵形式及其各自的特点;

4.掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代算法的MATLAB程序实现方法,及了解松弛因子对SOR迭代的影响;

5.用SOR迭代法求解线性方程组时,超松弛因子?的取值大小会对方程组的解造成影响,目的就是能够探索超松弛因子?怎样对解造成影响,通过这个实验我们可以了解?的大致取值范围。

二、

实验题目

1、迭代法的收敛速度

用迭代法分别对n=20,n=200解方程组Ax=b,其中

?4??????A?????????1315131513??134???...15134?15?15??15134?13?15???????11?3?5??4?13?1?34??n?n

(1)选取不同的初值x0和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;

(2)取定初值x0和右端向量b,给定迭代误差,将A的主对角元成倍放大,其余元素不变,用Jacobi迭代法计算多次,比较收敛速度,分析计算结果并给出结论。

2、SOR迭代法松弛因子的选取

(1)给定迭代误差,选取不同的超松弛因子,从1.00到2.00,观察不同的松弛因子对解得影响。然后利用雅可比迭代求的的解与它们比较;

(2)给定迭代误差,选取不同的低松弛因子,从1.00到2.00,观察不同的松弛因子对解得影响。然后利用雅可比迭代求的的解与它们比较。

三、

实验原理

1、迭代法的收敛速度

运用了Jacobi迭代,Gauss-Seidel迭代 1)Jacobi迭代算法:

1. 取初始点x(0),精度要求ε,最大迭代次数N,置k:=0;

xi(k?1)n?2. 由3. 若

x(k?1)1aii(bi-?aj?1,j?iijxj),i?1,?,n(k),计算出x(k+1);

?x(k)???,则停算,输出x(k+1)作为方程组的近似解;

4. 若k=N,则停算,输出迭代失败信息;否则置k:=k+1,转步2。 2)Gauss-Seidel迭代算法:

1.输入矩阵A,右端向量b,初始点x(0),精度要求ε,最大迭代次数N,置k:=0; 2.计算

n?(0)x1??b1-?a1jxj?j?2?i-1?xi??bi-?aijxj??j?1?n-1?(0)xn??bn-?anjxj?j?1???a11,??n?aijxj(0)j?i?1??aii,i?2,?,n?1,????ann??

3.若

x?x(0)???,则停算,输出x作为方程组的近似解;

4. 若k=N,则停算,输出迭代失败信息;否则置x(0):=x,k:=k+1,转步骤2。 2、SOR迭代法松弛因子的选取

(1)逐次超松弛迭代法是Gauss-Seidel迭代法的加速。 Gauss-Seidel迭代格式为:

X^(k+1)=D^-1*L*x^(k+1)+D^-1*U*x^(k)+ D^-1*b (2)SOR迭代格式为

X^(k+1)=(I-w D^-1*L)^-1*[(1-w)I+w D^-1*U]*x^(k)+w(I-w D^-1*L)^-1* D^-1*b

其中,w叫做松弛因子,当w>1时叫超松弛,当1>w>0时叫低松弛。W=1是Gauss-Seidel迭代法;

(3)SOR迭代法的算法:输入矩阵A,向量b,初始点x^(0),精确度,最大迭代次数N,松弛因子的选取;进行迭代;判断迭代的情况。

四、 实验内容

1、迭代法的收敛速度

1.1实验步骤:

(1)打开matlab软件,新建一个M文件,编写程序(如下),运行程序,记录结果;

(2)把程序中x0=ones(n,1)改为x0=eye(n,1),运行程序,记录结果; (3)把程序中A(i,i)=m改为A(i,i)=2*m,注释掉x1=majacobi(A,b);x1'后面的部分,运行程序,记录结果;

(4)仿照(3)再把主对角元成倍放大,运行程序,记录结果。 1.2实验程序: clc n=20; A=zeros(n); m=4;

for i=1:n

A(i,i)=m; end

for i=1:n-1

A(i,i+1)=-1/3; A(i+1,i)=-1/3; end

for i=1:n-2

A(i,i+2)=-1/5; A(i+2,i)=-1/5; end

x0=ones(n,1); b=A*x0;

x1=majacobi(A,b);x1' x2=maseidel(A,b);x2' norm(x1-x2)

1.3实验设备: matlab软件。 2、SOR迭代法松弛因子的选取

2.1.实验步骤:

(1) 数据准备:A=12*eye(200,200); for i=1:199 A(i,i+1)=-2; A(i+1,i)=-2; end

for j=1:198 A(j,j+2)=1; A(j+2,j)=1; end

b=5*ones(200,1);

(2)给定迭代误差1e-6,取?=1.00,1.10,1.20,1.30,1.40,1.50,1.60,1.70,1.80,1.90,

1.91,1.92,1.95,1.97,1.98,1.99,2.00,代入x=masor(A,b,?),x20=majacobi(A,b) 并利用norm(x-x20)分别分析与雅可比迭代求的解的误差;

(3) 给定迭代误差1e-6,取?=0.02,0.03,0.040.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,

0.90,0.97.0.98,0.99,代入x=masor(A,b,?),x20=majacobi(A,b)并利用norm(x-x20) 分别分析与雅可比迭代求的解的误差。

五、 实验结果

1、迭代法的收敛速度

(1)对于n=20时: n = 20

Columns 1 through 12

4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 0 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0

0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 0 0 0 0 0 0 0 0 0 -0.2000 -0.3333 4.0000 0 0 0 0 0 0 0 0 0 0 -0.2000 -0.3333 0 0 0 0 0 0 0 0 0 0 0 -0.2000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Columns 13 through 20

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2000 0 0 0 0 0 0 0 -0.3333 -0.2000 0 0 0 0 0 0 4.0000 -0.3333 -0.2000 0 0 0 0 0 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0

-0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0

0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 -0.2000 0 0 0 0 -0.2000 -0.3333 4.0000 -0.3333 0 0 0 0 0 -0.2000 -0.3333 4.0000

k= 11

x1 =1.0000 ……

1.0000 //有20个1.0000 k= 8

x2 =1.0000 ……

1.0000 //有20个1.0000 ans = 3.3039e-007

0 0 0 0 0 0 0 0 0

当n=200时:

A由于阶数太大省略; k= 11

x1=1.0000 ……

1.0000 //有200个1.0000 k= 8

x2=1.0000 ……

1.0000 //有200个1.0000 ans = 1.1368e-006 (2)k= 4 x1 = 1.0000 ……

1.0000(20阶) k= 4

x2 = 1.0000 ……

1.0000(20阶) ans =4.8999e-008

2、SOR迭代法松弛因子的选取 表1-1 ?>1的情况 ? k 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 1.91 1.92 1.95 1.97 1.98 1.99

表1-2 ?<1的情况

8 10 12 16 20 26 36 51 83 177 198 224 321 471 >500 >500 Norm(x-x20) 9.7346e-007 9.6821e-007 1.0307e-006 1.0200e-006 1.1434e-006 1.2691e-006 1.2272e-006 1.4364e-006 1.4657e-006 1.7205e-006 1.7542e-006 2.2548e-006 1.5060e-006 1.8146e-006 ? 0.00 0.02 0.03 0.04 0.10 0.20 0.30 0,40 0.50 0.60 0.70 0.80 0.90 0.97 0.98 0.99 k >500 386 297 126 64 42 30 23 18 14 11 9 8 8 8 Norm(x-x20) 3.8618e-004 2.8217e-004 1.0286e-004 4.0889e-005 2.1010e-005 1.4555e-005 8.1655e-006 5.0040e-006 3.7920e-006 2.3675e-006 1.0772e-006 9.7786e-007 9.7481e-007 9.7361e-007 六、

实验结果分析

1、迭代法的收敛速度的实验

结果分析:

比较实验结果可知,选取不同的初值x0和不同的右端向量b,所求得的结果也会不同,Jacobi迭代和Seidel迭代的误差也会随之改变,说明初值对实验结果有影响,由迭代误差可知Seidel迭代优于Jacobi迭代。再比较实验结果,由k=6与k=5可知,主对角元越大,Jacobi迭代收敛越快。

2、SOR迭代法松弛因子的选取的实验 结果分析:

(1)由表1-1可以看出,在其它条件不变的情况下,改变?的值,会改变解得值,且?越接近于1,误差越小,越接近于2,误差越大,而且当?的值越大,它的迭代次数越大,就本例而言,当?为1.98时,就因迭代次数过大,跳出程序;

(2)由表1-2可以看出,在其它条件不变的情况下,改变?的值,会改变解得值,且?越接近于1,误差越小,越接近于0,误差越大,且迭代次数也越大,就本例而言,当?为0.02时,就因迭代次数过大,跳出程序,且?不能取值为0;

(3)综上(1)(2)所述,?的取值范围为0

本文来源:https://www.bwwdw.com/article/j532.html

Top