高斯消去法-全主元
%采用高斯列主元法求解方程组Ax=b,b要输入行向量
function x=gauss_quan(A,b)
b=b';
%构造增广矩阵
n=length(b);
p=1:n;%用来保存列表
B=A;
B(1:n,n+1)=b;
%现在B已经是增广矩阵
for k=1:n-1
C=A(k:n,k:n);
[x,y]=find(C==max(C(:)));%x,y存储C中的最大值的坐标
ma=max(C(:));%ma中存储C中最大值
if(ma==0)
break;
end
X=x+k-1;
Y=y+k-1;
%X,Y才是真实坐标
if (X~=k & Y==k)
ck=B(k,:);B(k,:)=B(X,:);B(X,:)=ck;%只进行行交换
end
if (X==k & Y~=k)
ck=B(:,k);B(:,k)=B(:,X);B(:,X)=ck;%只进行行交换
z=p(k);p(k)=p(X);p(X)=z;%列标交换
end
if (X~=k & Y~=k)
ck=B(k,:);B(k,:)=B(X,:);B(X,:)=ck;
ck=B(:,k);B(:,k)=B(:,X);B(:,X)=ck;
z=p(k);p(k)=p(X);p(X)=z;%行列同时交换
end
B(k+1:n,k)=B(k+1:n,k)/B(k,k);%求消元因子
B(k+1:n,k+1:n+1)=B(k+1:n,k+1:n+1)-B(k+1:n,k)*B(k,k+1:n+1);%消元
B(k+1:n,k)=0;%消元因子处赋0
end
%上面选主元和消元,下面进行回代
if(B(n,n)==0)
return;
end
x(n)=B(n,n+1)/B(n,n);
for I=n-1:-1:1
x(I)=(B(I,n+1)-B(I,I+1:n)*x(I+1:n)')/B(I,I);
end
R=p;
R(2,:)=x;
R=R';
R=sortrows(R);%按第一列对行向量进行重排
x=R(:,2);
因篇幅问题不能全部显示,请点此查看更多更全内容