逐次超松弛迭代法
(完整版)6.4超松弛迭代法
0.75 x2( ( k 1)
6 0.25x3(k
)
7.5
x (k 1) 3
0.25x2(k1)
6
②取ω=1.25 ,即SOR迭代法:
xx21((kk11))
0.25x1(k) 0.9375x2(k) 7.5 0.9375x1(k1) 0.25x2(k) 0.3125x3(k)
-5.0183105
3.1333027
4.0402646
-5.0966863
4
3.0549316
3.9542236
-5.0114410
2.9570512
4.0074838
-4.9734897
5
3.0343323
3.9713898
-5.0071526
3.0037211
4.0029250
-5.0057135
6
3.0214577
3.9821186
-5.0044703
2.9963276
4.0009262
-4.9982822
7 3.0134110
3.9888241
-5.0027940
3.0000498
4.0002586
-5.0003486
迭代法若要精确到七位小数, Gauss-Seidel迭代法需要34次迭代; 而用SOR迭代法(ω=1.25),只需要14次迭代。
因子ω。
返回引用
opt
(1
2
1 [(BJ )]2 )
(4)
这时,有ρ(Bopt
)=
ω
opt
-
1。
SOR法分类与现状
通常,
(1)当ω>1 时,称为超松弛算法; (2)当ω<1 时,称为亚松弛算法。
Jacobi 迭代法与Gauss-Seidel迭代法算法比较
Jacobi 迭代法与Gauss-Seidel迭代法算法比较目录1 引言 (1)1.1Jacobi迭代法 (2)1.2Gauss-Seidel迭代法 (2)1.3逐次超松弛(SOR)迭代法 (3)2算法分析 (3)3 结论 (5)4 附录程序 (5)参考文献 (8)Jacobi 迭代法与Gauss-Seidel 迭代法比较1 引言解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。
这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。
对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。
迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。
即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。
因此迭代法存在收敛性与精度控制的问题。
迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。
设n 元线性微分方程组b Ax = (1)的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。
而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:b x P N =-)(b Px Nx +=b N Px N x 11--+=可得到迭代方法的一般公式:d Gx xk k +=+))1(( (2)其中:P N G 1-=,b N d 1-=,对任取一向量)0(x 作为方程组的初始近似解,按递推公式产生一个向量序列)1(x ,)2(x ,...,)k x(,...,当k 足够大时,此序列就可以作为线性方程组的近似解。
超松弛迭代法及其松弛因子的选取
2013届学士学位毕业论文超松弛迭代法及其松弛因子的选取学号:09404307姓名:程启远班级:信息0901指导教师:崔艳星专业:信息与计算科学系别:数学系完成时间:2013年5月学生诚信承诺书本人郑重声明:所呈交的论文《超松弛迭代中松弛因子的选取方法》是我个人在导师崔艳星指导下进行的研究工作及取得的研究成果.尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得长治学院或其他教育机构的学位或证书所使用过的材料.所有合作者对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意.签名:日期:论文使用授权说明本人完全了解长治学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文.签名:日期:指导教师声明书本人声明:该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性.指导教师签名:时间摘要本文首先给出了超松弛迭代法解线性方程组的基本概念,引进了关于超松弛迭代法收敛性判别的一些定理.再基于超松弛迭代法收敛性快慢与松弛因子的选择密切相关,本文给出了能准确快速地确定最优松弛因子的方法逐步搜索法和黄金分割法,并且写出了其Matlab 程序(附录),最后通过实例验证了方法的准确性,快速性.关键词线性方程组;超松弛迭代;Matlab程序;松弛因子AbstractThis paper firstly introduces the basic concept of the super relaxation iteration method for solving linear equations, introduced on some criterion theorem Overrelaxation iterative convergence, gives a simple Matlab program super relaxation iteration (Appendix 1). Then Overrelaxation iterative convergence speed and relaxation factor is selected based on the close relation is proposed in this paper, the rapid and accurate method of determining the optimal relaxation factor of the direct search method and the golden section method, and write the Matlab program (Appendix 2), finally the method is accurate, rapid.Key word:Linear equations; Successive Over Relaxation; Matlab program; relaxation factor超松弛迭代法及其松弛因子的选取09404307 程启远信息与计算科学指导教师崔艳星引言在科学计算和工程设计中,经常会遇到求解线性代数方程组的问题,而怎样快速的求解一直是我们共同关心的课题.随着计算机技术及数学编程软件的发展,我们有了在计算机上解线性方程组的条件.最初遇到的方程数和未知数比较少的方程组我们就是利用线性代数知识直接解出来.直接解法只能适用于经过有限步运算能求得解的方程组.后来遇到的方程数和未知数都比较多的方程组,特别是经常会遇到的大型的方程组,直接解法工作量太大,花费时间太多,因此迭代法发展了起来.从最初的Jacobi迭代法到Gauss-Seidel迭代法,很多学者一直在研究找到一种迭代法能更加快速,简单的解决线性方程组.通过不断的实验和计算,在Gauss-Seidel迭代法基础上,人们发现通过迭代-松弛—再迭代的方法,能更加减少计算步骤,极大的缩短计算时间,在此基础上,超松弛迭代法被学者们研究出来.通过比较三种迭代方法,我们得到超松弛迭代的收敛速度是最快的,而且超松弛迭代法具有计算公式简单,编制程序容易等突出优点.在求解大型稀疏线性方程组中超松弛迭代法得到广泛应用.而SOR 迭代方法中松弛因子ω的取值直接影响到算法的收敛性及收敛速度,是应用超松弛迭代法的关键.选择得当,可以加快收敛速度,甚至可以使发散的迭代变成收敛.因此, 超松弛因子的选取是学者们又一个研究目标.通过一些被验证的定理,我们知道为了保证迭代过程的收敛,必须要求1<ω<2,而且松弛因子和迭代矩阵谱半径之间有着密切的联系,现今学者们已经研究出部分特殊矩阵的最优松弛因子的计算公式.对于一般的矩阵,我们也可以从松弛因子和谱半径的关系着手研究最优松弛因子的选取,这就为本篇论文的形成提供了行文思路.本文给出了求超松弛迭代最优松弛因子的两种方法.1.超松弛迭代基本知识1.1 超松弛迭代法定义[1]超松弛(Successive Over Relaxation)迭代法,简称SOR 迭代法,它是在Gauss-Seidel 法基础上为提高收敛速度,采用加权平均而得到的新算法.设解方程组的Gauss-Seidel 法记为1(1)(1)()111(),1,2,,i nk k k ii ij j ij j j j i ii x b a x a x i na -++==+=--=∑∑ (1)再由()k ix 与(1)k ix +加权平均得(1)(1)(1)()()()(1)(),1,2,,k k k k k k i i i ii x x xx x x i n ωωω+++=-+=+-=这里ω>0称为松弛参数,将(1)代入则得1(1)()(1)()11(1)(),1,2,,i nk k k k iii ij jijjj j i iix x b a x a xi na ωω-++==+=-+--=∑∑ (2)称为SOR 迭代法,ω>0称为松弛因子,当ω=1时(2)即为Gauss-Seidel 法,将(2)写成矩阵形式,则得(1)()(1)()(1)()k k k k Dx Dx b Lx Ux ωω++=-+++于是得SOR 迭代的矩阵表示[3](1)()k k i x G x f ωω+=+ (3)其中1()[(1)]G D L D U ωωωω-=--+1()f D L b ωωω-=-1.2 收敛性判别条件 根据迭代法收敛性定理[2],SOR 法收敛的充分必要条件为()1G ωρ<,但要计算()G ωρ比较复杂,通常都不用此结论,而直接根据方程组的系数矩阵A 判断SOR 迭代收敛性,下面先给出收敛必要条件. 定理1]4[ 设(),0(1,2,...,)n nij ii A a Ra i n ⨯=∈≠=,则解方程Ax b =的SOR 迭代法收敛的必要条件是0<ω<2. 定理2]5[ 若n nA R ⨯∈对称正定,且0<ω<2,则解Ax=b 的SOR 迭代法(3)对nx R ∀∈迭代收敛.对于SOR 迭代法,松弛因子的选择对收敛速度影响较大,关于最优松弛因子研究较为复杂,且已有不少理论结果.下面只给出一种简单且便于使用的结论. 1.3 收敛速度的估计SOR 迭代法的迭代矩阵G ω与ω有关,当选取不同的ω时,其迭代速度也有所不同.因此,需要找到最优的松弛因子b ω,使对应b ω的SOR 方法收敛最快. 定理3]7[ 设n A Rn ⨯∈,如果存在排列矩阵P ,使1122T D M PAP M D =其中,1D ,2D 为对角矩阵,则称A 是2-循环的.此外,若当0α≠时,矩阵11-1D U D L αα--+的特征值都和α无关,则称A 是相容次序矩阵.定理4]7[ 设n A Rn⨯∈,A 有非零的对角元,且是2-循环和相容次序的矩阵.又设1(U)J B D L -=+是方程组A x b =的Jacobi 法迭代的迭代矩阵,且2B 的所有特征值均在(0,1)上,若()1J B ρ<,记()J B μρ=,则SOR 法的最优松弛因子b ω为211b ωμ=+-且222[4(1)]()1,2bb G ωωμωμωωωρωωω⎧+--⎪<<=⎪-<<⎩02()min ()bb G G ωωωρρ≤≤=图12 松弛因子选取方法方法思想]8[:(1)给出ω的范围,当取不同的ω值时,进行迭代,在符合同一个精度要求下依次求出谱半径的值,比较出最小的谱半径,那么这个最小的谱半径所对应的的ω,即为所求最佳松弛因子.(2)给出ω的范围,当取不同的ω值时,进行迭代,看它们在相同精度范围内的迭代次数,找到迭代次数最少的那一个,其所对应的ω即为最佳松弛因子.” 2.1 逐步搜索法 算法:Step 1:读入线性方程组的系数矩阵,常数向量,初值,精度,给出ω的取值范围,以及其变化步长;Step 2:按照如下公式迭代(1)()k k i x G x f ωω+=+找出符合精度要求ε的迭代次数及谱半径;Step 3:循环迭代,最后找到最优松弛因子Step 4: 改变ω的取值范围,重新设定变化步长,重复Step2. 2.2 黄金分割法从定理4我们可以看到,最优松弛因子对应的谱半径最小,而黄金分割法对于数值求解单调函数的极小和极大值是非常方便和有效的]9[,因此,我们可以把黄金分割法应用在求最优松弛因子上,其算法与主要思想是: Step1:利用优选法思想,在)2,1(之间选取四个点,12441314141,0.618(),0.618(),2p p p p p p p p p p ==--=+-=Step 2: 分别取2p 与3p 作为松弛因子代入迭代程序,比较出最少的迭代次数,如果对2p 应的迭代次数少,则选取),(31p p 作为收敛区间,如果是对应的3p 迭代次数少,则选取),(42p p 作为收敛区间.Step 3: 在所选取的收敛区间里循环进行上述的两个步骤,直到选取出满足精度要求且2p ,3p 所对应的迭代次数差不超过某个数∆时选3p 为最优松弛因子.3 数值算例例1: 矩阵3101130000311013A -⎡⎤⎢⎥-⎢⎥=⎢⎥-⎢⎥-⎣⎦(1,2,2,1)T b =----,精度为161.0*10k k x x ---≤解法1:黄金分割法令05.0=∆,程序结果如下:由上可以看出我们只需作几次0.618法就可以找到最优松弛因子,本例中最优松弛因子0901.1=ω,迭代次数为8次.解法2:逐步搜索法,步长为0.1,21<≤ω程序结果如下:图3图3中,其横坐标表示松弛因子,纵坐标表示谱半径.也可以求出最优松弛因子为1.1,迭代次数为8.然后我们改变松弛因子区间,令1.11≤≤ω以步长为0.01来继续求更精确的松弛因子.程序结果如下:图4图4中,其横坐标表示松弛因子,纵坐标表示谱半径.这样继续缩小松弛因子范围,以更小的步长求得的最优松弛因子为1.0900,更加精确. 例2 方程组A x b =,⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=40001-1-1-0004001-01-1-0004001-1-01-0004001-1-1-1-1-00400001-01-00400001-1-1-0040001-01-00040001-1-00004A T (2,2,0,2,2,1,1,1,1)b =.精度为161.0*10k k x x ---≤.初始迭代值为0(0,0,0,0,0,0,0,0,0)T x =.求最优松弛因子.解法1 黄金分割法令001.0=∆,程序结果如下:求得最优松弛因子为1.1772.解法2 逐步搜索法首先以21<≤ω,步长为0.1搜索求得的最优松弛因子为1.2000,然后重新设定范围,以步长为0.01运行程序在改变范围,以步长为0.001运行,程序结果如下:求得的最优松弛因子为1.1780.由这两个例子可以看出利用黄金分割法求最优松弛因子比用逐步搜索法更加简便快速,但是用逐步搜索法步长取的很小时求得的松弛因子比黄金分割法更加精确.4 结束语超松弛迭代方法是解决线性方程组的一个十分有效快捷的方法,很多工程学,计算数学中都会应用.而且超松弛迭代法公式简单,编制程序容易.而使用超松弛迭代法的关键在于选取合适的松弛因子,如果松弛因子选取合适,则会大大缩短计算时间. 本文依据松弛因子和矩阵谱半径的关系给出了两种选取松弛因子的方法逐步搜索法和黄金分割法及其Matlab程序. 但这两种方法仍不是足够简便,有所不足,有待进一步研究.5 参考文献:[1] 李庆扬,王能超,易大义.数值分析[M], 清华大学出版社,2008.[2] 施吉林. 计算机数值方法[M] . 北京: 高等教育出版社, 2000.[3] 蔡大用.数值分析与实验学习指导[M],清华大学出版社,2001.[4] 李建宇,黎燕. 牛顿一SOR迭代方法中最佳松弛因子的算法[J],四川大学学报,4,381-382,1995.[5] 王诗然. 稀疏线性方程组求解的逐次超松弛迭代法[J],沈阳师范大学学报,4,407-409,2006.[6] 刘卫国. MATLAB程序设计与应用[M],高等教育出版社,2008.[7] 张知难.关于相容次序矩阵的性质的图论证明[J].新疆大学学报, 1983, 12(3):23-26.[8] 李春光,徐成贤.确定SOR最优松弛因子的一个实用算法[J].计算力学学报,2002,19(3):299-302.[9] 蒋家羚,王勇.最有超松弛因子的一种确定方法及其在裂纹计算中的应用[J].研究简报,2002,24(1):133-135.[10] 王晓东. 计算机算法设计与分析[M] . 北京: 电子工业出版社, 2000.附录逐步搜索法A=[-3,1,0,1;1,-3,0,0;0,0,-3,1;1,0,1,-3]; %系数矩阵%b=[-1;-2;-2;-1];D=diag(diag(A)); %A的对角矩阵%U=-triu(A,1) ; %A上三角矩阵%L=-tril(A,-1); %A的下三角矩阵%m=[];t=[]; %创建两个空矩阵分别存放相对应的谱半径和记录迭代次数% for w=1:0.01:1.1; %取w的值%q=(D-w*L);p=inv(q); %求q的逆%Gw=p*((1-w)*D+w*U); %求得迭代矩阵%V=eig(Gw); %计算迭代矩阵的特征值%R=max(abs(V)); %找出绝对值最大的谱半径%m=[m,R];plot(w,R,'o'); %画出w和R的关系图%grid;hold onf=inv(D-w*L)*b*w;x0=[0;0;0;0]; %取迭代初值%y=Gw*x0+f;n=1;while norm(y-x0)>=1.0e-6 %迭代条件%f=inv(D-w*L)*b*w;x0=y;y=Gw*x0+f;n=n+1;endt=[t,n];end[h,k]=min(t); %h记录最小的迭代次数,k记录第几个数最小%求解过程g=1.0+(k-1)*0.01;f=inv(D-g*L)*b*g;y=Gw*x0+f;n=1;while norm(y-x0)>=1.0e-6;f=inv(D-g*L)*b*g;x0=y;y=Gw*x0+f;n=n+1;endk,h,t,m,g %g是最佳松弛因子%黄金分割法A=[-3,1,0,1;1,-3,0,0;0,0,-3,1;1,0,1,-3]; %系数矩阵%b=[-1;-2;-2;-1];D=diag(diag(A)); %A的对角矩阵%U=-triu(A,1) ; %A上三角矩阵%L=-tril(A,-1); %A的下三角矩阵%c=1;d=2;m=0.618;x0=[0;0;0;0];w1=d-m*(d-c);w2=c+m*(d-c);y=[];r=[];s=[];z=[];while abs(w2-w1)>=0.05n=1; w=w1;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;while norm(x-x0)>=1.0e-6x0=x;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;n=n+1;endr=[r,w];y=[y,n];k=1; w=w2;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;while norm(x-x0)>=1.0e-6x0=x;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;k=k+1;ends=[s,w];z=[z,k];if n>kc=w1;w1=d-m*(d-c);w2=c+m*(d-c);elsed=w2;w1=d-m*(d-c);w2=c+m*(d-c);endendr,y,s,z,w2致谢本文在指导老师崔老师的精心指导下完成的,无论是在选题、确定研究内容和研究过程中都凝聚着由老师的辛勤与汗水.由老师的严谨治学态度、无私奉献的精神、丰富的教学经验令我受益匪浅.在他那里不仅让我学到了许多宝贵的知识财富,更让我懂得了许多做人的道理.在这里我衷心地向我的指导教师崔艳星老师表示最诚挚的谢意和尊敬.最后向所有关心我和帮助我的老师和同学们表示我衷心的感谢和最诚挚的谢意!。
超松弛迭代法解线性方程组
设it题目:摘要本文是在matlabll境下熟悉的运用计算机编程培言并结合超松弛变量起松弛迭代法的理论基础对方程组求解。
首先,本文以愉分方程边值问题为例,导出了离散化后线11方程组即稀疏线性方程组,转化对柿蔭线性方程组求解冋題。
其次,用起松弛(SOR)选代法编写matlab 程序,湘产生的柿疏线性方程组进行迭代法求解。
然后,分别改变松弛因子3和分段数n的值,分桥其收敛性和收敛速H, 18出各个方面的分林和比较需到相关结论。
最后,将起松弛迭代算法在it算机上运用matlab 言实现,借岀了一组与猜确解较接近的数值解,并画图比较,騎iil逐次超松弛(SOR)选代法的績确性。
关键词:柿匾线性方程组逐次超松弛迭代法松弛因子matlab编程-、间题提岀考虑两点逆值冋题为了把做分方程离IL 把[oj]E 间“等分,令/亠丄,脸=〃?,山12…山一1,得到 n 差分方程° 治 一 2)1 + X+—畑 一 X _ “or十—C< -h 2h简化为(£ + 必+i - © + 心+ % =肿,从而离散后得到的线性方程组的系数矩阵为一(2g + /?) £ + h£-(2£ + h )A =££ + /?一(2w + h )_对£ = 19 a = 0.4 , n = 200 ,分别用e = 1、6? = 0.5和e = 1.5的超松弛迭代法 求解线性方程组,要求有4也有效数字,然后比较与精确解的淚差,探讨使超松 弛选代法收敛较快的0取值,对结果进行分轿。
改变»论同wrOo二、超松弛迭代法产生的背景容易知道它的精确解为 + ax.£ + h—(2w +y =对从实际间题中借到维数相当夫的线11代数方程组的求解仍然十分困难,以至使人们不能在允许的时间内用貞接方法得到解,Slit,客观上要求用新的方法来解决大维数方程组的求解I'nJSo现有大名数迭代法不是对各类线11方程组都有收敛性,在解题时,要对原方程组葩晖作一根本的变换,从而可能使条件数变坏,也可能破坏了变换前后方程组的等价性,以员丧失使原方程组的对称II等。
超松弛迭代法
超松弛迭代法
超松弛迭代法是一种回归模型的最优化算法,主要用于减少损失函数。
如果损失函数是凸函数,则可以使用自动对准算法来使目标函数最小,以备测试目标模型。
超松弛迭代法的技术流程如下:
1. 定义初始参数:设置参数的初始值x0。
2. 迭代:通过迭代公式X[i + 1] = (1 –λ) X[i] + λF(X[i])来更新X[i],得到新的迭代值。
3. 收敛:检查超参数δ和终止准则,查看目标函数值是否趋于收敛。
4. 调整超参数:如果目标函数值没有收敛,则可以尝试调整超参数X0和λ来降低目标函数值。
5. 返回最优化结果:将参数X[i]返回到最终收敛状态,即最优化结果。
SOR迭代法
aij x(jk )
3.1
若记
i1
n
r(k)
i
(bi
a x(k 1) ij j
aij
x
(k j
)
),
j 1
j i
i 1,2,L ,n
则 3.1 式可写为
x( k 1) i
x(k) i
1 aii
r(k)
i
3.2
由此可以看出, Gauss Seidel 迭代法的第 k 1
步 ,相当于在第 k 步的基础上每一个分量增加
SOR迭代法常以这种形式进行计算。
格式(3.4)的矩阵形式为
X (k1) (1 ) X k D1 b LX k UX (k) ,
3.5
其中
a11
D
a22
O
0
0
,
ann
0 a12 L
U
0O
O
0
a1n
an1,n
0
显然,A D L U.
0
0
L
a21
O
OO
上述定理说明,对于任何系数矩阵 A,若要 SOR
法收敛,必须选取松弛因子 0,2 , 然而,当松
弛因子满足条件 0 2 时,并不是对所有系数矩 阵 A 来说,SOR 法都是收敛的。但是,对一些特殊矩 阵来说,这一条件是充分的。
定理7 如果矩阵 A 是对称正定的,则 SOR 法 对于0 2 是收敛的。
其 Gauss Seidel 迭 代 格 式 可写为 (aii 0) :
x(k1) i
x(k) i
1 aii
bi
a x(k1) i1 1
L
a x(k1) i,i1, i1
第五章 第三节 SOR迭代法
3.1
若记
ri
(k )
(bi aij x
j 1
i 1
( k 1) j
aij x (j k ) ),
j i
n
i 1, 2,, n
则 3.1 式可写为
xi( k 1) xi( k ) 1 (k ) ri aii
3.2
由此可以看出, Gauss Seidel 迭代法的第 k 1 步 ,相当于在第 k 步的基础上每一个分量增加 一个修正量
xi
k 1
x
(k ) i
i 1 n 1 ( k 1) (k ) bi aij x j aij x j aii j 1 j i
有
xi
k 1
x
(k ) i
xi
k
bi aij x aii j 1
i 1
用 SOR 法进行迭代,取不同的松弛因子 ,收 敛速度不同,见下表
ω
迭代次数
0.6
16
0.8
10
1
8
1.1
7
1.15
8
1.25
11
1.3
15
1.5
15
1.8
15
近似解与 准确解重 复合位数
5
5
5
5
5
5
5
4
1
使 SOR 法收敛最快的松弛因子通常称为最 优 松 弛因子。目前,只有少数特殊类型的矩阵,才有确定 的最优松弛因子的理论公式,但实际使用时也有一定 困难。通常的办法,是选不同的 进行试算,以确定 最佳 的近似值,或者先取一个 0 2 ,然后根 据迭代过程的收敛快慢,不断修正 ,这样逐步寻 找最佳 ,直到满意后再固定下来,继续迭代,以 达到加速的目的。
线性代数课程论文
基于自适应遗传算法的SOR迭代(华南理工大学理学院数学系计算数学牛海静)摘要:对于确定逐次超松驰迭代法中的最佳松驰因子问题, 迄今, 人们还没有给出一可行实用的方法. 利用自适应遗传算法全局搜索性能、并行性及其遗传操作, 构造出近似确定最佳松驰因子的一种自适应进化方法, 并由此得到一近似确定功能的自适应逐次超松驰迭代算法. 数值算例表明, 该算法在求解线性方程组中是可行的, 实用和快捷的.关键词:逐次超松驰迭代法; 遗传算法; 最佳松驰因子; 线性方程组1引言在科学计算和工程设计中, 人们经常会遇到求解线性代数方程组问题, 而且在计算方法的其它分支的研究也往往归结为此类问题. 目前, 大型的线性方程组都是利用计算机进行数值求解, 归结起来, 主要有两类: 一类是直接解法, 就是指经过有限步运算求得方程组的解的一类方法, 此类方法比较适用于系数矩阵稠密的中、小型线性方程组; 另一类是迭代解法,适用于解大型、稀疏矩阵的线性方程组. 逐次超松驰迭代法(Successive Over-Relaxation) 是解线性方程组的一种迭代加速法, 是求解大型线性方程组的有效方法之一. 通过选择恰当的松驰因子, 它能使收敛速度变得较快, 也使发散的可能变成收敛, 因此, 超松驰迭代法算法有着极高的应用价值. 本文利用自适应遗传算法全局搜索性能和并行性、及其遗传操作, 构造出一种近似确定最佳松驰因子的自适应进化算法, 并由此得到一个近似确定功能的自适应遗传逐次超松驰迭代法(Adaptive Genetic Algorithm Successive Over-Relaxation) 算法, 简称为A GA SOR.2 逐次超松驰迭代法超松驰迭代法简称为SOR 法, 是求解线性代数方程组的一种迭代加速法, 它是在Gauss Seidel 迭代法的基础上进行加速的, 将前一步的结果ki x与Gauss Seidel 迭代方法的迭代值(1)k ix 适当的加权平均, 期望获得更好的近似值(1)k ix .其迭代公式如下:1(1)()(1)()1(1)[],i n k k k k iiiijjijjj j iiixx b a xa xa1,2,,;0,1,2,i n k其中:为松弛因子. SOR 法中取值对迭代公式的收敛速度影响很大, 它的好坏直接影响到收敛速度的快慢. 为了保证迭代过程的收敛, 必须要求02,但是在0 和2 之间有很多的取值, 究竟如何取值至今没有较好的解决方法. 基于此目的, 文中提出一个可一般确定近似值的自适应数值进化方法, 该方法利用的是自适应遗传算法中全局性、并行性及其遗传操作, 使其快捷方便. 该算法适用于满足SOR 迭代方法的大型稀疏矩阵的线性方程组.3 遗传算法原理与A GA SOR 算法3.1 适应度函数与编码实现若一个代数方程组, 它由n 个方程组组成, 涉及m 个变量:11()()()()iinnX X X X f A fA fA(1)其中:1()f 可为除分段函数外的任意形式的函数表达式,,{|(,)}.j i j Xx x x X x a b 12m ,,...,求解方程组(1)等价于求极值问题: 求一X ,以使式(2)取值最小.当最小值为0时,所对应的X ,即为方程之解; 当其最小值不为0 时, 则此方程组无解. 设适应度函数: 1()(),niii F X X XfA(2)本文是用遗传算法寻找SOR 法中的最佳松驰因子, 确定在(0, 2) 区间的最优值. 对于,选定迭代初始值后, 它与方程组的解X 联系是比较紧密, 较好的可以在较少的迭代次数内得到较精确的解. 因而, 为了更好的平衡这种关系,可以用式(2) 与迭代次数K 的平均值的负值做为适应度函数, 即:1()()(),22niii X K F X KFit XfA(3)(或者可以选择适应度函数为 111()()()n iii Fit F X KX KfA也可以吧,不知道效果怎么样)求适应度函数时, 也要把迭代次数考虑进来. 如果比较差, 有可能达不到所要求的精度, 就会无限迭代下去. 因此,给出一个限定条件, 如果迭代次数达到最大限定, 则k 取最大限, 适应度还按式(3) 进行处理. 同时为使算法能适用于任意的线性方程组, 必须根据用户输入的系数矩阵A 和常数项向量B , 还有选代初始值0X 和要求精度, 用上述方法生成适应度函数.对于染色体编码, 本文采用实数编码. 与二进制编码相比, 采用实数编码方式, 使算法具有较高的通用性. 同时, 为了更好地与实际问题相结合, 将方程组的解X 和迭代次数K 放在的后面, 一起组成一个染色体Pop , 即:[].i i i Pop X K 其中的X 和K 都是采用实数表示, 即用原值表示. 这样更利于最佳松驰因子寻优和方程求解.3.2 遗传算子 3.2.1 选择算子选择算子采用轮盘法、锦标赛选择法和几何规划排序选择法的结合. 轮盘法的基本精神是个体被选中的概率取决于个体的相对适应度:i iif p f (4)其中: i p 个体i 被选中的概率; if 个体i 的适应度;if 群体的累加适应度.显然, 个体适应度越高被选中的概率愈大. 但是, 适应度小的个体也有可能被选中, 以便增加下代群体的多样性. 而锦标赛选择法是随机地从种群中选一定数目的()Tour 个体, 然后将最好的个体选做父个体. 这个过程重复进行完成个体的选择. 锦标赛选择法的参数为竞赛规模Tour , 其取值范围为 [ 2,N ind ] (其中N ind 是竞赛规模, 允许比2大的数) , 这里取Tour 为3, 使多样化得到一定的损失. 几何规划排序选择法是基于几何规划排序进行选择,主要是对适应度进行排序, 较好的做为父个体, 这有利于防止较好个体的破坏. 综合各自的特点, 本算法选择是先利用几何规划排序选择法对初始群体进行选择, 然后用锦标赛选择法对几何规划排序选择法得到的父群体进行选择, 最后用轮盘法选择. 这样可以提高收敛速度和搜索范围, 更有利于交叉与变异的进行. 3.2.2交叉算子算术交叉算子是实数编码遗传算法中应用最广泛的一种算子, 其采用的交叉方法是线性插值. 比如在两个体1,2之间进行算术交叉, 则交叉运算所产生出的两个新个体为*112*212(1)(1)(5)其中是在[0,1] 区间内的参数, 它可以是一个常数, 也可以是由进化所决定的变量, 本文选择为[ 0, 1 ]区间上的随机数. 3.2.3变异算子本文采用均匀变异和边界变异两种变异算子. 对其说明如下:均匀变异是指分别用符合某一范围内均匀分布的随机数, 以某一较小的概率替换个体编码串中各个基因座上的原有基因值. 其具体过程是: 假设有一个个体为12k l XX X X X .若k X 为变异点, 其取值范围为min max [,]k k U U (其中minkU 表示的是基因k X 可取值范围的最小值, 而max kU 表示最大值) , 在该点以个体X进行均匀变异后, 可得到一个新的个体''12,k l X X X X X 其中变异点的新基因值是: minm min 'ax ().k k k kU r U U X 式中r 为范围内符合均匀分布的一个随机数.边界变异是均匀变异操作的一个变形遗传算子. 在进行边界变异操作时, 随机地取基因座的二个对应边界基因之一取代原有基因值. 在进行由12k l XX X X X 向''12k l X X X X X 的边界变异时, 若变异点k X 处的基因值取范围为min max [,]k kU U ,则新的基因'k X 由下式确定:min max,, 1.kk U U如果random(0,1)=0;如果random(0,1)= (6)式中if random(0,1)表示以均匀等概率从0,1中任取其一.( 补充:由于本文中的染色体只有三个基因组成,且后面的两个基因X 和K 的值是随着基因的选取而相应变化的,所以我们本文的交叉和变异操作只针对于基因进行,这样X 和K 的值会根据适应度函数等相应产生新的值.) 3.2.4终止条件以设定的最大的遗传代数为终止条件 3.3 交叉概率c P 和变异概率m P遗传算法的参数中交叉概率c P 和变异概率m P 的选择是影响遗传算法行为和性能的关键所在, 直接影响算法的收敛性. c P 越大, 新个体产生的速度就越快, 但过大时遗传模式被破坏的可能性也越大; 但是如果 c P 过小, 会使搜索过程缓慢, 以至停滞不前. 对于变异概率m P , 如果 m P 过小, 就不易产生新的个体结构; 如果m P 取值过大, 那么遗传算法就变成了纯粹的随机搜索算法. 针对此问题, Srinvivas 等提出一种自适应遗传算法(Adaptive GA ,A GA ) , c P 和m P 能够随适应度自动改变. 本算法中,c P 和m P 根据式(7)式(8)来动态确定, 从而增加算法的进化能力和收敛速度.'12'1max '1,()(),c c avg c avgavgcc avgP P f f P f f f f P P f f (7)12max1max1,()(),m m m avgavg mm avgP P f f P ff f f P P ff (8)其中: 1212max 0.9,0.6,0.1,0.001,c c m m P P P P f 为群体中最大的适应度值;avg f 为每代群体的平均适应度值; 'f 为要交叉的两个个体中较大的适应度值; f 为要变异个体的适应度值.3.4 次超松驰迭代(A GA SOR)描述 具体算法过程描述如下:Step 1 参数接收: 接收用户输入线性方程组的系数矩阵A 、常数项b 、迭代初始值0X 和要求的精度; 确定种群规模N ;定出K 的最大限max K 的值和最大遗传代数T .Step 2 群体初始化: 随机生成N 个代入SOR 的迭代公式, 根据系数矩阵 A 、常数项b 、迭代初始值 0X 和要求的精度生成适应度函数;Step 3 计算适应度, 并保存迭代终止时的迭代次数k : 如果k 达到最大限, 则k 就等于最大限定次数; 否则按达到精度时的K 值保存;并产生N 个个体的初始种群S ;置代数计数器t 1.Step 4 寻找并保存当前代最优个体(也就是适应度值最大的个体); Step 5 进行以下遗传操作:(最初针对初始种群全体)(a) 选择算子: 按几何规划排序选择法、锦标赛选择法、轮盘法(按选择概率i P 所决定的选中机会,每次从群体中随机选定一个染色体并将其复制,共做N 次,然后将复制所得的N 个染色体组成群体1S )进行选择;(b) 交叉算子: 按式(7)计算c P 并决定出参加交叉的染色体数c ,从1S 中随机确定c 个染色体,随机配对并用算术交叉算子进行交叉,并用产生的新染色体代替原染色体,得群体2S ;(c) 变异算子: 按式(8)计算m P 并决定变异次数m ,从2S 中随机确定m 个染色体,分别进行均匀变异和边界变异两种算子,并用产生的新染色体代替原染色体,得群体3S;(d) 计算适应度: 并保存迭代次数k, 如果k达到最大限, 则k就为最大限定次数; 否则按原值保存;(e) 寻找并保存最优个体, 并用前代最优个体代替当前代的最差个体,置t t1;Step 6如果达到最大遗传代数, 则结束并输出所找到的最优松驰因子,然后转Step7; 否则转Step 5,;Step 7把代入SOR公式 , 另取精度1(使1,原可以取略大一点,加快收敛速度),得出方程的解X和迭代次数k,并结束.4 数值算例与分析为了验证本文算法的有效性,在计算机上进行了数值模拟计算.选择参数为:5 结论本文的近似确定X进化算法, 是基于遗传算法对X 的寻找而得到的, 因而, 不难把它平行地推广到对称超松驰迭代法(SSOR ) , 加速超松驰迭代法(AOR).参考文献:[ 1 ] 王世瑞, 王金金, 冯有前, 等. 计算方法[M ]. 西安: 电子科技大学出版社, 1997, 1: 33241.3 期谢竹诚, 等: 基于自适应遗传算法的逐次超松驰迭代法159[ 2 ] 马东升. 数值计算方法[M ]. 北京: 机械工业出版社, 2002, 1: 922102.[ 3 ] 李春光, 徐成贤. 确定SOR 最佳松驰因子的一个实用算法[J ]. 计算力学学报, 2002, 8, 19 (3) : 2992302.[4 ] 胡小兵, 吴树范等. 一种基于遗传算法的求代数方程组数值解的新方法[ J ]. 控制理论与应用, 2002, 19 (4) : 5672570.[ 5 ] HE Jun, XU ji2you, YAO Xin. So lving equations by hybrid evo lutionary computation techniques[J ]. IEEE T ranson Evo lutionary Computation, 2000,4 (3) : 2952304.[ 6 ] 罗亚中, 袁端才等. 求解非线性方程组的混合遗传算法[J ]. 计算力学学报, 2005,22 (1) : 1092114.[ 7 ] 周明, 孙树冻. 遗传算法原理及应用[M ]. 北京: 国防工业出版社, 1999.[ 8 ] 王小平, 曹立明. 遗传算法——理论、应用与软件实现[M ]. 西安: 西安交通大学出版社, 2002, 1.[ 9 ] 刘新胜, 张知难. 查找最佳松驰因子的一种实用方法[J ]. 新疆大学学报(自然科学版) , 2005, 5, 22 (2) : 1612164.[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]。
§3.3 超松弛迭代法
证明: 证明:省略
§3.3 超松弛迭代法
换个角度看Gauss - Seidel 方法: 方法: 换个角度看 i −1 n 1 ( k + 1) ( k + 1) xi [ bi − ∑ a ij x j = − ∑ a ij x (j k ) ] a ii j =1 j= i+1 ri( k + 1 ) ( k +1 ) (k ) = x i( k ) + 其中r 其中 i(k+1) = bi − ∑ a ij x j − ∑ a ij x j a ii j<i j≥i
x ( k +1) = (1 − ω ) x ( k ) + ω D −1 [− Lx ( k +1) − Ux ( k ) + b ]
x ( k +1) = ( D + ω L)−1[(1 − ω ) D − ω U ] x ( k ) + ( D + ω L)−1ω b
பைடு நூலகம்松弛迭代阵
Hω
f
定理3.3.1 (Kahan 必要条件)设 A 可逆,且 aii ≠ 0,则松 定理 必要条件) 可逆, ,
(k ) ( k +1 ) 相当于在 x i 的基础上加个余项生成 x i 。 的基础上加个余项 加个余项生成
下面令 x = x i( k ) 速收敛,这就是松弛法 称作松弛 松弛因子 速收敛,这就是松弛法 (或SOR法)。 ω称作松弛因子。 法
( k +1) i
+ 残余误差 ri( k 1 ),希望通过选取合适的 ω 来加 +ω a ii
一种基于SMP的并行逐次超松弛迭代法
计算机研究与发展ISSN 100021239ΠCN 1121777ΠTPJournal of Computer Research and Development 44(10):1688~1693,2007 收稿日期5;修回日期3 基金项目国家“八六三”高技术研究发展计划基金项目(6Z 5);国家自然科学基金项目(6338);教育部科学技术研究重点项目(6)一种基于SMP 的并行逐次超松弛迭代法胡长军 魏 硕 张纪林 王 珏(北京科技大学信息工程学院 北京 100083)(huchangjun @ies 1ustb 1edu 1cn )A Par allel SOR Algor ithm f or L inear Systems on SMPHu Changjun ,Wei Shuo ,Zhang Jilin ,and Wang Jue(Scho ol of Inf or mation Engineeri ng ,Beijing U niversity of Science a nd Technology,Beijing 100083)Abstra ct Reservoir si mulation is an i mportant area in high performance computing 1SOR (successive over relaxation )it erative sol ution technique i s used to solve t he pressure equations in si mulation 1Parallel i mplementation of iterat ive solut ion technique i s important for decreasing si mulation execution t ime and i mproving simulat ion precision 1Current published appr oaches are mostly rest rict ed to implement parallel algorit hms based on data partition i n one it eration step 1However ,t hese approaches do not consider part itioning and merging iteration space ,which makes algorit hm have a very low efficiency 1Consideri ng t he characteri st ics of SOR and SMP (sym met ric mul ti 2processors )system ,using OpenMP as an i mplementation tool of parallel program ,a parallel SOR algorit hm is proposed 1The parallel algorit hm makes dat a in different area execute a number of it eration steps in parallel by rearranging point s updati ng sequence 1A new st rategy of data parti tion and mergi ng iteration st eps during solving pressure equations i n reservoir si mulation is discussed 1The new algorit hm enables t he localit y of a pr ogram to be improved by i teration reorderi ng ,and t he synchronization times to be decreased by mergi ng iterat ion st eps 1Shape of each mesh block i n different iteration step i s presented 1C ompared wit h t he current parallel implement ation of SOR ,t his algorit hm can decrease cost of synchronization and improve data locality 1The experi ment al result s on speedup and efficiency are also presented 1K ey w or ds SOR ;reservoir simulat ion ;SMP ;O penMP ;data localit y摘 要 逐次超松弛迭代方法被广泛应用于油藏数值模拟中压力方程的求解1其并行实现是提高模拟速度的重要途径1传统并行方案大都只是在一次迭代内进行数据划分,而没有进一步将数据划分与迭代空间划分相结合,故针对SOR 算法和SM P (sym met ric multi 2processors )系统的特点,以OpenMP 为并行化实现工具,提出了基于SMP 的并行逐次超松弛迭代方法(parallel SOR)1方法通过改变不同迭代步内数据点的更新次序,使不同区域内的数据点可以并行执行多次迭代1总结出针对三维油藏区域在数据空间划分和迭代空间合并上相对较优的策略,分析了迭代过程中网格块的生长形状1与传统的并行策略相比,该方法具有可减小同步开销、改进数据局部性、cache 命中率高等优点1实验结果表明,该方法具有较高的加速比和效率1关键词 SOR ;油藏数值模拟;SMP ;OpenMP ;数据访问局部性中图法分类号 TP30116 油藏数值模拟是结合物理、数学、油藏工程以及计算机程序来预测各种开采条件下烃类油藏动态的一种有效工具[1]1油藏数值模拟技术的发展依赖于计算机技术的进步,针对特定体系结构设计并行算:2007-02-2:2007-07-0:200AA0110070010019法是实现模拟并行化、提高模拟速度的重要途径1近年来,共享内存并行系统在并行计算领域的地位越来越重要1开展用O penMP并行化是当前高性能计算领域软、硬件发展趋势的要求1在油藏数值模拟这类问题中,求解大型带状线性方程组占了很高的比例,往往可以占到总计算量的80%以上[2]1因此,大型代数方程组求解的并行化就成为实现模拟器并行化的关键之一1目前,油藏数值模拟中大型代数方程组的求解基本上都是采用迭代求解法1逐次超松弛迭代方法(successive over relaxation)以其收敛速度快的优点,在油藏数值模拟中得到广泛的应用[3]1在实际应用中,又可以分为点逐次超松弛(PSOR)方法,逐次线松弛(LSOR)方法和块超松弛方法(BSOR)[1]1目前,SOR方法的并行实现较常使用的途径是红黑排序法[4]1红黑排序等多色排序方法要对所有网格点分色,求解过程中不但会存在同步问题,而且还由于每种颜色的网格点是分布在整个区域内的,没有考虑数据局部性问题,从而会影响整体效率1近来,Silva等人在SMP系统上用区域分解方法对LSOR作为迭代解法的油藏模拟器软件进行了并行化工作[5]1L SOR的区域分解实现方法是将油藏区域进行划分,每个区域独立进行运算,当划分区域较多时会造成同步时间较长,影响整体收敛速度1本文在Michelle等人提出的改进的定常迭代法基础上[6],设计实现了基于SMP的并行逐次超松弛迭代方法(parallel SOR),其基本思想就是要在共享内存系统上,基于SOR的每个网格单位(点、线、面)进行松弛计算时只依赖于周围网格单位的特点,对整体区域分块,并行执行过程中通过改变网格点更新次序,合理维护各个网格单位迭代过程中的数据依赖,使若干个分块并行执行SOR若干次迭代,不但可减少同步造成的开销,还可以取得较好的数据空间局部性和时间局部性,提高cache命中率11 SO R在油藏数值模拟中的应用油藏数值模拟一般是根据渗流模型建立和求解偏微分方程组,一般使用有限差分方法将偏微分方程转换为代数方程,根据具体问题,使用显式、IMPES(implicit pressure2explicit sat uration)、半隐式、全隐式等方法求解1对于三维三相黑油模拟器,通常将偏微分方程通过七点有限差分方法转换成的代数方程可以表示为=,()是七对角系数矩阵,是待求的压力向量1通过迭代法求出p的值1逐次超松弛(SOR)迭代法是以减少求解过程的迭代次数为目标,通过修改未知量估计值来加速解的收敛1加速效果取决于适当地选取松弛因子1PSOR是在整个区域内逐点进行计算1 L SOR是将松弛方法用于同一线上的一组未知量,逐行或逐列进行松弛计算1BSOR是同时求解位于同一平面上的所有未知量,即逐面进行松弛计算[1]12 基于SMP的逐次超松弛迭代方法211 基本定义设三维区域如图1(a)所示,x,y表示水平方向,z表示竖直方向1沿x方向、y方向、z方向网格点个数分别为N x,N y,N z1设SMP系统处理器个数为N个1设k∈0,1,2,…为迭代次数1P2SOR方法对于PSOR,LSOR和B SOR均可适用1这里设定各方法网格点采用自然排序,数据的扫描更新顺序如下1PSOR各个点的更新次序是从三维区域的左下角自外向里、自左向右、自下而上更新1LSOR的每次更新的一条线是沿x方向的,从三维区域的左下角自左向右、自下而上更新每条网格线1B SOR每次更新一个面的方向是自左向右1Fig11 Definitions in t hree2dimensional reservoir for describing data1(a)Three2dime nsional reserv oir;(b)Mesh2 line;(c)Mesh2plane;a nd(d)Mesh2bloc k1图1 三维油藏模型中的一些数据描述定义1(a)三维油藏模型;(b)网格线;(c)网格面;(d)由3个网格面构成的网格块针对三维油藏区域,先给出下列定义:定义11v i,j,k1区域内(i,j,k)处的网格点1定义21网格线(mesh line)1v Set(y,z)= {v i,j,k|v i,j,k∈(平面y=1,2,…,N y与平面z=1, 2,…,N z两两相交产生的直线所经过的网格点1 y=1,2,…,N y;z=1,2,…,N z)},图1(b)为一条网格线1定义31网格面(mesh plane)1l Set(y)={v Set(y,z)|v Set(y,z)∈(y=y平面上的所有网格线1y=,,…,N y;z=,,…,N z)}网格面共有N y个1沿y方向分别为S(),S(),…,S(N y),图()为一个网格面19861胡长军等:一种基于SMP的并行逐次超松弛迭代法A p b1 A p1212l et1l et2l et1c定义41未迭代时(k=0)的网格块(mesh block)1p Set(i,k=0)={l Set(y)|(y∈((i-1)N y p +1,iN yp),i∈(1,p-1)),(y∈((i-1)N yp+1,N y),i=p)},图1(d)为一个网格块1定义51网格集(mesh set)1b Set(j,k=0)= {p Set(i,k)|i∈(j,j+q,j+2q,…,j+(N-1) q)},j∈1,2,…,q1网格集个数q与网格块个数p的关系是:p=N q1(2) 在图2中,共有6个网格块,p=6,3个网格集, q=31p Set(1,k=0)与p Set(4,k=0),p Set(2, k=0)与p Set(5,k=0),p Set(3,k=0)与p Set (6,k=0)分别构成了网格集b Set(1,k=0),b Set (2,k=0),b Set(3,k=0)1Fig12 Mesh block and mesh set1图2 网格块和网格集定义61边界递减型网格块1每一次迭代,该网格块的边界便会删除一个网格面(位于油藏边界的网格面不会被删除)1第K次迭代后的网格块为p Set(i,k=K)={l Set(y)|(y∈((i-1)× N yp+1+K,iN yp-K),i∈q+1, 2q+1,…,(N-1)q+1), (y∈(1,i N yp-K),i=1)}1 定义71边界递减型网格集1由边界递减型网格块构成的网格集1边界递减型网格集是P2SOR算法第1个执行的网格集,即网格集b Set(1)1定义81边界偏移型网格块1每一次迭代,该网格块便会将上一次执行完P2SOR算法的网格块中的与它相临网格块的一个被删除的网格面作为新的边界网格面,会将另一个边界网格面剔除1第K次迭代后网格块为S(,=K)={S(y)|(y∈(()×N yp+1-K,iN yp-K))},i∈2,3,…, q-1,q+2,q+3,…,2q-1,2q+2, 2q+3,…,(N-1)q-1,(N-1)q+2, (N-1)q+3,…,Nq-11 定义91边界偏移型网格集1由边界递偏移型网格块构成的网格集1这些网格集是b Set(2),b Set(3),…,b Set(q-1)1定义101边界递增型网格块1每一次迭代,该数据块的边界便会新增一个网格面作为新的边界1第k次迭代后网格块为p Set(i,k=K)={l Set(y)|(y∈((i-1)× N yp+1-K,iN yp+K),i∈q,2q,…, (N-1)q),(y∈((i-1)N yp+ 1-K,N y),i=N q)}1 定义111边界递增型网格集1由边界递增网格块构成的网格集1边界递增型网格集必定是P2SOR算法最后一个执行的网格集,即是网格集b Set(q)1在图2中,p Set(1,k)与p Set(4,k)是边界递减型网格块,它们构成了边界递减型网格集b Set (1,k)1p Set(2,k)与p Set(5,k)是边界偏移型网格块,它们构成了边界偏移型网格集b Set(2,k)1 p Set(3,k)与p Set(6,k)是边界递增型网格块,它们构成了边界递增型网格集b Set(3,k)1212 基于SMP的并行逐次超松弛迭代方法基于SMP的并行逐次超松弛迭代方法的算法整体流程如图3所示,其过程是对油藏区域进行不重叠分块,对于有N个处理器的SMP系统,每次取N个不相邻的网格块,这N个网格块构成网格集b Set(1,0),网格集b Set(1,0)的N个网格块并行执行若干次SOR迭代,根据具体应用,可以是PSOR,L SOR或B SOR1每做一次迭代后要对网格块的边界网格面进行增加或削减处理1这是由于SOR迭代中使用的数据中的值部分是新值,部分是旧值,为保证与SOR的计算一致性,每个网格块的每步迭代中都要对该网格块的边缘进行增减,第k 次迭代时,若左边缘左侧相邻的网格面是k+1次的值,即将该网格面加入到该网格块来,若不是,则将该网格面从该网格块中删除1若右边缘右侧相邻的网格面是第次的值,即将该网格面的值加入到该网格块来,若不是,则将该网格面从该网格块中删除1每做一次迭代要进行收敛判断,若全局不收敛,0961计算机研究与发展 2007,44(10)p et i k l et i-1k则继续1这若干次迭代完成后,再取N个的网格块构成的网格集b Set(2,0)进行并行迭代,直至整个油藏区域完成若干次迭代1下一轮继续从网格集b Set(1,0)开始执行上述过程,直至全局收敛1Begi nk=1DO UN TIL k>MAXI TERNUMif(CONV ER GE FLAG==1)t hen goto L2 else goto L1end ifCONVERGE FL AG=1 Π3set whol e area converge3ΠL1:j=1 Π3j:mesh set number3Π DO UN TIL j>q !$omp s ections !$omp s ectionc onverge=0 Π3converge:c onvergence flag of each m es h2bl ock3Π call subroutine2MBS,which dat a used i s p Set(j,k) check convergence and s et converge,boundary updati ng if(conver ge==0)t hen Π3a block does not converge,set t he whole reservoir data does not co nverge3Π CONVERGE FLAG=0 end if … !$omp s ection conver ge=0 call s ubro ut ine2MBS,which dat a used is p Set(j+(N-1)q,k) check convergence and s et converge,boundary updati ng if(con verge==0)t hen CONVERGE FLAG=0 end if !$omp end s ectionsL2:endFig13 P2SOR process1图3 P2SOR整体流程 由于网格块的边界网格面是会不断增减的,因此在初值时给定的网格块p Set(i)中的元素也随每步迭代而不断增减,因此在计算过程中,可以形成上述的3类网格块、3类网格集11)P2SOR算法过程如下:步骤11确定网格集个数q1网格集个数的选取应从数据局部性、cache利用率、负载均衡等几方面综合考虑1为取得较高的数据空间局部性,应在划分每个网格块数据量大小时考虑L2cache容量这个因素;要取得较高的数据时间局部性,减小同步次数,应使每个网格块在一大步内迭代次数尽可能多,每个网格块在一大步内迭代次数受边界递减型网格块网格面个数制约1一般应沿长度最长的方向(本文设为y方向)进行划分,保证在一大步内可以进行较多次迭代1步骤1确定前个网格块所含的网格面个数RR=N yN×q1(3) 剩余的网格面给最后一个分块,这样可以使负载最大限度保持均衡1这便形成了p个网格块,沿y轴依次为p Set (1,k=0),p Set(2,k=0),…,p Set(p,k=0)1步骤31划分网格集(k=0),共q个网格集:b Set(1,0)={p Set(1,0),p Set(1+q,0),…,p Set(1+(N-1)q,0)},b Set(2,0)={p Set(2,0),p Set(2+q,0),…,p Set(2+(N-1)q,0)},…b Set(q,0)={p Set(q,0),p Set(2q,0),…,p Set(N q,0)}1 步骤41开始进行网格集迭代求解:步骤4111赋总迭代次数n iter=0;赋每个网格块收敛标志f l ag[1],…,fl ag[p]=01步骤4121判断f l ag[1],…,f la g[p]是否全为1:若是,则整体已收敛,退出;否则,判断niter是否达到最大值:若是,则退出;否则继续1步骤4131执行q次循环,每次循环调用一个网格集,每个网格集的N个网格块并行执行MBS (Mesh block2based SOR)算法12)MB S算法过程如下1步骤11置迭代次数k=01步骤21开始循环迭代,由于边界递减型网格块每次迭代要削减两个网格面,进行R2次后网格面个数将变为1或0,因此在一大步内最多可以进行R2次迭代,每次执行步骤211至2131步骤2111执行SOR(PSOR,LSOR,BS OR)算法1步骤2121网格块边界网格面处理1设每个网格块左、右边界面为l Set(y1),l Set(y2)1对于网格块p Set(1,k),有y1-1=0,此时若l Set(y2+ 1)是第niter次的值,则y2=y2+1,否则y2=y2-11对于网格块p Set(p,k),此时若l Set(y1-1)是第ni ter+1次的值,则y1=y1-1,否则y1=y1+ 11对于网格块p Set(2,k),…,p Set(p-1,k),此时若l Set(y1-1)是第n iter+1次的值,则y1=y1 -1,否则y1=y1+1;此时若l Set(y2+1)是第次的值,则y=y+,否则y=y1步骤131对于每个网格点,若均有|+|<ε,则设该网格块收敛标志f[]为1此时1961胡长军等:一种基于SMP的并行逐次超松弛迭代法2p-1ni ter22122-12v v k1-v k l ag i1若f lag[1],…,fl ag[p]均为1,则执行P2SOR算法步骤412,否则继续1步骤31ni ter=n iter+1,执行P2SOR算法步骤41213)敛散性分析:由于对网格点的排序可以是任意的,对于某种排序,只要可以保证在这种排序下对网格点的更新次序与SOR的更新次序相一致,那么仍然可以使用SOR的收敛准则进行敛散性分析1在P2SOR方法中,各网格点以第211节规定的自然排序顺序进行更新,当每个点均满足收敛性准则|v k+1-v k|<ε时,迭代过程结束,全局收敛1在第k步迭代中,每个网格块中的网格点以第211节规定的自然排序顺序进行更新,这个更新次序就是SOR的执行次序1当所有网格点均满足|v k+1-v k|<ε时,迭代结束1因此,P2SOR方法对解的求解过程与SOR方法的求解过程的区别是打乱了SOR求解过程中数据的更新次序1收敛判断的过程与SOR是相一致的1213 P2SO R与传统方法的比较传统的并行策略是每次迭代对数据空间进行划分,基于划分出的数据进行并行求解,而P2SOR方法是在划分数据空间的基础上,进一步考虑到迭代空间,每一大步执行若干次迭代1P2SOR方法与红黑排序、SOR区域分解求解等传统并行策略相比,由于每个网格块所进行的若干次迭代完全是独立的,不需等待其他网格块的数据,因此可以大大减小同步造成的时间开销1而且提高了数据的时间局部性1由于迭代过程中大多数使用的是边界偏移型网格集,而算法保证了在任何一次迭代中,边界偏移型网格集的大小都是完全相等的,即数据量是完全相等的,可以最大限度保证负载均衡1从cache特征考虑分块大小,使得多次迭代的迭代内数据空间访问局部性显著提高1表1从几方面列出了P2SOR与传统方法的比较:T a ble1 Comp a r ison of DDM2SORM U L TI2COLOR and P2SOR表1 区域分解SOR、多色SOR和P2SOR的并行表现比较Met hod Synchronizat i o nOverheadInt ra2IterationLocalit yInter2It erationLocalit yDDM2S OR High G oo d Mi ddling MUL TI2OLOR M 2SOR L G G 3 实验结果本节针对油藏数值模拟器中使用IMP ES求解代数方程时的压力求解部分,使用L SOR方法作为迭代解法1分别比较了使用红黑排序的并行LSOR 算法、使用Sil va的区域分解的并行L SOR算法[5]与P2SOR算法的加速比1测试环境为4个Intel Xeon218GH zΠ1024K B L2Cache处理器,315G B主存的SMP系统(即N= 4),操作系统为Windows Server2003,Intel Fort ran 编译器910,程序实现使用Fort ran和OpenMP制导语句1网格规模为N x=149,N y=312,N z=111 P2SOR取q=4,则R=19,取每个网格块并行进行4次迭代1DDM2L SOR对网格系统划分为4个区域,分面平行于xoz平面1RB2L SOR对网格系统划分为4组网络线1运行结果如表2所示:T a ble2 Accelera ting R a te o f P2SO RDDM2LSO R a nd RB2LSOR表2 P2SOR、DDM2LSOR和RB2LSOR的加速比Algori t hmParall el Accel erati ng Rate2C PU4CPUP2S OR11862130 DDM2L SOR11532118RB2L SOR11582116 比较结果表明P2SOR方法在两个线程时的加速比为1186,效率为93%,高于其他方法1分析其开销主要在于OpenMP创建并行区和sect ion同步所产生的开销14个CPU时P2SOR比DDM2L SOR 和RB2LSOR方法也取得了更好的加速比1可以看出,由于P2SOR比传统方法的同步次数少,且数据局部性更好,故可以取得较好的效果14 结论和进一步研究松弛迭代方法在油藏数值模拟及工程计算中有广泛应用1其并行实现是提高求解速度的重要手段1由于数据间的相关性,松弛迭代方法较难实现并行,传统的并行策略取得的效率并不能使人满意1本文提出了基于SMP的并行逐次超松弛迭代方法,该方法在考虑数据划分的基础上,将多次迭代并行执行,即减小了同步次数,可以较好地利用程序的数据的空间局部性和时间局部性1每次迭代的更新网格块操作保证了算法与SOR在执行上的一致性,还可以保证负载均衡12961计算机研究与发展 2007,44(10)C High Poo r i ddlingP ow oo d ood下一步将研究在SMP 2Cluster 上实现松弛迭代方法的并行实现,利用迭代合并减少通信次数,进一步取得更高的并行效率1参 考 文 献[1]Zhang Liehui 1Basic Theo ry of Res ervoi r Simulation [M ]1B eij i ng :Pet roleum Indus t ry Press ,2005(in Chi nese)(张烈辉1油气藏数值模拟基本原理[M ]1北京:石油工业出版社,2005)[2]K Maleknejad ,H Safdari 1Parallel algorit hm for s ol ving linear sys t ems arising fro m PDE and i nt egral equations [J ]1Applied Mat hem atics and C o m putation ,2004,151(2):443-453[3]G ary A Pope ,Kamy Sepeh m oo ri ,Mojdeh Del shad 1A new generat ion chemical floo ding simulato r [R ]1The Univers i ty of Texas at Austi n ,Tech Rep :DE 2FC 226200B C 15314,2005[4]Chaoyang Zhang ,Hong Lan ,Yang Ye 1Parallel SOR it erat ive algo rit hms and performance evaluation on a Li nux cluster [C ]1The 2005Int ’l C o nf on P arallel and Dist ri but ed Processing Techni ques and Applicat ions ,Las Vegas ,Nevada ,2005[5]Fabricio A B Silva ,Ernesto P Lopes ,Eliana P L Aude ,et al 1Parallelizing black oil res ervoir s i mulation systems for SM P machi nes [C]1The 36t h Annual Symp on Simulat i o n ,Orlando ,Florida ,2003[6]Michelle Mills St rout ,Larry C arter ,J eanne Ferrante ,et al 1Sparse tiling fo rstat ionaryiterati ve met ho ds[J ]1TheInternationalJournal ofH i ghPerformance Com p ut ingApplicat ions ,2004,18(1):95-113Hu Cha ngjun ,bor n in 19631Received his Ph 1D 1in computer science f rom Peking University in China 1Heiscurrentlyprofess or of theIn formation EngineeringSchool in the University of Science andTechn ology ,Beijing ,China 1Ph 1D 1su pervis or 1H is main research areas include parallel computing model ,parallel compiling architecture ,network storage system ,da ta eng ineering and software engineering 1胡长军,1963年生,教授,博士生导师,主要研究方向为并行计算与并行编译技术、并行软件工程、网络存储体系结构、数据工程与软件工程1Wei Shuo ,born in 19821Master candidate in the Infor mation Engineering School in BeijingUniversityofScienceandTechnology ,China 1H is cur rent research interest s include parallel computing model and parallel compiling techn ology 1魏 硕,1982年生,硕士研究生,主要研究方向为并行计算与并行编译技术(shuo wei @1631com)1Zha ng J ilin ,born in19801Ph 1D 1candidate in the Information EngineeringSchool in Beijing University of Science andTechnology ,China 1H ismainresearchinterest s are parallel computing and s oftwareengineering 1张纪林,1980年生,博士研究生,主要研究方向为并行计算与并行软件工程1W a ng Jue ,born in 19811He is Ph 1D 1candidate in the Information EngineeringSchool in Beijing University of Science andTechnology ,China 1H ismainresearchinterest s are pa rallel computing and parallelcompiling technology 1王 珏,1981年生,博士研究生,主要研究方向为并行计算与并行编译技术1Resea rc h B ac kg r oundThis w or k is su pported by the H i 2Tech Resea rc h and Development Progra m (863)of China under grant N o 12006AA01Z105,National Natural Science Foundation of China under grant No 160373008a nd by the K ey Project of Chinese Ministry of Education under grant N o 11060191SOR (success ive over relaxation )iterative s olution technique ,includ ing PSOR ,LSOR ,BSOR ,is widely used to s olve pressure equations in reservoir simulation 1Parallel implementation of iterative s olution technique is important for decreasing execution time 1Prev ious methods for parallel solving equations have not take n iteration s pace pa rtition into consideration 1A parallel SOR algorithm on SM P is proposed 1Algorithm gives a new strategy of data pa rtition and merging iteration steps in s olving equations 1Progra m partitions iteration into intra 2iteration and inter 2iteration ,executes a constant number of iteration steps in intra 2iteration and mod if ies boundary of mesh block in inter 2iteration 1Because the number of s ynchronization is the number of inter 2iteration steps ,algorithm gets a higher ff y 1f SOR ,f y z ,y f 1T q ,x SOR 1I f ,’x f SM ,y 13961胡长军等:一种基于SMP 的并行逐次超松弛迭代法e icienc C o mpared with the p revio us p arallel implemen tatio n o this algorith m can decrease co st o s nchro ni atio n an d imp ro ve data localit o p ro gram o u se algo rith m to s o lve pressure e uation s in reservoir simulatio n the e p erimen tal result sho ws t hat p arallel has hig her speedup than o ther metho ds n uture w e ll e ten d algorith m ro m P to clu ster an d merging iteratio n step s will decrease co mmunicatio n times in th e dist ribu ted s stem。
雅可比迭代法和高斯超松弛迭代
雅可比迭代法分量形式(63)式也可改写为
(64)
(64)式更方便于编程求解。
雅可比迭代法公式简单,迭代思路明确。每迭代一次只需计算n个方程的向量乘法,程序编制时需设二个数组分别存放xk和xk+1便可实现此迭代求解。
2、高斯-赛德尔(Gauss-seidel)迭代法
由雅可比迭代法可知,在计算xk+1的过程中,采用的都是上一迭代步的结果xk。考察其计算过程,显然在计算新分量xik+1时,已经计算得到了新的分量, 。有理由认为新计算出来的分量可能比上次迭代得到的分量有所改善。希望充分利用新计算出来的分量以提高迭代解法的效率,这就是高斯-赛德尔迭代法(简称G-S迭代法)对(64)式进行改变可以得到G-S迭代法的分 量形式
(75)
其中ω称为松弛因子。
式(75)是迭代公式(74)的一个改进,可以选择松弛因子ω加速迭代过程的收敛。 式(75)的分量形式为
(76)
若对上述改进的迭代公式,按高斯-赛德尔迭代法尽量利用最新迭代得到的分量的原则,又可得到新的迭代公式
(77)
当线性方程组的系数矩阵A具有非零主元(aii≠0,i=1,2,3,…n)的特点时,可 以得到主元为1的方程组形式
雅可比迭代法和高斯-赛德尔迭代法以及超松弛迭代
对于给定的方程 用下式逐步代入求近似解的方法称为迭代法。如xk(当 )的极限存在,此极限即方程组的真正解,此迭代法收敛,否则称迭代法收敛。
1、雅可比(Jacobi)迭代法
设有方程组
Ax=b (56)
其展开形式为
(57)
系数矩阵A为非奇异阵,且 (i=1-n)A可分解为
高斯-赛德尔迭代的矩阵形式可表达为
(69)
高斯-赛德尔迭代法每步迭代的计算量与雅可比迭代相当,但在计算机进行计算时,只需存放x一个数组。
逐次松弛法迭代并行程序设计
逐次松弛法迭代并行程序设计
随着计算机技术的不断发展,高性能计算已经成为了科学研究和工程应用的重要手段。
而并行计算则是实现高性能计算的重要方法。
在并行计算中,迭代算法是一种十分重要的方法,而逐次松弛法迭代则是其中一种常用的方法。
逐次松弛法迭代是一种迭代求解线性方程组的方法。
它是一种分裂迭代法,其基本思想是将线性方程组分解成若干个子问题,然后对每个子问题进行求解。
在每一次迭代中,首先求解每个子问题,然后将解代入原方程组中,得到新的方程组,再对新的方程组进行下一次迭代。
这样,通过多次迭代,就可以逐步逼近原方程组的解。
逐次松弛法迭代的优点在于其简单易实现、收敛速度快等特点。
同时,由于其可以将原问题分解成若干个子问题,因此也便于实现并行计算。
在并行计算中,逐次松弛法迭代可以通过多种方法实现并行化。
其中一种常用的方法是将原问题分解成若干个子问题,然后将各个子问题分配给不同的处理器进行计算。
在每次迭代中,各个处理器分别对自己负责的子问题进行求解,然后将解交换给其他处理器,以更新其他子问题的解。
这样,通过多次交换和更新,就可以得到原问题的解。
这种方法可以有效地利用多核处理器和分布式计算资源,提高计算效率。
除了并行化之外,逐次松弛法迭代还有其他的改进方法。
例如,可以采用预处理技术来优化迭代过程,或者利用加速技术如多重网格法等来加速收敛速度。
逐次松弛法迭代是一种简单有效的迭代求解线性方程组的方法,同时也是实现并行计算的常用方法之一。
在实际应用中,可以根据具体问题的特点选择不同的优化方法,以提高计算效率和准确性。
第九节 逐次超松弛法(SOR方法)
第九节 逐次超松弛法(SOR方法)
逐次超松驰法是高斯——塞德尔迭代方法的一种加速 方法,是解大型稀疏矩阵方程组的有效方法。
建立迭代格式
x
(k1) i
1 a ii
(
i1
a
i
j
x
(k1) j
j1
n
aij
ji1
x
(kk1) i
x
(k) i
(
x
(k1) i
x
( i
k
))
a ii
(
i1 j1
a
i
jx
(k1)
j
n
a
ji1
i
jx
(k) j
b
i)
( i 1,2,
,n)
k 1, 2, 3,
称为松弛法,=1为Gauss—Seidel 迭代法。
松弛法也可写成矩阵形式
x(k1) ( D L)1[(1 )D U]x(k) ( D L)1b
其迭代矩阵为
B ( D L)1[(1 )D U]
x2k 0 0.955788 1.20059 1.19989 1.20005 1.2 …
x3k 0 1.24815 1.29918 1.30021 1.3
1.3 …
对 w 取其它值,计算结果满足误差
x(k ) x* 105
的迭代次数如下
w 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 k 163 77 49 34 26 20 15 12 9 k 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 w 6 6 8 10 13 17 22 31 51 105
SOR迭代法超松弛因子选取
《计算方法》实验报告(二)实验名称:SOR 迭代法松弛因子的选取班级: 数学1402班 姓名: 高艺萌 学号:14404210一、 实验目的通过本实验学习线性方程组的SOR 迭代解法以及SOR 迭代法的编程与应用。
对比分析不同条件下的超松弛因子w 的取值大小会对方程组的解造成影响,通过这个实验我们可以了解的w 不同取值会对方程组的解产生的影响。
培养编程与上机调试能力。
二、 实验题目用逐次超松弛(SOR )迭代法求解方程组b Ax =,其中⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=555555122-12-122-112-122-112-122-112-122-12-12201918321 x x x x x x A (1)给定迭代误差,选取不同的超松弛因子1>ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论;(2)给定迭代误差,选取不同的超松弛因子1<ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论;三、 实验原理1.逐次超松弛迭代法可以看作Gauss-Seidel 迭代法的加速,b D Ux D Lx D x k k k 1)(1)1(1)1(--+-+++=2.SOR 迭代计算格式b D L wD I w x U wD I w L wD x k k 111)(111)1()(])1[()-1(------+-++-= 其中,w 叫松弛因子,当w>1时叫超松弛,0<w<1时叫低松弛,w=1时就是Gauss-Seidel 迭代法。
3.利用SOR 迭代算法进行求解。
4.算法原理:SOR 迭代法%masor.mfunction x=masor(A,b,omega,x0,ep,N)n=length(b);if nargin<6,N=500;endif nargin<5,ep=1e-6;endif nargin<4,x0=zeros(n,1);endif nargin<3,omega=1.5;endx=zeros(n,1);k=0;while k<Nfor i=1:nif i==1 x1(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);else if i==n x1(n)=(b(n)-A(n,1:n-1)*x(n:n-1)/A(n,n);elsex1(i)=(b(i)-A(i,1;i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i); endendx(i)=(1-omega)*x0(i)+omega*x1(i); endif norm(x0-x,inf)<ep,break;endk=k+1;x0=x; endif k==N Warning; enddisp([’k=’,num2str(k)])运行程序四、实验内容根据实验题目,分别对问题一,问题二进行求解。
超松弛迭代法解线性方程组
. ...设计题目:超松弛迭代法解线性方程组摘要本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。
首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。
其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。
然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。
最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。
关键词:稀疏线性方程组逐次超松弛迭代法松弛因子matlab编程一、问题提出考虑两点边值问题()()⎪⎩⎪⎨⎧==<<=+.11,00,10,22y y a a dxdy dx y d ε 容易知道它的精确解为.1111ax e e ay x+⎪⎪⎭⎫ ⎝⎛---=--εε为了把微分方程离散,把[]1,0区间n 等分,令nh 1=,ih x i =,,1,,2,1-=n i 得到差分方程,21211a h y y hy y y ii i i i =-++-++-ε简化为()(),2211ah y y h y h i i i =++-+-+εεε从而离散后得到的线性方程组的系数矩阵为()()()()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡+-++-++-++-=h h h h h h h A εεεεεεεεεε2222对1=ε,4.0=a ,200=n ,分别用1=ω、5.0=ω和5.1=ω的超松弛迭代法求解线性方程组,要求有4位有效数字,然后比较与精确解的误差,探讨使超松弛迭代法收敛较快的ω取值,对结果进行分析。
改变n ,讨论同样问题。
二、超松弛迭代法产生的背景对从实际问题中得到维数相当大的线性代数方程组的求解仍然十分困难, 以至使人们不能在允许的时间内用直接方法得到解, 因此, 客观上要求用新的方法来解决大维数方程组的求解问题。
第六章第三节逐次超松弛迭代法
则说 A 是具有相容次序的矩阵.
注意:
若矩阵 A aij 具有相容次序, 则属于同一子集的元素之间没有联系, 即若 i, j Wk , aij 则
0, , a ji 0 . 且
例3
0 0 1 4 1 4 1 0 A 0 1 4 0 0 4 1 0
x0i (i 1,, n) ;参数 ;容限 TOL ;最大迭代次数 m
输出 近似解 x1 , x2 , x n 或迭代次数超过 m 的信息.
step 1
对 k 1,, n 做 step2—4. 对 i 1,2,, n
step 2
xi (1 ) x0i
step 3 step 4 对 i 1,2,, n
定理 1 设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0, i 1,, n ,则 SOR 方法
收敛的充分必要条件为
(T ) 1
其中 T 是 SOR 方法的迭代矩阵.
定理 2
设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0, i 1,, n ,则 SOR 方法
2
x 我们把(3.1)式中的中间 ~i( k ) 消去,则有
i 1 ~ ( k ) (b a x ( k ) xi ij j i aii j 1
j i 1
a
n
ij
x (jk 1) ) (1 ) xi( k 1)
i 1,2,, n, k 1,2
3
例1 方程组
5 x1 x 2 x3 x 4 4 x 10 x x x 12 2 3 4 x1 x 2 5 x3 x 4 8 x1 x 2 x3 10 x 4 34
牛顿迭代法和雅克比迭代法和高斯赛德尔迭代逐次超松弛迭代
实验三非线性方程的牛顿法和线性方程组的迭代数值求解信息与计算科学金融崔振威201002034031一、实验目的:设计牛顿迭代算法和线性方程组的常用迭代算法二、实验内容:p69.3、p129.1三、实验要求:1、根据题目要求构造迭代格式2、对线性方程组的迭代求解要求构造三种迭代格式3、试比较牛顿迭代法和不动点迭代法的优劣(p69.3)4、试比较线性方程组三种迭代的优劣(收敛和收敛速度)主程序:a、牛顿迭代法程序:function [x,k]=newton(f,p0,e)%求f(x)=0在给定p0的根。
%f为所求的函数f(x),p0为迭代初始值,e为迭代精度。
k为迭代次数%diff(f)为对函数求导,subs是赋值函数,用数值替代符号变量替换函数例xa=p0;xb=xa-subs(f,xa)/subs(diff(f),xa);k=1;while abs(xa-xb)>e,k=k+1;xa=xb;xb=xa-subs(f,xa)/subs(diff(f),xa);endx=xb;b、雅克比迭代法程序function [x,n]=Jacobi_Solve(A,b,x0,eps,varargin)%求解线性方程组的迭代法%A为方程组的细数矩阵%b方程组的右端项数字的向量组%eps为精度要求,默认值为1e-5%varargin为最大迭代次数,值为100%x为方程组的解%n为迭代次数if nargin==3eps=1.0e-6;M =200;elseif nargin<3returnelseif 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('迭代次数太多,可能不收敛。
黄金比例分割法确定对称逐次超松弛迭代法的最佳松弛因子
(2) 1 < ω < 2 ;
(3) 取 [D] = k[I ],当 k n ∈ (0, 1) 时;
2
则本文采用改进的SSOR迭代法收敛。
证明:本文所采用的SSOR-PCG法改进的迭代格式所采用的迭代矩阵为:
Lω = I − ω(D − ωCL )−1 A = (I − ωL)−1 ((1 − ω)I + ωU )
表1 方向
x y x y x
本文算法与MARC计算节点位移比较
MARC 解
本文算法解
-0.315654E-03
-0.315041E-03
-0.151406E-03
-0.151282E-03
-0.130349E-01
-0.130269E-01
-0.354377E-01
-0.353946E-01
-0.148028E-01
0.019 0.213 0.122 0.052
y
10151
x
y
10251
x
y
注:表中节点位置参见图1.
-0.168963E-03 0.131212E-01
-0.355535E-01 0.149818E-01
-0.943525E-01
-0.168703E-03 0.131073E-01
-0.355067E-01 0.149659E-01
(1)
( ) R: α = y k ,Vy k
式中 ( , ) 为内积表示,下同。
如果α ≤ ε ,则停止,否则
-1-
⎧τ ⎪
k
⎪δ k
=
+1
( y k ,Vy k ) /(d k ,2z k = δ k +τkdk,
逐次迭代法
1
思 想
利用第k次迭代值和第k +1次的G-S迭代值 作加权平均
G-S迭代法的计算公式 :
xቤተ መጻሕፍቲ ባይዱ
( k 1) i
x
( k 1) i
bi aij x
j 1
i 1
( k 1) j
j i 1
a
n
ij
x
(k ) j
a ii
作加权平均
x
( k 1) i
x
j 1 i 1 j i 1 (k ) a x ij j ) n
用分解式 A = D+L+U,则可写为
Dx
( k 1)
(1 ) Dx
( k 1)
(k )
(b - Lx
( k 1)
(k )
- Ux )
(k )
( D L) x
((1 ) D - U ) x
b
x ( k 1) ( D L)1 ((1 ) D - U ) x ( k ) ( D L)1 b
这就是SOR迭代法的矩阵表示。
4
SOR迭代法的迭代矩阵
BSOR ( D L) ((1 ) D - U )
1
5
SOR 迭代法收敛性 定理
2
( k 1) i
(1 ) x
(k ) i
:松弛因子
逐次超松弛(SOR)迭代法的分量形式:
bi aij x
j 1 i 1 ( k 1) j
x
( k 1) i
(1 ) x
(k ) i
j i 1
a
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3.7)
图6.1
12
我们在 (x, y) 平面上作两组平行直线
x x0 ih, y y0 jh i, j 0,1,2,
(3.8)
(x0 , y0 ) 是平面 (x, y) 上的任意一点,通常取 (x0 , y0 ) 为坐标原点, h( 0) 称为步长.这样,整
个平面就被这两组平行直线构成的正方形网格所覆盖,所讨论的区域 G+P 可被有限个正
x1(k )
1 (4 5
x (k 1) 2
x (k 1) 3
x4(k 1) )
x2(k )
1 10
(12
x1(k
)
x (k 1) 3
x (k 1) 4
)
x3(k )
1 (8 5
x1(k )
x2(k )
x4(k 1) )
x4(k )
1 (34 10
x1(k )
x2(k )
x3(k ) )
k 1,2,
输出 近似解 x1, x2 ,xn 或迭代次数超过 m 的信息.
step 1 对 k 1,, n 做 step2—4.
step 2 对 i 1,2,, n
step 3 step 4
i 1
n
(bi aij x j aij xoj
xi (1 )x0i
j 1
j i 1
若 x x0 TOL ,则输出 (x1,, xn ) ;停机.
图表6.2
5
从表6.2得到
x6x
5.5 61 04
算法6.3 应用SOR方法解方程组 Axb
输人 方程组的阶数 n ; A 的元素 aij (i, j 1,, n) ;b 的分量 bi (i 1,, n) ;初始向量 x0 的分量
x0i (i 1,, n) ;参数 ;容限TOL;最大迭代次数 m
x3(k )
0.24 x1(k )
0.24 x2(k )
0.2x3(k 1)
0.24
x
(k 4
1)
1.92
x4(k ) 0.12 x1(k ) 0.12 x2(k ) 0.12 x3(k ) 0.2x4(k1) 4.08
k 1,2
取初始得量 x0 0,0,0,0T ,迭代六次得结果见表 6.2.
(T ) 1 其中 T 是 SOR 方法的迭代矩阵.
定理 2 设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0,i 1,, n ,则 SOR 方法 的迭代矩阵了。的谱半径大于等于 1 ,即
(T ) 1
且 SOR 方法收敛的必要条件是
0 2
证明 由(3.5)式,有
(3.6)
立解方程组 Ax b 的遥次超松弛迭代法(SOR 方法)
~xi(k)
1 aii
(bi
i 1
aij
x
(k j
)
j 1
n
a x (k 1) ij j
j i1
xi(k )
x (k 1) i
(~xi(k )
x (k 1) i
)
(3.1)
i 1,2,, n
这里,引入一个中间量
~xi(k ) 和一个加速收敛的参数
例如, i 1W1, a2,1 1 0,2 W2 , a14 1 0,4 W2 , i 2 W2 , a21 1 0 1W1, a23 1 0,3 W3
因此矩阵 A 具有相容次序.
定义3
给定一个 n 阶矩阵 A aij ,记W 1,2,, n.若存在W 的两个不相交的子集 S1, S2 使得
因此 2 1
q (q )2 (q )2 q(2 )(2 q) 0 ,
从而
(T ) 1.
故 SOR 方法收敛.
9
当 1时,SOR 方法就是 Gauss—Seidel 迭代法.因此,若且是对称正定矩阵,则 Gauss—
Seidel 迭代法亦收敛. 例 2 容易验证例 1 的线性方程组的系数矩阵是对称正定的.因此,对于解这个方程
其中
Tw (I L)1 ((1 )I U ) (3.5)
它是 SOR 方法的迭代矩阵.特别,若取 1,则 T1 (I L)1U 是 Gauss-Seidel 迭代法的
迭代矩阵.
若将矩阵 A 分裂成
A 1 (D DL) 1 ((1 )D DU ), 0
按§1 所述的建立相容迭代法的方法,立即可得 SOR 方法.因此,SOR 方法与方程组 Ax b 是完
~xi(k)
aii
(bi
i 1
aij
x
(k j
)
j 1
n
aij
x
(k j
1)
)
(1
)
xi(
k
1)
j i1
i 1,2,, n, k 1,2 (3.2)
上式的矩阵表示形式是
或者
xk (Lxk Ux k1 D 1b) (1 )xk1 (3.3)
xk T xk1 (I L)1 D 1b (3.4)
deTt()detI((L)1)de1t ( ()IU) de1t ( ()IU)
(1)n
7
从 (T ) 1 而,迭代矩阵了-的所有特征值之积等于 (1 )n .因此有 (T ) 1
据定理 1,若 SOR 方法收敛,则 (T ) 1,因此 1 1.由于。取实数,故有 0 2
定理 2 说明,若要 SOR 方法收敛,必须选取松弛因子 ,使 (0,2) .但当 (0,2) 时,未必
号次序列方程.于是,由(3.9)式便得到方程组
图6.2
14
4 u 11 u 21 u 01 u 12 u 10 0
4
u
21
u 31
u 11
u 22
u 20
0
4 4
u u
31 41
u 41 u 51
A D DL DU
又因假设 A 是对称正定的,因此 DU (DL)T
x H DUx x H (DL)T x (x H DLx ) H i
q 0
从而有
于是
x H Ax x H (D DL DU )x q 2 0
qqi qi
2q(q( q )2) 2 2 222
由假设 0 2 ,有
对任何线性方程组,SOR 方法都收敛.
定理 3 若线性方程组 Ax b 的系数矩阵 A 是对称正定的,则 0 2 当时,SOR 方法收敛.
证明
设 是 SOR 方法的迭代矩阵
Tw (I L)1 ((1 )I U ) 的任意一个特征值, x 为与其相应的特征向量,则有等式
(I L)1((1 )I U )x x
就例 3,取 S1 1,3, S2 2,4,易知它们满足定义 3 中的条件(1)和(2).因此例 1 的矩阵 A
具有性质 A .
例4
考虑 (x, y) 平面的区域 G 内的 Dirichlet 问题:
2u x 2
2u y 2
0
, (x, y) G;
u f (x, y) ,(x, y)
此处 为区域 G 的边界 G , 如图 6.1 所示.
4
取初始向量 x0 0,0,0,0T ,迭代六次得结果见表 6.1.
从表 6.1 得到 x6 x 1.022103
图表6.1
应用 SOR 方法(取 O=1.2)的迭代公式为
x1(k )
0.2x1(k 1)
0.24
x
(k 2
1)
0.24 x3(k 1)
0.24 x4(k 1)
0.96
x2(k ) 0.12 x1(k ) 0.2x2(k1) 0.12 x3(k1) 0.12 x4(k1) 1.44
对 i 1,2,, n
x0i xi
step5 输出(‘Maximun number of iterations exceeded,);
,我们来讨论逐次超松弛迭代法的收敛性问题.
定理 1 设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0,i 1,, n ,则 SOR 方法 收敛的充分必要条件为
组,Gauss~Seidel 迭代法收敛,并且取 1.2时,SOR 方法亦收敛.
3.3 相容次序、性质A和最佳松弛因子
我们从例 1 看到,SOR 方法收敛得快慢与松驰因子。的选择有关.松弛因子选择得好,会加快 SOR 方法的收敛速度.这一段,我们将对一类特殊的矩阵(在偏微分方程数值解法中常遇到的), 简要地叙述最佳松弛因子如何选取的问题.
定义 1 给定一个 n 阶矩阵 A aij ,对 i j ,若或 a ji 0 ,则说 i, j 是有联系的.
定义 2 给定一个 n 阶矩阵 A aij ,记自然数集合W 1,2,,n.若存在W 的t 个
互不相交的子集W1,W2 ,,Wt 使得
(1)
t Wk W
k 1
(2) 对 i Wk ,若 i, j 有联系,则当 j i 时, j Wk1 ;当 j i 时, j Wk1 ,
u (x i,y i h ) 2 u ( h x i2 ,y i) u (x i,y i h ) ( x 2 u 2 )(x i,y i)
则有
13
2u
2u
(x2)(xi,yj)(y2)(xi,yj)
u(xi h,yi)u(xih,yi)u(xi,yj h)u(xi,yj h)4u(xi,yj) h2
(1) S1 S2 W; (2) 若 i, j 有联系,则 i, j 分别属于这两个子集, 则称矩阵 A 具有性质 A
11
注意:定义 3 中 S1 或 S2 可以是空集.若有一个是空集,则矩阵 A 必为对角阵.从定义 3 还 可看到,若矩阵 A 具有性质 A ,则属于同一子集的元素之间没有联系,即若 i, j S1 :或i, j S2 , 则 aij 0 或 a ji 0