1 背景简介
线性方程组的直接法,就是不计舍入误差,通过有限次算术运算能求得准确解的方法。实用的直接法,一是要求即使方程的阶数较高(变量个数多),求解的运算量也不会太大;二是要求即使有舍入误差,也能计算出符合所需精度的阶。
2 案例设计
3 数学模型
3.1 高斯列主元消去法
3.1.1 算法过程
3.1.2 代码
function [x] = Gauss(A,b)
[~,n]=size(A);
B=n+1;
A(:,B)=b;
for row_i=1:n-1
disp(['第',num2str(row_i),'次交换列主元前:'])
disp(A);
[~,ChangeTo_i]=max(abs(A(row_i:end,row_i)));
max_position=ChangeTo_i+row_i-1;
if max_position ~= row_i
t=A(row_i,:);
A(row_i,:)=A(max_position,:);
A(max_position,:)=t;
end
disp(['第',num2str(row_i),'次交换列主元后:'])
disp(A);
for j=(row_i+1):n
A(j,:)=A(j,:)-A(j,row_i)/A(row_i,row_i)*A(row_i,:);
end
disp(['第',num2str(row_i),'次消元后:'])
disp(A);
end
x=zeros(length(b),1);
x(n)=A(n,B)/A(n,n);
for k=n-1:-1:1
x(k)=(A(k,B)-A(k,k+1:n)*x(k+1:n))/A(k,k);
end
end
%% 输入参数
% 输入系数矩阵
A = vpa([12 -3 3;-18 3 -1;1 1 1]);
% 输入右端向量
b = [15;-15;6];
%% 计算系数矩阵A的行列式
det(A)
%% 使用高斯消去法求解线性方程组
[x] = Gauss(A,b)
3.1.3 计算结果
4 分析与讨论
高斯消元法由n-1步消元过程和n-1步回代过程组成。在消元的过程中,如果出现小除数,则容易引起求解结果离真解的偏差很大。选择主元技术,能够在一定程度上减少小除数引起的舍入误差,并且不增加太多的额外计算。