计算方法列主元素消去法求线性方程组的解

本文介绍了一种使用列主元消去法解决线性方程组的方法,并提供了详细的MATLAB代码实现过程。该方法适用于求解唯一解的满秩方阵,通过列主元的选择提高数值稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值