高斯赛德尔迭代c语言_超松弛迭代法(SOR)

文章介绍了在雅可比迭代法收敛速度不足时,如何通过高斯-赛德尔迭代法的改进版——超松弛迭代法(SOR)来提高收敛速度。内容包括SOR算法的收敛性分析、严格对角占优矩阵的概念,并展示了C语言的代码实现及求解线性方程组的例子。
摘要由CSDN通过智能技术生成

0901ec09a5a8435e03be07f37c7a3c12.png

一般而言,因雅可比迭代收敛速度不够快,所以在工程中应用不多。并且在雅可比迭代收敛速

度很慢的情况下,通常高斯-赛德尔方法也不会很快。我们可以对高斯-赛德尔方法做出一定的

修改,来提高收敛速度。本节,我们介绍超松弛迭代法。

add962327fd623e23b45f0ab2770d798.png

46e9edaf71c518d292007b6cdaa8b3fa.png

e41d569b9248a9ffc083b6a593963ebc.png

accde954065fda26b72ffd6d17d1046d.png

804f272c549bcb5820ae966595b4f388.png

a2a5b1ce4e4be1e730cb0445700d1f35.png

376811be4d11c8158a13604b30285ad3.png

f1336aae719f9715cbd31f8b4eed4c5d.png

a395525b094acc0baf8e33649946f7ee.png

b89e5d7a4e14ccf546d6f81222ba1f3f.png

9a6fa646376f657b963530fbfec3ebd3.png

下面我们对该算法进行收敛性分析:

95d727ba1434ac28950ad7d0d4cd119c.png

d27b112ba89e5ba675baaf897ea41079.png

这里我们解释一下什么叫严格对角占优矩阵:严格对角占优矩阵就是矩阵主对角线元素的的模

大于与他同行的其他元素的模的总和。

下面我们具体代码实现一下:

%超松弛(SOR)迭代法,计算线性方程组的解
function [x,k] = SOR_iteration(A,b,x0,w,tol)
% tol为输入误差容限,x0为迭代初始值

% 默认最多迭代300次,超出300次会给出警示
max = 300;

if(w<=0||w>=2)
    % MATLAB中error语句用于报错跳出,并可以给出相应提示
    error('错啦!w的值不符合要求');
    
    % 在MATLAB中遇到return的意思就是结束整个函数的执行,
    % break是仅仅跳出循环体
    return;
end

%  取出X矩阵的对角元,然后构建一个以X对角元为对角的对角矩阵
D = diag(diag(A));

% 求A的下三角矩阵,对角线元素为0,再每个矩阵元素取负号
L = -tril(A,-1);

% 求A的上三角矩阵,对角线元素为0,再每个矩阵元素取负号
U = -triu(A,1);

% 在MATLAB中inv是求矩阵的逆矩阵的意思,同具有一样的功能
B = inv(D-L*w)*((1-w)*D+w*U);
f = w*inv((D-L*w))*b;
x = B*x0+f;
k = 1;

while norm(x-x0)>=tol
    x0 = x;
    x = B*x0+f;
    k = k+1;
    if(k>=max)
        disp('迭代次数超过',max1,'次,方程组可能不收敛');
        return;
    end
    
    [k,x']
end

我们用超松弛迭代法求解一下下面的方程组:

15088bdf1e4f8df5641a02ed686b220e.png

在编辑界面输入如下命令:

A = [4,-2,-1;-2,4,-2;-1,-2,3];

% 注意必须加'表示转置
b = [0,-2,3]';
x0 = [1,1,1]';
[x,k] = SOR_iteration(A,b,x0,1.45,1e-6)

最后计算结果如下:

96cfbe35723296283a4d4709a53b4bb4.png
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值