数值线性代数:奇异值分解SVD

news2024/11/16 6:51:41

本文记录计算矩阵奇异值分解SVD的原理与流程。

注1:限于研究水平,分析难免不当,欢迎批评指正。

零、预修

0.1 矩阵的奇异值

A\in \mathbb{R}^{m\times n}列满秩矩阵,若\boldsymbol{A}^{T}\boldsymbol{A}的特征值为\lambda_{1}\geq \lambda_{2}\geq \cdots \lambda_{r}>0,则称\sigma_{i}=\sqrt{\lambda_{i}}为矩阵\boldsymbol{A}的奇异值。

0.2 SVD(分解)定理

\boldsymbol{A}\in \mathbb{R}^{m\times n},则存在正交矩阵\boldsymbol{U}\in \mathbb{R}^{m\times m}\boldsymbol{V}\in \mathbb{R}^{n\times n},使得

\boldsymbol{U}^{T}\boldsymbol{A}\boldsymbol{V}=\begin{pmatrix} \sum_{r} & 0\\ 0& 0 \end{pmatrix}

其中,\sum_{r}=diag\left ( \sigma_{1},\sigma_{2},\cdots ,\sigma_{r} \right )\sigma_{1}\geq \sigma_{2}\geq \cdots \sigma_{r}>0\sigma_{i}即为矩阵\boldsymbol{A}的奇异值。

考虑下述两种情形:

  • 情形1:\tilde{\boldsymbol{A}}=\boldsymbol{A}^{T}\boldsymbol{A}

\left (\boldsymbol{U}^{T}\boldsymbol{A}\boldsymbol{V} \right )^{T}\left ( \boldsymbol{U}^{T}\boldsymbol{A}\boldsymbol{V} \right )=\boldsymbol{V}^{T}\left (\boldsymbol{A}^{T}\boldsymbol{A} \right )\boldsymbol{V}=\begin{pmatrix} \sum_{r}^{2} &\boldsymbol{0} \\ \boldsymbol{0}& \boldsymbol{0} \end{pmatrix}

其中,\sum_{r}^{2}=diag\left ( \sigma_{1}^{2},\sigma_{2}^{2},\cdots ,\sigma_{r}^{2} \right )=diag\left ( \lambda_{1},\lambda_{2},\cdots ,\lambda_{r} \right )

由此可以看出,\tilde{\boldsymbol{A}}=\boldsymbol{A}^{T}\boldsymbol{A}\in \mathbb{R}^{n\times n},通过计算矩阵\boldsymbol{A}的奇异值\sigma_{i},便可矩阵\tilde{\boldsymbol{A}}的特征值\lambda_{i}=\sigma_{i}^{2},而矩阵\boldsymbol{V}即为矩阵\tilde{\boldsymbol{A}}的特征向量

  • 情形2:\boldsymbol{A}^{T}=\boldsymbol{A}, m=n

\boldsymbol{A}\boldsymbol{x}=\sigma \mathbf{x},则\boldsymbol{A}^{T}\boldsymbol{A}\boldsymbol{x}=\sigma \boldsymbol{A}^{T} \boldsymbol{x}=\sigma \boldsymbol{A}\boldsymbol{x}=\sigma ^{2}\boldsymbol{x},也就是说,\sigma^{2}\boldsymbol{A}^{T}\boldsymbol{A}的特征值,\boldsymbol{x}也是\boldsymbol{A}^{T}\boldsymbol{A}的特征向量。同时考虑到实对称矩阵\boldsymbol{A}的秩为n,所以\boldsymbol{A}^{T}\boldsymbol{A}的特征值/特征向量也是\boldsymbol{A}的特征值/特征向量。

0.3 Householder变换

\boldsymbol{w}\in \mathbb{R}^{n},且\boldsymbol{w}^{T}\boldsymbol{w}=1,定义\boldsymbol{H}=I-2\boldsymbol{w}\boldsymbol{w}^{T}为Householder变换。

