高斯消元法的MATLAB实现

       这是一个基于最大主元的高斯消元法的matlab实现,代码中并未考虑对方程组是否有解以及解的唯一性的判断,具体原理可参考高等代数或《MATLAB数学建模》。

​
function s=GuassSolution(A,b)
%获取未知数的个数
n=length(A(:,1));
%寻找每一列的最大主元所在的行数
for k=1:n-1
    [a,t]=max(abs(A(k:n,k)));
    p=t+k-1;
    if a==0
        error('A is a bizzre matrix');%判断矩阵是否奇异
    else
        %将最大主元所在的行换至当前行
        t1=A(k,:);
        A(k,:)=A(p,:);
        A(p,:)=t1;
        t2=b(k);
        b(k)=b(p);
        b(p)=t2;
        A,b
        %消元,化为行阶梯矩阵
        for j=k+1:n
            m=A(j,k)/A(k,k);
            A(j,:)=A(j,:)-m*A(k,:);
            b(j)=b(j)-m*b(k);
        end
    end
    A,b
    %由于输入的b为行矩阵,此处进行转置
    %回代计算
    c=b'
    c(n)=c(n)/A(n,n);
    for i=1:n-1
        q=(c(n-i)-(A(n-i,n-i+1:n)*c(n-i+1:n)))/A(n-i,n-i);
        c(n-i)=q;
    end
    s=c;
end

​

你可能感兴趣的:(线性代数,矩阵,numpy)