matlab列主元消去法

%功能是列主元Gauss消去法解方程组
%A为数入矩阵系数,b为方程组右端系数
%方程组的解保存在解向量x中
A=input('请输入方程组系数矩阵A:');
b=input('请输入方程组系数b:');
b=b';
[m,n]=size(A);  %A的行数和列数(A的大小)
if m~=n
    error('矩阵A的行数和列数必须相同!');
    return;
end
if m~=size(b)
    error('b的大小必须和A的行数和列数相同');
    return;
end
if rank(A)~=rank([A,b])
    error('A的矩阵的秩和增广矩阵的秩不相同,方程不存在唯一的解');
    return;
end
c=n+1;
A(:,c)=b;   %将A变换成线性方程组的增广矩阵
x=zeros(length(b),1);
C=zeros(1,c);
%选取主元并将矩阵化为阶梯型矩阵
for i=1:n-1
    a=abs(A(i,i));  %令a为第i次消元时主元元素的绝对值
    [u,j]=max(abs(A(i:m,i)));    %选出第i列中最大的元素,将最大值返回给u,最大值所在的行标返回给j
    j1=j+i-1;
    if j1~=i
        C=A(i,:);
        A(i,:)=A(j1,:);
        A(j1,:)=C;
    end
    %消元过程
    for k=i+1:n
        A(k,:)=A(k,:)-(A(k,i)/A(i,i))*A(i,:);
    end
end
%回代求解过程
x(n)=A(n,c)/A(n,n);
for m=n-1:-1:1
    x(m)=(A(m,c)-A(m,m+1:n)*x(m+1:n))/A(m,m);
end
%显示计算结果
disp('选主元并初等变换后的系数矩阵A=');
disp(A(:,1:n));
disp('初等变换后的右端向量b=');
disp(A(:,c));
disp('解向量x=');
disp(x);
disp('A的行列式的值为:');
disp(det(A(:,1:n)));


 

你可能感兴趣的:(matlab列主元消去法)