高斯列主元消去法解线性方程组的MATLAB实现
//函数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
                本文作者:Lyvnee     
                文章标题: 高斯列主元消去法解线性方程组的MATLAB实现
本文地址:https://lyvnee.com/post-23.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
        本文地址:https://lyvnee.com/post-23.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

 
                    