SVD 奇异值分解

本文介绍了对称矩阵的性质,包括它们的特征值为实数且对应特征向量正交,并展示了如何进行特征值分解。此外,文章详细解释了奇异值分解(SVD)的概念,特别强调了非方阵矩阵的SVD表示及其计算过程,通过实例展示矩阵的奇异值分解步骤。
摘要由CSDN通过智能技术生成

如何让奇异值分解(SVD)变得不“奇异”?-红色石头的个人博客

对称矩阵

 A的转置=A

Hermite矩阵

厄米特矩阵(Hermitian Matrix,又译作“埃尔米特矩阵”或“厄米矩阵”),指的是自共轭矩阵。矩阵中每一个第i行第j列的元素都与第j行第i列的元素的共轭相等。埃尔米特矩阵主对角线上的元素都是实数的,其特征值也是实数。

定义1 矩阵A是Hermite矩阵,若

Hermite矩阵是自共轭矩阵,即矩阵中元素满足 aij=aji¯ 。这要求Hermite矩阵的对角元素必须是实数。

定理1 Hermite矩阵A的特征值都是实数

 定理2 Hermite矩阵A任意两个不同特征值所对应的特征向量正交

 

正交矩阵

酉矩阵

正规矩阵

A∗A=AA∗,A 乘以自己的共轭转置(A∗) 等于 (A∗) 乘以自己,A是方块阵

 

正定矩阵

特征值与特征向量的几何意义:

特征向量与特征值的几何意义_Σίσυφος1900的博客-CSDN博客

特征值分解——EVD

一、普通方阵的矩阵分解(EVD)

如果一个矩阵 A 是方阵,即行列维度相同(mxm),一般来说可以对 A 进行特征分解:

其中,U 的列向量是 A 的特征向量,Λ 是对角矩阵,Λ 对角元素是对应特征向量的特征值。

举个简单的例子,例如方阵 A 为:

特征向量都是单位矩阵,相互之间是线性无关的,但是并不正交。得出的结论是对于任意方阵,不同特征值对应的特征向量必然线性无关,但是不一定正交。

 

>> A 

A =

     2     2
     1     2

>> % 开始计算A矩阵的特征向量 、特征值 、 对角矩阵
>> a=eig(A) % 计算特征值

a =

    3.4142
    0.5858

>> % 计算特征向量和 对角矩阵
>> [U,M]=eig(A)

U =

    0.8165   -0.8165
    0.5774    0.5774


M =

    3.4142         0
         0    0.5858

>> U1=inv(U)

U1 =

    0.6124    0.8660
   -0.6124    0.8660

>> % U1=inv(U) 是计算U矩阵的逆
 
>> Ut=U.'

Ut =

    0.8165    0.5774
   -0.8165    0.5774

>> %  Ut=U.' 是矩阵U的转置

做个验证:

>> 
>> K=U*M*U1

K =

    2.0000    2.0000
    1.0000    2.0000

2.对称矩阵的矩阵分解(EVD)

如果方阵 A 是对称矩阵,例如:

对称矩阵特征分解满足以下公式:

>> A=[2 1,1 1]

A =

     2     1     1     1

>> A=[2 1 ;1 1 ]

A =

     2     1
     1     1

>> r=eig(A)

r =

    0.3820
    2.6180

>> [X,M]=eig(A)

X =

    0.5257   -0.8507
   -0.8507   -0.5257


M =

    0.3820         0
         0    2.6180

>> Xt=X.'  % 计算X矩阵的装置

Xt =

    0.5257   -0.8507
   -0.8507   -0.5257

>> S=X*M*Ut
函数或变量 'Ut' 无法识别。
 
是不是想输入:
>> S=X*M*Xt

S =

    2.0000    1.0000
    1.0000    1.0000

注意,我们发现对阵矩阵的分解和非对称矩阵的分解除了公式不同之外,特征向量也有不同的特性。对称矩阵的不同特征值对应的特征向量不仅线性无关,而且是相互正交的。什么是正交呢?就是特征向量内积为零。验证如下:

0.85065081 * -0.52573111 + 0.52573111 * 0.85065081 =0 

重点来了,对称矩阵 A 经过矩阵分解之后,可以写成以下形式:

对上式进行验证:

这种分解形式非常有用,待会红色石头即将介绍。

 二 、奇异值分解(SVD)

假设矩阵 A 的维度为 mxn,虽然 A 不是方阵,但是下面的矩阵却是方阵,且维度分别为 mxm、nxn

因此,我们就可以分别对上面的方阵进行分解:

