《数值分析》第二次大作业
题目:SOR最优松弛因子选取方法及SOR迭代法的改进 内容:
1.SOR最优松弛因子选取方法 2.SOR迭代法的改进(SSOR迭代法) 3.SSOR迭代法的Matlab程序
4.举例比较jacobi,Gauss-Seidel,SOR及SSOR 1111111迭代法的收敛速度
姓名:合肥工业大学
学号:2011
班级:信息与计算科学11-1班 参考资料:
1.《确定SOR最优松弛因子的一个实用算法》李春光等《计算力学学报》 2.《数值分析与实验》,薛毅,北京工业大学出版社.
3.《数值分析中的迭代法解线性方程组》,马云,科学出版社 4.《非线性互补问题的改进超松弛迭代算法》,段班祥等,江西师范大学出版社 5.《迭代法解线性方程组的收敛性比较》,郑亚敏,江西科学出版社.
一、SOR最优松弛因子选取方法
SOR迭代法迭代公式:
x(k?1)i?(1??)xi?(k)?bi??aijxjaii?j?1???i?1(k?1)?j?i?1?axijn(k)j?? ?i?1,2,..n.?, ??1.二分比较法 将松弛因子1/2,
?的区间(1,2)进行二分,每个小区间的长度为
?去中间值3/2,按照SOR迭代法迭代公式,求出跌代次数k,如果k不超过指定的发散常数,则可确定?的值;否则将(1,2)四等分,每个区间长度为1/4,?取各分点值,继续迭代,一般地,将
1区间(1,2)二分M次,每次二分步长为,?一次取取各分点值,
2M按照SOR迭代法迭代公式,求出跌代次数k,如果k不超过指定的发散常数,则可确定的
?的值,这样总能找到一个不超过指定发散常数
?值。
2.逐步搜索法
将
1??的取值区间(1,2)进行M等分,?分别取
?的值。
12M?1,1?,...,1?,通过迭代公式依次对同意精度要求求出迭代MMM次数k的值,并从中选出最优松弛因子
3.黄金分割法
依据黄金分割比的思想,通过计算机主动选取最优松弛因子的近似值,步骤如下
a.对(1,2)区间进行第一次0.618的分割,区间边界a1?1,b1?2,在区间?a1,b1?分割出黄金点p1?a1?0.618?b1?a1?,进行SOR迭代
法的迭代,求出迭代次数k的值,如果没有超过规定的发散常数,迭代结束,否则做步骤b。
b.在(1,1.618)和区间(1.618,2)之间进行第二次黄金分割,找出p2?a2?0.618?b2?a2?,其中a2和b2是新分割区间的左右边界,找出迭代次数最少的
?,若发散则改变区间继续进行黄金分割。
二、SOR迭代法的改进(SSOR迭代法)
SOR迭代法的计算公式为:
?(0)(0)(0)?(0)Tx?(x,x,?,x)1n2?i?1n?(k?1)(k)(k)?(k?1)1?xi?(bi??aijxj??aijxj)?xi??xiaiij?1j?i?1,?i?1n?(k?1)(k)??xi?(bi??aijxj??aijxj)?aii?j?1j?i?(k?0,1,?;i?1,2?,n)
则存在 Dx(k?1)?D x(k)??(b?Lx(k?1)?Ux(k)?D x(k))
?1?1f??(D??L)b B?(D??L)((1??)D??U)令S,S(k?1)(k)??B??fS 则 S 对称超松弛迭代法是对逐次超松弛迭代法的改进,在逐次超松弛迭代法的基础上,首先对线性方程组按照顺序方式依次求解xi,(i?1,2,?n),然后在此基础上对线性方程组逆序求解,得出SSOR迭代法。
求解步骤: Step 1 顺序求解得出
x(k?12):
?x(k?2)?L?x(k)?f1??1L?(D??L)((1??)D??U)??
?1?f1??(D??L)b?
Step 2 逆序求解由
1x(k?12)得出
x(k?1)1
?x(k?1)?U?x(k?2)?f2?U??(D??U)?1((1??)D??L)?
?1?f2??(D??U)b?
得出SSOR公式:
?x(k?1)?S?x(k)?f??S??U?L??
?f??(2??)(D??D?1U)?1(D??D?1L)?1D?1b??三、SSOR迭代法Matlab程序:
function [x,n]=SSOR(A,b,x0,w,eps,M) %对称逐次超松弛迭代法求线性方程组Ax=b的解 if nargin==4
eps= 1.0e-6; M = 200; elseif nargin<4 error return
elseif nargin ==5 M = 200; end
if(w<=0 || w>=2) error; return; end
D=diag(diag(A)); %求A的对角矩阵 L=-tril(A,-1); %求A的下三角阵 U=-triu(A,1); %求A的上三角阵 B1=inv(D-L*w)*((1-w)*D+w*U); B2=inv(D-U*w)*((1-w)*D+w*L); f1=w*inv((D-L*w))*b;
f2=w*inv((D-U*w))*b; x12=B1*x0+f1; x =B2*x12+f2;
n=1; %迭代次数 while norm(x-x0)>=eps x0=x;
x12=B1*x0+f1; x =B2*x12+f2; n=n+1; if(n>=M)
disp('Warning: 迭代次数太多,可能不收敛!'); return; end end
四、几种迭代方法的比较
下面我们用不同的迭代方法求解n元线性方程组Ax?b,其中
?4?1??3??????14?1???2??,b????. A??????????14?1???2???3??14?????(0)方程的精确解为x??1,1,?,1?.取n?10,初始向量x为零向量.利用
*TMatlab程序,下表给出了几种迭代方法达到不同精度时所需的迭代次数.
表1 不同的迭代法达到某一精度时所需迭代次数的比较
迭代法 参数值 迭代次数 精度 21 Jacobi迭代法 \\ 13 Gauss-Seidel迭代法 \\ 1?10?6 15 ??1.2 SOR迭代法 8 ??1.2 SSOR迭代法 27 Jacobi迭代法 \\ 17 Gauss-Seidel迭代法 \\ 1?10?8 17 ??1.2 SOR迭代法 10 ??1.2 SSOR迭代法 由上表可以看到,若合理的选取参数值,解系数矩阵为三对角矩阵的线性方程组时,SSOR迭代法收敛速度最快.