线性方程组的迭代法及程序实现

合集下载

实验三 迭代法解线性方程组

实验三   迭代法解线性方程组

实验三 迭代法解线性方程组实验目的学会用Jacobi 迭代法、Gauss-Seidel 迭代法和超松驰迭代法求线性方程组解。

学会对迭代法做收敛性分析,研究求方程组解的最优迭代方法。

学会用共轭梯度法求线性方程组的解,研究共轭梯度法的计算效率。

实验要求按照题目要求完成实验内容。

写出相应的Matlab 程序。

给出实验结果。

对实验结果进行分析讨论。

写出相应的实验报告。

实验步骤1、研究Jacobi 迭代法求解线性方程组的方法和相应的收敛性。

(1)用Jacobi 迭代法(Jacobi.m )求解线性方程组⎪⎪⎩⎪⎪⎨⎧-=+--=-+-=--71912263532311321321321x x x x x x x x x (4.31) 取初始点()()Tx 0,0,00=,精度要求为105-=ε。

请给出满足精度要求的迭代次数和相应的计算结果。

function [x,k]=jc(a,b,x0,ep,max)n=length(a);k=0;if nargin<5max=500;endif nargin<4ep=1e-5;endif nargin<3x0=zeros(n,1);y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x0-x,inf)>ep&&k<maxk=k+1;x0=x;for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-a(i,j)*x0(j);endendif abs(a(i,i))<1e-10||k==maxwarning('a(i,i) ̫С');return ;endy(i)=y(i)/a(i,i);endx=y;endend>> a=[11 -3 -2;-1 5 -3;-2 -12 19];>> b=[3 6 -7]';>> [x,k]=jc(a,b)x =0.9999859531466561.9999778590069020.999978180649185k = 33研究相应迭代矩阵的谱半径和Jacobi 迭代的渐近收敛速度。

线性方程组的数值算法C语言实现(附代码)

线性方程组的数值算法C语言实现(附代码)

线性方程组AX=B 的数值计算方法实验一、 实验描述:随着科学技术的发展,线性代数作为高等数学的一个重要组成部分,在科学实践中得到广泛的应用。

本实验的通过C 语言的算法设计以及编程,来实现高斯消元法、三角分解法和解线性方程组的迭代法(雅可比迭代法和高斯-赛德尔迭代法),对指定方程组进行求解。

二、 实验原理:1、高斯消去法:运用高斯消去法解方程组,通常会用到初等变换,以此来得到与原系数矩阵等价的系数矩阵,达到消元的目的。

初等变换有三种:(a)、(交换变换)对调方程组两行;(b)、用非零常数乘以方程组的某一行;(c)、将方程组的某一行乘以一个非零常数,再加到另一行。

通常利用(c),即用一个方程乘以一个常数,再减去另一个方程来置换另一个方程。

在方程组的增广矩阵中用类似的变换,可以化简系数矩阵,求出其中一个解,然后利用回代法,就可以解出所有的解。

2、选主元:若在解方程组过程中,系数矩阵上的对角元素为零的话,会导致解出的结果不正确。

所以在解方程组过程中要避免此种情况的出现,这就需要选择行的判定条件。

经过行变换,使矩阵对角元素均不为零。

这个过程称为选主元。

选主元分平凡选主元和偏序选主元两种。

平凡选主元:如果()0p pp a ≠,不交换行;如果()0p pp a =,寻找第p 行下满足()0p pp a ≠的第一行,设行数为k ,然后交换第k 行和第p 行。

这样新主元就是非零主元。

偏序选主元:为了减小误差的传播,偏序选主元策略首先检查位于主对角线或主对角线下方第p 列的所有元素,确定行k ,它的元素绝对值最大。

然后如果k p >,则交换第k 行和第p 行。

通常用偏序选主元,可以减小计算误差。

3、三角分解法:由于求解上三角或下三角线性方程组很容易所以在解线性方程组时,可将系数矩阵分解为下三角矩阵和上三角矩阵。

其中下三角矩阵的主对角线为1,上三角矩阵的对角线元素非零。

有如下定理:如果非奇异矩阵A 可表示为下三角矩阵L 和上三角矩阵U 的乘积: A LU = (1) 则A 存在一个三角分解。

线性方程组求解的迭代法及Matlab的应用

线性方程组求解的迭代法及Matlab的应用

线性方程组求解的迭代法及Matlab的应用2 定常迭代法 32.1 雅可比迭代法 42.2 高斯-赛德尔迭代法 42.3 超松弛迭代法 52.4 迭代的收敛性分析 62.5 实例 73 不定常迭代 93.1 最速下降法 93.2 共轭梯度法 103.3 实例 114 Matlab在定常迭代与不定常迭代中的应用 124.1 雅可比迭代法的程序 124.2 高斯-赛德尔迭代的程序 134.3 超松弛迭代的程序 134.4 最速下降法的程序 144.5 共轭梯度法的程序 144.6 Matlab实现的实例 154.6.1 定常迭代的收敛速度的比较 154.6.2 超松弛迭代法松弛因子的选择 164.6.3 不定常迭代的收敛速度的比较 18参考文献 20致谢 211 引言1.1 课题的目的和意义数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。

为计算数学的主体部分。

它的主要内容有插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法。

数值分析这门学科有如下特点:面向计算机;有可靠的理论分析;要有好的计算复杂性;要有数值实验;要对算法进行误差分析。

:在许多工程实际应用中,超大规模的线性方程组的数值解法是时常要遇到的问题。

由于线性方程组的维数巨大,给具体的计算带来很大的问题——算法对计算机的内存需求大,算法的收敛速度慢以及计算舍人误差的累积扩张。

这些往往使理论上较好的算法无法真正的应用到工程实际中,因此寻求一种真正能实际应用的数值算法一直是人们关注的问题。

通常求解线性方程组一般可以分为直接解法和迭代解法。

现在流行的算法一般采用迭代的算法来求解线性方程组,这主要是为了加快求解的速度。

