您的当前位置:首页正文

高斯消去法-全主元

来源:华拓网


%采用高斯列主元法求解方程组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);

因篇幅问题不能全部显示,请点此查看更多更全内容