function x=leizhuyuansu(A,b)
% 用列主元素消去法求线性方程组的解
% A为系数矩阵(要求解惟一,则必须为满秩方阵 n*n),b为右值 n*1
% x为所求的根 n*1
% 作者:野渡无人
% 最后修改日期:2008.3.27
% 如:
% A=[2 4 -2 -2;1 2 4 -3;-3 -3 8 -2;-1 1 6 -3],b=[-4 5 7 7]'
% 结果为:
% x=leizhuyuansu(A,b)
% AA =
%
% 2 4 -2 -2 -4
% 1 2 4 -3 5
% -3 -3 8 -2 7
% -1 1 6 -3 7
%
%
% AA =
%
% -3.0000 -3.0000 8.0000 -2.0000 7.0000
% 0 2.0000 3.3333 -3.3333 0.6667
% 0 0 5.0000 -2.0000 7.0000
% 0 0 0 1.0000 4.0000
% x =
%
% 1.0000
% 2.0000
% 3.0000
% 4.0000
[m,n]=size(A);
if m~=n
error('请输入方阵!');
end
rankA=rank(A);
if rankA~=m
error('输入的矩阵不是满秩矩阵,请重新输入!');
end
AA=[A,b]
n=n+1;
for i=1:m-1
% 找出列主元素值,以及相应的下标号flag
max=abs(AA(i,i));
flag=i;
for j=i+1:m
if max < abs(AA(j,i))
flag=j;
max=abs(AA(j,i));
end
end
%如果列主元素为0,则报错
if max==0
error('本列元素已全0,不能继续!');
end
% 交换第i行与第flag行的元素
if flag~=i
temp=AA(i,:);
AA(i,:)=AA(flag,:);
AA(flag,:)=temp;
end
% 以下的算法类同Guass-Jordan 法,注释不再重述
for k=i+1:m
AA(k,i:n)=AA(k,i:n)-(AA(k,i)/AA(i,i))*AA(i,i:n);
end
end
AA
% 求根
x=zeros(m,1);
x(m)=AA(m,n)/AA(m,m);
for i=m-1:-1:1
x(i)=(AA(i,n)-AA(i,i+1:m)*x(i+1:m,1))/AA(i,i);
end
% A=[11 -3 -2;-23 11 1;1 -2 2]% b=[3 0 -1]'% x=leizhuyuansu(A,b)% 结果:% AA =%% 11 -3 -2 3% -23 11 1 0% 1 -2 2 -1%%% AA =%% -23.0000 11.0000 1.0000 0% 0 2.2609 -1.5217 3.0000% 0 0 1.0192 1.0192%%% x =%% 1.0000% 2.0000% 1.0000