另外由于计算机的发展,在许多领域里涌现了一些新型的算法如神经网络,遗传算法,粒子群算法,模拟退火算法以及蚁群算法等。

高斯-赛德尔法--数值分析线性方程组的迭代解法

高斯-赛德尔法--数值分析线性方程组的迭代解法
高斯赛德尔法数值分析线性方程组的迭代解法线性方程组的迭代解法迭代法求解线性方程组高斯赛德尔迭代法高斯赛德尔迭代法原理高斯赛德尔迭代赛德尔迭代法线性方程组的解法pkpm线性方程组解法非线性方程数值解法
实验六、高斯-塞德尔法
一、实验目的
通过本实验学习线性方程组的迭代解法。掌握高斯-赛德尔迭代法编程。
二、计算公式
}
if(k==T)printf("\nNo");
else
printf("\n",k);
for(i=0;i<M;i++)
printf("x(%d)=%15.7f\n",i+1,x[i]);
}
四、例题
书P189页例6:用高斯-塞德尔迭代解线性方程组:
取 使得
#include<math.h>
#define M 3
#define N 4
main()
{
double a[M][N]={{8,-3,2,20},
{4,11,-1,33},
{6,3,12,36},
};
double x[M]={0,0,0};//初值
double r,t,q,eps=0.0000202;//需要精度
if(j!=i)q=q+a[i][j]*x[j];
x[i]=(a[i][N-1]-q)/a[i][i];
if(fabs(x[i]-t)>r)r=fabs(x[i]-t);
}
if(r<eps)break;
printf("\nk=%d,",k);
for(i=0;i<M;i++)
printf("\nx[%d]=%lf",i,x[i]);

Jacobi迭代法求解线性方程组实验报告

Jacobi迭代法求解线性方程组实验报告

仿真平台与工具应用实践Jacobi迭代法求解线性方程组实验报告院系:专业班级:姓名:学号:指导老师:一、实验目的熟悉Jacobi迭代法原理;学习使用Jacobi迭代法求解线性方程组;编程实现该方法;二、实验内容应用Jacobi迭代法解如下线性方程组:, 要求计算精度为三、实验过程(1)、算法理论迭代格式的引出是依据迭代法的基本思想: 构造一个向量系列, 使其收敛至某个极限, 则就是要求的方程组的准确解。

Jacobi迭代将方程组:在假设, 改写成如果引用系数矩阵, 及向量, , ,方程组(1)和(2)分别可写为: 及, 这样就得到了迭代格式用迭代解方程组时, 就可任意取初值带入迭代可知式, 然后求。

