上一次寫了一篇關於列選主元的高斯消去法,這次進行了修改,直接對增廣矩陣進行變換,更簡潔一些。不過沒有對主元過小時進行處理,因此有缺陷。
%高斯分解
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
%