迭代法解线性方程组-数值分析实验报告_第1页
迭代法解线性方程组-数值分析实验报告_第2页
迭代法解线性方程组-数值分析实验报告_第3页
迭代法解线性方程组-数值分析实验报告_第4页
迭代法解线性方程组-数值分析实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上数学与计算科学学院数值分析 课程设计题 目: 迭代法解线性方程组 专 业: 信息与计算科学 学 号: -24 姓 名: 谭 孜 指导教师: 郭 兵 成 绩: 二零一六年 六月 二十日一 、前言:(目的和意义) 1.实验目的  掌握用迭代法求解线性方程组的基本思想和步骤。 了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。  2.实验意义    迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。迭代法的基本思想是用逐次逼近的方法求解线性方程组。比较雅可比迭代法,高斯

2、-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。二、数学原理:设有方程组 将其转化为等价的,便于迭代的形式 (这种转化总能实现,如令),并由此构造迭代公式 式中B称为迭代矩阵,f称为迭代向量。对任意的初始向量,由式可求得向量序列,若,则就是方程或方程的解。此时迭代公式是收敛的,否则称为发散的。构造的迭代公式是否收敛,取决于迭代矩阵B的性1.雅可比迭代法基本原理设有方程组 矩阵形式为,设系数矩阵A为非奇异矩阵,且从式中第i个方程中解出x,得其等价形式 取初始向量,对式应用迭代法,可建立相应的迭代公式: 也可记为矩阵形式: 若将系数矩阵A分解为A=D-L-U, 式中 ,

3、, 。则方程Ax=b变为 得 于是 于是式中中的 。式和式分别称为雅克比迭代法的分量形式和矩阵形式,分量形式用于编程计算,矩阵型式用于讨论迭代法的收敛性。2.高斯赛德尔迭代法高斯赛德尔(Gauss-Seidel)迭代法,其迭代公式为 (i=1,2,n)也可以写成矩阵形式 仍将系数矩阵A分解为 则方程组变为 得 将最新分量代替为旧分量,得 即 于是有 所以 3.超松弛迭代法设已知第k次迭代向量,及第k+1次迭代向量的前i-1个分量,(j=1,2,i-1),现在研究如何求向量的第i个分量。 首先,有高斯赛德尔迭代法求出一个值,记为 (i=1,2,n)再将第k次迭代向量的第i个分量与进行加权平均,得

4、,即: 于是的SOR迭代公式 (i=1,2,n) 或 (i=1,2,n) 当=1时,式即为高斯赛德尔迭代法;当0<<1时,式称为低松弛方法,当某些方程组用高斯赛德尔迭代法不收敛时,可以用低松弛方法获得收敛;当>1时,式称为超松弛方法,可以用来提高收敛速度。将式写成矩阵的形式,得: 即 于是得SOR迭代的矩阵表示 式中 3、 举例说明及代码例1:解下面方程组.(雅克比迭代方法、高斯-赛德尔和松弛法的比较)解:先计算迭代矩阵: BJ与BG的特征值跟收敛半径为 所以,用雅可比迭代法求解,迭代过程收敛,而用高斯-塞德尔迭代法求解,迭代过程发散。取x0=(0;0;0),为达到精度10-

