matlab列主元消去法

MATLAB 实现列主元消去法


基于自己对列主元Gauss消元法算法的理解

写了一段matlab语言的列主元Gauss消去法

列主元消去法是对Gauss消去法的优化版本

由于计算机存在舍入误差

所以主元元素在做分母时不能太小

否则在有些求解的时候会引起较大的误差

因此需要将最大的主元选出

将代码存为.m脚本

%功能是列主元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)));

欢迎大家批评指正交流~

  • 39
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值