当前位置:   article > 正文

数学建模算法(基于matlab和python)之 线性方程组的迭代法(雅可比迭代、高斯-赛德尔迭代)(7/10)_高斯赛德尔迭代

高斯赛德尔迭代

实验目的及要求:

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

2、判断雅克比迭代、高斯-塞德尔迭代对任意初始向量的收敛性;

3、完成雅克比迭代、高斯-塞德尔迭代算法的程序实现。

实验内容:

1、编写雅可比迭代法与高斯-赛德尔迭代法通用子程序,求解下列线性方程组

,并考察迭代过程的收敛性。

实验步骤与程序:

Jacobi迭代法理论:

Jacobi迭代法流程图: 

 

Jacobi迭代法的MATLAB主程序

被调用的Jacobi.m文件

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

n=length(A);k=1;index=1;

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

while k<N

    for i=1:n

        y(i)=b(i);

        for j=1:n

            if j~=i

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

            end

        end

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

            index=0;

            return

        end

        y(i)=y(i)/A(i,i);

    end

    if norm(y-x,inf)<ep

        break

    end

    k=k+1;

    x=y;

end

运行的Jacobi_1.m文件

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

b=[7;7;8];

ep=1e-4;

N=100;

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

G-S迭代法理论:

 

G-S迭代法的流程图:

G-S迭代法的MATLAB主程序

被调用的Gao_Si_sai_de_er.m文件

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

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)=z;

    end

    if norm(y-x,inf)<ep

        break

    end

    k=k+1;

end

运行的Gao_Si_sai_de_er_1.m文件

 

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

b=[7;7;8];

ep=1e-4;

N=100;

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

运行结果:

雅克比迭代

高斯—赛德尔迭代

结果分析与讨论:

  1. 雅克比迭代是一种可迭代求解线性方程组的方法,通常适用于未知数较少的稀疏线性方程组。其基本思想是将系数矩阵中的每个元素转化为只与未知变量相关的系数,从而使得每个未知变量可以单独求解。
  2. 雅可比迭代的收敛性取决于系数矩阵是否为严格对角占优矩阵。如果它是严格对角占优矩阵,则雅可比迭代是收敛的。否则,迭代可能会发散。
  3. 高斯-赛德尔迭代是一种用于求解线性方程组的迭代算法,它是改进的雅可比迭代算法。它的基本思想是在计算每个未知数的迭代估计值时,尽可能利用已经得到的最新估计值,以提高收敛速度。
  4. 高斯-赛德尔迭代的收敛速度比雅可比迭代快,但不一定比其他迭代算法快。需要注意的是,高斯-赛德尔迭代不一定收敛,收敛速度也与系数矩阵的条件数有关,因此迭代次数需要经验性地调整。

雅克比迭代和高斯-赛德尔迭代都是迭代法求解线性方程组的算法,它们的基本思想都是通过迭代来逼近方程组的精确解。具体来说,两种算法都是将系数矩阵分解为三个部分,并针对每个未知数分别解出一个迭代更新公式。

  1. 两种算法的区别在于,对于高斯-赛德尔迭代,每个未知数的迭代更新公式中,采用了其他未知数本次迭代(已更新)的值;而对于雅克比迭代,每个未知数的迭代更新公式中,采用的都是上一次迭代未知数的值。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号