数值分析:高斯消元法

1 实验目的

高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。试编写顺序Gauss消去法与列主元Gauss消去法求线性方程组解的通用子程序,并用其求解给定线性方程组的解,

2 实验内容

编写顺序Gauss消去法与列主元Gauss消去法求线性方程组解的通用子程序,并用其求解如下线性方程组的解,并比较计算结果的精确度。

3 实验知识点

高斯消元法的原理是:若用初等行变换将增广矩阵化为行阶梯阵,则AX=B与CX=D是同解方程组。所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。

4 算法思想

高斯消元法的步骤:

1、把方程组转换成增广矩阵。

2、利用初等行变换来把增广矩阵转换成行阶梯阵。

3、转换为行阶梯阵,判断解的情况。

①无解。当方程中出现(0,0,…,0,a)的形式,且a!=0时,说明是无解的。

②唯一解条件是k=equ,即行阶梯阵形成了严格的上三角阵。利用回代逐一求出解集。

③无穷解。条件是k<equ,即不能形成严格的上三角形,*变元的个数即为equ–k,但有些题目要求判断哪些变元是不缺定的。

5 实验代码

5.1 主函数:GaussMethod.m

clear;clc;close all;

%构造系数矩阵

A=zeros(42,42);

a=6*ones(1,length(A(:,1)));

b=8*ones(1,length(A(:,1))-1);

c=ones(1,length(A(:,1))-1);

A=diag(a)+diag(b,-1)+diag(c,1);

%构造向量

B=[7 15*ones(1,length(A(:,1))-2) 14]';

%% 顺序高斯消去法

x=gauss(A,B)

%% 列主元高斯消去法

x1=DetGauss(A,B)

1;

5.2 顺序高斯消去法 gauss.m

function x=gauss(a,b)

%顺序高斯消去法

[n]=length(a);

nb=length(b);

det=1;%存储行列式值

x=zeros(n,1);

for k=1:n-1

    for i=k+1:n

        if a(k,k)==0

            return

        end

        m=a(i,k)/a(k,k);

        for j=k+1:n

            a(i,j)=a(i,j)-m*a(k,j);

        end

        b(i)=b(i)-m*b(k);

    end

    det=det*a(k,k);

end

det=det*a(n,n);

for k=n:-1:1

    for j=k+1:n

        b(k)=b(k)-a(k,j)*x(j);

    end

    x(k)=b(k)/a(k,k);

end

5.2 顺序高斯消去法 DetGauss.m

function x=DetGauss(a,b)

%  列主元高斯消去法

[n]=length(a);

nb=length(b);

det=1;

x=zeros(n,1);

for k=1:n-1

    amax=0;

    for i=k:n

        if abs(a(i,k))>amax

            amax=abs(a(i,k));

            r=i;

        end

    end

    if amax<1e-10

        return;

    end

    if r>k

        for j=k:n

            z=a(k,j);

            a(k,j)=a(r,j);

            a(r,j)=z;

        end

        z=b(k);

        b(k)=b(r);

        b(r)=z;

        det=-det;

    end

    for i=k+1:n

        m=a(i,k)/a(k,k);

        for j=k+1:n

            a(i,j)=a(i,j)-m*a(k,j);

        end

        b(i)=b(i)-m*b(k);

    end

    det=det*a(k,k);

end

det=det*a(n,n);

for k=n:-1:1

    for j=k+1:n

        b(k)=b(k)-a(k,j)*x(j);

    end

    x(k)=b(k)/a(k,k);

End

6 实验结果

6.1 顺序高斯消去法

数值分析:高斯消元法                                     数值分析:高斯消元法

 

 

6.2 列主元高斯消去法

数值分析:高斯消元法                                            数值分析:高斯消元法

 观察结果发现,列主元高斯消去法计算结果精度更高,顺序高斯消去法部分计算结果不准确

上一篇:矩阵树定理 学习笔记


下一篇:2021icpc济南