对于非零向量\boldsymbol{x}\in \mathbb{R}^{n},可构造\boldsymbol{H}=I-2\boldsymbol{w}\boldsymbol{w}^{T},使得

Hx=\alpha \boldsymbol{e}_{1}

其中,\alpha =\pm \left \| x \right \|_{2}\boldsymbol{w}=\frac{x-\alpha e_{1}}{\left \| x-\alpha e_{1} \right \|_{2}}\boldsymbol{e}_{1}^{T}=\begin{pmatrix} 1 &0 &\cdots &0 \end{pmatrix}\in \mathbb{R}^{1\times n}

\boldsymbol{x}=\begin{pmatrix} \boldsymbol{x}^{\left ( 1 \right )}\\ \boldsymbol{x}^{\left ( 2 \right )} \end{pmatrix}\boldsymbol{x}^{\left ( 1 \right )}=\boldsymbol{x}\left ( 1:k-1 \right )\boldsymbol{x}^{\left ( 2 \right )}=\boldsymbol{x}\left ( k:n \right ),对于\boldsymbol{H}_{k}=\begin{pmatrix} \boldsymbol{I}_{k-1} & \boldsymbol{0}\\ \boldsymbol{0} & \mathbf{H}^{\left (k \right )} \end{pmatrix}

\boldsymbol{H}_{k}\boldsymbol{x}=\begin{pmatrix} \boldsymbol{I}_{k-1} & \boldsymbol{0}\\ \boldsymbol{0} & \mathbf{H}^{\left (k \right )} \end{pmatrix}\begin{pmatrix} x^{\left ( 1 \right )}\\ x^{\left ( 2 \right )} \end{pmatrix}=\begin{pmatrix} x^{\left ( 1 \right )}\\ \boldsymbol{H}^{\left ( k \right )}x^{\left ( 2 \right )}\end{pmatrix}

根据上述结论可知,可以构造\boldsymbol{H}^{\left (k \right )},使得\boldsymbol{H}^{\left ( k \right )}x^{\left ( 2 \right )}=\begin{pmatrix} -M\sigma _{k} & 0& 0& 0 \end{pmatrix}^{T}\in \mathbb{R}^{n-k+1}

具体来说,可按照下述流程进行操作:

M=max\left ( \left | x_{k} \right |,\left | x_{k+1} \right |,\cdots ,\left | x_{n} \right | \right )\\ x_{i}\leftarrow \frac{x_{i}}{M}\ \\ \sigma_{k}=sign\left ( x_{k} \right )\sum_{i=k}^{i=n}x_{i}^{2} \\ \boldsymbol{U}_{k}=\left ( \sigma_{k}+x_{k},x_{k+1},\cdots ,x_{n} \right )\in \mathbb{R}^{n-k+1} \\ \rho_{k}=\frac{1}{2}\boldsymbol{U}_{k}^{T}\boldsymbol{U}=\sigma_{k}\left ( \sigma_{k}+x_{k} \right )\\ \boldsymbol{H}^{\left ( k \right )}=\boldsymbol{I}-\frac{1}{\rho_{k}}\boldsymbol{U}_{k}\boldsymbol{U}_{k}^{T}=\boldsymbol{I}-\frac{\sigma_{k}+x_{k}}{\sigma_{k}}\frac{\boldsymbol{U}_{k}}{\sigma_{k}+x_{k}}\frac{\boldsymbol{U}_{k}^{T}}{\sigma_{k}+x_{k}}\in \mathbb{R}^{\left (n-k+1 \right )\times \left ( n-k+1 \right )}

由此,通过Householder变换,可以将某一列向量的部分连续元素约化为0。

0.4 Givens变换

\boldsymbol{e}_{1},\boldsymbol{e}_{2},\cdots ,\boldsymbol{e}_{n}是n维Euclid空间\mathbb{R}^{n}中的一组标准正交基,\forall x, y \in \mathbb{R}^{n},则在平面\left ( \boldsymbol{e}_{i}, \boldsymbol{e}_{j}\right )中存在旋转变换矩阵\boldsymbol{G}\left ( i,j,\theta \right ),满足

