根據線性代數中求解方程組的基本知識,首先應判斷系數矩陣的秩是否和增廣矩陣的秩相等,若不等,則無解;若有解,根據秩和未知量個數的關系,判斷是唯一解還是無窮多解;若為無窮多解,其通解為齊次方程組的通解加非齊次方程組的特解。
求非齊次線性方程組Ax=b
的特解,可直接使用命令A\b
,求解齊次線性方程組的通解,可以使用函數null
或rref
來實現。
命令 | 含義 |
---|---|
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求解方程組
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
該線性方程組有無窮多解,通解為