(完整版)6.4超松弛迭代法
迭代法的收敛性与稳定性 - 松弛迭代法、迭代法的收敛性与稳定性
定义 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)
松弛迭代法
令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次迭代后不收敛的信息 . 步骤
S1 对m 1,2,, N作 S11~S13
S11 对i 1,2,, n
置xi
(1 )x0i
bi
i 1
aij x j
n
aij x0 j
aii .
j 1
j i 1
S12 若对i 1,2,, n, xi x0i ,则输出x1, x2,, xn ;停机.
在修正量前乘上一个参数,即
x ( m 1) i
xi( m )
r (m1) i
(i 1,2,, n)
这种求方程组近似解的方法称为松弛法,称为松弛因子. 当 1时,称为低松弛法,当 1时,就是赛德尔迭代法, 当 1时,称为超松弛法,简称为SOR.
在实际计算中,松弛法常采用以下形式:
§4-3 松弛迭代法
一、松弛迭代计算公式
赛德尔迭代法的迭代公式可表示为
x(m1) i
1 aii
(bi
i 1
a x(m1) ij j
j 1
n
aij
x(m) j
)
j i 1
x(m) i
1 aii
计算方法3_线性方程组迭代解法
计算方法3_线性方程组迭代解法线性方程组的迭代解法是解决线性方程组的一种常见方法,常用于大规模的线性方程组求解。
该方法通过不断迭代更新解的近似值,直到满足一定的收敛准则为止。
线性方程组的迭代解法有很多种,其中最经典的是雅可比迭代法、高斯-赛德尔迭代法和超松弛迭代法。
本文将分别介绍这三种迭代解法及其计算方法。
雅可比迭代法是一种比较简单的线性方程组迭代解法,它的基本思想是先将线性方程组转化为对角占优的形式,然后通过迭代求解逐渐接近精确解。
雅可比迭代法的迭代公式为:其中,x^(k+1)是第k+1次迭代的近似解,n是未知数的个数,a_ij 是系数矩阵A的元素,f_i是方程组的右端向量的元素。
雅可比迭代法的计算步骤如下:1.将线性方程组转化为对角占优的形式,即保证矩阵A的对角元素绝对值大于其它元素的绝对值。
2.初始化向量x^(0),设定迭代终止准则。
3.根据雅可比迭代公式,计算x^(k+1)。
4.判断迭代终止准则是否满足,如果满足,则停止迭代,返回近似解x^(k+1);否则,继续进行下一次迭代。
高斯-赛德尔迭代法是雅可比迭代法的改进方法,它的基本思想是在每次迭代计算x^(k+1)时,利用已经计算出的近似解作为x的一部分。
高斯-赛德尔迭代法的迭代公式为:其中,x^(k+1)_i是第k+1次迭代的近似解中第i个未知数的值,x^(k)_i是第k次迭代的近似解中第i个未知数的值。
高斯-赛德尔迭代法的计算步骤如下:1.将线性方程组转化为对角占优的形式。
2.初始化向量x^(0),设定迭代终止准则。
3.根据高斯-赛德尔迭代公式,计算x^(k+1)。
4.判断迭代终止准则是否满足,如果满足,则停止迭代,返回近似解x^(k+1);否则,继续进行下一次迭代。
超松弛迭代法是对高斯-赛德尔迭代法的一种改进方法,它引入了松弛因子ω,通过调整参数ω的值,可以加快迭代的收敛速度。
超松弛迭代法的迭代公式为:其中,0<ω<2,x^(k+1)_i是第k+1次迭代的近似解中第i个未知数的值,x^(k)_i是第k次迭代的近似解中第i个未知数的值。
松弛迭代法
一、松弛迭代计算公式
松弛迭代法
赛德尔迭代法的迭代公式可表示为 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. 实践应用:分析实际案例,让学生动手实践,运用超松弛迭代法解决线性方程组问题。
相关教材章节:第二章第五节“迭代法解决实际问题”。
超松弛迭代法求解接地金属槽内电位分布
实验一用超松弛迭代法求解接地金属槽内电位分布1、实验内容:试用超松弛迭代法求解接地金属槽内电位的分布。
已知:,给定边值如图所示。
给定初值:误差范围:计算迭代次数,分布。
一.实验思路由边界条件用泊松方程的五点差分格式求得中央点的点位。
再以所得点及边界再次利用泊松方程的五点差分格式求出另四个点,依照此方法求出其余点的电位分布。
用最佳收敛因子的经验公式计算收敛因子。
利用超松弛迭代法进行差分方程的求解,当遇到边界是采用边界值或者边界差分格式。
直到所有节点电位满足误差条件。
二.实验设计原理:有限差分法有限差分法(Finite Differential Method)是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数?的泊松方程的问题换为求解网格节点上?的差分方程组的问题。
编程时将边值编入到程序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。
迭代时所用公式是和书上一样,为a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1]+a[i-1][j]-4*b[i][j]);其中a代表k+1,而b代表k。
三、程序运行界面及结果四.源程序代码#include<iostream>#include<math.h>#include<iomanip>using namespace std;classoverrei //over-relaxation iterative method {private:intm,n;doublex,e;double **p,**q;public:int k;overrei(int m0,int n0,double e0) {inti;e=e0;k=0;m=m0;n=n0;p=new double *[m];for(i=0;i<m;i++)p[i]=new double[n];q=new double *[m];//迭代因子求解for(i=0;i<m;i++)q[i]=new double[n];if(m==n)x=2/(1+sin(3.141592654/(m-1)));elsex=2-3.141592654*sqrt(2)*sqrt(1/((m-1)*(m-1))+1/((n-1)*(n-1))); cout<<"最佳收敛因子:"<<x<<endl;}void Initialization(); //赋边界条件void Cal(); //计算void Diedai(); //迭代函数void Show(); //输出部分};void overrei::Initialization() //赋边界条件{inti,j;for(i=0;i<m;i++) //边界条件for(j=0;j<n;j++){if(i==0){p[i][j]=100;q[i][j]=100;}else{p[i][j]=0;q[i][j]=0;}}cout<<"初始点位:"<<endl;Show();}void overrei::Cal() //计算{inti,j;int c=1;while(1){c=1;for(i=0;i<m;i++){for(j=0;j<n;j++){if((p[i][j]-q[i][j])>e||(q[i][j]-p[i][j])>e) //相邻两次迭代误差是否小于1e-5{c=0;break;}}if(c==0) break;}if(c==1 && k!=0) break;Diedai();}}void overrei::Diedai() //迭代函数{inti,j;double y=x/4;if(k%2){for(i=1;i<m-1;i++)for(j=1;j<n-1;j++){q[i][j]=p[i][j]+y*(q[i-1][j]+q[i][j-1]+p[i+1][j]+p[i][j+1]-4*p[i][j]);}}else{for(i=1;i<m-1;i++)for(j=1;j<n-1;j++){p[i][j]=q[i][j]+y*(p[i-1][j]+p[i][j-1]+q[i+1][j]+q[i][j+1]-4*q[i][j]);}}k++;}void overrei::Show() //输出部分{inti,j;for(i=0;i<m;i++){for(j=0;j<n;j++){cout<<setw(12)<<setprecision(6)<<fixed<<q[i][j]<<ends;}cout<<endl;}}int main(){cout<<" **************************************"<<endl; cout<<" 超松弛迭代法求解接地金属槽内电位的分布"<<endl; cout<<" **************************************"<<endl; overrei A(5,5,1e-5);A.Initialization();A.Cal();cout<<"电位分布:"<<endl;A.Show();cout<<"迭代次数:"<<A.k<<endl;return 0;}实验二按对称场差分格式求解电位的分布一.实验思路只计算一半的区域,对另一半进行对称性计算,减小计算量。
超松弛迭代法解线性方程组
设it题目:摘要本文是在matlabll境下熟悉的运用计算机编程培言并结合超松弛变量起松弛迭代法的理论基础对方程组求解。
首先,本文以愉分方程边值问题为例,导出了离散化后线11方程组即稀疏线性方程组,转化对柿蔭线性方程组求解冋題。
其次,用起松弛(SOR)选代法编写matlab 程序,湘产生的柿疏线性方程组进行迭代法求解。
然后,分别改变松弛因子3和分段数n的值,分桥其收敛性和收敛速H, 18出各个方面的分林和比较需到相关结论。
最后,将起松弛迭代算法在it算机上运用matlab 言实现,借岀了一组与猜确解较接近的数值解,并画图比较,騎iil逐次超松弛(SOR)选代法的績确性。
关键词:柿匾线性方程组逐次超松弛迭代法松弛因子matlab编程-、间题提岀考虑两点逆值冋题为了把做分方程离IL 把[oj]E 间“等分,令/亠丄,脸=〃?,山12…山一1,得到 n 差分方程° 治 一 2)1 + X+—畑 一 X _ “or十—C< -h 2h简化为(£ + 必+i - © + 心+ % =肿,从而离散后得到的线性方程组的系数矩阵为一(2g + /?) £ + h£-(2£ + h )A =££ + /?一(2w + h )_对£ = 19 a = 0.4 , n = 200 ,分别用e = 1、6? = 0.5和e = 1.5的超松弛迭代法 求解线性方程组,要求有4也有效数字,然后比较与精确解的淚差,探讨使超松 弛选代法收敛较快的0取值,对结果进行分轿。
改变»论同wrOo二、超松弛迭代法产生的背景容易知道它的精确解为 + ax.£ + h—(2w +y =对从实际间题中借到维数相当夫的线11代数方程组的求解仍然十分困难,以至使人们不能在允许的时间内用貞接方法得到解,Slit,客观上要求用新的方法来解决大维数方程组的求解I'nJSo现有大名数迭代法不是对各类线11方程组都有收敛性,在解题时,要对原方程组葩晖作一根本的变换,从而可能使条件数变坏,也可能破坏了变换前后方程组的等价性,以员丧失使原方程组的对称II等。
超松弛迭代法
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
4 3 0 x1 24 3 4 1 x2 30 0 1 4 x 24 3
(1 )D U x (D L) x
D L U 是实对称矩阵,所以有LT U 。上式两边与x 作内积得 (5. 3. 4) (1 )(Dx, x) (Ux, x) [(Dx, x) ( Lx, x)] 因为A正定,D亦正定,记 p ( Dx, x) ,有 p 0 。又记 ( Lx, x) i , A 这里,
k 1
xi(k 1) xi(k 1) (1 ) xi(k ) xi( k ) ( xi( k 1) xi( k )
经整理得
x
( k 1) i
x
(k ) i
(bi aij x
j 1
i 1
( k 1) j
aij x (jk ) ) aii
opt
其中
2 1 1 u2
opt 的条件。在实际应 可以证明,对称正定的三对角矩阵满足最优松弛因子 用中,一般地说计算 ( BJ ) 较困难。对某些微分方程数值解问题,可以考虑用 求特征值的近似值的方法,也可以由计算实践摸索出近似最佳松弛因子。
( BJ ) 是 J 法迭代矩阵BJ 的谱半径。
按一般的迭代法收敛的理论,SOR迭代法收敛的充分必要条件是 ( L ) 1 在什么范围内取值,SOR迭 而 ( L ) 与松弛因子 有关。下面讨论松弛因子 代法可能收敛。 定理5.7 证 如果解方程组Ax 设 L 的特征值为
matlab超松弛迭代法求方程组
一、介绍MATLAB(Matrix Laboratory)是一种用于数值计算和数据可视化的专业软件。
在MATLAB中,超松弛迭代法是解决线性方程组的一种有效算法。
本文将介绍MATLAB中超松弛迭代法的基本原理和实现方法,并给出一个具体的例子进行演示。
二、超松弛迭代法的基本原理超松弛迭代法是一种逐步迭代的算法,用于求解线性方程组。
它的基本原理是通过不断迭代更新方程组的解,直到达到满足精度要求的解。
超松弛迭代法的公式如下:X(k+1) = (1-w)X(k) + w*(D-L)⁻¹*(b+U*X(k))其中,X(k)代表第k次迭代的解向量,X(k+1)代表第k+1次迭代的解向量,D、L和U分别代表方程组的对角线元素、下三角元素和上三角元素构成的矩阵,b代表方程组的右端向量,w代表松弛因子。
超松弛迭代法的关键在于选择合适的松弛因子w,一般情况下,可以通过试验选取一个合适的值。
在MATLAB中,可以使用sor函数来实现超松弛迭代法。
三、MATLAB中超松弛迭代法的实现方法在MATLAB中,可以通过调用sor函数来实现超松弛迭代法。
sor 函数的语法格式如下:[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit)其中,A代表线性方程组的系数矩阵,b代表右端向量,w代表松弛因子,tol代表迭代的精度要求,maxit代表最大迭代次数,X代表迭代求解得到的解向量,flag代表迭代的结果标志,relres代表相对残差的大小,iter代表迭代次数,resvec代表迭代过程中的残差向量。
以下是一个使用sor函数求解线性方程组的示例:A = [4 -1 0 -1 0 0; -1 4 -1 0 -1 0; 0 -1 4 0 0 -1; -1 0 0 4 -1 0; 0 -1 0 -1 4 -1; 0 0 -1 0 -1 4];b = [1; 0; -1; 0; 1; 0];w = 1.25;tol = 1e-6;maxit = 100;[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit);通过调用sor函数,可以得到方程组的解向量X,迭代的结果标志flag,相对残余resrel和迭代次数iter。
线性方程组的迭代法雅可比高斯塞德尔和超松弛迭代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
计算得
超松弛迭代法求解泊松方程
计算流作业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环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。
首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。
其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。
然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。
最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。
关键词:稀疏线性方程组逐次超松弛迭代法松弛因子matlab编程一、问题提出考虑两点边值问题()()⎪⎩⎪⎨⎧==<<=+.11,00,10,22y y a a dxdy dx y d ε 容易知道它的精确解为.1111ax e e ay x+⎪⎪⎭⎫ ⎝⎛---=--εε为了把微分方程离散,把[]1,0区间n 等分,令nh 1=,ih x i =,,1,,2,1-=n i 得到差分方程,21211a h y y hy y y ii i i i =-++-++-ε简化为()(),2211ah y y h y h i i i =++-+-+εεε从而离散后得到的线性方程组的系数矩阵为()()()()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡+-++-++-++-=h h h h h h h A εεεεεεεεεε2222对1=ε,4.0=a ,200=n ,分别用1=ω、5.0=ω和5.1=ω的超松弛迭代法求解线性方程组,要求有4位有效数字,然后比较与精确解的误差,探讨使超松弛迭代法收敛较快的ω取值,对结果进行分析。
改变n ,讨论同样问题。
二、超松弛迭代法产生的背景对从实际问题中得到维数相当大的线性代数方程组的求解仍然十分困难, 以至使人们不能在允许的时间内用直接方法得到解, 因此, 客观上要求用新的方法来解决大维数方程组的求解问题。
第六章第三节逐次超松弛迭代法
则说 A 是具有相容次序的矩阵.
注意:
若矩阵 A aij 具有相容次序, 则属于同一子集的元素之间没有联系, 即若 i, j Wk , aij 则
0, , a ji 0 . 且
例3
0 0 1 4 1 4 1 0 A 0 1 4 0 0 4 1 0
x0i (i 1,, n) ;参数 ;容限 TOL ;最大迭代次数 m
输出 近似解 x1 , x2 , x n 或迭代次数超过 m 的信息.
step 1
对 k 1,, n 做 step2—4. 对 i 1,2,, n
step 2
xi (1 ) x0i
step 3 step 4 对 i 1,2,, n
定理 1 设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0, i 1,, n ,则 SOR 方法
收敛的充分必要条件为
(T ) 1
其中 T 是 SOR 方法的迭代矩阵.
定理 2
设方程组 Ax b 的系数矩阵 A 的主对角元素 aij 0, i 1,, n ,则 SOR 方法
2
x 我们把(3.1)式中的中间 ~i( k ) 消去,则有
i 1 ~ ( k ) (b a x ( k ) xi ij j i aii j 1
j i 1
a
n
ij
x (jk 1) ) (1 ) xi( k 1)
i 1,2,, n, k 1,2
3
例1 方程组
5 x1 x 2 x3 x 4 4 x 10 x x x 12 2 3 4 x1 x 2 5 x3 x 4 8 x1 x 2 x3 10 x 4 34
对称超松弛迭代法 概述及解释说明
对称超松弛迭代法概述及解释说明1. 引言1.1 概述本篇文章旨在介绍对称超松弛迭代法的概述及解释说明。
对称超松弛迭代法是一种用于求解线性方程组的数值方法,它结合了迭代法和超松弛方法,能够在求解大型稀疏线性方程组时展现出良好的效果。
本文将从原理、算法流程以及应用和效果等方面进行详细说明,以帮助读者更好地理解该方法。
1.2 文章结构本文共分为四个部分:引言、对称超松弛迭代法概述、解释说明和结论。
在引言部分,我们将简要介绍本篇文章的主题和目的,并提供文章整体结构;在对称超松弛迭代法概述部分,我们将对迭代法、超松弛方法和对称超松弛迭代法进行逐一讲解;接着,在解释说明部分,我们将详细阐释该方法的原理,并提供算法流程说明,最后通过应用实例和效果分析来展示其实际应用价值;最后,在结论部分,我们将总结回顾全文内容,并展望未来对该领域的研究方向。
1.3 目的介绍对称超松弛迭代法的目的是为了提供一种有效求解线性方程组的数值方法,特别适用于复杂、大规模和稀疏问题。
本文旨在向读者介绍其背后的原理,阐明其算法流程,并通过实际应用和效果分析来证明其可行性和优越性。
最终目标是为读者提供一个全面而清晰的概述,帮助读者理解和运用对称超松弛迭代法解决实际问题。
2. 对称超松弛迭代法概述:2.1 迭代法简介:在数值分析和计算数学中,迭代法是一种通过从一个初始猜测值开始反复应用一个递归公式来逼近方程解的方法。
它广泛应用于线性方程组的求解问题。
不论是在工程领域还是科学研究中,线性方程组求解都是一个常见且重要的问题。
2.2 超松弛方法简介:超松弛方法(SOR)是迭代法中的一种技术,旨在加速收敛速度。
其核心思想是通过引入松弛因子来加快解的收敛过程。
对于每次迭代,在计算新解的分量时,超松弛方法允许我们使用之前已经更新但尚未完成全部迭代的分量进行估计。
该技术通常用于缩小残差并提高数值精度。
2.3 对称超松弛迭代法概述:对称超松弛(SSOR)迭代法结合了对称后退向前(SWEEP)和超松弛(SOR)的思想。
经济学解线性方程组的迭代法
a22
0 a21
0
ann
an1,1
an1
an1,2 an 2
0
an,n1
0
0 a12
0
a1,n1 a2,n1
0
a1n
a2n
DLU.
an1,n
0
(2.4)
13
6.2.1 雅可比迭代法
由 aii 0(i ,1,选2,取 ,为n) 的对角M元素A部分, 即选取 M (对D角阵), A ,D N 由(2.3)式得到 解 Ax 的b雅可比(Jacobi)
,
再将 x(分1) 量代入(1.3)式右边得到 ,x反(2)复利用这个计 算程序,得到一向量序列和一般的计算公式(迭代公式)
x1(0)
x(0) x2(0) ,
x3(0)
x1(1)
x1(k )
x(1) x2(1) , , x(k ) x2(k ) ,
x3(1)
x3( k
迭代法产生的向量序列 x(k不) 一定都能逐步逼近方程组
的解 x.*
如对方程组
x1 2x2 x2 3x1
5, 5.
7
构造迭代法
x ( k 1) 1
x ( k 1) 2
2 x2(k 3x1(k
) )
5, 5.
则对任何的初始向量,得到的序列都不收敛.
对于给定方程组 x ,Bx f 设有唯一解 x*, 则
由雅可比迭代公式(2.5), 有
Dx(k1) (L U )x(k ) b,
或
i1
n
aii xi(k1)
)
5
x ( k 1) 1
(3x2(k )
2x3(k )
20)/8,
超松弛迭代法及其松弛因子的选取
2013届学士学位毕业论文超松弛迭代法及其松弛因子的选取学号:09404307姓名:程启远班级:信息0901指导教师:崔艳星专业:信息与计算科学系别:数学系完成时间:2013年5月学生诚信承诺书本人郑重声明:所呈交的论文《超松弛迭代中松弛因子的选取方法》是我个人在导师崔艳星指导下进行的研究工作及取得的研究成果.尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得长治学院或其他教育机构的学位或证书所使用过的材料.所有合作者对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意.签名:日期:论文使用授权说明本人完全了解长治学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文.签名:日期:指导教师声明书本人声明:该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性.指导教师签名:时间摘要本文首先给出了超松弛迭代法解线性方程组的基本概念,引进了关于超松弛迭代法收敛性判别的一些定理.再基于超松弛迭代法收敛性快慢与松弛因子的选择密切相关,本文给出了能准确快速地确定最优松弛因子的方法逐步搜索法和黄金分割法,并且写出了其Matlab 程序(附录),最后通过实例验证了方法的准确性,快速性.关键词线性方程组;超松弛迭代;Matlab程序;松弛因子AbstractThis paper firstly introduces the basic concept of the super relaxation iteration method for solving linear equations, introduced on some criterion theorem Overrelaxation iterative convergence, gives a simple Matlab program super relaxation iteration (Appendix 1). Then Overrelaxation iterative convergence speed and relaxation factor is selected based on the close relation is proposed in this paper, the rapid and accurate method of determining the optimal relaxation factor of the direct search method and the golden section method, and write the Matlab program (Appendix 2), finally the method is accurate, rapid.Key word:Linear equations; Successive Over Relaxation; Matlab program; relaxation factor超松弛迭代法及其松弛因子的选取09404307 程启远信息与计算科学指导教师崔艳星引言在科学计算和工程设计中,经常会遇到求解线性代数方程组的问题,而怎样快速的求解一直是我们共同关心的课题.随着计算机技术及数学编程软件的发展,我们有了在计算机上解线性方程组的条件.最初遇到的方程数和未知数比较少的方程组我们就是利用线性代数知识直接解出来.直接解法只能适用于经过有限步运算能求得解的方程组.后来遇到的方程数和未知数都比较多的方程组,特别是经常会遇到的大型的方程组,直接解法工作量太大,花费时间太多,因此迭代法发展了起来.从最初的Jacobi迭代法到Gauss-Seidel迭代法,很多学者一直在研究找到一种迭代法能更加快速,简单的解决线性方程组.通过不断的实验和计算,在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 ix 与(1)k ix +加权平均得(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 ω为211b ωμ=+-且222[4(1)]()1,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-00004A T (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.由这两个例子可以看出利用黄金分割法求最优松弛因子比用逐步搜索法更加简便快速,但是用逐步搜索法步长取的很小时求得的松弛因子比黄金分割法更加精确.4 结束语超松弛迭代方法是解决线性方程组的一个十分有效快捷的方法,很多工程学,计算数学中都会应用.而且超松弛迭代法公式简单,编制程序容易.而使用超松弛迭代法的关键在于选取合适的松弛因子,如果松弛因子选取合适,则会大大缩短计算时间. 本文依据松弛因子和矩阵谱半径的关系给出了两种选取松弛因子的方法逐步搜索法和黄金分割法及其Matlab程序. 但这两种方法仍不是足够简便,有所不足,有待进一步研究.5 参考文献:[1] 李庆扬,王能超,易大义.数值分析[M], 清华大学出版社,2008.[2] 施吉林. 计算机数值方法[M] . 北京: 高等教育出版社, 2000.[3] 蔡大用.数值分析与实验学习指导[M],清华大学出版社,2001.[4] 李建宇,黎燕. 牛顿一SOR迭代方法中最佳松弛因子的算法[J],四川大学学报,4,381-382,1995.[5] 王诗然. 稀疏线性方程组求解的逐次超松弛迭代法[J],沈阳师范大学学报,4,407-409,2006.[6] 刘卫国. MATLAB程序设计与应用[M],高等教育出版社,2008.[7] 张知难.关于相容次序矩阵的性质的图论证明[J].新疆大学学报, 1983, 12(3):23-26.[8] 李春光,徐成贤.确定SOR最优松弛因子的一个实用算法[J].计算力学学报,2002,19(3):299-302.[9] 蒋家羚,王勇.最有超松弛因子的一种确定方法及其在裂纹计算中的应用[J].研究简报,2002,24(1):133-135.[10] 王晓东. 计算机算法设计与分析[M] . 北京: 电子工业出版社, 2000.附录逐步搜索法A=[-3,1,0,1;1,-3,0,0;0,0,-3,1;1,0,1,-3]; %系数矩阵%b=[-1;-2;-2;-1];D=diag(diag(A)); %A的对角矩阵%U=-triu(A,1) ; %A上三角矩阵%L=-tril(A,-1); %A的下三角矩阵%m=[];t=[]; %创建两个空矩阵分别存放相对应的谱半径和记录迭代次数% for w=1:0.01:1.1; %取w的值%q=(D-w*L);p=inv(q); %求q的逆%Gw=p*((1-w)*D+w*U); %求得迭代矩阵%V=eig(Gw); %计算迭代矩阵的特征值%R=max(abs(V)); %找出绝对值最大的谱半径%m=[m,R];plot(w,R,'o'); %画出w和R的关系图%grid;hold onf=inv(D-w*L)*b*w;x0=[0;0;0;0]; %取迭代初值%y=Gw*x0+f;n=1;while norm(y-x0)>=1.0e-6 %迭代条件%f=inv(D-w*L)*b*w;x0=y;y=Gw*x0+f;n=n+1;endt=[t,n];end[h,k]=min(t); %h记录最小的迭代次数,k记录第几个数最小%求解过程g=1.0+(k-1)*0.01;f=inv(D-g*L)*b*g;y=Gw*x0+f;n=1;while norm(y-x0)>=1.0e-6;f=inv(D-g*L)*b*g;x0=y;y=Gw*x0+f;n=n+1;endk,h,t,m,g %g是最佳松弛因子%黄金分割法A=[-3,1,0,1;1,-3,0,0;0,0,-3,1;1,0,1,-3]; %系数矩阵%b=[-1;-2;-2;-1];D=diag(diag(A)); %A的对角矩阵%U=-triu(A,1) ; %A上三角矩阵%L=-tril(A,-1); %A的下三角矩阵%c=1;d=2;m=0.618;x0=[0;0;0;0];w1=d-m*(d-c);w2=c+m*(d-c);y=[];r=[];s=[];z=[];while abs(w2-w1)>=0.05n=1; w=w1;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;while norm(x-x0)>=1.0e-6x0=x;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;n=n+1;endr=[r,w];y=[y,n];k=1; w=w2;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;while norm(x-x0)>=1.0e-6x0=x;G=inv(D-w*L)*((1-w)*D+w*U);f=w*((D-w*L)*b);x=G*x0+f;k=k+1;ends=[s,w];z=[z,k];if n>kc=w1;w1=d-m*(d-c);w2=c+m*(d-c);elsed=w2;w1=d-m*(d-c);w2=c+m*(d-c);endendr,y,s,z,w2致谢本文在指导老师崔老师的精心指导下完成的,无论是在选题、确定研究内容和研究过程中都凝聚着由老师的辛勤与汗水.由老师的严谨治学态度、无私奉献的精神、丰富的教学经验令我受益匪浅.在他那里不仅让我学到了许多宝贵的知识财富,更让我懂得了许多做人的道理.在这里我衷心地向我的指导教师崔艳星老师表示最诚挚的谢意和尊敬.最后向所有关心我和帮助我的老师和同学们表示我衷心的感谢和最诚挚的谢意!。
超松弛迭代法中vrho
超松弛迭代法中vrho对于任何尝试从x ( k ) x^{(k)}x(k)找到x ( k + 1 ){x^{(k+1)}}x(k+1)的迭代方法,我们在从x ( k ) x^{(k)}x(k)到x ( k + 1 ) x^{(k+1)}x(k+1)的特定方向上移动一定的距离。
这个方向是向量是x ( k + 1 ) − x ( k )\mathbf{{x^{(k+1)}-x^{(k)}}}x(k+1)−x(k)。
如果我们假设从x k x^{k}xk到x k + 1 x^{k+1}xk+1的方向使我们离真正的答案x xx越来越近,但非一直这样,那么继续沿方向x ( k + 1 ) − x ( k ) \mathbf{{x^{(k+1)}-x^{(k)}}}x(k+1)−x(k)进行移动,但是在这个方向上移动的更远,将会是非常有意义的事情。
下面是怎样从Guass-Seidel 方法推导出SOR方法。
首先注意到我们可以将Gauss-Seidel公式写为D x ( k + 1 ) = b − L x ( k + 1 ) −Ux( k ) ,Dx^{(k+1)}=b-Lx^{(k+1)}-Ux^{(k)},Dx(k+1)=b−Lx(k+1)−Ux(k),所以x ( k + 1 ) = D − 1 [ b − L x ( k + 1 ) − U x ( k ) ] . x^{(k+1)}=D^{-1}[b-Lx^{(k+1)}-Ux^{(k)}].x(k+1)=D−1[b−Lx(k+1)−Ux(k)].我们可以从两端减去x ( k ) x^{(k)}x(k)得到x ( k + 1 ) − x ( k ) = D − 1 [ b − L x ( k + 1 ) − D x ( k ) − U x ( k ) ] . x^{(k+1)}-x^{(k)}=D^{-1}[b-Lx^{(k+1)}-Dx^{(k)}-Ux^{(k)}].x( k+1)−x(k)=D−1[b−Lx(k+1)−Dx(k)−Ux(k)].现在把这个看作是Gauss-Seidel修正项( x ( k + 1 ) − x ( k ) ) G S(x^{(k+1)}-x^{(k)})_{GS}(x(k+1)−x(k))GS。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 时,称为亚松弛算法。
目前还没有自动选择因子的一般方法,实
际计算中,通常取(0,2)区间内几个不同的ω
值进行试算,通过比较后,确定比较理想的松弛
定理6.6 设A∈Rnn对称正定,且 0<ω<2,则SOR法对任意
的初始向量 都收敛。
x(0) ( x1(0) , x2(0) , xn(0) )T Rn
由于定理6.4只是定理6.6的特殊情况,故定理6.4可以 看作定理6.6的推论。
定理6.7 设A是对称正定的三对角矩阵,则
ρ(BG) =[ρ(BJ)] 2 <1, 且SOR法松弛因子ω的最优选择为
可见,若选好参数ω,SOR迭代法收敛速度会很 快。
返回节
二、SOR法的收敛性
为了利用第3节的收敛定理,要先给出SOR法的矩阵表达 式。由式(2) 以及Gauss-Seidel迭代法的矩阵表达形式, 可以看出
X(k+1) =(1-ω)X(k)+ωD-1(b+LX(k+1)+UX(k)) DX(k+1) =(1-ω)DX(k)+ω(b+LX(k+1)+UX(k)) (D-ωL)X(k+1) =[(1-ω)D+ωU] X(k)+ωb 解得
~xi(k1)
[bi
i1
aij
x
(k j
1)
n
aij
x
(k j
)
]
/
aii
j 1
j i
(1)
选择参数ω,取
x (k 1) i
(1 )xi(k)
~xi(k1)
(2)
返回引用
把 式(1)代入式(2)即得SOR法
x(ik1)
(1
)x(i k )
aii
[bi
i1 j1
a x(k1) ij j
X(k+1) =(D-ωL)-1 [(1-ω)D+ωU] X(k)+ω(D-ωL)-1b (3)
记 Bω=(D-ωL)-1 [(1-ω)D+ωU] 称为SOR法迭代矩阵。
由定理6.1 及定理6.2直接得知:
(1) SOR法收敛的充要条件是ρ(Bω)<1。
(2) SOR法收敛的充分条件是 || Bω||<1。
30
0 1 4 x3 24
解 方程组的精确解为 x=(3,4,-5) T,为了进行比较,利用同
一初值 x(0)=(1,1,1)T,分别取ω=1 (即Gauss-Seidel迭代法)和
ω=1.25两组算式同时求解方程组。
①取ω=1 ,即Gauss-Seidel迭代:
x (k 1) 1
前面我们看到,SOR法收敛与否或收敛速度都
与松弛因子ω有关,关于ω的范围,有如下定理。
SOR法收敛与收敛速度有关定理
定理6.5 设A∈Rnn,满足a ii≠0 (i=1,2,,n),则有 ρ(Bω)≥ |1-ω| 。
推论 解线性方程组,SOR法收敛的必要条件是 |1-ω| <1 ,即 0<ω <2。
二、SOR法的收敛性
SOR法收敛与收敛速度有关定理 SOR法分类与现状
一、SOR法迭代公式
返回引用
设线性方程组
AX=b
其中 A非奇异,且aii 0(i=1,2,,n ) 。
如果已经得到第k次迭代量x (k) 及第k+1次迭代量x (k+1) 的前i-1个 分量
(x1 (k+1),x2 (k+1) ,,xi-1 (k+1) ), 在计算xi (k+1) 时,先用Gauss-Seidel迭代法得到
n
aijx(jk) ]
ji1
X(0)
(x1(0)
,
x(0) 2
,
,
x(0) n
)T
(k 1, 2, )
(i 1, 2, , n)
其中,
参数ω叫做松弛因子; 若 ω=1,它就是Gauss-Seidel迭代法。
返回引用
例6.6 用SOR法求解线性方程组
4 3 0 x1 24
3
4
1
x2
9.75
x3(k
1)
0.3125 x2( k 1)
0.25x3(k)
7.5
迭代结果见表6.3。
表6.3 Gauss-Seidel迭代法与SOR迭代法比较
Gauss-Seidel迭代法
SOR迭代法(ω=1.25)
k
x1
0
1.0000000
x2 1.0000000
x3 1.0000000
x1 1.0000000
x2 1.0000000
x3 1.0000000
1
5.2500000
3.1825000
-5.0468750
6.3125000
3.9195313
-6.6501465
2
3.1406250
3.8828125
-5.0292969
2.6223145
3.9585266
-4.6004238
3
3.0878906
3.9267587
第六章 线性方程组迭代解法
§ 6.4 超松弛迭代法(SOR)
§ 6.4超松弛迭代法(SOR)
SOR(Successive Over-Relaxation)法, 即超松弛迭代法,是目前解大型线性方程 组的一种最常用的方法,是Gauss-Seidel迭 代法的一种加速方法。
一、SOR法迭代公式
例6.6 用SOR法求解线性方程组