53 超松弛迭代法
超松弛迭代法
2012-2013(1)专业课程实践论文超松弛迭代法姓名,吕永杰,0818180119,R数学08-1班一、算法理论逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,世界大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)。
设有方程组Ax=b, ............(1)其中A∈错误!未找到引用源。
为非奇异矩阵,且设错误!未找到引用源。
(i=1,2,......,n),分解A为错误!未找到引用源。
.. (2)设已知第k次迭代向量错误!未找到引用源。
,及第k+1次迭代向量错误!未找到引用源。
的分量错误!未找到引用源。
(j=1,2,……,i-1),要求计算分量错误!未找到引用源。
.首先用Gauss—Seidel迭代法定义辅助量错误!未找到引用源。
=错误!未找到引用源。
(错误!未找到引用源。
(i=1,2,......n).. (3)再把错误!未找到引用源。
取为错误!未找到引用源。
某个平均值(即加权平均),即错误!未找到引用源。
=(1-错误!未找到引用源。
)错误!未找到引用源。
+错误!未找到引用源。
=错误!未找到引用源。
+错误!未找到引用源。
(错误!未找到引用源。
) (4)用式(3)代入式(4)即得到解方程组Ax=b的逐次超松弛迭代公式错误!未找到引用源。
, (5)其中错误!未找到引用源。
为松弛因子,或写为错误!未找到引用源。
(6)显然,当错误!未找到引用源。
=1时,解式(1)的SOR方法就是Gauss-Seid el 迭代法。
在SOR方法中,迭代一次主要的运算量是计算一次矩阵与向量的乘法。
由式(5)可知,在计算机上应用SOR方法解方程组时只需一组工作单元,以便存放近似解.二,算法框图开始 输入x 0开始迭代for (k=0;k<m;++k )for(j+0;j<=i-1;++j) for(i=0;i<n;++i)For(j=i;j<n;++j)temp1=temp1+a i [j]*frovalue [j];x[i]=frovalue [i] +w*(b i -temp1-temp2)/a i [j];Temp2=temp2+a [i][j]*x ;结束turefalsefalseFalsetrueture三、 算法程序#include <iostream>#include <cmath>using namespace std;float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n);int main(){const int MAX=100;//最大迭代次数int n,i,j,k;float** a;float* x_0; //初始向量float* x_k; //迭代向量float precision; //精度float w; //松弛因子cout<<"输入精度e:";cin>>precision;cout<<endl<<"输入系数矩阵的阶数,N:";cin>>n;a=two_array_malloc(n,n+1);cout<<endl<<"输入增广矩阵的各值:\n";for(i=0;i<n;i++){for(j=0;j<n+1;j++){cin>>a[i][j];}}x_0=one_array_malloc(n);cout<<endl<<"输入初始向量:\n";for(i=0;i<n;i++){cin>>x_0[i];}x_k=one_array_malloc(n);cout<<"输入松弛因子w (1<w<2):\n";cin>>w;float temp;//迭代过程for(k=0;k<MAX;k++){for(i=0;i<n;i++){temp=0;for(j=0;j<i;j++){temp=temp+a[i][j]*x_k[j];}x_k[i]=a[i][n]-temp;temp=0;for(j=i+1;j<n;j++){temp=temp+a[i][j]*x_0[j];}x_k[i]=(x_k[i]-temp)/a[i][i];x_k[i]=(1-w)*x_0[i]+w*x_k[i];}//求两解向量的差的范数for(i=0;i<n;i++){x_0[i]=x_k[i]-x_0[i];}if(matrix_category(x_0,n)<precision) {break;}else{for(i=0;i<n;i++){x_0[i]=x_k[i];}}}//输出过程if(MAX==k){cout<<"迭代不收敛\n";}cout<<"迭代次数为:"<<k<<endl; cout<<"解向量为:\n";for(i=0;i<n;i++){cout<<"x"<<i<<": "<<x_k[i]<<endl;}return 0;}float *one_array_malloc(int n) //一维数组分配{float *a;a=(float *)malloc(sizeof(float)*n);return a;}float **two_array_malloc(int m,int n) //二维数组分配{float **a;int i;a=(float **)malloc(m*sizeof(float *));for (i=0;i<m;i++){a[i]=(float *)malloc(n*sizeof(float));}return a;}float matrix_category(float* x,int n){int i;float temp=0;for(i=0;i<n;i++){temp=temp+fabs(x[i]);}return temp;}四、算法实现例1 . 用SOR方法解方程组错误!未找到引用源。
(完整版)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(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 的值。
124-电子教材-5.3 超松弛迭代法
证 设 l 是 Lw 的一个特征值,对应特征向量 x .由(5.19)式可得
[(1- w)D + wU ]x = l(D - wL)x ,
这里, A = D - L -U 是实对称矩阵,所以有 LT = U .上式两边与 x 作内积得
(1- w)(Dx, x) + w(Ux, x) = l[(Dx, x) - w(Lx, x)] .
由于 SOR 法收敛,所以有
1
1
1- w = det(Lw ) n = l1l2 Lln n £ r(Lw ) < 1,
由此得 0 < w < 2 ,定理得证.
该定理说明,只有当松弛因子w 在区间(0,2)内取值时,SOR 法才可能收敛.下
面给出 SOR 法收敛的充分条件.
定理 5.8 如果 A 为对称正定矩阵,且 0 < w < 2 ,则解 Ax = b 得 SOR 法收敛.
r(Lw ) 与松弛因子w 有关.下面讨论松弛因子w 在什么范围内取值,SOR 迭代法才 可能收敛.
定理 5.7 如果解方程组 Ax = b 的 SOR 法收敛,则有 0 < w < 2 .
证 设 Lw 的特征值为 l1 , l2 ,L , ln ,则
det(Lw ) = det(D - wL)-1 det((1-w)D + wU ) =detD-1 det((1- w)D) = (1- w)n.
ì ï í
x (k +1) 1
x (k +1) 2
= =
x (k) 1
+
w(0.72
-
x (k) 1
+
0.1x2(k )
+
超松弛迭代法例题
超松弛迭代法例题超松弛迭代法(Successive Over-Relaxation,简称SOR)是一种解线性方程组的迭代方法,它在雅可比迭代法的基础上,对于每次迭代的结果进行超松弛处理。
超松弛迭代法通过引入一个松弛因子来加快收敛速度,尤其对于收敛慢的问题具有较好的效果。
超松弛迭代法的基本思想是,在每次迭代时,在当前解的基础上引入一个松弛因子ω,将当前解对应的分量更新为上一次迭代得到的解和当前迭代中该分量的修正量的线性组合。
换句话说,超松弛迭代法通过适当地加权迭代,既保留了松弛迭代法的简洁性,又在一定程度上加快了收敛速度。
超松弛迭代法可以用以下公式表示:x_i^{(k+1)} = (1 - ω)x_i^{(k)} + ω/α_ii(b_i - \sum_{j=1}^{n}α_ijx_j^{(k+1)}) (i = 1, 2, ..., n)其中,x_i^{(k+1)} 表示第k+1次迭代时第i个未知量的近似解,x_i^{(k)} 表示第k次迭代时第i个未知量的近似解,α_ij 是系数矩阵的元素,b_i 是方程组的常数向量的第i个分量,α_ii是系数矩阵的第i行的对角元素,n 表示未知量的个数,k 表示当前的迭代次数,ω 是松弛因子。
超松弛迭代法的收敛性与松弛因子ω有关,当ω=1时,迭代法变成了雅可比迭代法;当0 < ω < 1时,称为欠松弛迭代;当ω > 1时,称为超松弛迭代。
一般来说,超松弛迭代法只在0 < ω < 2的范围内收敛。
对于特定的线性方程组,选择一个合适的松弛因子可以有效地加快迭代的收敛速度。
在实际求解问题时,选择合适的松弛因子是非常重要的。
如果选取的松弛因子过大,可能导致迭代法不收敛或者收敛非常慢;如果选取的松弛因子过小,则可能无法发挥超松弛迭代法的优势。
一种常用的方法是通过试验和经验来确定最佳的松弛因子,或者通过一些启发式的方法进行优化。
总结起来,超松弛迭代法是一种通过引入松弛因子来加快雅可比迭代法收敛速度的方法。
松弛迭代法
一、松弛迭代计算公式
松弛迭代法
赛德尔迭代法的迭代公式可表示为 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)
超松弛迭代法课程设计
超松弛迭代法课程设计一、课程目标知识目标:1. 学生能理解超松弛迭代法的概念,掌握其基本原理和应用场景。
2. 学生能够运用超松弛迭代法解决线性方程组问题,并理解其收敛性。
3. 学生能了解超松弛迭代法在工程和科学计算中的重要性。
技能目标:1. 学生能够独立进行超松弛迭代法的计算步骤,包括设定松弛因子、构造迭代矩阵等。
2. 学生能够运用数学软件(如MATLAB)实现超松弛迭代法的算法,并进行简单的程序调试。
3. 学生通过实际案例分析,培养运用超松弛迭代法解决实际问题的能力。
情感态度价值观目标:1. 学生通过学习超松弛迭代法,培养对科学计算和数学建模的兴趣,增强对数学学科的学习信心。
2. 学生在小组讨论和合作中,学会尊重他人意见,培养团队协作精神。
3. 学生能够认识到超松弛迭代法在科技发展中的重要作用,增强科技创新意识和社会责任感。
课程性质:本课程为高中数学选修课,以培养学生解决实际问题能力和数学思维能力为目标。
学生特点:学生具备一定的线性代数基础,具有较强的逻辑思维能力和动手操作能力。
教学要求:教师应注重理论与实践相结合,引导学生通过实际案例掌握超松弛迭代法的应用。
同时,注重培养学生的团队协作能力和创新意识。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过课堂讲解、上机实践和小组讨论等多种教学方式,提高学生的学习效果。
二、教学内容1. 引言:介绍超松弛迭代法的背景和在实际问题中的应用,激发学生学习兴趣。
相关教材章节:第二章第四节“迭代法及其应用”。
2. 基本概念:讲解超松弛迭代法的基本原理,包括迭代格式、松弛因子选取等。
相关教材章节:第二章第四节“超松弛迭代法”。
3. 算法实现:详细讲解超松弛迭代法的计算步骤,并通过实例进行演示。
相关教材章节:第二章第四节“超松弛迭代法的计算步骤”。
4. 实践应用:分析实际案例,让学生动手实践,运用超松弛迭代法解决线性方程组问题。
相关教材章节:第二章第五节“迭代法解决实际问题”。
数值分析大作业超松弛迭代法如何选取最佳松弛因子
数值分析⼤作业超松弛迭代法如何选取最佳松弛因⼦超松弛迭代法如何选取最佳松弛因⼦船建学院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迭代公式
x1( k
1)
(1 )x1(k )
4
(10 2x2(k )
4x3(k ) )
x
(k 2
1)
(1 )x2(k )
17
(3
2
x1(
k
1)
10x3(k ) )
x3( k
1)
(1 )x3(k )
9
(7 4x1(k 1)
10
x
(k 2
1)
)
初值 x (0) (0,0,0)T k = 0,1,2,…,
例该4方.4程用组S的OR精法确求解解线x (性*) 方 程(2组,1,1)T
如值只果需x(0取)迭ω取代(0=,04ω21,00x(=42)即1次T1xx,要11.高4便26达x斯11,可207到—xx要达22同4塞求到x样319德精0x精x3尔度130度迭要x,(3k7代求需1) 法要x)迭(和k) 代同1一1100初6次
数值计算方法
超松弛迭代法(SOR方法) 使用迭代法的困难在于难以估计其计算
量。有时迭代过程虽然收敛,但由于收敛速 度缓慢,使计算量变得很大而失去使用价值 。因此,迭代过程的加速具有重要意义。逐 次超松弛迭代(Successive Over relaxatic Method,简称SOR方法)法,可以看作是带参 数的高斯—塞德尔迭代法,实质上是高斯-塞 德尔迭代的一种加速方法。
或 Dx(k1) (1)Dx(k) (b Lx(k1) Ux(k) )
故 (D L)x(k1) (1)D Ux(k) b
显然对任何一个ω值,(D+ωL)非奇异,(因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b
超松弛迭代法历史演变
超松弛迭代法历史演变超松弛迭代法(SOR)是一种用于线性方程组求解的数值方法。
它结合了松弛迭代法和高斯-赛德尔迭代法的优点,具有快速收敛和稳定性的特点。
本文将从超松弛迭代法的起源开始,详细阐述它的历史演变。
超松弛迭代法最早由美国数学家David M.Young于1950年提出。
当时,他受到高斯-赛德尔迭代法的启发,希望通过引入松弛参数来提高迭代的收敛速度。
这个想法是在每次迭代时,对于每个未知数,根据已知的值和方程组来更新它的值,而不是等到所有未知数都计算完毕再更新。
这样可以更快地逼近方程组的解。
然而,Young的初始提案并不是很成功。
他发现在一些情况下,超松弛迭代法的收敛速度并没有比传统的迭代法更快。
于是,他开始研究如何选择合适的松弛参数。
在他的研究中,他发现如果松弛参数大于1,超松弛迭代法的收敛速度会加快,而如果松弛参数小于1,收敛速度反而会变慢。
这一发现打开了超松弛迭代法的新局面。
在1960年代,科学家们开始对超松弛迭代法进行更深入的研究和改进。
他们发现,超松弛迭代法在对称正定矩阵的线性方程组求解中表现得尤为出色。
这是由于对称正定矩阵具有特殊的性质,可以使得超松弛迭代法更快地收敛。
为了进一步提高超松弛迭代法的收敛速度,研究人员开始探索如何自适应地选择松弛参数。
他们发现,选择合适的松弛参数可以使得超松弛迭代法在不同情况下都表现得更好。
于是,一些自适应超松弛迭代法被提出。
在20世纪80年代和90年代,随着计算机技术的快速发展,科学家们开始使用超松弛迭代法来解决更大规模的线性方程组。
他们发现,超松弛迭代法可以通过并行计算的方式,进一步提高求解效率。
这为超松弛迭代法的应用提供了更广阔的空间。
随着时间的推移,超松弛迭代法在求解线性方程组中的应用越来越广泛。
它被广泛应用于科学计算、工程建模、优化问题等领域。
许多数值计算软件和库都提供了超松弛迭代法的实现,使得使用者可以方便地应用该方法。
尽管超松弛迭代法在求解线性方程组中表现出色,但它也有一些局限性。
超松弛迭代法公式与jacobi的关系
超松弛迭代法公式与jacobi的关系超松弛迭代法(SOR)和Jacobi迭代法是常用的求解线性方程组的迭代方法。
它们都是通过迭代逼近线性方程组的解,但是在具体的迭代过程和收敛性上有所不同。
首先来看一下Jacobi迭代法。
给定线性方程组Ax=b,其中A是一个n×n的方阵,b是一个n维向量,x是我们要求解的未知向量。
Jacobi迭代法的思想是将线性方程组的每个方程分别写成一个未知量的函数,并通过迭代的方式逐步求解。
具体来说,Jacobi迭代法的迭代公式如下:$$x^{(k+1)}=D^{-1}(b-Rx^{(k)})$$其中,$x^{(k+1)}$表示第k+1次迭代得到的近似解,$x^{(k)}$表示第k次迭代得到的近似解,D是A的对角线元素组成的对角矩阵,R是A的非对角线元素组成的矩阵。
这个公式的意义是,我们通过用上一次迭代得到的近似解$x^{(k)}$来逼近线性方程组的解,每次迭代都只使用上一次迭代得到的近似解。
接下来我们来看看超松弛迭代法。
超松弛迭代法是对Jacobi迭代法的改进,通过引入一个松弛因子ω来加速迭代过程。
其迭代公式如下:$$x^{(k+1)}=(D-ωL)^{-1}[(1-ω)D+ωU]x^{(k)}+(D-ωL)^{-1}b$$其中,L是A的下三角部分,U是A的上三角部分。
超松弛迭代法在每次迭代中使用了上一次迭代和当前迭代的信息,通过调节松弛因子ω的取值,可以加速收敛过程。
从迭代公式可以看出,Jacobi迭代法和超松弛迭代法的主要区别在于超松弛迭代法引入了松弛因子ω,并且在每次迭代中使用了上一次迭代的信息。
这使得超松弛迭代法在一定条件下可以比Jacobi迭代法更快地收敛到线性方程组的解。
在实际应用中,选择合适的松弛因子ω对超松弛迭代法的收敛性和稳定性至关重要。
通常情况下,选择ω的取值范围为(0,2),对于某些特定的线性方程组,可以通过一些经验规则或者数值试验来确定最佳的ω值。
§8.4-解线性方程组的超松弛迭代法法
1
第八章 解线性方程组的迭代法
SOR迭代法是Gauss—Seidel 迭代法的一种修正, 可由下述思想得到.
设已知x(k)及已计算x(k+1)的分量xj(k+1) (j=1,2,,i-1).
(1) 首先用Gauss—Seidel 迭代法定义辅助量 x~i(k1),
1
1
1
4 1 1
1 4 1
1 1 4
x2 x3 x4
1 1 1
.
Hale Waihona Puke 它的精确解为x*=(-1, -1, -1, -1 )T.
解 取初始向量x(0)=0,迭代公式为
x1( k x2( k x3( k
x(11) (0.99999646, 1.00000310, 0.99999953, 0.99999912)T ,
(11) 0.46 105. 2
满足误差
(k) 105.
2
迭代次数k
对取其它值,迭代次数如表. 1.0
22
1.1
17
从此例看到,松弛因子选择
1.2
aii
.
j1
ji
i 1,2,, n 也可写作:
x(0) x(k1)
i
( x1(0) ,, xn(0)
xi(k) xi ,
)T
,
i 1
n
xi
(bi
aij
x
(k j
超松弛迭代法
超松弛迭代法
超松弛迭代法是一种回归模型的最优化算法,主要用于减少损失函数。
如果损失函数是凸函数,则可以使用自动对准算法来使目标函数最小,以备测试目标模型。
超松弛迭代法的技术流程如下:
1. 定义初始参数:设置参数的初始值x0。
2. 迭代:通过迭代公式X[i + 1] = (1 –λ) X[i] + λF(X[i])来更新X[i],得到新的迭代值。
3. 收敛:检查超参数δ和终止准则,查看目标函数值是否趋于收敛。
4. 调整超参数:如果目标函数值没有收敛,则可以尝试调整超参数X0和λ来降低目标函数值。
5. 返回最优化结果:将参数X[i]返回到最终收敛状态,即最优化结果。
线性方程组的迭代法雅可比高斯塞德尔和超松弛迭代ppt课件
a11x1 a12 x2 a1n xn b1
a21 x1
a22 x2
a2n xn
b2
an1x1 an2 x2 ann xn bn
写据成此建立n 迭ai代j x公j 式 bi
i 1,2,, n
上若xi式(xkai称1ii)为0ja1解a11i(iiii方((bb程1ii,2组,jj的njn,1i n1Jaa)aijcxio,j分(jxbk)ij离)迭) 代出公i变i式量1,。21x,,2i , n , n
j=1
j ≠i
称A为严格对角占优阵。
2.如果A的元素满足
∑n
ai,i ≥ ai, j ,i = 1,2,..., n
j=1 j≠i
且至少一个不等式严格成立,称A为弱对角占优阵。 16
定义:设 A = (ai,j )n×n ,n ≥ 2
如果存在置换矩阵P,使得
PT
AP
A11 0
A12
A22
1
§6.1 迭代法的基本思想
迭代法的基本思想是将线性方程组转化 为便于迭代的等价方程组,对任选一组初始 值 xi(0) (i 1,2,, n) ,按某种计算规则,不断地 对所得到的值进行修正,最终获得满足精度 要求的方程组的近似解。
2
设 A Rnn 非奇异,b Rn,则线性方程组
Ax b 有惟一解 x A1b ,经过变换构造
x (k 1) 1
x (k 1) 2
x1(k 2x1(k)
)
x(k) 2
4x2(k )
3 3
取
x (0) 1
x (0) 2
0
计算得
§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
松弛迭代法
松弛迭代法松弛迭代法是一种解决复杂优化问题的新方法,其主要思想是采用迭代松弛的方式来求解数学优化问题。
它可以用来解决各种非线性最优化问题,如:单纯形、线性规划、最小二乘法和二次规划等。
以下是松弛迭代法的相关算法介绍。
1.法介绍松弛迭代法是一种基于迭代松弛的数学优化方法,算法的基本步骤如下:(1)确定一个初始松弛参数,其形式为σ>0;(2)计算一个初始解Xo;(3)根据此初始解Xo,算对应的步长和梯度,令X1=Xo-*Grad(Xo);(4)重复步骤3,不断迭代,直至解变得满足优化算法的收敛条件为止;(5)输出最终的解X。
2. 优缺点松弛迭代法的优点是其高效收敛,算法简单易行,可以用来解决复杂优化问题,并且可以求得全局最优解。
另外,松弛迭代法的步长的选取简单,受到限制的条件较少,只需要给定一个初始松弛参数即可。
但是,松弛迭代法也有一定的缺点,比如:(1)算法只能求出局部最优解,不能保证全局最优解;(2)在求解复杂优化问题时,松弛参数的选取可能会影响算法的收敛性;(3)算法容易陷入局部最优解中,不能跳出局部最优解。
3.用实例松弛迭代法主要应用于复杂优化问题的求解,例如:(1)线性规划问题的求解:对于最简单的线性规划问题,给定n个未知变量,其目标函数可以表达为:min f(x)=cTx,松弛迭代法可以用来求解该问题;(2)最小二乘优化问题的求解:给定一组样本数据,其拟合模型可以表达为:min f(x)=∑||y-x||2,松弛迭代法可以用来求解该问题;(3)凸优化问题的求解:给定凸函数f(x),求解min f(x),松弛迭代法可以用来求解该问题。
4.论松弛迭代法是一种求解复杂优化问题的有效方法。
它的优点是算法简单易行,可以求得局部最优解,而且只需要给定一个初始松弛参数即可。
但它也有一定的缺点,比如不能保证全局最优解,受到步长选取影响,容易陷入局部最优解中,等等。
不过,由于松弛迭代法具有高效收敛性,可以用来求解线性规划、最小二乘法和二次规划等优化问题,它仍是一种有效的求解复杂优化问题的算法。
超松弛迭代法及其松弛因子的选取
电子科技大学数值分析实验报告题目:超松弛迭代法及其松弛因子的选取学生姓名:学号:日期:年月日超松弛迭代法及其松弛因子的选取问题提出:在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.由这两个例子可以看出利用黄金分割法求最优松弛因子比用逐步搜索法更加简便快速,但是用逐步搜索法步长取的很小时求得的松弛因子比黄金分割法更加精确。
超松弛迭代法求解泊松方程
计算流作业1. 题目对1512cm cm ⨯的矩形平板,假设板表面绝热,仅在四条边有热流通过,且导热系数为常数。
设一条15cm 边温度保持为100︒,其余三条边温度为20︒。
计算板内稳定的温度场并绘出等温线。
采用迭代法计算时,采用不同的松弛因子,并比较收敛速度,观察在不同的网格尺度下,最佳松弛因子的变化。
2. 理论基础超松弛SOR 迭代法迭代公式为:11212,,1,1,,1,1,2(1)(())2(1)m m m m m m i j i j i j i j i j i j i j x ωψωψψψβψψζβ++++-+-=-++++-+3. 结果分析计算时取,x y 方向网格数分别为(4,5),(8,10),(32,40),松弛因子取值范围为1.0,1.0475,1.095, 1.95。
控制固定余量为510-3.1 温度场网格尺度为0.5dx dy cm ==时,最佳松弛因子下的平板温度场分布结果基本上是对称的。
3.2最佳松弛因子-网格尺度显然,随着网格尺度增加,最佳松弛因子逐渐减小,基本上呈现指数规律。
4.附件!初始温度分布subroutine initial(tt_in,nx_in,ny_in)implicit noneinteger::i,jinteger,intent(in)::nx_in,ny_in !横纵网格数real(kind=8),dimension(0:nx_in,0:ny_in)::tt_in !温度矩阵tt_in=0.tt_in(0,0:ny_in)=20.tt_in(nx_in,0:ny_in)=100.tt_in(1:(nx_in-1),0)=20.tt_in(1:(nx_in-1),ny_in)=20.do i=1,nx_in-1do j=1,ny_in-1tt_in(i,j)=60.end doend doend subroutine initial!超松弛迭代法subroutine sor(tt_sor,nx_sor,ny_sor,ome,be)implicit noneinteger::i,jinteger,intent(in)::nx_sor,ny_sor !横纵网格数real(kind=8),dimension(0:nx_sor,0:ny_sor)::tt_sor !温度real(kind=8),intent(in)::ome,be !松弛因子,网格参数hreal(kind=8)::tem1do i=1,nx_sor-1do j=1,ny_sor-1tem1=tt_sor(i+1,j)+tt_sor(i-1,j)+be**2*(tt_sor(i,j+1)+tt_sor(i,j-1)) tt_sor(i,j)=(1-ome)*tt_sor(i,j)+ome*tem1/2./(1+be**2)end doend doend subroutine sorprogram poissonimplicit noneinteger::i,j,k,linteger,parameter::numk=8 !计算时取的网格大小种类数real(kind=8),allocatable,dimension(:,:)::tem !温度integer::numx,numy !横纵网格数real(kind=8),parameter::lx=12.,ly=15. !计算域长宽integer,parameter::nw=20 !计算时omega取值的数目integer,dimension(nw)::ncell !存储同一omega下迭代需要的步数 real(kind=8)::om,bt !松弛因子,网格参数hreal(kind=8)::dx,dy !横纵方向上的网格参数integer::ct !中间变量real(kind=8)::w_opt !最佳松弛因子integer,parameter::status=-1 !状态变量.1-计算不同网格尺度下的最佳松弛因子!-1-计算特定尺度,取最佳松弛因子时得到的最终温度分布open(unit=15,file='poisson.dat')open(unit=16,file='poisson2.txt')write(16,'("title = data")')write(16,'("variables = x,y,t")')write(16,'("zone i=",i4,3x,"j=",i4)')8,nwdo l=1,8numx=4*lnumy=5*ldx=lx/numxdy=ly/numybt=dx/dyallocate(tem(0:numx,0:numy))ct=10**10do k=1,nwom=1.+0.95*dble(k)/dble(nw)call caclulate_w(tem,numx,numy,om,ncell(k),bt)write(16,'(1x,d15.5,3x,d15.5,3x,i10)')l,om,ncell(k) if(ncell(k)<ct) thenct=ncell(k)w_opt=omend ifend doif(status==1) thenwrite(15,'(1x,d15.5,3x,d15.5)')dx,w_optelse if(status==-1 .and. l==6) thenwrite(15,'("title = data")')write(15,'("variables = x,y,t")')write(15,'("zone i=",i4,3x,"j=",i4)')numx+1,numy+1call caclulate_w(tem,numx,numy,w_opt,ct,bt)do j=0,numydo i=0,numxwrite(15,*)i*dx,j*dy,tem(i,j)end doend doend ifdeallocate(tem)end doend program poisson!计算特定网格和松弛因子下的温度subroutine caclulate_w(tt,nx,ny,omega,nncell,beta)implicit noneinteger::i,jinteger,intent(in)::nx,ny !横纵网格数real(kind=8)::error=1.d-5 !误差限integer,intent(out)::nncell !存储迭代次数real(kind=8)::omega,etem,beta !etem-两次计算间的平均误差real(kind=8),dimension(0:nx,0:ny)::tem0 !存储上一次计算得到的温度矩阵real(kind=8),dimension(0:nx,0:ny)::tt !温度矩阵etem=1.d10nncell=0call initial(tt,nx,ny)do while(etem>error)nncell=nncell+1tem0=ttcall sor(tt,nx,ny,omega,beta)etem=0.do i=1,nx-1do j=1,ny-1etem=etem+(tt(i,j)-tem0(i,j))**2 end doend doetem=sqrt(etem)end doend subroutine caclulate_w。
超松弛迭代法matlab程序
超松弛迭代法matlab程序超松弛迭代法是一种解线性方程组的迭代方法,其主要思想是在松弛因子的基础上,加入一些超松弛因子,使得迭代更加快速和稳定。
本文将介绍超松弛迭代法的原理,并给出相应的matlab程序实现。
一、超松弛迭代法的原理超松弛迭代法是通过将松弛因子ω加上一个超松弛因子λ,来加速收敛的一种迭代方法。
具体来说,对于一个线性方程组Ax=b,我们可以将其表示为:Ax(k)=b其中,x(k)表示第k次迭代的解向量,A表示系数矩阵,b表示右侧向量。
在超松弛迭代法中,我们将x(k)表示为:x(k)=x(k-1)+ωλ(k-1)其中,λ(k-1)是超松弛因子,ω是松弛因子,x(k-1)是上一次迭代的解向量。
将其代入原方程组,得到:(A-ωD)x(k)=ω(D+L)x(k-1)+ωUx(k-1)+b其中,D表示A的主对角线元素组成的对角矩阵,L表示A的下三角矩阵,U表示A的上三角矩阵。
将其化简为:x(k)=D^-1[(1-ω)D+ωL]x(k-1)+ωD^-1b其中,D^-1表示D的逆矩阵。
该式子即为超松弛迭代法的迭代公式。
二、matlab程序实现下面给出超松弛迭代法的matlab程序实现。
假设我们要解如下线性方程组:3x1+0x2+0x3=90x1+4x2+0x3=80x1+0x2+2x3=2其系数矩阵为:A=[3,0,0;0,4,0;0,0,2];右侧向量为:b=[9;8;2];我们可以通过如下matlab程序实现超松弛迭代法:function [x,iter]=sor(A,b,omega,tol,maxit)% A:系数矩阵% b:右侧向量% omega:松弛因子% tol:容差% maxit:最大迭代次数% x:解向量% iter:迭代次数n=length(b); % 系数矩阵的阶数x=zeros(n,1); % 初始化解向量iter=0; % 初始化迭代次数while iter<maxit % 迭代次数未达到最大值xold=x; % 记录上一次迭代的解向量for i=1:n % 按行迭代sigma=0;for j=1:nif j~=isigma=sigma+A(i,j)*x(j);endendx(i)=(1-omega)*x(i)+omega*(b(i)-sigma)/A(i,i); % 更新解向量enditer=iter+1; % 迭代次数加1if norm(x-xold)<tol % 当解向量的变化小于容差时,认为已收敛break;endend调用该函数,求解上述线性方程组,可以使用如下代码:A=[3,0,0;0,4,0;0,0,2];b=[9;8;2];omega=1.5;tol=1e-6;maxit=1000;[x,iter]=sor(A,b,omega,tol,maxit);disp(x);其中,omega为松弛因子,tol为容差,maxit为最大迭代次数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
( ( x1 k 1) 0.75x2k ) 6 ( k 1) ( x2 0.75x ( k 1) 0.25x3k ) 7.5 ( k 1) ( x 0.25x2k 1) 6
如果用 1.25 的SOR迭代法,计算公式是
( ( ( x1 k 1) 0.25x1 k ) 0.9375x2k ) 7.5 ( k 1) ( ( ( x2 0.9375x1 k 1) 0.25x2k ) 0.3125x3k ) 9.375 ( k 1) ( ( x3 0.3125x2k 1) 0.25x3k ) 7.5
则有
(Ux, x) ( x, Lx) ( Lx, x) i
第五章线性方程组迭代解法
由(5. 3. 4)有
(1 ) p i p i
2
[ p ( p )]2 2 2 ( p ) 2 2 2 [ p ( p )]2 因A正定,Ax, x) p 2 0 , 2 ,所以 0 ( 2 2 ( p ) p (2 )(2 p) 0 即 1 ,从而 ( L ) 1 ,
0 ,由A非奇异知 Ax 0 ,从而 ( Ax, Ax) ( Ax)T ( Ax) xT AT Ax 0 AT A 是对称正定的,因此,用GS法求解方程组AT Ax b 是收敛。
证
opt
其中
2 1 1 u2
可以证明,对称正定的三对角矩阵满足最优松弛因子 opt 的条件。在实际应 用中,一般地说计算 ( BJ ) 较困难。对某些微分方程数值解问题,可以考虑用 求特征值的近似值的方法,也可以由计算实践摸索出近似最佳松弛因子。
第五章线性方程组迭代解法
5.3
超松弛迭代法
5.3.1 超迭代法的构造
5.3.2 超迭代法的收敛性
第五章线性方程组迭代解法
5.3.1
超松弛迭代法的构造
k 在很多情况小,J法和GS法收敛较慢,所以考虑GS法的改进。设计算第 1 k 1 ( k 1) ( k 2) ( k 1) 个近似解 x 时,分量 x1 , x2 ,, xi 1 已经算好。按GS法给出辅助量
第五章线性方程组迭代解法
取x
(1,1,1)T ,迭代7次,则 1 时得 x(7) (3.0134110 .9888241 5.0027940T ,3 , ) 1.25时得
( 0)
x(7) (3.0000498, 4.0002586, 5.0003486)T 若继续算下去,要达到7位数字的精度, 1 时,要迭代34次,而 1.25 时, 1.25 只需要迭代14次,显然选 收敛要快些。
记A=D-L-U,(5. 3. 1)可写成矩阵形式
第五章线性方程组迭代解法
xk 1 1 xk D1 b Lx( k 1) Ux( k )
xk 1 L x( k ) ( D L)1b
(5.3.2)
再整理得
其中,迭代矩阵为
L ( D L)11 D U
(1 )D U x (D L) x
T D L U 是实对称矩阵,所以有L U 。上式两边与x 作内积得 (5. 3. 4) (1 )(Dx, x) (Ux, x) [(Dx, x) ( Lx, x)] 因为A正定,D亦正定,记 p ( Dx, x) ,有 p 0 。又记 ( Lx, x) i ,
如果解方程组Ax 设 L 的特征值为
第五章线性方程组迭代解法
由于SOR法收敛,所以有
1 det(L ) 12 n ( L ) 1
1 n
1 n
定理得证。 该定理说明,只有当松弛因子 在区间(0,2) 内取值时,SOR法才可能收敛 下面给出SOR法收敛的充分条件。 定理5. 8 如果A为对称正定矩阵,且0 2 ,则解Ax b 的SOR法收敛。 证 这里, A 设 是 L 的一个特征值,对应特征向量 x 。由(5. 3. 3)可得
T
Ax b 时是收敛的。
即
引入超松弛迭代法的想法是希望能找到最优的松弛因子 opt ,使对应 opt 的SOR方法受凉最快。对于一类有特殊性质的矩阵(即所谓2 –循环的和相容次 序的矩阵,它们常在偏微分方程的数值解法中出现),有关 opt 的理论在50年代 已得到。因为证明较复杂,这里只叙述其结果,即
4 3 0 x1 24 3 4 1 x2 30 0 1 4 x 24 3
(5.3.3)
例5.4
方程组
第五章线性方程组迭代解法
T 得准确解为 (3,4,5) ,如果用 1 SOR跌代法(即GS法),计算公式是
按一般的迭代法收敛的理论,SOR迭代法收敛的充分必要条件是 ( L ) 1 而 ( L ) 与松弛因子 有关。下面讨论松弛因子 在什么范围内取值,SOR迭 代法可能收敛。 定理5.7 证
5.3.2 超松弛迭代法的收敛性
b 的SOR法收敛,则有0 2 。 1, 2 ,, n ,则 det(L ) det(D L)1 det[( )D U ] 1 det D1 det[( ) D] (1 )n 1
经整理得
x
( k 1) i
x
(k ) i
(bi aij x
j 1
i 1
( k 1) j
aij x (jk ) ) aii
j 1
n
i 1,2,, n,
(5. 3. 1)
称此式为逐次超松弛迭代法,简记为SOR(Successive Over – Relaxation)法,其 中 称为超松弛因子。当 1 时,(5. 3.1)就是GS法。
i 1 n k 1 bi aij x j aij x jk aii xi j 1 j i 1 再用参数 将 xi(k )与 xi( k 1) 做加权平均,即
k 1
xi(k 1) xi(k 1) (1 ) xi(k ) xi(k ) ( xi(k 1) xi(k )
SOR方法收敛。定理得证。 当 1 时,SOR法就是GS法,所以上面的定理说明,当系数矩阵是对称 正定矩阵时,GS法收敛。 对于例5. 4所给出的方程组,其系数矩阵是对称正定的,因此对
1 和
1.25 的SOR迭代法都收敛。
第五章线性方程组迭代解法
例5. 5
设矩阵A非奇异,求证用GS法求解方程组A 对x
( BJ ) 是 J 法迭代矩阵BJ 的谱半径。