SOR迭代法超松弛因子选取

合集下载

数值分析大作业 超松弛迭代法如何选取最佳松弛因子

数值分析大作业 超松弛迭代法如何选取最佳松弛因子

超松弛迭代法如何选取最佳松弛因子船建学院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不同,大致是随阶数增大而增大。

确定SOR最佳松弛因子的一个实用算法

确定SOR最佳松弛因子的一个实用算法

。, , ) 与 上 述 分 块 相 对 应 的 J c b 迭 代 矩 。… A , ao i
阵 为
o J= — D 一 A — O .一 p O 0 … … B 1 p O

感 引。 因此 , 数 的选 取 是 S 参 OR 方 法 能 否 成 功
的 关 键 。 矩 阵 l 足 “ 一 ”次 序 ( 2 循 环 ) 当 满 红 黑 即 一
z‘ ’一 H ‘’+ C ( 一 0, , ) ( . 1 … 1 4)
2 3而 作 出 的 ;见 文 献 Nih l 和 F x 4, , c os o ] L
Gaa i , Ha j i s ln s d i mo ,No to 和 Tz u s 及 d us s o ma [
维普资讯
第1 卷 第3 9 期
2 002年 8月






V o .19。 o.3 1 N A u st 002 gu 2
Chi s ur l o ne e Jo na f Com put tona e a c ai lM ch ni s
关 键 词 : 性 方 程 组 ; O 迭 代 方 法 ; 弛 因 子 线 S R 松 A
功 能 的 自适 应 S R O
1 引 言
考 虑 线 性 方 程 组
Az — b ( .1) 1
L 一 ( 一 ) [ 1一 ) + dT ( . ) ( ] 1 5
L —一U
B 2 O 1
时 , 的最 优 值
解 决 , 时 此
已 由 Vag [ , u g。成 功 地 r a Yo n  ̄

( 1.3)

最优松弛因子的选择方法

最优松弛因子的选择方法

SOR方法中最优松弛因子的几种选择方法学习了解线性方程组的SOR方法后,老师给我们强调了SOR方法中松弛因子的重要性,但却并没有明确告诉我们如何更好的选取最佳的松弛因子,我想这可能是暗示我们自己课下去查阅资料研究。

所以我这次选取了这一课题作为我的一次大作业。

通过学习我们知道了SOR方法中的松弛因子w的取值直接影响到算法的收敛性和收敛速度。

w选取得当,可以加快收敛速度,甚至可以使发散的迭代变成收敛。

因此,参数w的选取是SOR方法能否成功的关键。

为了保证迭代过程的收敛,必须要求0<w<2,而对超松弛法取1<w<2。

通过查阅资料,我找到了三种对超松弛因子的的选取的简单实用的方法,这些方法还能够运用到计算机算法中去,便于算法的实行。

一、松弛因子的选择方法1.二分比较法将松弛因子w的区间(1,2)进行二分,每个小区间的长度为1/2,w取区间中点值3/2,按照课本上(3.2.15)的公式迭代,求出迭代次数k。

如果k不超过指定的发散常数,则可确定w的值;否则将(1,2)区间四等分,每个小区间的长度为1/4,w取各分点的值继续迭代。

一般地,将区间(1,2)二分M次,每次二分步长为1/2^M,w依次取各二分点的值,同样按照课本中(3.2.15)的公式迭代,并求出迭代次数k值。

如果k值不超过指定的发散常数,则可确定w的值,这种方法总能找到一个不超过指定发散常数的w值。

用算法描述如下:第一步,给定发散常数RADIATION的值,令二分次数M的初始值为1;第二步,将区间(1,2)二分M次,每次二分的步长为1/2^M,w取各二分点的值;第三步,对每一个二分点按照课本中(3.2.15)中公式迭代求出迭代次数K;第四步,比较各二分点的K值找出最少迭代次数的Kmin值;第五步,判断若Kmin小于RADIATION,则结束;否则二分次数M++,跳至第二步继续二分。

2.逐步搜索法将w的取值区间(1,2)进行M等分,w分别取1+1/M,1+2/M,1+3/M,……,1+(M-1/M)。

超松弛迭代法求解两点边值问题(二)

超松弛迭代法求解两点边值问题(二)

超松弛迭代法求解两点边值问题(二)摘要本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。

首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。

其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。

然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。

最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。

关键词:稀疏线性方程组;逐次超松弛迭代法;松弛因子;matlab编程OVERRELAXATION ITERATIVE METHOD FORSOLVINGTWO-BOUNDARY VALUE PROBLEM(TWO)ABSTRACTThis is familiar with the use of computer programming in matlab language and overrelaxation variable overrelaxation iteration method of the theoretical basis of solving equations.First of all, as an example, based on differential equation boundary value problem is derived after discretization is sparse system of linear equations of linear equations, the transformation of sparse linear equations to solve the problem. Second, use write matlab program over relaxation (SOR) iteration method, the iteration method solving sparse linear equations. Then, change the values of relaxation factor and section number n omega, analyzes its convergence and convergence speed, all aspects to make the analysis and comparison of related conclusions. Finally, the over-relaxation iteration algorithm is implemented on a computer using matlab language and obtained a set of numerical solution with exact solution is close to, and draw the comparison, verification of successive overrelaxation (SOR) the accuracy of iterative method.Key words: Sparse linear system of equations;Successive over relaxation iteration method; Relaxation factor;Matlab programming目录1 绪论 (1)1.1 课题研究 (1)2课题研究方法 (2)2.1 超松弛法产生的背景 (2)2.2 超松弛迭代法理论基础 (2)3 实验过程和运行结果 (5)4 结论 (9)参考文献 (10)附录 (11)1 绪论1.1 课题研究考虑两点边值问题容易知道它的精确解为为了把微分方程离散,把区间等分,令,,得到差分方程简化为从而离散后得到的线性方程组的系数矩阵为对,,,分别用、和的超松弛迭代法求解线性方程组,然后比较与精确解的误差;探讨使超松弛迭代法收敛较快的取值,对结果进行分析;探讨在迭代过程中取4位有效数字和7位有效数字有什么不同;谈谈你的体会。

(完整版)6.4超松弛迭代法

(完整版)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 时,称为亚松弛算法。

sor方法

sor方法

sor方法
SOR方法是一种迭代数值解法,主要被用于求解线性系统Ax=b,其中A是系数矩阵,b是右端向量。

SOR方法的全称为"Successive Over-Relaxation Method",意为迭代超松弛法。

在使用SOR方法求解线性方程组时,首先需要将系数矩阵A分解为L、D和U 三个部分,其中L是A的严格下三角矩阵,D是A的对角线矩阵,U是A的严格上三角矩阵。

同时,SOR方法还需要一个松弛因子w。

SOR方法的迭代公式为:
x(k+1) = (1-w)x(k) + w(D-wL)^(-1)(b-Ux(k))
其中x(k)表示第k次迭代求得的解向量,x(k+1)表示x(k)的下一次迭代,^(−1)表示逆矩阵。

可以发现,SOR方法是基于Gauss-Seidel方法的改进,它在每一次迭代中添加了一个松弛因子w,从而使得解向量的迭代更快、更稳定。

在实际应用中,我们需要选择一个合适的松弛因子w,以使得SOR方法能够收敛并且收敛速度较快。

一般来说,选择一个小于1的w能够保证SOR方法的收敛性,而选择一个大于1的w能够加快SOR方法的收敛速度。

需要注意的是,SOR方法只能够求解特定条件下的线性方程组,如系数矩阵为对称正定矩阵、对角占优矩阵等。

当系数矩阵不满足这些条件时,SOR方法可能出现发散的情况。

总的来说,SOR方法是一种简单而有效的数值解法,被广泛应用于工程计算等领域。

在使用时,需要根据具体问题选择合适的松弛因子w,并且注意其收敛性和收敛速度。

超松弛迭代法中松弛因子ω的选取方法

超松弛迭代法中松弛因子ω的选取方法

超松弛迭代法中松弛因子ω的选取方法一、超松弛迭代算法基本概念超松弛迭代法简称为SOR(Successive Over -- Relaxation)法,是求解线性代数方程组的一种迭代加速方法,它是在高斯--塞德尔迭代法的基础上进行加速的,将前一步的结果x k i )(与高斯--塞德尔迭代方法的迭代值x k i )1(+适当的加权平均,期望获得更好的近似值x k i )1(+。

其迭代公式如下:x k i )1(+=(1--ω)x k i )(+a iiw (b i --x a k j i j ij )1(11+-=∑--x a j n i j ij (k)∑=) i =1,2,…,n;k =0,1,2,…(1.1)SOR 法中ω的取值对迭代公式的收敛速度影响很大,它的好坏直接影响到加速的快慢。

为了保证迭代过程的收敛,必须要求0<ω<2,超松弛法取1<ω<2。

但是在1和2之间仍然有很多的取值,究竟如何取值没有同意的规定。

经过多次的实验、分析与研究提出了ω选取的几种方法。

二、松弛因子ω的选取方法1、逐步实验法将ω的取值区间(1,2)进行M 等分,ω分别取1+1/M ,1+2/M ,……,1+(M--1)/M ,通过公式1.1依次对同一精度要求求出迭代次数k 的值,在求的同时比较出最少的迭代次数k ,并将此次ω的值保留,这样就得到了1+1/M ,1+2/M ,……,1+(M--1)/M 中最优的ω值,算法步骤如下:第一步:给定M 的值第二步:对于,ω分别取1+1/M ,1+2/M ,……,1+(M--1)/M 按照公式 x k i )1(+=(1--ω)x k i )(+a iiw (b i ---x a k j i j ij )1(11+-=∑---x a j n i j ij (k)∑=) i =1,2,…,n;k =0,1,2,…根据给定的精度要求迭代,求出迭代次数k 的值。

SOR迭代法超松弛因子选取

SOR迭代法超松弛因子选取

《计算方法》实验报告(二)实验名称:SOR迭代法松弛因子的选取班级:数学1402班姓名:高艺萌学号:14404210一、实验目的通过本实验学习线性方程组的SOR迭代解法以及SOR迭代法的编程与应用。

对比分析不同条件下的超松弛因子的取值大小会对方程组的解造成影响,通过这个实验我们可以了解的不同取值会对方程组的解产生的影响。

培养编程与上机调试能力。

二、实验题目用逐次超松弛(SOR)迭代法求解方程组,其中(1)给定迭代误差,选取不同的超松弛因子进行计算,观察得到的近似解向量并分析计算结果,给出你的结论;(2)给定迭代误差,选取不同的超松弛因子进行计算,观察得到的近似解向量并分析计算结果,给出你的结论;三、实验原理1.逐次超松弛迭代法可以看作Gauss-Seidel迭代法的加速,2.SOR迭代计算格式其中,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);else x1(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)])运行程序四、实验内容根据实验题目,分别对问题一,问题二进行求解。

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