但是, 比较大的时候, 写方程组和是很麻烦的, 如果直接由, 能直接得到, 就是矩阵与向量的运算了, 那么如何得到, 呢?实际上, 如果引进非奇异对角矩阵将分解成:要求的解, 实质上就有而是非奇异的, 所以存在, 从而有我们在这里不妨令就得到迭代格式:(2)算法框图(3)、算法程序m 文件:function x=jacobi(A,b,P,delta,n)N=length(b); %返回矩阵b的最大长度for k=1:nfor j=1:Nx(j)=(b(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);enderr=abs(norm(x'-P)); %求(x'-P)模的绝对值P=x';if(err<delta) %判断是否符合精度要求break;endendE=eye(N,N); %产生N行N列矩阵D=diag(diag(A));f=A*inv(D); %f是A乘D的逆矩阵B=E-f;Px=x';k,errBMATLAB代码:>> clear allA=[4, -1, 1;4, -8, 1;-2, 1, 5];b=[7, -21, 15]';P=[0,0,0]';x=jacobi(A,b,P,1e-7,20)(4)、算法实现用迭代法求解方程组:正常计算结果是2, 3, 4 , 下面是程序输出结果:P =2.00004.00003.0000k =17err =9.3859e-008B =0 -0.1250 -0.2000-1.0000 0 -0.20000.5000 0.1250 0x =2.00004.00003.0000四、实验体会五、MATLAB是非常实用的软件, 能够避免大量计算, 简化我们的工作, 带来便捷。

MATLAB代码解线性方程组的迭代法

MATLAB代码解线性方程组的迭代法

MATLAB代码解线性方程组的迭代法解线性方程组的迭代法1.rs里查森迭代法求线性方程组Ax=b的解function[x,n]=rs(A,b,x0,eps,M)if(nargin==3)eps=1.0e-6;%eps表示迭代精度M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000;endI=eye(size(A));n=0;x=x0;tol=1;%迭代过程while(tol>eps)x=(I-A)*x0+b;n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!'); return;endend2.crs里查森参数迭代法求线性方程组Ax=b的解function[x,n]=crs(A,b,x0,w,eps,M)if(nargin==4)eps=1.0e-6;%eps表示迭代精度M=10000;%M表示迭代步数的限制值elseif(nargin==5)M=10000;endI=eye(size(A));n=0;x=x0;tol=1;%迭代过程while(tol>eps)x=(I-w*A)*x0+w*b;n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!'); return;endend3.grs里查森迭代法求线性方程组Ax=b的解function[x,n]=grs(A,b,x0,W,eps,M)if(nargin==4)eps=1.0e-6;%eps表示迭代精度M=10000;%M表示迭代步数的限制值elseif(nargin==5)M=10000;endI=eye(size(A));n=0;x=x0;tol=1;%前后两次迭代结果误差%迭代过程while(tol>eps)x=(I-W*A)*x0+W*b;%迭代公式n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!'); return;endend4.jacobi雅可比迭代法求线性方程组Ax=b的解function[x,n]=jacobi(A,b,x0,eps,varargin)if nargin==3eps=1.0e-6;M=200;elseif nargin<3errorreturnelseif nargin==5M=varargin{1};endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;n=1;%迭代次数while norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend5.gauseidel高斯-赛德尔迭代法求线性方程组Ax=b的解function[x,n]=gauseidel(A,b,x0,eps,M)if nargin==3eps=1.0e-6;M=200;elseif nargin==4M=200;elseif nargin<3errorreturn;endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵G=(D-L)\U;f=(D-L)\b;x=G*x0+f;n=1;%迭代次数while norm(x-x0)>=epsx0=x;x=G*x0+f;n=n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend6.SOR超松弛迭代法求线性方程组Ax=b的解function[x,n]=SOR(A,b,x0,w,eps,M)if nargin==4eps=1.0e-6;M=200;elseif nargin<4errorreturnelseif nargin==5M=200;endif(w<=0||w>=2)error;return;endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;n=1;%迭代次数while norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend7.SSOR对称逐次超松弛迭代法求线性方程组Ax=b的解function[x,n]=SSOR(A,b,x0,w,eps,M)if nargin==4eps=1.0e-6;M=200;elseif nargin<4errorreturnelseif nargin==5M=200;endif(w<=0||w>=2)error;return;endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵B1=inv(D-L*w)*((1-w)*D+w*U);B2=inv(D-U*w)*((1-w)*D+w*L);f1=w*inv((D-L*w))*b;f2=w*inv((D-U*w))*b;x12=B1*x0+f1;x=B2*x12+f2;n=1;%迭代次数while norm(x-x0)>=epsx0=x;x12=B1*x0+f1;x=B2*x12+f2;n=n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend8.JOR雅可比超松弛迭代法求线性方程组Ax=b的解function[x,n]=JOR(A,b,x0,w,eps,M)if nargin==4eps=1.0e-6;M=10000;elseif nargin==5M=10000;endif(w<=0||w>=2)%收敛条件要求error;return;endD=diag(diag(A));%求A的对角矩阵B=w*inv(D);%迭代过程x=x0;n=0;%迭代次数tol=1;%迭代过程while tol>=epsx=x0-B*(A*x0-b);n=n+1;tol=norm(x-x0);x0=x;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!'); return;endend9.twostep两步迭代法求线性方程组Ax=b的解function[x,n]=twostep(A,b,x0,eps,varargin) if nargin==3eps=1.0e-6;M=200;elseif nargin<3errorreturnelseif nargin==5M=varargin{1};endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵B1=(D-L)\U;B2=(D-U)\L;f1=(D-L)\b;f2=(D-U)\b;x12=B1*x0+f1;x=B2*x12+f2;n=1;%迭代次数while norm(x-x0)>=epsx0=x;x12=B1*x0+f1;x=B2*x12+f2;n=n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend10.fastdown最速下降法求线性方程组Ax=b的解function[x,n]=fastdown(A,b,x0,eps)if(nargin==3)eps=1.0e-6;endx=x0;n=0;tol=1;while(tol>eps)%以下过程可参考算法流程r=b-A*x0;d=dot(r,r)/dot(A*r,r);x=x0+d*r;tol=norm(x-x0);x0=x;n=n+1;end11.conjgrad共轭梯度法求线性方程组Ax=b的解function[x,n]=conjgrad(A,b,x0)r1=b-A*x0;p=r1;n=0;for i=1:rank(A)%以下过程可参考算法流程if(dot(p,A*p)< 1.0e-50)%循环结束条件break;endalpha=dot(r1,r1)/dot(p,A*p);x=x0+alpha*p;r2=r1-alpha*A*p;if(r2< 1.0e-50)%循环结束条件break;endbelta=dot(r2,r2)/dot(r1,r1);p=r2+belta*p;n=n+1;end12.preconjgrad预处理共轭梯度法求线性方程组Ax=b的解function[x,n]=preconjgrad(A,b,x0,M,eps)if nargin==4eps=1.0e-6;endr1=b-A*x0;iM=inv(M);z1=iM*r1;p=z1;n=0;tol=1;while tol>=epsalpha=dot(r1,z1)/dot(p,A*p);x=x0+alpha*p;r2=r1-alpha*A*p;z2=iM*r2;belta=dot(r2,z2)/dot(r1,z1);p=z2+belta*p;n=n+1;tol=norm(x-x0);x0=x;%更新迭代值r1=r2;z1=z2;end13.BJ块雅克比迭代法求线性方程组Ax=b的解function[x,N]=BJ(A,b,x0,d,eps,M)if nargin==4eps=1.0e-6;M=10000;elseif nargin<4errorreturnelseif nargin==5M=10000;%参数的默认值endNS=size(A);n=NS(1,1);if(sum(d)~=n)disp('分块错误!');return;endbnum=length(d);bs=ones(bnum,1);for i=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;%获得对角线上每个分块矩阵元素索引的起始值endDB=zeros(n,n);for i=1:bnumendb=bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb);%求A的对角分块矩阵endfor i=1:bnumendb=bs(i,1)+d(i,1)-1;invDB(bs(i,1):endb,bs(i,1):endb)=inv(DB(bs(i,1):endb,bs(i,1):e ndb));%求A的对角分块矩阵的逆矩阵endN=0;tol=1;while tol>=epsx=invDB*(DB-A)*x0+invDB*b;%由于LB+DB=DB-AN=N+1;%迭代步数tol=norm(x-x0);%前后两步迭代结果的误差x0=x;if(N>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend14.BGS块高斯-赛德尔迭代法求线性方程组Ax=b的解function[x,N]=BGS(A,b,x0,d,eps,M)if nargin==4eps=1.0e-6;M=10000;elseif nargin<4errorreturnelseif nargin==5M=10000;endNS=size(A);n=NS(1,1);bnum=length(d);bs=ones(bnum,1);for i=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;%获得对角线上每个分块矩阵元素索引的起始值endDB=zeros(n,n);for i=1:bnumendb=bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb); %求A的对角分块矩阵endLB=-tril(A-DB);%求A的下三角分块阵UB=-triu(A-DB);%求A的上三角分块阵N=0;tol=1;while tol>=epsinvDL=inv(DB-LB);x=invDL*UB*x0+invDL*b;%块迭代公式N=N+1;tol=norm(x-x0);x0=x;if(N>=M)disp('Warning:迭代次数太多,可能不收敛!');return;end15.BSOR块逐次超松弛迭代法求线性方程组Ax=b的解function[x,N]=BSOR(A,b,x0,d,w,eps,M)if nargin==5eps=1.0e-6;M=10000;elseif nargin<5errorreturnelseif nargin==6M=10000;%参数默认值endNS=size(A);n=NS(1,1);bnum=length(d);bs=ones(bnum,1);for i=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;%获得对角线上每个分块矩阵元素索引的起始值endDB=zeros(n,n);for i=1:bnumendb=bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb); %求A的对角矩阵endLB=-tril(A-DB);%求A的下三角阵UB=-triu(A-DB);%求A的上三角阵N=0;iw=1-w;while tol>=epsinvDL=inv(DB-w*LB);x=invDL*(iw*DB+w*UB)*x0+w*invDL*b;%块迭代公式N=N+1;tol=norm(x-x0);x0=x;if(N>=M)disp('Warning:迭代次数太多,可能不收敛!'); return;endend。

