您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 房地产 > 超松弛迭代法方法的应用
CENTRALSOUTHUNIVERSITY数值分析实验报告超松弛迭代法的应用一、问题背景在科学计算和工程设计中,经常会遇到求解线性方程组的问题,而快速精确求解一直是我们追求的目标,随着计算机技术的发展,我们可以借助计算机使用很多方法来帮助求解,如直接法等,但通常都只能适用于经过有限步运算能求得解的方程,对于方程数和未知数都很多的方程组,计算量往往相当大,因而人们在寻求其他求解方法的时候,发现了迭代法的巨大优点,从最初的Jacobi迭代法到Gauss-Seidel迭代法,计算过程变得快速简洁。在Guass-Seidel迭代法的基础上,人们发现迭代—松弛—再迭代的方法,能更加减少计算步骤,极大地缩短计算时间,在此基础上,人们进一步发现超松弛迭代法的收敛速度最快,而且超松弛迭代法具有计算公式简单,编制程序容易等突出优点。通过选择合适恰当的松弛因子能直接控制算法的收敛性和收敛速度。二、数学模型一般而言,因Jacobi迭代收敛速度不够快,所以在工程中用的不是太多。在Jacobi迭代手链速度很慢的情况下,通常Guass-Seidel也不会很快。因此,可以对Guass-Seidel做修改,提高收敛速度,这就是这里要介绍的超松弛迭代法。三、算法及流程在Guass-Seidel中迭代格式为gULkk11k可以将迭代格式改写为k1k其中gULk1k如果在修正项上加上一个参数,便使得松弛迭代法公式gULkkkk11k1上式可以改写为LDUDLDkk111当1时候,就退化为Guass-Seidel迭代法;1时,称为逐次超松弛迭代法;1时,称为逐次低松弛迭代法。通常,统称为逐次松弛迭代法。MATLAB实现代码:打开编辑器,输入以下语句并保存为Fsor.m文件。function[x,k]=Fsor(A,b,x0,w,tol)max=300;if(w=0||w=2)error;return;endD=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;k=1;whilenorm(x-x0)=tolx0=x;x=B*x0+f;k=k+1;if(k=max)disp('迭代次数过多,SOR方法可能不收敛');return;end[k,x']end四、计算结果及分析用超松弛迭代法,求解方程组34108512104x54321432143214321xxxxxxxxxxxxxxx要求计算精度为710打开编辑器输入以下命令并以文件名sor.m保存文件。a=[5-1-1-1-110-1-1-1-15-1-1-1-110];b=[-412834]';x0=[1111]';[x,k]=Fsor1(a,b,x0,1.2,1e-7)运行程序,在命令窗口输入sor运行得到:x=1.0000000098338771.9999999950286383.0000000007133604.000000002119737k=14计算结果表明迭代到14次时,已经满足精度。为了进一步分析迭代过程中的收敛情况,下面给出的是每一步的迭代值:ans=Columns1through42.0000000000000001.0206936064000002.0521260359680003.240994000568320Column53.985238565152359ans=Columns1through43.0000000000000001.0626673431252832.0242427818679152.969116885521270Column54.009675528231265ans=Columns1through44.0000000000000000.9881949783238511.9911899306755833.003551127831114Column53.996017218773414ans=Columns1through45.0000000000000001.0001429908824562.0017273743633222.998782794598383Column54.000874935426618ans=Columns1through46.0000000000000001.0003038268767061.9996499119555413.000442322902451Column53.999872540322841ans=Columns1through47.0000000000000000.9999307806680592.0000994948760942.999888211227589Column54.000015710348041ans=Columns1through48.0000000000000001.0000146638148021.9999703312716333.000022527058757Column53.999997760587815ans=Columns1through49.0000000000000000.9999948157774092.0000077461565512.999995571993475Column54.000000223953730ans=Columns1through410.0000000000000001.0000018869494201.9999981727162853.000000953669970Column54.000000076809536ans=Columns1through411.0000000000000000.9999994313771062.0000004208795372.999999792241889Column53.999999941977917ans=Columns1through412.0000000000000001.0000001509484211.9999999020442803.000000040344571Column54.000000022804890ans=Columns1through413.0000000000000000.9999999614568142.0000000225438972.999999993564430Column53.999999992746840ans=Columns1through414.0000000000000001.0000000098338771.9999999950286383.000000000713360Column54.000000002119737将收敛过程绘制成图则如下所示:由图可以看出,有迭代求出的根值收敛速度很快,并且很稳定,因而可以知道超松弛迭代法是一种比较有效的迭代方法。
本文标题:超松弛迭代法方法的应用
链接地址:https://www.777doc.com/doc-2043025 .html