5、5,取w=0.1。雅可比迭代法松弛法3184代码:1. 雅可比迭代法function x,k=jacobi(A,b,x0,esp) %k为迭A=input('Input A=');b=input('Input b=');x0=input('Input x0=');esp=1.0e-5;k=0;n=length(b);x=x0;while max(abs(b-A*x0)>esp&k<=500; for i=1:nsum=0;for j=1:nif j=isum=sum+A(i,j)*x0(j); endendx(i)=(b(i)

6、-sum)/A(i,i); endx0=x;k=k+1;if k>500fprintf('迭代达到上限')returnendendkInput A=1 2 -2;1 1 1;2 2 1;Input b=1 1 1'Input x0=0 0 0'运行结果:k = 3ans = -3 3 12.高斯-赛德尔迭代法clear;clc;A=1 2 -2;1 1 1;2 2 1;b=1 1 1'N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=zeros(N,1);%迭代初始

7、值%-(A=D-E-F)-D=diag(diag(A);E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.0001;%相邻解的距离小于该数时,结束迭代%-开始迭代-for k=1:1000%最大迭代次数为100fprintf('第%d次迭代:',k);y=B*x+g;fprintf('n与上次计算结果的距离(2范数):%f?n',norm(x-y)2); if norm(x-y)<epsbreak;endx=yendx 运行结果:(因为发散结果不能确定)3.松弛迭代法w=0

8、.1;dalt=1.0e-5;A=1 2 -2;1 1 1;2 2 1;b=1 1 1'r=size(b);a=b;x0=zeros(3,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=0 x'while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=root x(i);t=abs(x(i)-t);if t>ee=t;endendrootm=m+

9、1;end运行结果:root = 184.0000 -3.0001 3.0000 1.0000例2:(超松弛法)达到同样的精度10-5,松弛因子的不同,会使得收敛速度大大不同(w取1.01.9)代码:w=1;dalt=1.0e-5;A=4 1 1 1;1 -4 1 1;1 1 -4 1;1 1 1 -4;b=1;1;1;1;r=size(b);a=b;x0=zeros(4,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=0 x'while e>daltro

10、ot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=root x(i);t=abs(x(i)-t);if t>ee=t;endendrootm=m+1;end运行结果整理:松弛因子迭代次数松弛因子迭代次数1.071.6321.181.73368(不收敛)1.2101.81946(不收敛)1.3131.91372(不收敛)1.4171.523例3:用三种方法分别计算下列方程组并进行比较:解: 雅克比迭代法1) 改写成等价形式 2) 构造迭代公式,即为雅可比迭代公式 3) 取初始向量,即代入上式,求出 依次迭代,计算

11、结果如下表:要求精度迭代次数方程组的近似解0.017(1.0994,1.1994,1.2993)0.0019(1.0999,1.1999,1.2999)0.000113(1.1000,1.2000,1.3000) 高斯-赛德尔迭代法 1) 原方程组改为等价方程组 2) 构造迭代公式,即为高斯-赛德尔迭代公式 3) 取初始向量,即代入上式,求出 迭代计算下去,得下表.要求精度迭代次数方程组的近似解0.014(1.0931,1.1957,1.2978)0.0015(1.0991,1.1995,1.2997)0.00017(1.1000,1.2000,1.3000)超松驰迭代法(取松驰因子). 利用

12、SOR方法,构造迭代公式与高斯-赛德尔方法相同,初值为.迭代计算结果列于下表.要求精度迭代次数方程组的近似解0.015(1.0986,1.1998,1.0331)0.0017(1.0999,1.2000,1.2999)0.00018(1.1000,1.2000,1.3000)代码:1.雅可比迭代法function x,k=jacobi(A,b,x0,esp) %k为迭A=input('Input A=');b=input('Input b=');x0=input('Input x0=');esp=1.0e-5;k=0;n=length(b);x=