解线性方程组的迭代法

解线性方程组的迭代法

0.9906
0.0355
5 1.01159 0.9953
1.01159 0.01159
6 1.000251 1.005795 1.000251 0.005795
7 0.9982364 1.0001255 0.9982364 0.0017636
可见,迭代序列逐次收敛于方程组的解, 而且迭代7次得到精确到小数点后两位的近似解.
a11x1 a12x2 a13x3 b1 a21x1 a22x2 a23x3 b2 a31x1 a32x2 a33x3 b3
从而得迭代公式
x1
a12 a11
x2
a13 a11
x3
b1 a11
x2
a21 a22
x1
a23 a22
x3
b2 a22
x3
a31 a33
M 00.8 00..75
但(M)=0.8<1,所以迭代法 x(k+1)=Mx(k)+g 是收敛的.
由(3.5)式可见,‖M‖越小收敛越快,且当‖x (k) -x(k-1) ‖很小时,‖x(k) –x*‖就很小,实际中用‖x (k) x(k-1) ‖<作为
迭代终止的条件。 例如,对例1中的Jacobi迭代计算结果
+‖x(k+1) –x*‖‖M‖‖x(k) –x(k-1)‖+‖M‖‖x(k) –x*‖ 从而得‖x(k) –x*‖‖M‖‖x (k) -x(k-1) ‖/(1- ‖M‖)
(3.5) (3.6)
估计式(3.5)得证。利用(3.5)式和
‖x(k+1) 得到
-x(k)
‖‖M‖‖x
(k)
-x(k-1)

解线性方程组 的迭代法

基于matlab的线性方程组迭代法(实验报告)

基于matlab的线性方程组迭代法(实验报告)

基于matlab 的线性方程组迭代法实验题目:实验要求:(1)分别试用 Jacobi 和Gauss-Seidel 迭代法计算,要求达到的精度为:(1)()510k k x x +-∞->(2)观测得到的迭代序列是否收敛?若收敛,记录迭代次数并分析计算结果。

实验流程一、迭代法简介 1、 Jacobi 迭代法对于方程组Ax b =有A 非奇异情况下且0ij a ≠时,A 分裂为A D L U =--,可得到:0x B x f =+,其中1110(),B I D A D L U f D b ---=-=+=,得到雅克比迭代法:(0)(1)()0()k k x xB x f +⎧⎪⎨=+⎪⎩初始向量 2、 Gauss-Seidel 迭代法(0)(1)()()k k x x Gx f +⎧⎪⎨=+⎪⎩初始向量 其中11(),()G D L U f D L b --=-=-。

其迭代法优点为只需一组存储单元。

3、 超松弛迭代法(SOR)Gauss-Seidel 迭代法的一种加速方法,ω松弛因子。

(0)(1)()(1)(1))()(1)k k k k k x x Gx f x x x ωω+++⎧⎪⎪=+⎨⎪=+-⎪⎩(初始向量 其中11(),()G D L U f D L b --=-=-。

二、迭代法的matlab 程序1、 Jacobi 迭代法Jacobi.mfunction [y,n]= Jacobi( A,b,x0,e )%JACOBI ÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<4)e=1e-5;endD=diag(diag(A));I=eye(size(A));B=I-D\A;f=D\b;y=x0+2*e;n=0;while norm(y-x0,inf)>ey=x0;x0=B*y+f;n=n+1;endnend2、Gauss-Seidel迭代法GaussSeidel.mfunction [y,n]= GaussSeidel( A,b,x0,e ) %GS ÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<4)e=1e-5;endD=diag(diag(A));I=eye(size(A));L=D-tril(A);U=D-triu(A);f=(D-L)\b;G=(D-L)\U;y=x0+2*e;n=0;while norm(y-x0,inf)>ey=x0;x0=G*y+f;n=n+1;endnend3、超松弛迭代法(SOR) SOR.mfunction [y,n]= SOR( A,b,w,x0,e )%SORÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<5)e=1e-5;endD=diag(diag(A));I=eye(size(A));L=D-tril(A);U=D-triu(A);f=(D-L)\b;G=(D-L)\U;y=x0+2*e;n=0;while norm(y-x0,inf)>ex0=y;x1=G*x0+f;y=(1-w)*x0+w*x1;n=n+1;endnend4、变量初始化creatMatrix.mclear;clc;a=diag(3*ones(1,20));b=diag(-0.5*ones(1,19),1);c=diag(-0.25*ones(1,18),2);A=a+b+b'+c+c';%ϵÊý¾ØÕób=ones(20,1)*7/4;b(1)=9/4;b(20)=9/4;x0=zeros(20,1);A,b,x0,w=1.5建立A数组以及初始化b,松弛因子w,迭代初值x05、程序运行和结果记录solve.mclc;tic,s1=Jacobi(A,b,x0),toctic,s2=GaussSeidel(A,b,x0),toctic,s3=SOR(A,b,w,x0),toc三、计算结果运行程序得到几种方法的计算结果。

第四章 解线性方程组的迭代法

第四章  解线性方程组的迭代法

第四章 解线性方程组的迭代法对于阶数不高的方程组,直接法非常有效,对于阶数高,而系数矩阵稀疏的线性方程组却存在着困难,在这类矩阵中,非零元素较少,若用直接法求解,就要存贮大量零元素。

