上一次写了一篇关于列选主元的高斯消去法,这次进行了修改,直接对增广矩阵进行变换,更简洁一些。不过没有对主元过小时进行处理,因此有缺陷。
%高斯分解
function [X]=gauss(A,b)
%Inpiut A 是系数矩阵,b是右端项
%Output x是解
[N,N]=size(A);
X=zeros(N,1);
B=[A b];
for i=1:N-1
if A(i,i)==0
'A is singular. no unique solution'
break
end
for k=i+1:N;
temp=B(k,i)/B(i,i);
B(k,i+1:N+1)=B(k,i+1:N+1)-temp*B(i,i+1:N+1);
end
end
%回代法
X(N)=B(N,N+1)/B(N,N);
for k=N-1:-1:1
X(k)=(B(k,N+1)-B(k,k+1:N)*X(k+1:N))/B(k,k);
end
%列选主元的高斯消去法
function [X]=gauss_pivot(A,b)
%Inpiut A 是系数矩阵,b是右端项
%Output x是解
[N,N]=size(A);
X=zeros(N,1);
C=zeros(1,N);
B=[A b];
for i=1:N-1
[max1,j]=max(abs(B(i:N,i)));
%交换行
C=B(i,:);%C为A的第k列的值
B(i,:)=B(j+i-1,:); %将A的第K列赋为最大
B(j+i-1,:)=C;
%主元为0的情况
%主元为0的情况
if A(i,i)==0
'A is singular. no unique solution'
break
end
for k=i+1:N;
temp=B(k,i)/B(i,i);
B(k,i+1:N+1)=B(k,i+1:N+1)-temp*B(i,i+1:N+1);
end
end
%回代法
X(N)=B(N,N+1)/B(N,N);
for k=N-1:-1:1
X(k)=(B(k,N+1)-B(k,k+1:N)*X(k+1:N))/B(k,k);
end
%