《计算方法》实验报告(二)
实验名称: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.m
function x=masor(A,b,omega,x0,ep,N)
n=length(b);
if nargin<6,N=500;end
if nargin<5,ep=1e-6;end
if nargin<4,x0=zeros(n,1);end
if nargin<3,omega=1.5;end
x=zeros(n,1);k=0;
while k<N
for i=1:n
if 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);
else
x1(i)=(b(i)-A(i,1;i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(
i,i); end
end
x(i)=(1-omega)*x0(i)+omega*x1(i); end
if norm(x0-x,inf)<ep,break;end
k=k+1;x0=x; end
if k==N Warning; end
disp([’k=’,num2str(k)])
运行程序
四、实验内容
根据实验题目,分别对问题一,问题二进行求解。

SOR迭代法松弛因子的选取
1.当SOR迭代法松弛因子1
w时,分别取了以下情况
>
(1)5.1
w,k=26;
=
(2)25
w,k=64;
.1
=
(3)03
=
w,k=8;
.1
(4)01
w,k=8;
.1
=
2. 当SOR 迭代法松弛因子1<w 时,分别取了以下情况
(1)9.0=w ,k=9;
(2)5.0=w ,k=23;
(3)75.0=w ,k=13;
(4)25.0=w ,k=51;
五、 实验结果
当SOR 迭代法松弛因子1>w 时,w 越大,迭代的次数就越大,收敛速度就越慢,w 越接近1时,迭代的次数越小,收敛速度越快。

当SOR 迭代法松弛因子1<w 时,w 越小,迭代的次数就越大,收敛速度就越慢,w 越接近1时,迭代的次数越小,收敛速度越快。

当SOR 迭代法松弛因子的范围是20<<w ;
n 对迭代次数的影响较小;
SOR 迭代法松弛因子w 越趋近与1,迭代次数越小,收敛越快,误差越小;。

相关文档
最新文档