为减少运算量、节约内存,使用迭代法更有利。

本章介绍迭代法的初步内容。

§1 雅克比法、赛得尔法、超松驰法 1.雅克比(Jacobi )迭代法 设有n 阶方程组⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++nn nn n n n n n n b x a x a x a b x a x a x a b x a x a x a 22112222212111212111 (4.1)若系数矩阵非奇异,且0≠ii a (i = 1, 2,…, n ),将方程组(4.1)改写成()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--11,221112323122221213132121111111n n n n n n nn n n n n n x ax a x a b a x x a x a x a b a x x a x a x a b a x 然后写成迭代格式()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--+++)(11,)(22)(11)1()(2)(323)(121122)1(2)(1)(313)(212111)1(1111k n n n k n k n n nn k n k n n k k k k n n k k k x a x a x a b a x x a x a x a b a x x a x a x a b a x (4.2)(4。

2)式也可以简单地写为),,2,1(1)(1)1(n i x a b a x k j n i j j ij i iik i =⎪⎪⎪⎭⎫ ⎝⎛-=∑≠=+(4.3)对(4。

2)或(4。

3)给定一组初值Tn x x x X ),,()0()0(2)0(1)0( =后,经反复迭代可得到一向量序列T k n k k x x X),()()(1)( =,如果X (k )收敛于T n x x x X ),,(**2*1* =,则),,2,1(*n i x i =就是方程组(4。

数值分析实验报告--实验6--解线性方程组的迭代法

数值分析实验报告--实验6--解线性方程组的迭代法

1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。

实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。

通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。

实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。

1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。

Matlab 脚本文件为Experiment6_1.m 。

迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。

线性方程组的直接解法迭代解法

线性方程组的直接解法迭代解法

广东金融学院实验报告课程名称:数值分析实验目的及要求实验目的:题一:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向最的微小变化对解向最的影响。

比较各种直接接法在解线性方程组中的效果;题二:认识齐种迭代法收敛的含义、影响齐迭代法收敛速度的因素。

实验要求:题一:(1)在MATLAB中编写程序用列主元高斯消去法和LU分解求解上述方程组,输出曲b中矩阵A 及向量b和A二LU分解中的L及U, detA及解向量X.(2)将方程组中的2. 099999改为2. 1, 5. 900001改为5. 9,用列主元高斯消去法求解变换后的方程组,输出解向最x及detA,并与(1)中的结果比较。

(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出方程组的解。

请与列主元高斯消公法和LU分解法求出的解进行比较,体会选主元的方法具有良好的数值稳定性。

用MATLAB的内部曲数det求出系数行列式的值,并与(1)、(2)中输出的系数行列式的值进行比较。

(4)比较以上各种直接解法在解线性方程组中的效果。

题二:(1)选取不同的初始向M:X(0)及右端向最b,给泄迭代误差要求,用Jacobi迭代法和Gauss-Seidel迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。

列岀算法清单。

(2)用SOR迭代法求上述方程组的解,松弛系数血取1<69<2的不同的三个值,在< 10"5时停止迭代,记录迭代次数,分析计算结呆与松弛系数血的关系并得出你的结论。

(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵.再输入命令^inv(A)*b>即可求出上述各个方程组的解.并与上述三种方法求出的解进行比较。

请将比较结果列入卜表。

方程组的解X1 Xr■迭代次数误差楮确解Jacibi解法Gause・seidel 解法SOR 解法00= 60= 60=实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1. Win72. Mat lab 7.0实验内容及步骤(包含简要的实验步骤流程) 实验内容:题一:解卜列线性方程组'10 -7‘X 】、(8、-3 2.099999 62Xr5.9000015-1 5 -15、12> 0< 1 >题二研究解线性方程组 做=b 迭代法的收敛性、收敛速度以及SOR 方法中/佳松弛因子的选取问题, 用迭代法求解做二b,其中・4 -1r■7 A=4 -81 ,b =-21-2 ■1515实验结果(包括程序或图表、结论陈述.数据记录及分析等,可附页)题一:直接解法解线性方程组(1)列主兀高斯消去法与LU 分解求解列主元高斯消去法:编写matalab 程序(见附录gaosi.m ),输出矩阵10.000 -7.000 0.000= 0.000 2.5000-5.000一 0.000 0.0006.0000020.000 0.000 0.000向量8 b =1 8.300 L5.0800J解向量:X = (0 ・-1 , 1 r I )7 其中系数行列式的值det (A )=762.00009LU 分解求解:编J matalab 程序(见附录zhjLU. m 和LU ・m ),执行输出:-1.5 2.300 5.080-3.0001.000000.00000.5000 -25000001.0000 0.2000 -24000000.9600 10.0000 -7.0000 0.0000 1.0000n = 0.0000-0.0000010.0000 2.3000 —0.0000 0.000015000000 57500000.0000 0.0000 0.0000 5.0800在matlab 命令窗II 输入L*U ,可以得到A 二L*U ,即分解结果正确。

线性代数方程组迭代法PPT课件

线性代数方程组迭代法PPT课件

超松弛法
收敛速度快
总结词
总结词
计算量较大
ABCD
详细描述
超松弛法具有较快的收敛速度,尤其对于大型线 性方程组,能够显著减少迭代次数。
详细描述
由于超松弛法的计算量较大,因此在实际应用中 可能需要考虑计算效率的问题。
CHAPTER 04
迭代法的实现步骤
初始化
设置初值
为方程组的解向量设定一个初始值。
迭代法的应用场景
当方程组的系数矩阵难以直接求解时 ,迭代法可以作为一种有效的替代方 案。
在科学计算、工程技术和经济领域中 ,许多问题可以转化为线性代数方程 组求解,而迭代法在这些领域有广泛 的应用。
迭代法的优缺点
优点
迭代法通常比直接法更加灵活和通用,对于大规模和高维度的线性代数方程组, 迭代法更加高效。
缺点
迭代法需要选择合适的迭代公式和参数,并且需要满足收敛条件,否则可能无 法得到正确的解。此外,迭代法的计算过程比较复杂,需要较高的计算成本。
CHAPTER 02
迭代法的基本原理
迭代法的数学模型
迭代法是一种求解线性代数方程组的数值方法,通过不断迭代逼近方程的 解。
迭代法的数学模型通常表示为:$x_{n+1} = T(x_n)$,其中$x_n$表示第 $n$次迭代时的近似解,$T(x)$表示迭代函数。
03
非线性方程组的迭代法在求解优化问题、控制问题 等领域有广泛应用。
在优化问题中的应用
01
迭代法在优化问题中也有广泛应用,如求解无约束优化问题、 约束优化问题和多目标优化问题等。
02
常见的优化问题迭代法包括梯度下降法、牛顿法和共轭梯度法
等。
这些方法通过不断迭代来逼近最优解,广泛应用于机器学习、

简单迭代法求解线性方程组

简单迭代法求解线性方程组

简单迭代法求解线性方程组1.原理:将原线性方程组Ax=b中系数矩阵的主对角线移到一边并将其系数化为一,然后通过迭代的方法求解线性方程组的值。

(1)计算迭代矩阵:将系数矩阵的所有值分别处以各自所在行的主对角线值,然后将主对角线赋值为0。

(2)输入迭代初值,进行迭代将迭代初值存入y[n]矩阵,然后利用迭代式nn=nn+x[i][j]*y[j];y[i]=nn+b[i];经过有限次迭代得到误差要求以内的值2.源程序如下:#include<iostream>#include<math.h>#include<iomanip>using namespace std;#define kk 50 //定义最大方程元数int n,i,c,j,hh,gg,mm;double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ;void main(){cout<<"输入的方程元数"<<endl; //数据的输入cin>>n;cout<<"请输入方程系数矩阵:"<<endl;for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>A[i][j];cout<<"请输入右边向量:"<<endl;for(i=0;i<n;i++)cin>>b[i];cout<<"输入你想要的迭代精度(建议1e-5以上)!"<<endl; cin>>fff;cout<<"输入最大迭代次数(建议300次以上)!"<<endl; cin>>mm;//计算出迭代矩阵for(i=0;i<n;i++){b[i]=b[i]/A[i][i];for(j=0;j<n;j++){if(i==j){x[i][i]=0;}else{x[i][j]=-A[i][j]/A[i][i];}}}//输出迭代矩阵cout<<"计算出迭代矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<x[i][j]<<" ";cout<<b[i]<<" ";cout<<endl;}//赋迭代初值cout<<"输入迭代初值"<<endl;for(i=0;i<n;i++)cin>>y[i];int f=1;//简单迭代法cout<<" ";for(i=1;i<n+1;i++)cout<<"X["<<i<<"]"<<" ";cout<<"精度";cout<<endl;cout<<"迭代初值为: ";cout<<setiosflags(ios::fixed);for(i=0;i<n;i++)cout<<y[i]<<" ";cout<<endl;while(e>fff){for(i=0;i<n;i++){z[i]=y[i];nn=0;for(j=0;j<n;j++){nn=nn+x[i][j]*y[j];y[i]=nn+b[i];}e=fabs(z[0]-y[0]);if(fabs(z[i]-y[i])>e)e=fabs(z[i]-y[i]);if(i==0){cout<<setiosflags(ios::fixed);cout<<"第"<<setw(3)<<setprecision(3)<<f++<<"次迭代"<<" "; }cout<<setiosflags(ios::fixed);cout<<setw(8)<<setprecision(8)<<y[i]<<" ";}cout<<e;cout<<endl;if(f>mm){cout<<"迭代次数大于"<<mm<<"次"<<endl;cout<<"认为方程发散,迭代不收敛"<<endl;exit(1);}}cout<<endl;cout<<endl;cout<<"方程迭代了"<<f-1<<"次,达到你所要求的精度"<<fff<<endl; cout<<"最后结果为:"<<endl;cout<<endl;for(i=0;i<n;i++){cout<<"X"<<"["<<i+1<<"]"<<"="<<y[i];cout<<endl;}exit(1);}3.实验数据和结果:按照提示依次输入方程元数,系数矩阵,右边向量和迭代初值。

数值分析线性方程组迭代法实验

数值分析线性方程组迭代法实验

实验报告
一、实验目的
体会求解线性方程组的Jacobi 迭代法和Gauss-Seidel 迭代法的收敛速度。

二、实验题目
用迭代法分别对200,20==n n 解方程组b Ax =,其中
n
n A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------------------=431513143151513143151513143151513143151314
(1)选取不同的初值0x 和不同的右端向量b ,给定迭代误差,用Jacobi 迭代法和Gauss-Seidel 迭代法计算,观测得到的迭代向量并分析计算结果给出结论;
(2)取定初值0x 和右端向量b ,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。

三、实验原理
求解线性方程组的Jacobi 迭代法和Gauss —Seidel 迭代法
四、实验内容及结果
1.Jacobi 迭代法:
4。

设取定的初值x0=ones(n,1),b=2*ones(n,1);改变A的主对角线元素成倍放大,只需要将第二步中的
五、实验结果分析
(1)前面四个程序输出的结果,都有迭代次数和x的值,说明矩阵是收敛的。

Gauss-seidel的迭代速度比Jacobi的迭代速度快。

(2)观察k值发现迭代次数是减少的,再根据已学的知识,可以推断出随着A的主对角元值的成倍放大收敛的速度加快。

常微分方程的解线性方程组的迭代法

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法【实验容】对1、设线性方程组⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛--------------------------2119381346323125136824381004120291372642212341791110161035243120536217758683233761624491131512013012312240010563568000012132410987654321x x x x x x x x x x()Tx 2,1,1,3,0,2,1,0,1,1*--=2、设对称正定系数阵线性方程组⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛---=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛---------------------45152292320601924336002141103520411144334310422181233416120653811414023121220024042487654321x x x x x x x x ()Tx 2,0,1,1,2,0,1,1*--=3、三对角形线性方程组⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410987654321x x x x x x x x x x ()Tx 1,1,0,3,2,1,0,3,1,2*---=试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。

第5章线性方程组的迭代法资料.

第5章线性方程组的迭代法资料.
第二章 线性方程组的迭代解 法
第一节 基本迭代方法 第二节 迭代法的收敛性
第三节 超松弛迭代法
1
§1 基本迭代方法
一、问题的提出
1.直接方法的缺陷(以Gauss消去法为代表): 对于低中阶数(n≤100)的线性方程组十分有效,但n
很大时,特别是由某些微分方程数值解所提出来的线性方程 组,由于舍入误差的积累以及计算机的存贮困难,直接方法 却无能为力。
...
a x (k) nn 1 n1
bn
可以缩写为:
x (k1) i
1 aii
i 1
aij x j(k )
j 1
n
aij x j(k )
j i 1
bi
(i 1,2, , n)
6
例1 用雅可比迭代法解线性方程组 10x1 x2 2x3 7.2
x1
10x2
2x3

8.3
解 生成雅可比迭代格式:
...
a2n
xn
b2
aii 0
an1 x1 an2 x2 ... ann xn bn
建立迭代格式:
x1
1 a11
x2
1 a22
a12 x2 ... a1n xn b1 a21 x1 ... a2n xn b2
... ... ... ...
xn
1 ann
an1 x1 ... ann1 xn1 bn
4
迭代法要解决的主要问题如下 :
1.如何构造迭代格式?
2.构造的格式所产生的序列在什么情况下收敛?
3.如果收敛,收敛的速率如何? 迭代方程
4.近似解的误差估计。 方程
迭代格式
Ax b x Bx f , x(k1) Bx(k) f , k 1, 2,L

数值分析第三章线性方程组的迭代法课件

数值分析第三章线性方程组的迭代法课件

§ 3.3.2 Gauss—Seidel 迭代法的矩阵表示
将A分裂成A =D+L+U,则Ax b 等价于
(D+L+U )x = b
于是,则高斯—塞德尔迭代过程
Dx(k1) Lx(k1) Ux(k) b
因为 D 0 ,所以 D L D 0

(D L)x(k1) Ux(k) b
x(k1) (D L)1Ux(k) (D L)1b
e(k) x(k) x* Gx(k1) d (Gx* d) G(x(k1) x* ) Ge(k1)
于是 e(k) Ge(k1) G 2e(k2) Gk e(0)
由于 e (0)可以是任意向量,故 e(k) 收敛于0当且仅
故 (D L)x(k1) (1)D U x(k) b
显然对任何一个ω值,(D+ωL)非奇异, (因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b
令 L (D L)1 (1)D U
f (D L)1b
则超松弛迭代 公式可写成
称为雅可比迭代公式, B称为雅可比迭代矩阵
雅可比迭代矩阵表示法,主要是用来讨论其收敛 性,实际计算中,要用雅可比迭代法公式的分量 形式。即
x1(k 1)
1 a11
(a12 x2(k )
a13 x3(k )
a1n xn(k )
b1 )
x2(k 1)
1 a 22
(a21 x1(k )
a23 x3(k )
§ 3.4.2超松弛迭代法的矩阵表示 设线性方程组 Ax=b 的系数矩阵A非奇异,且主对角
元素 aii 0(i 1,2,, n) , 则将A分裂成

里查森迭代法线性方程组求解

里查森迭代法线性方程组求解

function [x,n] = richason(A,b,x0,eps,M)
%采用里查森迭代法求线性方程组 Ax=b的解
%线性方程组的系数矩阵: A
%线性方程组的常数向量: b %迭代初始向量: x0
%解的精度控制: eps
%迭代步数控制: M
%线性方程组的解: x
%求出所需精度的解实际的迭代步数: n
[x1,x2,x 3]=[0.9738,-0.0047,1.0010]
MATLAB程序设计实践
1、编程实现以下科学计算算法,并举一例应用之。 (参考书籍《精
通MALAB科学计算》 ,王正林等著,电子工业出版社,2009
年)
“里查森迭代法线性方程组求解”
解: 算法说明:
里查森迭代法是最简单的迭代法,它的迭代公式为: 中编程实现的里查森迭代法函数为: richason。
x k+1 =( I-A ) *x k +b;在 MA TLAB
if (nargin==3)
eps=1.0e-6;
%eps表示迭代精度
M=200;
%M表示迭代步数的限制值
elseif (nargin==4)
M=200; end
I=eye(size(A));
x1=x0;
x=(I-A)*x0+b;
n=1;
%迭代过程
while (norm(x-x1)>eps)
x1=x;
-0.0092 0.9903 0.0136; 0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >>x0=[0 0 0]'; >> [x,n]=richason(A,b,x0) 输出的计算结果为: x=
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性方程组的迭代法及程序实现学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文题目线性方程组的迭代法及程序实现学生姓名专业班级学号系 (部)数理科学系指导教师职称完成时间 2012年5月20日河南工程学院毕业设计(论文)任务书题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容:通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。

进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。

本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。

通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求:学会编写规范论文,独立自主完成。

运用所学知识发现问题并分析、解决。

3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。

4.在毕业论文工作中强化英语、计算机应用能力。

完成期限: 2012年月指导教师签名:专业负责人签名:年月日目录中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ)1 综述 12 经典迭代法概述3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法5 2.5 收敛性分析5 2.6 数值试验 63 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19线性方程组的迭代法及程序实现摘要线性代数方程组的迭代方法是一种极限方法是解大型稀疏矩阵方程组的有效方法。

它的基本思想是用某种极限过程去逐步逼近线性方程组的精确解,是一种逐步逼近的方法。

迭代法将n阶线性方程组变形为某种迭代公式。

对于任意给定的迭代初始值,由某一迭代格式便可生成一向量序列,我们的目的是求解方程组的解,因此我们会希望向量序列的极限逼近方程组的解。

本文首先介绍了求解大型线性方程组的主要迭代算法,对一些经典迭代法Jacobi方法、Gauss?Seidel方法、SOR方法和SSOR方法进行了详细的讨论,其次着重讨论了经典迭代法的收敛性,详细总结并给出了各种迭代方法的收敛性定理,并通过举例及其Matlab程序实现进一步阐述了迭代法的收敛性。

关键字线性方程组/Jacobi迭代法/Gauss-Seidel方法/SOR方法/收敛性Iterative method and proceduresfor implementationof the linear equationsABSTRACT The iterative method of linear algebraic equations is an extreme method is an effective method for the solution of large sparse matrix equations. The basic idea is to a certain limit process to gradually approach the exact solution of linear equations, a step-by-step approximation method. The iterative method will be iterative formula for a deformation of n linear equations. For any given iteration of the initial value, by an iterative scheme can generate a vector sequence, our aim is the solution to solving the equations, so we will want to limitapproximation the solution of equations of vector sequences. This paper first introduces the main iterative algorithm for solving large linear equations, a detailed discussion of some classical iterative method Jacobi method, Gauss-Seidel method, SOR and SSOR methods, followed focused on the classical iterative convergence of the method, summarized in detail and gives a variety of iterative methods convergence theorem, and further elaborated by example and Matlab program iterative methods.KEYWORDS linear equations , Jacobi iterative method , Gauss-Seidel method ,the SOR method,convergence1 综述在科学研究和大型工程设计中出现了越来越多的数学问题,而这些问题往往需要求数值解。

在进行数值求解时,经离散后,常常归结为求解行如Axb的大型线性方程组。

20世纪50年代至70年代,由于电子计算机的发展,人们开始考虑和研究在计算机上用迭代法求线性方程组Axb的近似解,用某种极限过程去逐渐逼近精确解,并发现了许多非常有效的迭代方法。

迭代法是按照某种规则构造一个向量序列{x},使其极限向量x是Axb的精确解。

因此,对迭代法来说一般有下面几个问题:(1)如何构造迭代序列?(2)构造的迭代序列是否收敛?在什么情况下收敛?(3)如果收敛,收敛的速度如何?我们应该给予量的刻划,用以比较各种迭代法收敛的快慢。

(4)因为计算总是有限次的,所以总要讨论近似解的误差估计和迭代过程的中端处理问题,这又和舍入误差的分析有关。

迭代法具有需要计算机存储单元少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点。

例如Jacobi方法、Gauss-Seidel方法、SOR方法、SSOR方法,这几张迭代方法是最常用的一阶线性定常迭代法。

大量偏微分方程的离散形式是大规模线性代数方程组,其数值计算是科学工程计算的核心,占有绝大部分的总体运算时间,解大规模稀疏线性方程组的Krylov子空间方法显示出与众不同的有效性。

当矩阵是对称正定时,常用的方法是具有短递推的共轭度方法CG。

系数矩阵不对称时,常用的方法中有完全正交化方法(FOM)和广义最小参量方法(GMRES)。

还有很多迭代方法正在被人们发现和研究,新的有效的方法层出不穷,其中基于大型稀疏非Bermitian的正定阵的系数矩阵的Bermitian和Skew-Bermitian分裂的BSS方法,IBSS方法等具有非常好的实用性。

但没有一种算法是通用的,对于具体问题必须根据所得到的线性方程组和算法的特点进行选择。

MATLAB是Mathworks公司的产品,MATLAB的产生是与数学计算紧密联系在一起的,其基本数据结构是矩阵,它的表达式与数学工程计算中使用的形式十分相似,便于用户学习和使用.系统包括5个部分:MATLAB语言、MATLAB工作环境、MATLAB图形处理系统、MATLAB数学函数库和MATLAB应用程序接口.其主要功能包括:数值计算;符号计算;数据分析和可视化;文字处理;Simulink动态仿真.在数值计算中,线性方程组的求解是一个很重要的问题.用MATLAB来求解线性方程组,有几种方法,非常简单,通过对一些矩阵和函数的操作可以轻松地得到线性方程组的解,不需要使用者掌握任何程序设计语言,对迭代法只需编写简单的程序2 经典迭代法概述20世纪50年代至70年代,人们开始考虑和研究用迭代法求解线性方程组(2-1)的近似解,发展了许多有效的方法,其中有Jacobi方法、Gauss-Seidel方法、SOR方法、SSOR方法,这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 的一个分裂:;M为可逆矩阵,线性方程组(2-1)化为:;得到迭代方法的一般公式:(2-2)其中:,。

2.1 Jacobi迭代法若D为A的对角素构成的对角矩阵,且对角线元素全不为零。

系数矩阵A的一个分解:AD-E+F;这里D为A的对角矩阵,E为严格下三角阵,F 为严格上三角阵。

其中:Jacobi迭代的矩阵形式为: (2-3)2-3式中:;,称为Jacobi迭代矩阵。

其计算公式为: (2-4)2.2 Gauss?Seidel迭代法对于非奇异方程组,若D为A的对角素构成的对角矩阵,且对角线元素全不为零;系数矩阵A的一个分解: 2-5Gauss?Seidel迭代矩阵形式为 2-6其计算公式为: (2-7)2.3 SOR(successive over relaxation)迭代法对于非奇异方程组,若D为A的对角素构成的对角矩阵,且对角线元素全不为零;系数矩阵A的一个分解: (2-8)这里D为A的对角素构成的对角矩阵,E为严格下三角形,F为严格上三角形。

SOR迭代法的矩阵形式为:(2-9)计算公式为: (2-10)式中:为实数,称为松弛因子,02。

2.4 SSOR迭代法SSOR(symmetric successive over relaxation)迭代法的矩阵形式为: 2-11SSOR迭代矩阵为:(2-12)计算公式分为以下两步:先按自然次序(i1,2,…,n)用向前的SOR法逐点计算。

2-13然后按相反的次序(in,n-1,…,1)用向后的SOR方法逐点计算。

2-142.5 收敛性分析综合上面前三种迭代格式,它们可以统一表示为下面形式: (2-15)对Jacobi方法来说,,;对Gauss-Seidel方法来说,,;对SOR方法来说,,。

相关文档
最新文档