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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM