3 matlab编程实现高斯消元法、列主元素消去法

目录

3 习题三

3.1 题目

3.2 问题背景

3.3 算法

3.4 matlab编程实现

3.5 结果展示

3.6 讨论


3 习题三

3.1 题目

给定方程组

 

(1)编写Gauss消元法程序解所给的方程组;

(2)编写列主元素消去法程序解所给的方程组,并与(1)比较结果。

3.2 问题背景

许多实际问题的模型最终需归结为求解线性方程组,例如数值天气预报,为赶上每天发布天气预报 的需要,只有几个小时的计算时间。如何快速有效地求解线性方程组是科学与工程计算的核心问题之一。 线性方程组的主要解法有直接法和迭代法。迭代法采用逐次逼近的方法,即从一个初始近似解开始, 逐步地接近精确解,直到满足精度为止;直接法是指在没有舍入误差地情况下经过有限次

运算可求得方 程组精确解的方法。对于系数矩阵为大型系数矩阵的线性方程组,一般采用迭代法;系数矩阵为低阶稠 密型矩阵的线性方程组,一般采用直接法计算。高斯消元法是最常用的求解线性方程组的直接解法,其基本思想就是线性代数中的消去法,逐个求 解未知数的办法。高斯消元法是在较强条件下,即各主元 a(ii) ≠ 0,(i = 1, 2, · · · , n)。当其中一个主元为 0 便无法进行下去,此外,高斯消元法存在数值不稳定性,因而,在每一步消元前增加一个选主元的过程, 即在每次消元时选择最大的元素作为主元,该方法称为 Gauss 列主元素消元法。

3.3 算法

由于高斯列主元素消元法与高斯消元法的不同点,仅仅在于在每次消元前按列选择主元,故算法讲解以高斯列主元素消元法为主,使用高斯消元法时不需要选主元。

设有线性方程组

Ax=b

其中,A 为非奇异矩阵。方程组的增广矩阵为

 

3.4 matlab编程实现

(将函数文件放在与主程序同一个文件夹下,然后运行主程序)

(1)高斯消元法

主程序:

clear;

A=[0.4096 0.1234 0.3678 0.2943;0.2246 0.3872 0.4015 0.1129;0.3645 0.1920 0.3781 0.0643;0.1784 0.4002 0.2786 0.3927];

b=[0.4043;0.1550;0.4240;-0.2557];

%课本例题测试数据:A=[1 -1 1;-3 1 -2;3 1 -1];b=[2;6;12];

disp('方程组的等价增广矩阵A1和方程的解分别为:');

[A1,x]= gauss(A,b)

函数:

function [A1,x]= gauss(A,b)

%高斯消元法

n=length(b);

x=zeros(n,1);

for j=1:(n-1)

    %依照行顺序,用对角线以下的行向量减去主元所在行

    for i=(j+1):n

        l=A(i,j)/A(j,j);

        b(i)=b(i)-l*b(j);

        for k=1:n

            A(i,k)=A(i,k)-l*A(j,k);

        end

    end

end

A1=[A b];%保存局部变量-等价变换后的增广矩阵

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

    %对等价方程组回代求解

    sum=0;

    for j=i+1:n

        sum=sum+A(i,j)*x(j);

    end

    x(i)=(b(i)-sum)/A(i,i);

end

end

(2)高斯列主元素消元法

主程序:

clear;

A=[0.4096 0.1234 0.3678 0.2943;0.2246 0.3872 0.4015 0.1129;0.3645 0.1920 0.3781 0.0643;0.1784 0.4002 0.2786 0.3927];

b=[0.4043;0.1550;0.4240;-0.2557];

%课本例题测试数据1A=[1 -1 1;-3 1 -2;3 1 -1];b=[2;6;12];

%课本例题测试数据2A=[2 0 5;2 -1 3;2 -1 1];b=[5;3;1];

disp('方程组的等价增广矩阵A2和方程的解分别为:');

[A2,x]= maingauss(A,b)

%返回值A2为等价上三角增广矩阵,x为方程组的数值解

函数:

function [A2,x]= maingauss(A,b)

%列主元素消去法

n=length(b);

x=zeros(n,1);m=0;

for j=1:(n-1)

    %依照列顺序消元,化系数矩阵为上三角矩阵

    for k=n:2

        %选主元

        bottom=abs(A(k,j));m=k;

        up=abs(A(k-1,j));

        if bottom>up

            m=k;

        else

            m=k-1;

        end

    end

    if m>j

        %若主元非对角线元素,则需要换行

        max_r=A(m,1:n);

        A(m,1:n)=A(j,1:n);

        A(j,1:n)=max_r;

        max_b=b(m);

        b(m)=b(j);

        b(j)=max_b;

    end

    for i=(j+1):n

        %依照行顺序,用对角线以下的行向量减去主元所在行

        l=A(i,j)/A(j,j);

        b(i)=b(i)-l*b(j);

        for k=1:n

            A(i,k)=A(i,k)-l*A(j,k);

        end

    end

end

A2=[A b];%保存局部变量-等价变换后的增广矩阵

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

    %对等价方程组回代求解

    sum=0;

    for j=i+1:n

        sum=sum+A(i,j)*x(j);

    end

    x(i)=(b(i)-sum)/A(i,i);

end

end

3.5 结果展示

(1)高斯消元法

>> work3

方程组的等价增广矩阵A1和方程的解分别为:

A1 =

    0.4096    0.1234    0.3678    0.2943    0.4043

         0    0.3195    0.1998   -0.0485   -0.0667

         0         0   -0.0982    0.3171   -0.3595

         0         0         0   -0.1871    0.0836

x =

   -0.1819

   -1.6630

    2.2172

   -0.4467

(2)高斯列主元消元法

>> work3

方程组的等价增广矩阵A2和方程的解分别为:

A2 =

    0.4096    0.1234    0.3678    0.2943    0.4043

   -0.0000    0.3195    0.1998   -0.0485   -0.0667

    0.0000         0   -0.0006   -0.1851    0.0814

   -0.0000         0    0.0000   30.7245  -13.7248

x =

   -0.1819

   -1.6630

    2.2172

   -0.4467

3.6 讨论

针对于本题,变换过程中的各主元皆满足 a(ii) ≠ 0,因此高斯消元法与高斯列主元消元法同样能计算出正确结果,二者变换得到的增广矩阵A1与A2不同但等价,不影响计算结果。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linhua090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值