导论
关于线性方程组的知识此处不再赘述,本专栏主要讲述几种线性方程组的解法,以下列线性方程组为例:
实际上,在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