//函数gaussMain程序MATLAB代码:

function [x,detA]= gaussMain(A,b) 
%gaussMain()本函数采用高斯列主元法求解方程组Ax=b,其中:
%A为所求方程组系数矩阵,并且是非奇异的;
%b为所求方程组常数项矩阵,注意:按列向量输入;
%detA为所求方程组系数矩阵的行列式。
%例如:
%在命令窗口中输入
%A=[12,-3,3;-18,3,-1;1,1,1];
%b=[15;-15;6];
%[x,detA]=gaussMain(A,b)
%则输出结果为:
%x =
%
%     -0.4904
%     -0.0510
%      0.3675
%
%detA =
%
%     11.8660
%

n=length(b);
detA=det(A);
d=0;
x=zeros(n,1);
c=zeros(1,n);

if abs(det(A))<=eps
    error('系数矩阵是奇异的');%所求方程组系数矩阵必须是是非奇异的!
    return;
end

for i=1:n-1
    max=abs(A(i,i));
    m=i;
    %按列选主元
    for j=i+1:n
        if max<abs(A(j,i))
            max=abs(A(j,i)); 
            m=j;
        end
    end
    %换行
    if m~=i
        for k=i:n
            c(k)=A(i,k);
            A(i,k)=A(m,k);   
            A(m,k)=c(k);
        end
        d=b(i);b(i)=b(m);b(m)=d;
    end
    %消元
    for k=i+1:n
        for j=i+1:n
            A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i); 
        end
        b(k)=b(k)-b(i)*A(k,i)/A(i,i);
        A(k,i)=0;
    end
end
%回代求解
x(n)=b(n)/A(n,n);
for i=n-1:(-1):1
    sum=0;
    for j=i+1:n
        sum=sum+A(i,j)*x(j);
    end
    x(i)=(b(i)-sum)/A(i,i);
end
end