数值分析课程设计-- 松弛迭代法中松弛因子
数值分析迭代法
(3)
学院:信息学院
班级:计算机0903班
姓名:王明强
学号:20092954
课题三线性方程组的迭代法
一、问题提出
1、设线性方程组
=
x = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )
2、设对称正定阵系数阵线方程组
=
x = ( 1, -1, 0, 2, 1, -1, 0, 2 )
具体程序如下:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
int n;//矩阵的维数
long N,k;//最大迭代次数,当前迭代次数
float e;//精度要求
float w=0;//松弛因子
int a[10][10],b[10];//矩阵和右端项
通过这次实验让我更深刻的了解到了各种迭代法的适用条件,同时也让我知道了,不是所有方程都能通过迭代法来求解。而且迭代法是存在一定误差的,即使我们在做程序时,不考虑舍入误差,也是会产生一定的机器误差的。但是迭代法对于我们来说也是非常有意义的,比如一些大的工程我们用一些基本的方法可能根本不能计算或者非常麻烦,这个时候要是能使用迭代法就会让问题简单化,给我们带来了极大的便利。
优点:算法简单,程序易于实现,特别适用求解大型稀疏线性方程组。
缺点:与直接方法不同,即使在计算过程中无舍入误差,迭代法也难获得精确解。而且并不是所有方程组都适用我们学过的迭代法,对于这样的方程组,我们还必须自己构造一个收敛的迭代矩阵。
2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;
迭代法的收敛性与稳定性 - 松弛迭代法、迭代法的收敛性与稳定性
定义 6.5 设有矩阵序列 Ak (aij(k ) ) Rnn 及 Ak (aij ) Rnn ,如果 n2 个数列极限存在
且有
lim
k
a (k) ij
aij
(i,
j
1,2,..., n)
则
Ak
称收敛于
A
记为 lim(k
)
。
定理 6.5
lim
k
Ak
A
lim
三 松弛法例题与程序
例 6.9 取 1.4, x(0) (1,1,1)T 用超松弛法解方程组
2x1 x2
1
x1 2x2 x3 0
x2 2x3 1.8
� � 解:由 xi(k1)
(1 )xik
aii
(bi
i 1 j 1
a x(k 1) ij j
n
aij
x
(k j
x j(k ) ) / aii xi(k )
j i
j i 1
i 1
n
(bi aij x j(k 1) aij x j(k ) ) / aii
ji
ji
(i 1,, n; k 0,1,).
� � i1
n
xi
b x(k 1) ij j
bij
x(k) j
gi
x(k) i
j 1
j i 1
a x(k1) ij j
aij x(jk ) ) / aii .
j 1
j i 1
(2) 再由 x(k) 与 ~xi(k 1) 加权平均定义 xi(k 1) ,即
x(k 1) i
(1 )xi(k)
x%i(k 1)
CFD松弛因子的解释
---------------------------------------------------------------最新资料推荐------------------------------------------------------CFD松弛因子的解释1、FLUENT 中关于松弛因子的解释由于流体力学中要求解非线性的方程,在求解过程中,控制变量的变化是很必要的,这就通过松弛因子来实现的。
它控制变量在每次迭代中的变化。
也就是说,变量的新值为原值加上变化量乘以松弛因子。
如: A1=A0+B*DETA A1 新值 A0 原值 B 松弛因子 DETA 变化量松弛因子可控制收敛的速度和改善收敛的状况为 1,相当于不用松弛因子大于 1,为超松弛因子,加快收敛速度小于 1,欠松弛因子,改善收敛的条件一般来讲,大家都是在收敛不好的时候,采用一个较小的欠松弛因子。
Fluent 里面用的是欠松弛,主要防止两次迭代值相差太大引起发散。
松弛因子的值在 0~1 之间,越小表示两次迭代值之间变化越小,也就越稳定,但收敛也就越慢。
这个 1e-3 或者 1e-4 的收敛标准是相对而言的。
FLUENT 中残差是以开始 5 步的平均在值为基准进行比较的。
如果初值取得好,迭代会很快收敛,但是残差却依然很高;但是当你改变初场到与基准相差很大的值时,残差开始会很大,但随后却可以很快降低到很低的水平。
其实两种情况下流场是基本相同的。
1/ 72、FLUENT收敛判断由此来看,判断是否收敛并不是严格根据残差的走向而定的。
可以选定流场中具有特征意义的点,监测其速度,压力,温度等的变化情况。
如果变化很小,符合你的要求,即可认为是收敛了。
一般来说,压力的收敛相对比较慢一些的。
是否收敛不能简单看残差图,还有许多其他的重要标准,比如进出口流量差、压力系数波动等等。
尽管残差仍然维持在较高数值,但凭其他监测也可判断是否收敛。
最重要的就是是否符合物理事实或试验结论。
数值分析课程设计--松弛迭代法中松弛因子
安徽建筑大学数值分析设计报告书题目松弛迭代法中松弛因子院系数理系专业信息与计算科学班级信息②班学号 12207210220姓名穆海山时间2013-12-10~2013-12-23 指导教师刘华勇题目:选用Jacobi 迭代法、Gauss-Seidel 迭代法和超松弛迭代法求解下面的方程组(考虑n 等于150)123216186186186186186n n n x x x x x x --⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦=10.522.522.522.522.521⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦考虑初值的变化和松弛因子ω的变化收敛效果的影响;对上述方程组还可以采用哪些方法求解?选择其中一些方法编程上机求解上述方程组,说明最适合的是什么方法;将计算结果进行比较分析,谈谈你对这些方法的看法。
一、摘要本课程设计用matlab 就线性方程组数值方法,Jacobi 迭代法,Gauss-Seidel 迭代法,超松弛法对所设计的问题进行求解,并编写程序在Matlab 中实现,在文章中对各种迭代法进行了收敛性分析。
接着用几种不同方法对线性方程组进行求解及结果分析,最后对此次课程设计进行了总结。
关键词:线性方程组,迭代,Matlab ,结果分析二、设计目的用熟悉的计算机语言编程上机求解线性方程组。
三、理论基础对方程组 Ax b = 做等价变换 x Gx g =+ 如:令 A M N =-,则11()Ax b M N x b Mx Nx b x M Nx M b --=⇒-=⇒=+⇒=+ 则,我们可以构造序列 (1)() k k x G x g +=+ 若 ()*k x x →* **x G x g Ax b ⇒=+⇒= 同时:(1)()()**(*)k k k x x Gx Gx G x x +-=-=-1(0)(*)k G x x +==-所以,序列收敛0k G ⇔→,与初值的选取无关1122(,,,)nn D diag a a a =设则转化为矩阵形式(1)()1()()k k k x x D b Ax +-=+-(1)()1()1k k k x x D Ax D b +--=-+(1)1()1()k k x D D A x D b +--=-+ (1) 令2112000000n n a L a a ⎛⎫ ⎪- ⎪= ⎪ ⎪--⎝⎭1212000000n n a a a U --⎛⎫⎪- ⎪= ⎪ ⎪⎝⎭A D L U =-- 或者 D A L U -=+故迭代过程(1)化为(1)1()1()k k x D D A x D b +--=-+(1)1()1()k k x D L U x D b +--=++ A D L U =--11(),,J B D L U f D b --=+=令于是 D A L U -=+ 1111()() , J B D L U D D A I D A f D b ----=+=-=-=或者:(1)()k k J x B x f +=+ (2)(0,1,2,)k =等价线性方程组为 J x B x f=+Ax b =称(2)式为解线性方程组(1)的Jacobi 迭代法(J 法)J B Jacobi 为迭代法的迭代矩阵 迭代矩阵 考虑迭代式(2)(1)()k k J x B x f +=+ (0,1,2,)k = 即 (1)1()1()k k xD L U x D b +--=++(1)()()k k k Dx Lx Ux b +=++(,)L 注意到的形式下三角不含对角线 将上式改为 (1)(1)()k k k Dx Lx Ux b ++=++(3)(1)()()k k D L x Ux b +-=+D L -当可逆时 (1)1()1()()k k xD L Ux D L b +--=-+-11(),(),G G B D L U f D L b --=-=-设得(1)()k k G G x B x f +=+ (4)(0,1,2,)k =超松弛迭代 记 ()(1)()k k k xx x +∆=-则 (1)()()k k k x x x +=+∆可以看作在前一步上加一个修正量。
超松弛迭代法及其松弛因子的选取
电子科技大学数值分析实验报告题目:超松弛迭代法及其松弛因子的选取学生姓名:学号:日期:年月日超松弛迭代法及其松弛因子的选取问题提出:在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 i x 与(1)k i x +加权平均得(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 ω为2211b ωμ=+-且222[4(1)],0()41,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-00004AT (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.由这两个例子可以看出利用黄金分割法求最优松弛因子比用逐步搜索法更加简便快速,但是用逐步搜索法步长取的很小时求得的松弛因子比黄金分割法更加精确。
非线性方程的二分法-迭代法-松弛迭代法-Aitken迭代法-Steffensen迭代法
err=input('请输入最大极限err=\n');
k=0;
y=fun(x0)
z=fun(y)
x1=x0-(y-x0)^2/(z-2*y+x0)
cha=abs(y2-y1);
y1=y2;
x2=x3;
ifk>N
disp('超过迭代次数!');
break;
end
end
x=x2;
k;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=Steffensen()
x0=input('输入初值x0=\n');
b=c;
elseifyb*yc>0
b=c;
yb=yc;
else
a3;b)/2;
k;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=diedai1()
x0=input('输入初值x0=\n');
N=input('请输入最大迭代次数N=\n');
【实验内容】
1、二分法
假定方程 在区间 内有唯一的实根 。此时, 即为有根区间。
1.1基本思想:
首先确定有根区间,然后平分有根区间,通过判断区间端点处的函数值符号,逐步将有根区间缩小,直至有根区间足够地小,便可求出满足给定精度要求的根 的近似值。
1.2算法过程:
取 ,将 代入方程 ,判断它的正负号,并用 替换与它同方向的区间端点,依次循环得到:
2、迭代法
2.1基本思想:
理解松弛因子
对于SIMPLEC格式一般不需要减小压力的亚松弛因子。在密度和温度强烈耦合的问题中,如相当高的Rayleigh数的自然或混合对流流动,应该对温度和/或密度(所用的亚松弛因子小于1.0)进行亚松弛。相反,当温度和动量方程没有耦合或者耦合较弱时,流动密度是常数,
温度的亚松弛因子可以设为1.0。对于其它的标量方程,如漩涡,组分,PDF变量,对于某些问题默认的亚松弛可能过大,尤其是对于初始计算。你可以将松弛因子设为0.8以使得收敛更容易。
松弛因子越大 计算速度越快 结果越不稳定 也就是越难收敛
你把松弛因子调小了 结果容易稳定 但计算很慢。一般都是
默认的 然后 看运算比较稳定的话 就加大courant number
来提升速度 除非默认的松弛因子和courant number 一算出
来 就error 或者波动特别的大的时候 才退出来 调小松弛
有时候,如果发现残差开始增加,你可以改变亚松驰因子重新计算。在亚松驰因子过大时通常会出现这种情况。最为安全的方法就是在对亚松驰因子做任何修改之前先保存数据文件,并对解的算法做几步迭代以调节到新的参数。最典型的情况是,亚松驰因子的增加会使残差有少量的增加,但是随着解的进行残差的增加又消失了。如果残差变化有几个量级你就需要考虑停止计算并回到最后保存的较好的数据文件。
a 亚松弛因子
1、亚松驰(Under Relaxation):所谓亚松驰就是将本层次计算结果与上一层次结果的差值作适当缩减,以避免由于差值过大而引起非线性迭代过程的发散。用通用变量来写出时,为松驰因子(Relaxation Factors)。《数值传热学-214》
2、FLUENT中的亚松驰:由于FLUENT所解方程组的非线性,我们有必要控制的变化。一般用亚松驰方法来实现控制,该方法在每一部迭代中减少了的变化量。亚松驰最简单的形式为:单元内变量等于原来的值加上亚松驰因子a与变化的积分离解算器使用亚松驰来控制每一步迭代中的计算变量的更新。这就意味着使用分离解算器解的方程,包括耦合解算器所解的非耦合方程(湍流和其他标量)都会有一个相关的亚松驰因子。
数值计算方法 松弛迭代法 - 松弛迭代法
n1
(k 1)
1
n2
(k 1)
2
b x
( k 1)
n,n1 n1
g n
x
(
0
)
( x1(0) ,
,
x(0) n
)T
,
xi
x (k1) i
x(k) i
xi
(bi
i 1
a x (k1) ij j
n
aij
xj(k) )
/
aii
x(k) i
ji
j i 1
i 1
n
(bi
aij
x (k1) j
aij
x
(k j
)
)
/
aii
.
(2.13)
代
j1
ji1
法
(2) 再由xi(k ) 与x~i(k1) 加权平均定义xi(k1) ,即
x(k1) i
(1 )xi(k)
x(k1) i
x(k) i
( xi(k1)
xi(k) )
(2.14)
将(2.13)代入(2.14)得到解 Ax b 的SOR迭代公式.
第 六
线性插方程值组的法迭代解法
章
主讲教师:刘春凤
1 迭代法原理
2 Jacobi迭代法 3 高斯-塞德尔迭代法 4 松弛迭代法
5 迭代法的收敛性与稳定 性
松弛法的基本思想 松弛法的矩阵表示 松弛法的程序 迭代法收敛性的其它判定方法
松弛法的基本思想
为Gauss-Seidel 迭代法加速
记:x x1 , x2 , , xn T x(k1) x(k)
松
可以把 x 看作Gauss-Seidel 迭代的修正项,即第k次
松弛迭代法
一、松弛迭代计算公式
松弛迭代法
赛德尔迭代法的迭代公式可表示为 i 1 n 1 xi( m +1) = (bi ∑ aij x (jm +1) ∑ aij x (jm ) ) aii j =1 j =i +1
=x
(m) i i 1 n 1 ( m +1) + (bi ∑ aij x j ∑ aij x (jm ) ) aii j =1 j =i
令Bω = ( D ωL) 1[(1 ω ) D + ωU ], gω = ( D ωL) 1 b, 则
x ( m +1) = Bω x ( m ) + gω
(m = 0,1,2, L)
三、松弛法算法 输入 方程组的阶数n, A的元素aij,≤ i, j ≤ n; b的分量bi ,1 ≤ i ≤ n; 1
在实际计算中,松弛法常采用以下形式:
x
( m +1) i
= (1 ω ) x
( m) i
+ ω (bi ∑ aij x
j =1
i 1
( m +1) j
∑ aij x (jm ) ) / aii (i = 1,2, L , n)
j =i
n
二、松弛法的矩阵形式 x (m +1) = ( D ωL) 1[(1 ω ) D + ωU ]x ( m ) + ω ( D ωL) 1 b (m = 0,1,2, L)
ri( m +1) → 0(i = 1,2, L , n)
在修正量前乘上一个参数,即
xi( m +1) = xi( m ) + ωri( m +1)
松弛因子
松弛因子由于流体力学中要求解非线性的方程,在求解过程中,控制变量的变化是很必要的,这就通过松弛因子来实现的.它控制变量在每次迭代中的变化.也就是说,变量的新值为原值加上变化量乘以松弛因子.如:A1=A0+B*DETAA1 新值A0 原值B 松弛因子DETA 变化量松弛因子可控制收敛的速度和改善收敛的状况!为1,相当于不用松弛因子大于1,为超松弛因子,加快收敛速度小于1,欠松弛因子,改善收敛的条件一般来讲,大家都是在收敛不好的时候,采用一个较小的欠松弛因子。
Fluent里面用的是欠松弛,主要防止两次迭代值相差太大引起发散。
松弛因子的值在0~1之间,越小表示两次迭代值之间变化越小,也就越稳定,但收敛也就越慢。
a 亚松驰因子1、亚松驰(Under Relaxation):所谓亚松驰就是将本层次计算结果与上一层次结果的差值作适当缩减,以避免由于差值过大而引起非线性迭代过程的发散。
用通用变量来写出时,为松驰因子(Relaxation Factors)。
《数值传热学-214》2、FLUENT中的亚松驰:由于FLUENT所解方程组的非线性,我们有必要控制的变化。
一般用亚松驰方法来实现控制,该方法在每一部迭代中减少了的变化量。
亚松驰最简单的形式为:单元内变量等于原来的值加上亚松驰因子a与变化的积分离解算器使用亚松驰来控制每一步迭代中的计算变量的更新。
这就意味着使用分离解算器解的方程,包括耦合解算器所解的非耦合方程(湍流和其他标量)都会有一个相关的亚松驰因子。
注:在FLUENT中,所有变量的默认亚松驰因子都是对大多数问题的最优值。
这个值适合于很多问题,但是对于一些特殊的非线性问题(如:某些湍流或者高Rayleigh数自然对流问题),在计算开始时要慎重减小亚松驰因子。
使用默认的亚松驰因子开始计算是很好的习惯。
如果经过4到5步的迭代残差仍然增长,你就需要减小亚松驰因子。
有时候,如果发现残差开始增加,你可以改变亚松驰因子重新计算。
数值分析大作业超松弛迭代法如何选取最佳松弛因子
数值分析⼤作业超松弛迭代法如何选取最佳松弛因⼦超松弛迭代法如何选取最佳松弛因⼦船建学院B1301095 wj⼀、课题背景逐次超松弛迭代法是Gauss-Seidel⽅法的⼀种加速⽅法,是解⼤型稀疏矩阵⽅程组的有效⽅法之⼀,它具有计算公式简单,程序设计容易,占⽤计算机内存较少等优点,但需要选择好的加速因⼦(即最佳松弛因⼦)。
最佳松弛因⼦ω的确定是数值代数中的⼀个理论难题,对于不同的矩阵,其最佳松弛因⼦往往相差很⼤,没有统⼀的计算公式来确定ω。
由于对称正定矩阵sor⽅法收敛的充分必要条件为w在0到2之间,故利⽤对称正定矩阵⼀定收敛的性质,本⽂提供⼀种针对于系数矩阵为对称正定矩阵时,如何选取合适的最佳松弛因⼦的⽅法。
⼆、课题研究流程图三、SOR迭代公式逐次超松弛(Successive Over Relaxation)迭代法,简称SOR迭代法,它是在GS法基础上为提⾼收敛速度,采⽤加权平均⽽得到的新算法,设解⽅程的GS法记为(1)再由与加权平均得这⾥ω>0称为松弛参数,将(1)式代⼊则得(2)称为SOR迭代法,[WTBX]ω>0称为松弛因⼦,当ω=1时(2)式即为GS法,将(2)式写成矩阵形式,则得即于是得SOR迭代的矩阵表⽰(3)四、Matlab程序%sor法确定对称正定矩阵的最佳松弛因⼦w%clc;clear;n=100;%矩阵的阶数%for num=1:100X=diag(rand(n,1));U=orth(rand(n,n)-0.5);a=U'*X*U;%以上是利⽤随机对⾓矩阵和随机正交矩阵,产⽣随机的对称正定矩阵,正交变化不改变特征值%L=zeros(n,n);U=zeros(n,n);%分配L和U的内存空间%step=0.02;%定义w的计算精度%for k=1:(2/step) %由于对称正定矩阵sor⽅法收敛的充分必要条件为w在0到2之间%w=(k-1)*step;for i=1:n %⼀个总的for循环给三个矩阵赋值D-L-U=A,%for j=1:i-1L(i,j)=-a(i,j);%L矩阵的赋值%endfor j=i+1:nU(i,j)=-a(i,j);%U矩阵的赋值%endD(i,i)=a(i,i);%D矩阵的赋值%endH=inv(D-w*L)*((1-w)*D+w*U);%sor⽅法的核⼼,H矩阵为迭代矩阵%p(k)=max(abs(eig(H)));%利⽤此函数求矩阵的谱半径%endk_min=find(p==min(p));%find函数寻找不同的w中谱半径的最⼩值,即寻找收敛最快的w%w_min(num)=(k_min-1)*step;%由最⼩值的序号得到最优的w%endhist(w_min,100)%对数量⾜够多的随机对称正定矩阵做频率统计,w划分100份,做出统计图%mean(w_min)%对不同矩阵的最⼩谱半径所对应的w对平均统计%五、结果对于不同阶数,计算得到的最佳收敛因⼦w不同,⼤致是随阶数增⼤⽽增⼤。
迭代法解线性方程组-数值分析实验报告
数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-24*名:**指导教师:**成绩:二零一六年六月二十日一 、前言:(目的和意义)1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤。
②了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。
2.实验意义迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
比较雅可比迭代法,高斯-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。
二、数学原理:设有方程组b Ax = …① 将其转化为等价的,便于迭代的形式f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式f Bx x k k +=+)()1( …③ 式中B 称为迭代矩阵,f 称为迭代向量。
对任意的初始向量)0(x ,由式③可求得向量序列∞0)(}{k x ,若*)(lim x xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性1.雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ij ii i x a b a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x…③ 也可记为矩阵形式: J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=--=--00000000000000111211212211212222111211n n n nn n nn nn n n n n a a a a a a a a a a a a a a a a a a U L D A式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-0000122311312n n n n a a a a a a U 。
数值分析--第三章--迭代法
数值分析--第三章--迭代法迭代⼀般⽅程:本⽂实例⽅程组:⼀.jacobi迭代法从第i个⽅程组解出xi。
线性⽅程组Ax=b,先给定⼀组x的初始值,如[0,0,0],第⼀次迭代,⽤x2=0,x3=0带⼊第⼀个式⼦得到x1的第⼀次迭代结果,⽤x1=0,x3=0,带⼊第⼆个式⼦得到x2的第⼀次迭代结果,⽤x1=0,x2=0带⼊第三个式⼦得到x3的第⼀次迭代结果。
得到第⼀次的x后,重复第⼀次的运算。
转化成⼀般的形式:(其中L是A的下三⾓部分,D是A的对⾓元素部分,U 是上三⾓部分)得到迭代公式:其中的矩阵B和向量f如何求得呢?其实,矩阵B的计算也很简单,就是每⾏的元素/该⾏上的对⾓元素⼆.Gauss-Seidel迭代法【收敛速度更快】这个可以和jacobi法对⽐进⾏理解,我们以第⼆次迭代为例(这⾥的第⼀次迭代结果都⽤⼀样的,懒得去换)从上表对⽐结果可以看出,Jacobi⽅法的第⼆次迭代的时候,都是从第⼀次迭代结果中,获取输⼊值。
上⼀次迭代结果[2.5,3.0,3.0],将这个结果带⼊上⾯式⼦1,得到x1=2.88,;将[2.5,3.0,3.0]替换成[2.88,3.0,3.0]带⼊第⼆个式⼦的运算,这⾥得到x2=1.95,所以把[2.88,3.0,3.0]替换成[2.88,1.95,3.0]输⼊第三个式⼦计算X3=1.0.这就完成了这⼀次的迭代,得到迭代结果[2.88,1.95,1.0],基于这个结果,开始下⼀次迭代。
特点:jacobi迭代法,需要存储,上⼀次的迭代结果,也要存储这⼀次的迭代结果,所以需要两组存储单元。
⽽Gauss-Seidel迭代法,每⼀次迭代得到的每⼀个式⼦得到的值,替换上⼀次迭代结果中的值即可。
所以只需要⼀组存储单元。
转化成⼀般式:注意:第⼆个式⼦中的是k+1次迭代的第⼀个式⼦的值,不是第k次迭代得值。
计算过程同jacobi迭代法的类似三.逐次超松弛法SOR法上⾯仅仅通过实例说明,Jacobi和Seidel迭代的运算过程。
数值分析课件-num_3.4超松弛迭代法
第三章 线性方程组迭代解法§ 3.4 超松弛迭代法(SOR)一、SOR法迭代公式设线性方程组AX=b≠ 0(i=1,2,⋅⋅⋅⋅⋅⋅,n )。
其中A非奇异,且aii如果已经得到第k次迭代量x (k)及第k+1次迭代量x (k+1)的前i-1个分量(x(k+1),x2 (k+1) ,⋅⋅⋅⋅⋅⋅,x i-1 (k+1) ),1在计算x(k+1)时,先用Gauss-Seidel迭代法得到i(1)选择参数ω,取(2)把 式(1)代入式(2)可以综合写成:即得超松弛法或逐次超松弛迭代法(Successive Over-Relaxation Method),简称SOR法。
或可表示成增量的形式:其中,参数ω叫做松弛因子;若ω=1,它就是Gauss-Seidel迭代法。
令A=D-L-U, SOR 法(2)式可写成:(1)1()1)[(1)]()k k XL D U XD L bωωωωω+--=-++-(D -再整理成:于是可导出SOR 法的矩阵形式:(1)()k k XB Xfω+=+其中,迭代矩阵和f 为:11)[(1)]()B L D U f D L bωωωωωω--⎧=-+⎪⎨=-⎪⎩(D -例3.6 用SOR法求解线性方程组解方程组的精确解为x=(3,4,-5)T,为了进行比较,利用同一初值x(0)=(1,1,1)T,分别取ω=1 (即Gauss-Seidel迭代法)和ω=1.25两组算式同时求解方程组。
①取ω=1 ,即Gauss-Seidel迭代:②取ω=1.25 ,即SOR迭代法:迭代结果见表3.3。
表3.3 Gauss-Seidel迭代法与SOR迭代法比较Gauss-Seidel迭代法SOR迭代法(ω=1.25)k x1x2x3x1x2x30 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.00000001 5.2500000 3.1825000-5.0468750 6.3125000 3.9195313-6.65014652 3.1406250 3.8828125-5.0292969 2.6223145 3.9585266-4.60042383 3.0878906 3.9267587-5.0183105 3.1333027 4.0402646-5.09668634 3.0549316 3.9542236-5.0114410 2.9570512 4.0074838-4.97348975 3.0343323 3.9713898-5.0071526 3.0037211 4.0029250-5.00571356 3.0214577 3.9821186-5.0044703 2.9963276 4.0009262-4.99828227 3.0134110 3.9888241-5.0027940 3.0000498 4.0002586-5.0003486迭代法若要精确到七位小数,◆ Gauss-Seidel迭代法需要34次迭代;◆而用SOR迭代法(ω=1.25),只需要14次迭代。
SOR松弛因子实验报告
SOR松弛因子
200820801065 查俊
一、问题叙述
用SOR迭代法解线性方程组,在迭代收敛的情况下,松弛因子如何选项迭代收敛最快?事实上,对于这一情况始终是没有解决的问题,要反复试验才能得到比较满意的结果。
二、问题分析
SOR Gauss-Seidel迭代
0.01扫描寻找A的
最佳松弛因子。
三、实验程序及注释
新建m文件bw.m
function BW=bw(A,w)
n=max(size(A));
L=zeros(n);
U=L;
for i=1:n
for j=1:n
if j<i
L(i,j)=A(i,j);
end
if j>i
U(i,j)=A(i,j);
end
end
end
D=A-L-U
BW=inv(D+w*L)*[(1-w)*D-w*U];
新建m文件best_w.m
A=[4 -2 -1;-2 4 -2;-1 -2 3]
w=0.5:0.01:2;
n=size(w)
rho=zeros(n)
for i=1:max(n)
BW=bw(A,w(i));
rho(i)=max(abs(eig(BW)))
end
[rho_best,m]=min(rho);
w_best=w(m)
rho_best
plot(w,rho)
四、实验数据结果及分析
程序运行后,w_best=1.4400(松弛因子),rho_best=0.5291(谱半径)
下图为松弛因子和谱半径的函数图像
五、实验结论
通过实验可以看出,迭代矩阵的谱半径对于松弛因子是一个单峰函数,有唯一的最小点。
松弛迭代法
)
x(m) i
r (m1)
i
(i 1,2,, n)
其中,ri(m1)
1 aii
(bi
i 1
a x(m1) ij j
j 1
n j i
aij
x
(m) j
)(i
1,2,, n)
称为第m+1步第I个分量的修正量. 当迭代法收敛时
r (m1) i
0(i
1,2,, n)
在修正量前乘上一个参数,即
x ( m 1) i
xi( m )
r (m1) i
(i 1,2,, n)
这种求方程组近似解的方法称为松弛法,称为松弛因子. 当 1时,称为低松弛法,当 1时,就是赛德尔迭代法, 当 1时,称为超松弛法,简称为SOR.
在实际计算中,松弛法常采用以下形式:
令B (D L)1[(1 )D U ], g (D L)1b,则
x(m1) B x(m) g (m 0,1,2,)
三、松弛法算法
输入 方程组的阶数n, A的元素aij,1 i, j n;b的分量bi ,1 i n;
x(0)的分量x0i ,1 i n;允许误差;最大迭次次数N. 输出 近似解x1, x2,, xn或N次迭代后不收敛的信息 . 步骤
S13 对i 1,2,, n
置x0i xi S2 输出“N次迭代后不收敛”;停机.
作业:
教材P91 习题4
i 1
n
x(m1) i
(1 )xi(m)
(bi
a x(m1) ij j
aij
松弛因子的取值范围
松弛因子的取值范围
松弛因子(Relaxation Factor)在不同的上下文中有不同的应用,通常是指在迭代求解算法中的一个参数,用于控制每一步迭代的步长或权重。
常见的应用包括迭代法求解线性方程组、优化问题等。
1.迭代法中的松弛因子:
•在迭代法中,例如迭代法求解线性方程组的过程中,松弛因子通常表示为符号ω(omega)。
其取值范围通常
为(0, 2) 之间,包括0和2。
常见的取值有1、1.1、1.2
等,取决于具体问题和算法。
2.松弛法(Relaxation Methods)中的松弛因子:
•在一些优化问题的求解中,也可以采用松弛法,松弛因子的选择可能依赖于问题的性质。
一般而言,松弛因
子的取值范围也是在(0, 2) 之间。
3.有限元分析中的松弛因子:
•在有限元分析等领域,松弛因子通常用于控制迭代法的收敛速度,取值范围也在(0, 2) 之间。
总体而言,松弛因子的合适取值依赖于具体问题的性质和迭代算法的特点。
通常来说,选择一个适当的松弛因子可以加速算法的收敛,提高求解效率。
然而,选择过大或过小的松弛因子可能导致算法不稳定或者收敛速度过慢,因此在实际应用中需要进行调试和优化。
五迭代法的迭代速度及松弛因子的确定
数值计算方法
实
验
报
告
实验序号:实验三
实验名称:用幂法(逆幂法)的实现
求矩阵所有的特征值
实验人:
专业班级:06信息与计算科学
学号:
实验时间:2009.03.20
江西财经大学信息管理学院
1
实验三 用幂法(逆幂法)的实现求矩阵所有的特征值
一、实验目的
利用幂法(逆幂法)和位移技术探讨求矩阵A 的所有特征值。
二、实验要求
1、幂法的实现
求出矩阵A 的模最大的特征值1λ。
2、逆幂法的实现
求出的是逆矩阵1-A 的模最大的特征值1-
n λ,1-n λ的倒数即为矩阵A 的模最小
的特征值n λ。
3、位移技术的原理
若矩阵A 的特征值为λ,则I A μ-的特征值为μλ-。
(1)如果求出I A μ-的模最大的特征值σ,则σμλ+=就是A 的离μ距离最大的特征值,方法:幂法。
(2)如果求出I A μ-的模最小的特征值σ,则σμλ+=就是A 的离μ距离最小的特征值,方法:逆幂法。
4、位移逆幂法的实现
(1)使用幂法求出A 的模最大的特征值1λ,则A 的全部特征值均在区间[-1λ,1λ]上,取μ∈[-1λ,1λ],
用逆幂法求出 1)(--I A μ的模最大的特征值1-σ,即I A μ-的模最小的特征值为σ,σμλ+=就是A 的离μ距离最小的特征值。
(2)对μ∈[-1λ,1λ]进行密度较高的搜索,即可得到A 的更多的特征值。
《数值分析》课程实验报告范文
《数值分析》课程实验报告范文《数值分析》课程实验报告姓名:学号:学院:机电学院日期:2022年某月某日目录实验一函数插值方法1实验二函数逼近与曲线拟合5实验三数值积分与数值微分7实验四线方程组的直接解法9实验五解线性方程组的迭代法15实验六非线性方程求根19实验七矩阵特征值问题计算21实验八常微分方程初值问题数值解法24实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。
试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。
实验二函数逼近与曲线拟合一、问题提出从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。
t(分)051015202530354045505501.272.162.863.443.874.154.374.51 4.584.024.64二、要求1、用最小二乘法进行曲线拟合;2、近似解析表达式为;3、打印出拟合函数,并打印出与的误差,;4、另外选取一个近似表达式,尝试拟合效果的比较;5、某绘制出曲线拟合图。
三、目的和意义1、掌握曲线拟合的最小二乘法;2、最小二乘法亦可用于解超定线代数方程组;3、探索拟合函数的选择与拟合精度间的关系四、实验步骤:第一步先写出线性最小二乘法的M文件functionc=lpoly(某,y,m)n=length(某);b=zero(1:m+1);f=zero(n,m+1); fork=1:m+1f(:,k)=某.^(k-1);enda=f'某f;b=f'某y';c=a\b;c=flipud(c);第二步在命令窗口输入:>>lpoly([0,5,10,15,20,25,30,35,40,45,50,55],[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.02,4.64],2)回车得到:an=-0.00240.20370.2305即所求的拟合曲线为y=-0.0024某2+0.2037某+0.2305在编辑窗口输入如下命令:>>某=[0,5,10,15,20,25,30,35,40,45,50,55];>>y=-0.0024某某.^2+0.2037某某+0.2305;>>plot(某,y)命令执行得到如下图五、实验结论分析复杂实验数据时,常采用分段曲线拟合方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析课程设计-- 松弛迭代法中松弛因子安徽建筑大学数值分析设计报告书题目松弛迭代法中松弛因子院系数理系专业信息与计算科学班级信息②班学号 12207210220 姓名穆海山时间 2013-12-10~2013-12-23指导教师刘华勇题目:选用Jacobi 迭代法、Gauss-Seidel 迭代法和超松弛迭代法求解下面的方程组(考虑n 等于150)123216186186186186186n n n x x x x x x --⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦=10.522.522.522.522.521⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦考虑初值的变化和松弛因子ω的变化收敛效果的影响;对上述方程组还可以采用哪些方法求解?选择其中一些方法编程上机求解上述方程组,说明最适合的是什么方法;将计算结果进行比较分析,谈谈你对这些方法的看法。
一、摘要本课程设计用matlab 就线性方程组数值方法,Jacobi 迭代法,Gauss-Seidel 迭代法,超松弛法对所设计的问题进行求解,并编写程序在Matlab 中实现,在文章中对各种迭代法进行了收敛性分析。
接着用几种不同方法对线性方程组进行求解及结果分析,最后对此次课程设计进行了总结。
关键词:线性方程组,迭代,Matlab ,结果分析二、设计目的用熟悉的计算机语言编程上机求解线性方程组。
三、理论基础对方程组 Ax b = 做等价变换 x Gx g =+ 如:令 A M N =-,则11()Ax b M N x b Mx Nx b x M Nx M b --=⇒-=⇒=+⇒=+则,我们可以构造序列 (1)() k k x G x g +=+ 若 ()*k x x →* **x G x g Ax b ⇒=+⇒= 同时:(1)()()**(*)k k k x x Gx Gx G x x +-=-=-1(0)(*)k G x x +==-所以,序列收敛0k G ⇔→,与初值的选取无关1122(,,,)nn D diag a a a =设则转化为矩阵形式(1)()1()()k k k x x D b Ax +-=+-(1)()1()1k k k x x D Ax D b +--=-+(1)1()1()k k x D D A x D b +--=-+ (1)令2112000000n n a L a a ⎛⎫ ⎪- ⎪= ⎪⎪--⎝⎭1212000000n n a a a U --⎛⎫⎪- ⎪= ⎪ ⎪⎝⎭A D L U =-- 或者 D A L U -=+故迭代过程(1)化为(1)1()1()k k x D D A x D b +--=-+ (1)1()1()k k x D L U x D b +--=++ A D L U =-- 11(),,J B D L U f D b --=+=令于是D A L U -=+1111()() , J B D L U D D A I D A f D b----=+=-=-=或者:(1)()k k J x B x f+=+(2)(0,1,2,)k =等价线性方程组为J x B x f=+Ax b =称(2)式为解线性方程组(1)的Jacobi 迭代法(J 法)J B Jacobi 为迭代法的迭代矩阵迭代矩阵 考虑迭代式(2)(1)()k k J x B x f+=+ (0,1,2,)k =即(1)1()1()k k x D L U x D b +--=++ (1)()()k k k Dx Lx Ux b +=++(,)L 注意到的形式下三角不含对角线将上式改为 (1)(1)()k k k DxLx Ux b ++=++ (3) (1)()()k k D L x Ux b +-=+D L -当可逆时 (1)1()1()()k k xD L Ux D L b +--=-+- 11(),(),G G B D L U f D L b --=-=-设得(1)()k k G Gx B x f +=+(4)(0,1,2,)k =超松弛迭代记 ()(1)()k k k x xx +∆=-则 (1)()()k k k xx x +=+∆ 可以看作在前一步上加一个修正量。
若在修正量前乘以一个因子 有 (1)()()k k k xx x ω+=+∆(1)()(1)()()k k k k x x x x ω++=+-对Gauss -Seidel 迭代格式(1)1(1)()()k k k x D Lx Ux b +-+=++(1)()1(1)1()1()()k k k k k x x D Lx D Ux D b x ω+-+--=+++- (1)()1(1)1()1(1)()k k k k x x D Lx D Ux D b ωω+-+--=-+++迭代矩阵(1)()1(1)1()1(1)()k k k k x x D Lx D Ux D b ωω+-+--=-+++ 1(1)1()1()((1))k k I D L x I D U x D b ωωωω-+---=-++(1)111()111()((1))()k k x I D L I D U x I D L D b ωωωωω+------=--++-111111 ()((1)) ()G I D L I D U g I D L D b ωωωωω------∴=--+=-四、 程序代码及运算结果 1.利用Jacobi 迭代法求解:编制名为majacobifun.m 的文件,内容如下: function [x,n]=jacobifun(A,b,x0,eps) %jacobifun 为编写在雅可比迭代函数 %A 为线性方程组的系数矩阵 %b 为线性方程组的常数向量 %x0为迭代初始向量 %eps 为解的精度 %x 为线性方程组的解%n 为求出所需精度的解实际的迭代步数 D=diag(diag(A)); B=D\(D-A); f=D\b; x=B*x0+f;ωn=0;if max(abs(eig(B)))>=1disp('Warning:不收敛!');return;endwhile norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;end2.利用Gauss-Seidel迭代法求解:编制名为G_Seidelifun.m的文件,内容如下:nction [x,n]=G_Seidelifun(A,b,x0,eps)%G_Seidelifun为编写在高斯-赛德尔迭代函数%A为线性方程组的系数矩阵%b为线性方程组的常数向量%x0为迭代初始向量%eps为解的精度%x为线性方程组的解%n为求出所需精度的解实际的迭代步数D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);G=(D-L)\U;f=(D-L)\b;x=G*x0+f;n=0;if max(abs(eig(G)))>=1disp('Warning:不收敛!');return;endwhile norm(x-x0)>=epsx0=x;x=G*x0+f;n=n+1;end3.利用SOR迭代法求解:编制名为SORfun.m的文件,内容如下:function [x,n]=SORfun(A,b,x0,w,eps)%SORfun为编写在松弛迭代函数%A为线性方程组的系数矩阵%b为线性方程组的常数向量%x0为迭代初始向量%w为松弛因子%eps为解的精度%x为线性方程组的解%n为求出所需精度的解实际的迭代步数if(w<=0 ||w>=2)errorreturn;endD=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);S=(D-w*L)\((1-w)*D+w*U);f=w*((D-w*L)\b);x=S*x0+f;n=0;if max(abs(eig(S)))>=1disp('Warning:不收敛!');return;endwhile norm(x-x0)>=epsx0=x;x=S*x0+f;n=n+1;end在Matlab命令窗口输入:>> clearw=1.5;eps=1e-6;n=150;A=diag(8*ones(1,n-1),-1)+diag(6*ones(1,n))+diag(ones(1,n-1),1); b(1)=10.5;b(n)=21;for i=2:n-1b(i)=22.5;endb=b';x0=zeros(n,1);[x1,n]=jacobifun(A,b,x0,eps);[x2,n]=G_Seidelifun(A,b,x0,eps);[x3,n]=SORfun(A,b,x0,w,eps);plot(x1);hold onplot(x2,'r');hold onplot(x3,'g*')表1Jacobi、Guass_seidel、SOR迭代结果表以下为方程组的解的图:图1 初值x0=[0;..;0] 松弛因子ω=1.5时图图2 初值x0=[1;..;1] 松弛因子ω=1.5时图图3 初值x0=[1;..;1] 松弛因子ω=1.1时图五、结果分析通过以上数据测试可以分析出以下几点:1. 系数矩阵为150阶时,经判断Jacobi迭代是发散的、Gauss-Seidel、SOR两种迭代是收敛的,当初值一定时,Gauss-Seidel、SOR对应的迭代次数是逐渐减少的,也就是说SOR迭代比Gauss-Seidel迭代收敛更快。
2. 当初值变大时,Gauss-Seidel、SOR对应的迭代次数是逐渐减少的,当初值相同,松弛因子ω变小时,SOR对应的迭代次数是逐渐减少的,3. 三种迭代法计算得到的解与严格计算方程组后的精确解在结果所示精度下是相同的,说明三种迭代法的求解精度是不低的。
六、设计心得通过这次数值分析课程设计,分别利用Jacobi迭代、Gauss-Seidel迭代和超松弛迭代法求解指定方程组,并考虑了初值变化和松弛因子 的变化对收敛效果胡影响。
回顾数值分析的相关知识,完成了这次课程设计,进一步加深了解线性方程组的方法。
七、参考文献[1]薛定宇,陈阳泉。
高等应用数学问题的MATLAB求解[M]。
北京:清华大学出版社,2008.[2]张德丰。
MATLAB实用数值分析[M]。
北京:清华大学出版社,2012.。