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 列主元高斯消去法
观察结果发现,列主元高斯消去法计算结果精度更高,顺序高斯消去法部分计算结果不准确