\boldsymbol{y}=\mathbf{G}\mathbf{x}

其中,

x=\begin{pmatrix} x\left ( 1:i-1 \right )\\ x_{i}\\ x\left ( i+1:j-1 \right )\\ x_{j}\\ x\left ( j+1:n \right ) \end{pmatrix}, y=\begin{pmatrix} x\left ( 1:i-1 \right )\\ 0\\ x\left ( i+1:j-1 \right )\\ \sqrt{x_{i}^{2}+x_{j}^{2}}\\ x\left ( j+1:n \right ) \end{pmatrix}

\boldsymbol{G}=\begin{pmatrix} \boldsymbol{I}_{i-1,i-1}& & & & \\ & cos\theta & & -sin\theta & \\ & & \boldsymbol{I}_{j-i-1,j-i-1}& & \\ & sin\theta & & cos\theta & \\ & & & & \boldsymbol{I}_{n-j,n-j} \end{pmatrix}

 cos\theta =\frac{x_{i}}{\sqrt{x_{i}^{2}+x_{j}^{2}}},sin\theta =\frac{-x_{j}}{\sqrt{x_{i}^{2}+x_{j}^{2}}},r=\sqrt{x_{i}^{2}+x_{j}^{2}}

由此可以看出,Givens变换可以将向量的某个元素约化为0。

一、大型矩阵特征值/特征向量的求解思路

大型矩阵\boldsymbol{A}特征值/特征向量求解一般按照以下流程进行

  1. 将矩阵\boldsymbol{A}约化为特征值/特征向量容易求解的矩阵\boldsymbol{H}
  2. 求解矩阵\boldsymbol{H}的特征值/特征向量;
  3. 将矩阵\boldsymbol{H}的特征值/特征向量转化成矩阵\boldsymbol{A}约化为特征值/特征向量;

二、隐式QR计算矩阵奇异值分解

参考书籍

Golub G H , Loan C F V .Matrix Computations.Johns Hopkins University Press,1996.

Ford W .Numerical Linear Algebra with Applications using MATLAB. 2014.

徐树方. 数值线性代数(第二版).  北京大学出版社, 2010.

参考文献

Golub G. and Kahan W.. Calculating the Singular Values and Pseudo-Inverse of a Matrix. Journal of the Society for Industrial and Applied Mathematics: Series B, Numerical Analysis, 1965, 2(2) : 205-224.

Demmel J., Kahan W..Accurate Singular Values of Bidiagonal Matrices. SIAM Journal on Scientific and StatisticalComputing, 1990, 11(5):873-912.

P. A. Businger,G. H. Golub. Singular value decomposition of a complex matrix. communications of the acm, 1969.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

❤ Redirected when going from “/login“ to “/“ via a navigation guard错误

❤ vue路由遇到 Redirected when going from “/login“ to “/“ via a navigation guard错误 路由版本:“vue-router”: “^3.5.2”, 添加了路由守卫,然后开始报这个错误, 原因 就是路由版本导致的 解决办法 // 导航守卫限制路由跳转 …

Jenkins插件管理切换国内源地址

一、替换国内插件下载地址 选择系统管理–>插件管理–> Available Plugins 并等待页面完全加载完成、这样做是为了把jenkins官方的插件列表下载到本地、接着修改地址文件、替换为国内插件地址 进入插件文件目录 cd /var/lib/jenkins/updatesdefault.json 为插件源地址…

