超松弛迭代法方法的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

超松弛迭代法的应用

一、问题背景

在科学计算和工程设计中,经常会遇到求解线性方程组的问题,而快速精确求解一直是我们追求的目标,随着计算机技术的发展,我们可以借助计算机使用很多方法来帮助求解,如直接法等,但通常都只能适用于经过有限步运算能求得解的方程,对于方程数和未知数都很多的方程组,计算量往往相当大,因而人们在寻求其他求解方法的时候,发现了迭代法的巨大优点,从最初的Jacobi 迭代法到Gauss-Seidel 迭代法,计算过程变得快速简洁。在Guass-Seidel 迭代法的基础上,人们发现迭代—松弛—再迭代的方法,能更加减少计算步骤,极大地缩短计算时间,在此基础上,人们进一步发现超松弛迭代法的收敛速度最快,而且超松弛迭代法具有计算公式简单,编制程序容易等突出优点。通过选择合适恰当的松弛因子ω能直接控制算法的收敛性和收敛速度。

二、数学模型

一般而言,因Jacobi 迭代收敛速度不够快,所以在工程中用的不是太多。在 Jacobi 迭代手链速度很慢的情况下,通常Guass-Seidel 也不会很快。因此,可以对Guass-Seidel 做修改,提高收敛速度,这就是这里要介绍的超松弛迭代法。

三、算法及流程

在Guass-Seidel 中迭代格式为

()()()g U L k k +X +X =X ++11k

可以将迭代格式改写为

()()∆X +X =X +k 1k

其中

()()X •+X +X =∆X +g U L k 1k

如果在修正项上加上一个参数ω,便使得松弛迭代法公式

()()()()()()()

g U L k k k k +X +X +X -=∆X +X =X ++11k 1ωωω

上式可以改写为

()()

()[]()()L D U D L D k k ωωωωω-+X +--=X -+11

1

当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 ; end

D=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; while norm(x-x0)>=tol x0=x; x=B*x0+f; k=k+1; if (k>=max)

disp('迭代次数过多,SOR 方法可能不收敛'); return ; end [k,x'] end

四、计算结果及分析

用超松弛迭代法,求解方程组

34

108512104x 54321432143214321=+---=-+--=--+--=---x x x x x x x x x x x x x x x

要求计算精度为710-

打开编辑器输入以下命令并以文件名sor.m 保存文件。 a=[5 -1 -1 -1 -1 10 -1 -1 -1 -1 5 -1 -1 -1 -1 10]; b=[-4 12 8 34]'; x0=[1 1 1 1]';

[x,k]=Fsor1(a,b,x0,1.2,1e-7) 运行程序,在命令窗口输入 >>sor 运行得到: x =

1.000000009833877 1.999999995028638

3.000000000713360

4.000000002119737

k =

14

计算结果表明迭代到14次时,已经满足精度。为了进一步分析迭代过程中的收敛情况,下面给出的是每一步的迭代值:

ans =

Columns 1 through 4

2.000000000000000 1.020693606400000 2.052126035968000

3.240994000568320

Column 5

3.985238565152359

ans =

Columns 1 through 4

3.000000000000000 1.062667343125283 2.024242781867915 2.969116885521270

Column 5

4.009675528231265

ans =

Columns 1 through 4

4.000000000000000 0.988194978323851 1.991189930675583 3.003551127831114

Column 5

3.996017218773414

ans =

Columns 1 through 4

5.000000000000000 1.000142990882456 2.001727374363322 2.998782794598383

Column 5

4.000874935426618

ans =

Columns 1 through 4

6.000000000000000 1.000303826876706 1.999649911955541 3.000442322902451

Column 5

3.999872540322841

ans =

Columns 1 through 4

7.000000000000000 0.999930780668059 2.000099494876094 2.999888211227589

Column 5

4.000015710348041

ans =

Columns 1 through 4

相关文档
最新文档