MATLAB 矩阵分解
矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个
矩阵的乘积。常见的矩阵分解有 LU 分解(三角分解)、QR 分解(正
交变换)、Cholesky 分解,以及 Schur 分解、Hessenberg 分解、奇
异分解等。
(1) LU 分解(三角分解)
矩阵的 LU 分解就是将一个矩阵表示为一个交换下三角矩阵和一个上
三角矩阵的乘积形式。线性代数中已经证明,只要方阵 A 是非奇异(即
行列式不等于 0)的,LU 分解总是可以进行的。
MATLAB 提供的 lu 函数用于对矩阵进行 LU 分解,其调用格式为:
[L,U]=lu(X):产生一个上三角阵 U 和一个变换形式的下三角阵 L(行
交换),使之满足 X=LU。注意,这里的矩阵 X 必须是方阵。
[L,U,P]=lu(X):产生一个上三角阵 U 和一个下三角阵 L 以及一个置
换矩阵 P,使之满足 PX=LU。当然矩阵 X 同样必须是方阵。
(设 P 是一个 m×n 的 (0,1) 矩阵,如 m≤n 且 P*P′=E,则称 P 为一个
m×n 的置换矩阵。)
实现 LU 分解后,线性方程组 Ax=b 的解 x=U(Lb)或 x=U(LPb),这样可
以大大提高运算速度。
例 7-2 用 LU 分解求解例 7-1 中的线性方程组。
命令如下:
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
[L,U]=lu(A);
x=U(Lb)
或采用 LU 分解的第 2 种格式,命令如下:
[L,U ,P]=lu(A);
x=U(LP*b)
(2) QR 分解(正交变换)
对矩阵 X 进行 QR 分解,就是把 X 分解为一个正交矩阵 Q 和一个上三
角矩阵 R 的乘积形式。QR 分解只能对方阵进行。MATLAB 的函数 qr
可用于对矩阵进行 QR 分解,其调用格式为:
[Q,R]=qr(X):产生一个一个正交矩阵 Q 和一个上三角矩阵 R,使之
满足 X=QR。
[Q,R,E]=qr(X):产生一个一个正交矩阵 Q、一个上三角矩阵 R 以及
一个置换矩阵 E,使之满足 XE=QR。
实现 QR 分解后,线性方程组 Ax=b 的解 x=R(Qb)或 x=E(R(Qb))。
例 7-3 用 QR 分解求解例 7-1 中的线性方程组。
命令如下:
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
[Q,R]=qr(A);
x=R(Qb)
或采用 QR 分解的第 2 种格式,命令如下:
[Q,R,E]=qr(A);
x=E*(R(Qb))
(3) Cholesky 分解
如果矩阵 X 是对称正定的,则 Cholesky 分解将矩阵 X 分解成一个下
三角矩阵和上三角矩阵的乘积。设上三角矩阵为 R,则下三角矩阵为
其转置,即 X=R'R。MATLAB 函数 chol(X)用于对矩阵 X 进行 Cholesky
分解,其调用格式为:
R=chol(X):产生一个上三角阵 R,使 R'R=X。若 X 为非对称正定,则
输出一个出错信息。
[R,p]=chol(X):这个命令格式将不输出出错信息。当 X 为对称正定
的,则 p=0,R 与上述格式得到的结果相同;否则 p 为一个正整数。
如果 X 为满秩矩阵,则 R 为一个阶数为 q=p-1 的上三角阵,且满足
R'R=X(1:q,1:q)。
实现 Cholesky 分解后,线性方程组 Ax=b 变成 R‘Rx=b,所以
x=R(R’b)。
例 7-4 用 Cholesky 分解求解例 7-1 中的线性方程组。
命令如下:
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
R=chol(A)
??? Error using ==> chol
Matrix must be positive definite
命令执行时,出现错误信息,说明 A 为非正定矩阵。
(4) 任意方阵的 Schur 分解
任意一个 n 阶方阵 X 可以分解为 X=URU',其中 U 为酉矩阵,R 为上三
角 schur 矩阵且其主对角线上的元素为 X 的特征值。
酉矩阵的相关性质:
设有A,B矩阵
(1)若 A 是酉矩阵,则 A 的逆矩阵也是酉矩阵
(2)若 A,B 是酉矩阵,则 AB 也是酉矩阵
(3)若 A 是酉矩阵,则|detA|=1
(4)A 是酉矩阵的充分必要条件是,它的 n 个列向量是两两正交的单
位向量
[U,R]=schur(X)
(5) 任意方阵的 Hessenberg 分解
任意一个 n 阶方阵 X 可以分解为 X=PHP', 其中 P 为酉矩阵, H 的第一
子对角线下的元素均为 0,即 H 为 Hessenberg 矩阵。
[P,H]=hess(X)
(6) 任意方阵的特征值分解 EVD
任意一个 n 阶方阵 X 可以分解为 XV=VD,其中 D 为 X 的特征值对角阵,
V 为 X 的特征向量矩阵。
[V,D]=eig(X)
[V,D]=eig(X,Y)计算广义特征值矩阵 D 和广义特征值向量矩阵 V,使
得 XV=YVD。
(7)任意矩阵的奇异值分解 SVD
任意一个 m*n 维的矩阵 X 可以分解为 X=USV',U,V 均为酉矩阵,S
为 m*n 维的对角矩阵,其对角线元素为 X 的从大到小排序的非负奇异
值。U,V 为正交阵,S 为对角阵,svd(A)恰好返回 S 的对角元素,而
且就是 A 的奇异值(定义为:矩阵 A’*A 的特征值的算数平方根)
[U,S,V]=svd(X)
(8) 任意矩阵的几何均值分解 GMD
任意矩阵 m*n 维的矩阵 X 可以分解为 X=QRP', Q,P 均为酉矩阵,R
为 k*k 维的实正线上三角矩阵,其主对角线元素均等于 X 的所有 K
个正奇异值的几何均值,k=rank(X)。
(PS: 一个 n × n 的实对称矩阵 M 是正定的当且仅当对于所有的非
零实系数向量 z,都有 zTMz > 0。其中 zT 表示 z 的转置。
对于复数的情况,定义则为:一个 n × n 的埃尔米特矩阵 M 是正定
的当且仅当对于每个非零的复向量 z,都有 z*Mz > 0。其中 z* 表示
z 的共轭转置。由于 M 是埃尔米特矩阵,经计算可知,对于任意的
复向量 z,z*Mz 必然是实数,从而可以与 0 比较大小。因此这个定义
是自洽的。正定方阵 M 的所有的特征值 λi 都是正的。)