sor迭代法的matlab编程_逐次超松弛SOR迭代概述

本文使用 Zhihu On VSCode 创作并发布

逐次超松弛(SOR)迭代法概述

一、方法背景

​ 逐次超松弛迭代法是高斯-塞德尔迭代法的一种变种,是为了解决线性方程组的一种迭代方法。由David M. Young, Jr. 和Stanley P. Frankel于1950年提出,主要为了实现在计算机上求解线性方程组。逐次超松弛迭代法从高斯-塞德尔迭代出发,加入了

作为松弛因子,加快了迭代的收敛速度。

​ 高斯-塞德尔迭代:

​ 逐次超松弛迭代:

二、数学推导

1. 基础迭代法

​ 对于

​ ​假定A有如下分解

,其中M是非奇异方阵。

​ 有

,其中

​ 建立迭代公式:

​ 若

收敛于确定的向量
,则
,即
即为方程组
的解。

​​ 令

,其中

2. 迭代形式

​ 考虑高斯-塞德尔迭代法

​ 令

为第
次迭代时
的改变量

​ 因此

​ 在改变量r

前加一个因子


​ 合并

得到


3. 矩阵形式

​ 由高斯-塞德尔迭代的矩阵形式:

​ 故

​ 记

​ 则SOR迭代为

​ 两边同时左乘D,可得


​ 即

​ 令


​ 则

为SOR迭代的矩阵形式,
为SOR迭代法的迭代矩阵

三、收敛分析与误差分析

1. 收敛条件的判定

  • 收敛的充要条件是
  • 收敛的必要条件是
  • 若系数矩阵A对称正定,则
    时SOR迭代收敛
  • 若系数矩阵A为严格对角占优矩阵,则
    时SOR迭代收敛

2. 收敛速度分析

​ 假设

,Jacobi迭代矩阵
只有实特征值,Jacobi迭代收敛
,方程组存在唯一解即

​ 收敛速度可以如下表示

​ 最佳松弛参数

3. 误差分析

​ 给定初值

是真解,若
,则有如下估计


四、理论分析

​ 对于线性方程组,可以通过高斯消去、LU分解等直接法进行求解,但是直接法对于系数矩阵要求高,且程序复杂,对于求解大型线性方程组有较多限制。而像SOR迭代法的基础迭代法,只需按照迭代格式进行迭代,便于编程求解,可以迭代到任意精度,节省计算量和空间。

​ SOR迭代法由高斯-塞德尔迭代法改进而来,通过加入了松弛因子

,调整每次迭代的增量,在设定合适的
时,SOR迭代速度明显快于高斯-塞德尔迭代。

​​ 编程时常使用SOR迭代法的矩阵形式,当对角矩阵D中对角线上元素有0时,下三角矩阵

对角线上元素为0,此时无法求逆,进而无法进行迭代。故在编程实现时,进行线性方程组的预处理。由SOR收敛条件可知,当系数矩阵
对称正定且
时,SOR迭代收敛,对于非奇异方针
对阵正定,故若将求解
的线性方程组转化为求解
,新的系数矩阵为
,此时使用SOR迭代的矩阵形式可以避免无法求逆的情况出现。

五、MATLAB实现与实验

function [x,iter] = sor(A,b,x0,omega,tol)
if det(A) == 0
    error('无解或无唯一解');
end

%方程组预处理
b=A'*b;
A=A'*A;

D = diag(diag(A));
L = D-tril(A);
U = D-triu(A);
x=x0;
for iter=1:500
    B = (D-L*omega)((1-omega)*D+omega*U);
    f = (D-L*omega)b*omega;
    x = B*x+f;
    eerror = norm( b-A*x ) / norm(b);
    if ( eerror < tol )
        break;
    end
end

824a459b30998ee9b26fbbcb657f3fad.png
不同松弛因子的迭代速度对比

442dfae2490778695486ad84be9e4ae3.png
不同迭代方式的迭代速度对比

六、总结

​​ 逐次超松弛(SOR)迭代法从高斯-塞德尔迭代法出发,通过加入松弛因子

来加快收敛速度,对编程实现友好,常用于求解大型线性方程组。SOR迭代提出的目的是为在计算机上进行线性方程组的求解,通过SOR迭代的矩阵形式,可以很简洁地实现程序编写,并能通过简单地线性方程组预处理解决可能出现的无法求逆的情况。从实验中能够看出,SOR迭代的速度比高斯-塞德尔迭代快,但需要基于合适的松弛因子

七、参考资料

[1] https://en.wikipedia.org/wiki/Successive_over-relaxation

[2] https://zhuanlan.zhihu.com/p/31066592

[3] https://www.jianshu.com/p/e14d9e910984

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值