顺序高斯消去法求解线性方程组的MATLAB实现 Gauss Elimination

刚学了Gauss消去法,就用MATLAB实现一下,并对所耗时间进行测试,代码如下:

function [Solution_matrix]=GaussElimination(Augmented_matrix)
% 2020-2-21 臻orz
% inputs:
%   Augmented_matrix:增广矩阵,为n*(n+1)维矩阵
% outputs:
%   Solution_matrix:计算的解,为n*1维矩阵

%initialize
[row,col]=size(Augmented_matrix);
Solution_matrix=zeros(row,1);

%判定输入矩阵是否符合要求
if row~=col-1
    disp('请输入n*(n+1)维矩阵');
else
    for ii=1:row-1
        %判定主元素是否为零,也可在开头用顺序主子式判定
        if Augmented_matrix(ii,ii)==0
            disp(['第',num2str(ii),'个主元素为零']);
            return;
        else
            %若符合要求,继续消元
            for jj=ii+1:row
                Augmented_matrix(jj,:)=Augmented_matrix(jj,:)...
                    -Augmented_matrix(jj,ii)/Augmented_matrix(ii,ii)*Augmented_matrix(ii,:);
            end
        end
    end   
    %消元完毕,开始回代
    Solution_matrix(row)=Augmented_matrix(row,col)/Augmented_matrix(row,col-1);
    for ii=row-1:-1:1
        Solution_matrix(ii)=(Augmented_matrix(ii,col)...
            -Augmented_matrix(ii,1:row)*Solution_matrix)/Augmented_matrix(ii,ii);
    end
end
end     

随后为了看看算法耗时怎样,未知量取100至1000,输入元素取1-100的整数,得到的测试结果如图
顺序高斯消去法求解线性方程组的MATLAB实现 Gauss Elimination_第1张图片
可以看到计算1000个未知量所耗时间也才不到3s, MATLAB进行矩阵运算还是很给力的。以下是记录耗时和绘图的代码:

t=[];
dimension=[];
for ii=100:100:1000
    a=floor(100*randn(ii,ii+1)+1);
    tic;
    GaussElimination(a);
    t=[t toc];
    dimension=[dimension ii];
end
figure(1)
plot(dimension,t,'k-',dimension,t,'r*');hold on;
title('时间复杂度');xlabel('未知量个数');ylabel('时间/s');
hold off;

你可能感兴趣的:(顺序高斯消去法求解线性方程组的MATLAB实现 Gauss Elimination)