比较两字符串数组中对应位置元素的大小char.greater()和char.less()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 比较两字符串数组中 对应位置元素的大小 char.greater()和char.less() [太阳]选择题 下列代码最后输出的结果是? import numpy as np x1 np.array([a, bc, D]) print("【显…

go 查询采购单设备事项V3

一、版本说明 本版本在整合上两次的功能基础上,引进ini配置文件的读取事项,快速读取本地配置文件,完成读取设置 第一版:实现了严格匹配模式的查找 https://blog.csdn.net/wtt234/article/details/131979385 第二版:实…

整数转换-C语言/Java

描述 整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。A,B范围在[-2147483648, 2147483647]之间。 示例1: 输入:A 29 (或者0b11101), B 15(或者0b01111) 输出&…

c++数据锁链

题目描述: 创建一个结构体为Node,具有value , next 两个属性; value为整型,用来储存结构体数值; next为Node类型指针,用来指向下一组数据地址; 第1组数据value 5; 第2组数据value …

1400*C. String Equality(greedy)

Example input 4 3 3 abc bcd 4 2 abba azza 2 1 zz aa 6 2 aaabba ddddcc output No Yes No Yes 题意: 字符串a和b,其字母顺序可以任意交换,k个连续的相同字母,可以全部变为大于这个字母的其他字母(bb->cc&…

小程序动态隐藏分享按钮

// 禁用分享 wx.hideShareMenu({menus: [shareAppMessage, shareTimeline] })// 显示分享 wx.showShareMenu({withShareTicket: true,menus: [shareAppMessage, shareTimeline] })//私密消息 wx.updateShareMenu({isPrivateMessage: true, })

Docker容器监控之 CAdvisor+InfluxDB+Granfana

通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,一般小公司够用了。但是,docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能…

Tensorflow预训练模型ckpt与pb两种文件类型的介绍

我们在 Tensorflow无人车使用移动端的SSD(单发多框检测)来识别物体及Graph的认识 熟悉了Graph计算图以及在 Tensorflow2.0中function(是1.0版本的Graph的推荐替代)的相关知识介绍 这个tf.function的用法,了解到控制流与计算图的各自作用,无论使用哪种方…

向量vector与erase()

运行代码: //向量vector与erase() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}frien…

数据库原理1——《小猫猫大课堂》数据库原理篇

宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要…

分布式锁中的王者方案 - Redission

文章目录 5.1 分布式锁-redission功能介绍5.2 分布式锁-Redission快速入门5.3 分布式锁-redission可重入锁原理5.4 分布式锁-redission锁重试和WatchDog机制5.5 分布式锁-redission锁的MutiLock原理 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&am…

【如何训练一个中英翻译模型】LSTM机器翻译模型部署之onnx(python)(四)

系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码(一) 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存(二) 【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三) 【如何…

极简每周计划应用程序WeekToDo

什么是 WeekToDo ? WeekToDo 是一款免费的极简每周计划应用程序,专注于隐私。使用待办事项列表和日历安排您的任务和项目。适用于 Windows、Mac、Linux 或在线。 WeekToDo 是一个免费且开源的极简每周计划程序。借助 WeekToDo,您可以以简单直观的方式定…

Matplotlib_绘制柱状图

绘制柱状图 🧩bar方法 bar()是Matplotlib.pyplot库中用于绘制条形图(bar chart)的函数。条形图是一种常见的数据可视化图表,用于显示不同类别之间的比较。 函数签名: matplotlib.pyplot.bar(x, height, width0.8, …

ICMP协议(网际报文控制协议)详解

ICMP协议(网际报文控制协议)详解 ICMP协议的功能ICMP的报文格式常见的ICMP报文差错报文目的站不可达数据报超时 查询报文回送请求或回答 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络…

JDBC Some Templates

JDBCTemplate 是Spring对JDBC的封装&#xff0c;使用JDBCTemplate方便实现对数据的操作。 <!-- orm:Object relationship mapping m对象 关系 映射-->引入依赖 <!-- 基于Maven依赖的传递性&#xff0c;导入spring-content依赖即可导入当前所需的所有…

Spring项目启动报错无法访问org.springframework.boot.SpringApplication:6

当springBoot项目启动后报错如下 解决办法如下&#xff1a;将jdk版本调为11,springBoot版本降低为2.7.12。然后clean&#xff0c;再package重新打包。最后重新启动项目