MATLAB求解非齐次线性方程组

根据线性代数中求解方程组的基本知识,首先应判断系数矩阵的秩是否和增广矩阵的秩相等,若不等,则无解;若有解,根据秩和未知量个数的关系,判断是唯一解还是无穷多解;若为无穷多解,其通解为齐次方程组的通解加非齐次方程组的特解。

求非齐次线性方程组Ax=b的特解,可直接使用命令A\b,求解齐次线性方程组的通解,可以使用函数nullrref来实现。

命令含义
B = null(A,'r')求系数矩阵为A的齐次线性方程组Ax=0的基础解系,结果为有理数,B的列向量即基础解系的列向量
Z = null(A)求出Ax=0的基础解系后,将基础解系的向量正交单位化,存储在Z中
C = rref(A)求出矩阵A的行最简形矩阵(reduced row echelon form)
function [S_H, S_P] = solveLS(A,b)
% 输入参数A:系数矩阵
% 输入参数b:Ax=b的常数项列向量b
% S_H:齐次线性方程组的基础解系
% S_P:非齐次线性方程组的特解
if size(A,1) ~= length(b)   %size(A,1)求矩阵的行数
    error('输入数据错误,请重新输入!');
    return;
else
    B = [A,b];  %增广矩阵
    rank_A = rank(A);   %求系数矩阵的秩
    rank_B = rank(B);   %求增广矩阵的秩
    if rank_A ~= rank_B %无解情况
        disp('线性方程组无解!');
        S_H = [];
        S_P = [];
    else if rank_B == size(A,2) %若增广矩阵的秩 = 未知量个数
            %size(A,2)求矩阵的列数,相当于length(A)
            disp('线性方程组有唯一解!');
            S_P = A\b;  %求唯一解
            S_H = [];
        else
            disp('线性方程组有无穷解!');
            S_H = null(A,'r');%求出齐次方程组的基础解系
            S_P = A\b;  %求非齐次方程组的特解
        end
    end
end

使用Matlab求解方程组

x1+2x22x3+3x4=22x1+4x23x3+4x4=55x1+10x28x3+11x4=12

A=[1 2 -2 3; 2 4 -3 4; 5 10 -8 11];
b=[2 5 12]';format rat;
[S_H, S_P]=solveLS(A,b)

运行结果

线性方程组有无穷解!

S_H =

      -2              1       
       1              0       
       0              2       
       0              1       


S_P =

       0       
       7/4     
       0       
      -1/2     

该线性方程组有无穷多解,通解为
x=k12100+k21021+07/401/2,k1,k2R

  • 15
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
MATLAB齐次线性方程组可以使用命令A\b。首先,将系数矩阵A和常数项列向量b合并成增广矩阵B。然后,通过比较系数矩阵A的秩和增广矩阵B的秩来判断是否有。如果两者的秩不相等,则线性方程组。如果两者的秩相等,并且增广矩阵B的秩等于未知量个数,那么线性方程组有唯一。如果增广矩阵B的秩小于未知量个数,则线性方程组有无穷。在这种情况下,可以使用null函数来求解齐次线性方程组的基础系,并使用A\b来求解齐次线性方程组的特。 以下是一个MATLAB函数的例子,用于齐次线性方程组: ``` function [S_H, S_P = solveLS(A,b) if size(A,1) ~= length(b) error('输入数据错误,请重新输入!'); return; else B = [A,b]; rank_A = rank(A); rank_B = rank(B); if rank_A ~= rank_B disp('线性方程组!'); S_H = []; S_P = []; else if rank_B == size(A,2) disp('线性方程组有唯一!'); S_P = A\b; S_H = []; else disp('线性方程组有无穷!'); S_H = null(A,'r'); S_P = A\b; end end end end ``` 在运行该函数后,S_H将保存齐次线性方程组的基础系,S_P将保存齐次线性方程组的特。 请注意,这只是一个例子,具体的决方案可能因实际问题而异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MATLAB求解齐次线性方程组](https://blog.csdn.net/dif90304/article/details/101758762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uri · Boyka

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值