计算方法Gauss-Jordan消去法求线性方程组的解

function x=GaussJordan(A,b)
% 用Gauss-Jordan消去法求线性方程组的解
% A为系数矩阵(要求解惟一,则必须为满秩方阵 n*n),b为右值 n*1
% x为所求的根

%作者:野渡无人
% 最后修改日期:2008.3.27

% 例如教材45页例3.1:
% A=[1 4 -5;1 3 -2;6 -1 18], b=[3 2 2]'
% x=GaussJordan(A,b)

% 结果为:
%     1     4    -5     3
%     1     3    -2     2
%     6    -1    18     2
%
%     1     4    -5     3
%     0    -1     3    -1
%     0     0   -27     9
%  x =
%
%     1.3333
%          0
%    -0.3333


[m,n]=size(A);
if m~=n
    error('请输入方阵!');
end

rankA=rank(A);
if rankA~=m
    error('输入的矩阵不是满秩矩阵,请重新输入!');
end

AA=[A,b]   % AA为增广矩阵,以下的求根操作是在增广矩阵上进行 
n=n+1;
    % 注意以下的 n=m+1 其中m为矩阵的秩
for i=1:m
    first=AA(i,i);
    if first==0
        %如果首元素为0,则通过初等行变换
        for k=i+1:m
            if AA(k,i)~=0    % 不为0的数已找到,则所在的行与之前的行交换
                temp=AA(i,:);
                AA(i,:)=AA(k,:);
                AA(k,:)=temp;
                break
            else            % 找不到不为0的数,则报错
                error('本列元素已全0,不能继续!')
            end
        end
    end
   
    % 把主元素所在列的其他元素经过初等行变换变成0
    for j=i+1:m
        AA(j,i:n)=AA(j,i:n)-(AA(j,i)/AA(i,i))*AA(i,i:n);
    end
end
disp(AA);

% 经过高斯消去法此时已得到一个上三角矩阵AA
% 有 AA*x=b ,其中AA为上三角m*m矩阵,b为m*1列向量
% 则通过向后代入法求根
x=zeros(m,1);    %初始化x值
%  以下为向后代入算法实现
x(m)=AA(m,n)/AA(m,m);
for i=m-1:-1:1
    x(i)=(AA(i,n)-AA(i,i+1:m)*x(i+1:m,1))/AA(i,i);
end 

你可能感兴趣的:(计算方法)