矩阵分解
矩阵分解
矩阵分解是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、QR分解、Jordan分解和SVD(奇异值)分解等。
三角分解法是将原正方矩阵分解成一个上三角形矩阵或是排列 的上三角形矩阵和一个 下三角形矩阵,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求逆矩阵,和求解联立方程组。不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同 的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。
一、程序
可采用如下命令:
MATLAB内置lu分解法, 其语法为[L,U]=lu(A)。
[L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足A=LU。注意,这里的矩阵A必须是方阵。
[L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PA=LU。当然矩阵A同样必须是方阵。
(设P 是一个 m×n 的(0,1) 矩阵,如 m≤n且P*P′=E,则称 P为一个m×n的置换矩阵。)
实现LU分解后,线性方程组Ax=b的解x=U(Lb)或x=U(LPb)。
也可采用如下程序:
function x=DecomLU(A,b)
flag=isexist(A,b);
if flag==0
disp(‘该方程组无解!’);
x=[];
return;
else
r=rank(A);
[m,n]=size(A);
[L,U,P]=lu(A);
y(1)=b(1);
if m>1
for i=2:m
y(i)=b(i)-L(i,1:i-1)*y(1:i-1)’;
end
end
y=y’;
x0®=y®/U(r,r);
if r>1
for i=r-1: -1:1
x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)’)/U(i,i);
end
end
x0=x0’;
if flag ==1
x=x0;
return;
else
format rat;
Z=null(A,‘r’);
[mZ,nZ]=size(Z);
x0(r+1:n)=0;
for i=1:nZ
t=sym(char([107 48+i]));
k(i)=t;
end
x=x0;
for i=1:nZ
x=x+k(i)*Z(:,i);
end
end