13、x0;while max(abs(b-A*x0)>esp&k<=500; for i=1:nsum=0;for j=1:nif j=isum=sum+A(i,j)*x0(j); endendx(i)=(b(i)-sum)/A(i,i); endx0=x;k=k+1;if k>500fprintf('迭代达到上限')returnendendkInput A=10 -1 -2;-1 10 -2;-1 -1 5;Input b=7.2 8.3 4.2'Input x0=0 0 0'运行结果:k = 13ans = 1.1000 1.2000

14、1.30002.高斯-赛德尔迭代法clear;clc;A=10 3 1;2 -10 3;1 3 10;b=14 -5 14'N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=zeros(N,1);%迭代初始值%-(A=D-E-F)-D=diag(diag(A);E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.0001;%相邻解的距离小于该数时,结束迭代%-开始迭代-for k=1:100%最大迭代次数为100fprin

15、tf('第%d次迭代:',k);y=B*x+g;fprintf('n与上次计算结果的距离(2范数):%f?n',norm(x-y)2); if norm(x-y)<epsbreak;endx=yendx 运行结果: k= 7x = 1.0000 1.0000 1.00003.松弛迭代法w=1.3;dalt=1.0e-2;A=10,-1,-2;-1,10,-2;-1,-1,5;b=7.2,8.3,4.2'r=size(b);a=b;x0=zeros(3,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t

16、)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=0 x'while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=root x(i);t=abs(x(i)-t);if t>ee=t;endendrootm=m+1;end运行结果:root = 0 0 0 0root = 0 0.9360 1.2007 1.6475root = 1.0000 1.2396 1.3083 1.2602root = 2.0000 1.0618 1.1522 1.2896r

17、oot = 3.0000 1.1025 1.2120 1.3069root = 4.0000 1.1026 1.1985 1.2982root = 5.0000 1.0986 1.1998 1.3001例4:用三种方法分别计算下列方程组并进行比较:解: 雅克比迭代法2) 改写成等价形式 2) 构造迭代公式,即为雅可比迭代公式 3) 取初始向量,即代入上式,求出 依次迭代,计算结果如下表:要求精度迭代次数方程组的近似解0.0121(1.1986,1.3939,1.5977,0.7962)0.00132(1.1996,1.3998,1.5994,0.7999)0.000153(1.2000,1.4

18、000,1.6000,0.8000) 高斯-赛德尔迭代法 1) 原方程组改为等价方程组 2) 构造迭代公式,即为高斯-赛德尔迭代公式 3) 取初始向量,即代入上式,求出 迭代计算下去,得下表.要求精度迭代次数方程组的近似解0.018(1.1880,1.3843,1.5873,0.7936)0.00114(1.1991,1.3988,1.5990,0.7995)0.000119(1.1999,1.3999,1.5999,0.7999)超松驰迭代法(取松驰因子). 利用SOR方法,构造迭代公式与高斯-赛德尔方法相同,初值为.迭代计算结果列于下表.要求精度迭代次数方程组的近似解0.016(1.196

19、1,1.3984,1.5987,0.7994)0.0018(1.1998,1.4000,1.6002,0.8000)0.000112(1.2000,1.4000,1.6000,0.8000)代码:1.雅可比迭代法function x,k=jacobi(A,b,x0,esp) %k为迭A=input('Input A=');b=input('Input b=');x0=input('Input x0=');esp=1.0e-2;k=0;n=length(b);x=x0;while max(abs(b-A*x0)>esp&k<=5

20、00; for i=1:nsum=0;for j=1:nif j=isum=sum+A(i,j)*x0(j); endendx(i)=(b(i)-sum)/A(i,i); endx0=x;k=k+1;if k>500fprintf('迭代达到上限')returnendendkInput A=2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2;Input b=1 0 1 0'Input x0=1 1 1 1'运行结果:k = 21ans = 1.1986 1.3939 1.59770.79622.高斯-赛德尔迭代法clear;clc;

21、A=2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2;b=1 0 1 0'N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=ones(N,1);%迭代初始值%-(A=D-E-F)-D=diag(diag(A);E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.01;%相邻解的距离小于该数时,结束迭代%-开始迭代-for k=1:100%最大迭代次数为100fprintf('第%d次迭代:

22、',k);y=B*x+g;fprintf('n与上次计算结果的距离(2范数):%f?n',norm(x-y)2); if norm(x-y)<epsbreak;endx=yendx 运行结果:k= 8x = 1.1880 1.3843 1.58730.79363.松弛迭代法w=1.4;dalt=1.0e-2;A=2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2;b=1 0 1 0'r=size(b);a=b;x0=ones(4,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=0 x'while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=root x(i);t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论