这是一个基于最大主元的高斯消元法的matlab实现,代码中并未考虑对方程组是否有解以及解的唯一性的判断,具体原理可参考高等代数或《MATLAB数学建模》。
function s=GuassSolution(A,b)
%获取未知数的个数
n=length(A(:,1));
%寻找每一列的最大主元所在的行数
for k=1:n-1
[a,t]=max(abs(A(k:n,k)));
p=t+k-1;
if a==0
error('A is a bizzre matrix');%判断矩阵是否奇异
else
%将最大主元所在的行换至当前行
t1=A(k,:);
A(k,:)=A(p,:);
A(p,:)=t1;
t2=b(k);
b(k)=b(p);
b(p)=t2;
A,b
%消元,化为行阶梯矩阵
for j=k+1:n
m=A(j,k)/A(k,k);
A(j,:)=A(j,:)-m*A(k,:);
b(j)=b(j)-m*b(k);
end
end
A,b
%由于输入的b为行矩阵,此处进行转置
%回代计算
c=b'
c(n)=c(n)/A(n,n);
for i=1:n-1
q=(c(n-i)-(A(n-i,n-i+1:n)*c(n-i+1:n)))/A(n-i,n-i);
c(n-i)=q;
end
s=c;
end