数学建模算法(基于matlab和python)之 线性方程组的迭代法(超松弛迭代法)(8/10)

实验目的及要求:

1、了解超松弛迭代法的基本原理和特点;

2、判断超松弛迭代对任意初始向量的收敛性;

3、完成超松弛迭代算法的程序实现。

实验内容:

1、编写超松弛迭代通用子程序,求解下列方程组

,在1~2内设置不同的松弛因子,找到最佳松弛因子。(要求精度为0.0005)

实验步骤与程序:

SOR迭代法理论:

SOR迭代法流程图:

  1. SOR迭代法的MATLAB主程序

被调用的cao_song_chi.m文件

function [x,k,index]=chao_song_chi(A,b,ep,N,w)

n=length(A);k=1;

x=zeros(n,1);y=zeros(n,1);index=1;

while k<N

    y=x;

    for i=1:n

        z=b(i);

        for j=1:n

            if j~=i

                z=z-A(i,j)*x(j);

            end

        end

        if abs(A(i,i))<1e-10 || k==N

            index=0;

            return

        end

        z=z/A(i,i);

        x(i)=(1-w)*x(j)+w*z;

    end

    if norm(y-x,inf)<ep

        break

    end

    k=k+1;

end

运行的cao_song_chi_1.m文件

A=[9,-1,-1;-1,8,0;-1,0,9];

b=[7;7;8];

ep=5*1e-5;

N=100;

w=1

[x,k,index]=chao_song_chi(A,b,ep,N,w)

运行结果:

结果分析与讨论:

  1. 超松弛迭代法(SOR)是求解线性方程组的一种迭代方法,它进一步改进了高斯-赛德尔迭代法。相对于高斯-赛德尔迭代法,超松弛迭代法能够更进一步缩小解的误差,特别是对于收敛速度慢的线性方程组。
  2. 通常来说,选择合适的松弛因子是超松弛迭代法效率的关键。过小会减缓收敛速度,而过大的甚至会导致迭代法发散。经验上的最佳值通常需要通过试错法或数值实验来确定。
  3. 超松弛迭代与雅克比迭代和高斯-赛德尔迭代的相同点:

1.都是迭代方法,使用迭代公式逐步逼近方程组的解。

2.都适用于线性方程组求解。

3.都可以通过选择适当的初始值使迭代收敛。

  1. 超松弛迭代与雅克比迭代和高斯-赛德尔迭代的区别:

1.高斯-赛德尔迭代和雅克比迭代是局部更新系数矩阵,而超松弛迭代需要使用一个松弛因子对当前迭代的解进行加权平均。

2.高斯-赛德尔迭代只使用最新的计算结果来进行迭代更新,而雅克比迭代和超松弛迭代需要在每个迭代步骤中使用前一次迭代的所有计算结果。因此,高斯-赛德尔迭代可以收敛得更快,尤其是在对角线元素主导的情况下。

3.超松弛迭代在选择适当的松弛因子时可以比高斯-赛德尔迭代和雅克比迭代更加快速,但是具有更多的调整参数。

猜你喜欢

转载自blog.csdn.net/qq_59819866/article/details/131416548
今日推荐