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