SVD及c++实现

本文详细介绍了奇异值分解(SVD)的概念、求解过程,并通过一个例子展示了如何使用Eigen库进行SVD的C++实现。同时,文章还探讨了特征值分解(EVD)与SVD的关系,以及SVD在数据压缩中的应用。
摘要由CSDN通过智能技术生成

目录

前言

一 .特征值分解(EVD-eigen value decomposition)

定义

回顾

二  .奇异值分解(SVD-singular value decomposition)

定义

求解

三 例子和应用

e.g.

eigen代码实现

四 压缩比率 compress ration

拓展:PCA


前言

EVD分解要求 被分解矩阵  是实对称矩阵

SVD对被分解矩阵没有这个要求。

相当于一个从特殊到一般的过程。

 

一 .特征值分解(EVD-eigen value decomposition)

定义

在理角奇异值分解之前,需要先回顾一下特征值分解,如果矩阵A  是一个 m×m 的实对称矩阵(即\boldsymbol{A=A^T} ),那么它可以被分解成如下的形式

                                                          \boldsymbol{A=P\Lambda P^T} =\left( \begin{matrix} \lambda_1 & \cdots &\cdots &\cdots &\\ \cdots &\lambda_2 & \cdots &\cdots \\ \cdots &\cdots& \ddots &\cdots \\ \cdots & \cdots &\cdots & \lambda_m \end{matrix} \right ) 

其中P是 标准正交 阵 (orthogonal) ,即$PP^T=I(E)$, \lambda _i 是特征值。

回顾

线性代数( liner algebra) 中,定义 如果  \boldsymbol{Ax}=\lambda \boldsymbol{ x } ,  那么\lambda就是特征值eigenvalue,\boldsymbol{x}是特征向量eigenvector。

其中  A 是n*n的实对称阵,\lambda 是数,\boldsymbol{x} 是n维列向量。

           e.g.                                \boldsymbol{Ax}=\begin{bmatrix} 0& 0 & 1\\ 0 &1 &0 \\ 1 &0 & 0 \end{bmatrix} \begin{bmatrix} -1\\ 0\\ 1 \end{bmatrix}= \begin{bmatrix} 1\\ 0\\ -1 \end{bmatrix}= (-1)\begin{bmatrix} -1\\ 0\\ 1 \end{bmatrix}= \lambda \boldsymbol{x}

then, 定义变形为    \left ( \lambda \boldsymbol{E-A} \right )\boldsymbol{x}=\boldsymbol{0}  ,  求此等式有非零解(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值