其中,Λ1 和 Λ2 是对角矩阵,且对角线上非零元素均相同,即两个方阵具有相同的非零特征值,特征值令为 σ1, σ2, … , σk。值得注意的是,k<=m 且 k<=n。

根据 σ1, σ2, … , σk 就可以得到矩阵 A 的特征值为:

接下来,我们就能够得到奇异值分解的公式:

其中,P 称为左奇异矩阵,维度是 mxm,Q 称为右奇异矩阵,维度是 nxn。Λ 并不是方阵,其维度为 mxn,Λ 对角线上的非零元素就是 A 的特征值 λ1, λ2, … , λk。图形化表示奇异值分解如下图所示:

 

举个简单的例子来说明,令 A 为 3×2 的矩阵:

则有:

计算得到特征向量 P 和对应的特征值 σ 为:

>> A =[1 2;1 1 ;0 0]

A =

     1     2
     1     1
     0     0

>> At=A.'

At =

     1     1     0
     2     1     0

>> K=A*At  % K =A*At

K =

     5     3     0
     3     2     0
     0     0     0

>> R1=eig(K)

R1 =

         0
    0.1459
    6.8541

>> [X1,M1]=eig(A)
错误使用 eig
输入矩阵必须为方阵。
 
>> [X1,M1]=eig(K)

X1 =

         0    0.5257   -0.8507
         0   -0.8507   -0.5257
    1.0000         0         0


M1 =

         0         0         0
         0    0.1459         0
         0         0    6.8541

>> 

然后,有:

 因为第三个特征值是0,所以

计算得到特征向量 Q 和对应的特征值 σ 为:

>> K2=At*A

K2 =

     2     3
     3     5

>> [X2,M2]=eig(K2)

X2 =

   -0.8507    0.5257
    0.5257    0.8507


M2 =

    0.1459         0
         0    6.8541

>> 

矩阵A的转置和A一样

则我们看可以得到 A 的特征值为:

最后,整合矩阵相乘结果,满足奇异值分解公式。

奇异值分解可以写成以下和的形式:

其中,p1 和 q1 分别为左奇异矩阵和右奇异矩阵的特征向量。

案例1:

>> A=[0 1;1 1;1 0]

A =

     0     1
     1     1
     1     0

>> At=A.'

At =

     0     1     1
     1     1     0

>> a=eig(A)
错误使用 eig
输入矩阵必须为方阵。
 
>> K1=At*A

K1 =

     2     1
     1     2

>> K2A*At
函数或变量 'K2A' 无法识别。
 
>> K2=A*At

K2 =

     1     1     0
     1     2     1
     0     1     1

>> % 以上分别结算出了矩阵的乘积
>> e1=eig(K1)

e1 =

     1
     3

>> e2=eig(K2)

e2 =

    0.0000
    1.0000
    3.0000

>> [X1`,M1]=eig(K1)
 [X1`,M1]=eig(K1)
    ↑
错误: 文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。
 
>> [X1,M1]=eig(K1)

X1 =

   -0.7071    0.7071
    0.7071    0.7071


M1 =

     1     0
     0     3

>> [X2,M2]=eig(K2)

X2 =

    0.5774   -0.7071    0.4082
   -0.5774   -0.0000    0.8165
    0.5774    0.7071    0.4082


M2 =

    0.0000         0         0
         0    1.0000         0
         0         0    3.0000

奇异值分解(SVD)的定义、证明、求法(矩阵分解——3. 奇异值分解(SVD)) - 知乎

 案例2

 

A =

     1     0     1
     0     1     1
     0     0     0

>> det(A)

ans =

     0

>> eig(A)

ans =

     1
     1
     0

>> svd(A)

ans =

    1.7321
    1.0000
         0

>> [s,v,d]=svd(A)

s =

    0.7071   -0.7071         0
    0.7071    0.7071         0
         0         0    1.0000


v =

    1.7321         0         0
         0    1.0000         0
         0         0         0


d =

    0.4082   -0.7071    0.5774
    0.4082    0.7071    0.5774
    0.8165    0.0000   -0.5774

>> s*v*d

ans =

    0.2113   -1.3660    0.2989
    0.7887   -0.3660    1.1154
         0         0         0

>> s*v*d'

ans =

    1.0000         0    1.0000
    0.0000    1.0000    1.0000
         0         0         0

>> 

 

矩阵分解(Matrix Decomposition) - 知乎

理解: 

 Chapter 5 奇异值分解 {SVD decomposition} | 数值分析笔记

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值