线性方程组——高斯消元法

导论

        关于线性方程组的知识此处不再赘述,本专栏主要讲述几种线性方程组的解法,以下列线性方程组为例:

3x_1 - 0.1x_2-0.2x_3 = 7.85

0.1x_1+ 7x_2 -0.3x_3= -19.3

0.3x_1 -0.2x_2 +10x_3 = 71.4

        实际上,在Matlab中的运算符已经集成了矩阵运算(Matlab以矩阵作为基本数据类型的特点)。其中左除运算即可以求解一般的线性方程组。Ax = b,x = A\b或x = inv(A)*b。

        但我们主要讲述的是几种解法的思想。

高斯消元法过程

      高斯消元法过程为“先前消元,向后回带”,具体的流程如下图所示

高斯消元法代码

clear
clc
A = [3 -0.1 -0.2; 0.1 7 -0.3; 0.3 -0.2 10];
b = [7.85 -19.3 71.4]';
x1 = GaussNaive(A, b)
function x = GaussNaive(A,b)
%GAUSSNAIVE 朴素高斯消元法求解线性方程组
%采用“向前消元,向后回带”的方法求解,缺点在于在“消元”过程中可能出现“除零”现象
[m, n] = size(A);
if m~=n, error('矩阵必须为方阵'); end
nb = n+1;
Aug = [A b]; % 增广矩阵
% 向前消元
for k = 1:n-1
    for i = k+1:n
        factor = Aug(i, k)/Aug(k, k);
        Aug(i, k:nb) = Aug(i, k:nb) - factor*Aug(k, k:nb);
    end
end
% 向后回带
x = zeros(n, 1);
x(n) = Aug(n, nb)/Aug(n, n);
for i = n-1:-1:1
    x(i) = (Aug(i, nb)-Aug(i, i+1:n)*x(i+1:n)) / Aug(i, i);
end
end

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值