• MATLAB求解非齐次线性方程组


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

    求非齐次线性方程组Ax=b的特解,可直接使用命令A,求解齐次线性方程组的通解,可以使用函数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;  %求唯一解
                S_H = [];
            else
                disp('线性方程组有无穷解!');
                S_H = null(A,'r');%求出齐次方程组的基础解系
                S_P = A;  %求非齐次方程组的特解
            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

  • 相关阅读:
    【使用教程】CMDer,Window下CMD的替代者
    什么是数据仓库?
    【大话存储】学习笔记(八),数据保护
    分布式与集群
    【大话存储】学习笔记(五),以太网
    【廖雪峰】Python
    【大话存储】学习笔记(7章), OSI模型
    KVM计算虚拟化原理,偏基础
    DevOps
    H3C CAS(云管理平台)介绍
  • 原文地址:https://www.cnblogs.com/Genesis2018/p/9079780.html
Copyright © 2020-2023  润新知