1. 理论
1.1 矩阵里的几个概念
- 矩阵:
矩阵是线性空间里的变换的描述。
在教材里,一般这么说:在一个线性空间V里的一个线性变换T,当选定一组基之后,就可以表示为矩阵。
1.1.1 变换和线性变换
变换
变换是从空间的一个点(矢量)跃迁(旋转)到另一个点(矢量)。
线性变换
在已知变换的概念的基础上,线性变换的定义是很简单的:
设有一种变换T,使得对于线性空间V中间任何两个不相同的对象x和y,以及任意实数a和b,有:
T(ax+by)=aT(x)+bT(y) T ( a x + b y ) = a T ( x ) + b T ( y )
那么就称T为线性变换。【注】:线性的概念
直观感觉:
就是从一个线性空间V的某一个点跃迁到另一个线性空间W的另一个点的运动。
【注】:惯导系统里,姿态矩阵是现实中最常用、最有用、最简单、最特殊的一种变换。
姿态矩阵是 3次基本旋转对应的变换矩阵的乘积。
旋转过程存在于真实世界中,且逆向旋转可以回到原始姿态,且飞机旋转前后不变形。
用数学语言来说,变换是在同一个线性空间之内进行的,且可逆,且内积不变。
那么姿态矩阵有的三个性质就是,方阵、非奇异(可逆)、正交矩阵。
1.1.2 描述
矩阵是线性空间里的变换的描述。
比如有一头猪,你打算给它拍照片,只要你给照相机选定了一个镜头位置,那么就可以给这头猪拍一张照片A。A可以看成是这头猪的一个描述,但只是一个片面的的描述。
因为换一个镜头位置给这头猪拍照,能得到一张不同的照片B,B也是这头猪的另一个片面的描述。
所有这样照出来的照片都是这同一头猪的描述,但是又都不是这头猪本身。
所有这些照片之间有一个共同的特点,它们描述了同一头猪;
所有这一系列矩阵之间有一个共同的特点,它们描述了同一个变换;
这些矩阵互为相似矩阵。
照片虽然描述同一头猪,但有美丑之分;
这些矩阵虽然描述同一个变换,但其自身拥有的性质,揭示变换本质的能力,有优劣之分。
这是我们不遗余力进行相似变换的原因。
- 相似变换
定义:若 B=P−1AP B = P − 1 A P (等价地 A=PBP−1 A = P B P − 1 ),则,称 A A 与 B B 相似。
1.2 特征值、特征向量、特征值分解
1.2.1 特征值的定义
对于矩阵 A A ,若对于 λ0 λ 0 ,存在非零向量 x x ,使下式成立
Ax=λ0x A x = λ 0 x
则,称
λ0 λ 0 为特征值,
x x 为特征向量。
直观感觉:
矩阵是线性空间里变换的描述,矩阵
A A 和向量
x x 相乘,本质上是对
x x 做一次旋转或拉伸。而常值
λ0 λ 0 和向量
x x 相乘,即对
x x 做一次拉伸。
所以,当我们求
特征值与
特征向量的时候,就是为了求矩阵
A A 能使
哪些向量(特征向量)只发生拉伸,而拉伸的程度,自然就是
特征值
λ0 λ 0 了。
如果选择矩阵 A A 的所有特征向量,作为 A A 的一组基,可以想象它们围成的单位图形(立方体、超立方体),只会有伸缩,不会发生“形变”。
1.2.2 特征值分解
如果把这组由特征向量组成的基,进行单位正交化(Schmidt正交化),组成正交矩阵 Q Q (复数域里叫酉矩阵),则, A A 有如下等式成立
A=QΣQ−1 A = Q Σ Q − 1
Σ Σ 是一个由特征值组成的对角阵。
这就是特征值分解。
【注】:可以看出,特征值分解 中, A A 和 Σ Σ 满足矩阵相似的条件。即,它们描述了同一个变换。而矩阵 Σ Σ 是 最能揭示这个变换本质的(提取特征的)、最简洁的 那个描述。
【注2】:特征值分解的局限就是,要求必须是方阵。
1.3 奇异值分解(SVD)
特征值分解是一个提取矩阵特征很不错的方法。
但是,特征值分解最大的问题是只能针对方阵,即, n∗n n ∗ n 的矩阵。而在实际应用场景中,大部分不是方阵。此时,可以使用SVD.
1.3.1 定义
设 A A 是一个 m∗n m ∗ n 阶的矩阵,若存在一个分解
A=UDVT=U[Σ0(m−r)×r0r×(n−r)0(m−r)×(n−r)]VT A = U D V T = U [ Σ 0 r × ( n − r ) 0 ( m − r ) × r 0 ( m − r ) × ( n − r ) ] V T
就叫做
A A 的奇异值分解。
其中,
U U 是
m∗m m ∗ m 阶酉矩阵;
VT V T 是
V V 的转置,是
n∗n n ∗ n 阶的酉矩阵;
Σ=diag{σ1,σ2,⋯,σr} Σ = d i a g { σ 1 , σ 2 , ⋯ , σ r } ,而
σ1,σ2,⋯,σr σ 1 , σ 2 , ⋯ , σ r 是
A A 的奇异值,且按照从大到小的顺序排列。
【注】:求解方法见P193
上述SVD过程示意图:
经过这样一番分解之后的结果是,(1)得到了关于奇异值的一些信息;(2)可以使用
三个矩阵和两次矩阵乘法来表示矩阵
A A ;(但这种表示不仅存储规模大,而且运算复杂度高,没有优势)
1.3.2 SVD的应用
但是,奇异值有个很好的性质:在大部分情况下,奇异值从大到小排序之后,会发现其减小的速度特别快。很多时候,前10%甚至前1%的奇异值的和就占了全部奇异值和的99%以上。(特征值越大,对矢量的伸展越大,奇异值类似;相反,奇异值越小,对矢量变换的影响越小)
所以,一个矩阵可以由前面 r r 个奇异值来近似( r≤n r ≤ n ):
Am×n≈Um×rΣr×rVTr×n A m × n ≈ U m × r Σ r × r V r × n T
这样SVD就具有了实用性。
选取的
r r 越接近
n n ,右边三个小矩阵的乘积与原矩阵
A A 的相似度就越高,但同时,存储和计算的成本就越高;因此可以根据实际需要选取
r r 的大小。
因此,
降维和压缩是SVD两个天然的应用。
2. Matlab编程实现
- 特征值分解:
d = eig(A) %求矩阵A的特征值d,以向量形式存放d。
- 奇异值分解:
s = svd (A) %返回矩阵X的奇异值向量
[U,S,V] = svd (A) %返回一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足 A=USVT A = U S V T 。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。
【1】几种常见的矩阵分解:https://blog.csdn.net/bitcarmanlee/article/details/52662518
【2】SVD分解:https://blog.csdn.net/bitcarmanlee/article/details/52068118
【3】矩阵是线性空间里的变换的描述:https://blog.csdn.net/bitcarmanlee/article/details/52067985 理解“变换”这个概念。