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

本文记录计算矩阵奇异值分解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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTFshow-pwn入门-pwn67(nop sled空操作雪橇)

前言 本人由于今年考研可能更新的特别慢,不能把ctfshow的pwn入门题目的wp一一都写出来了,时间比较紧啊,只能做高数做累的时候做做pwn写写wp了,当然我之后只挑典型意义的题目写wp了,其余的题目就留到12月底考完之后再写…

基于OpenCV solvePnP函数估计头部姿势

人脸识别 文章目录 人脸识别一、姿势估计概述1、概述2、姿态估计3、在数学上表示相机运动4、姿势估计需要什么5、姿势估计算法6、Levenberg-Marquardt 优化 二、solvePnP函数1、函数原型2、参数详解 三、OpenCV源码1、源码路径 四、效果图像示例参考链接 一、姿势估计概述 1、…

寄存器分配:图着色算法

寄存器分配:图着色算法 背景活跃分析寄存器冲突图图着色算法溢出 背景 在编译器的中间表示中,一般会设定虚拟寄存器有无限多个(方便优化),而真实的物理寄存器是有限的,因而编译器后端在将中间表示翻译成目…

centos7安装mysql数据库详细教程及常见问题解决

mysql数据库详细安装步骤 1.在root身份下输入执行命令: yum -y update 2.检查是否已经安装MySQL,输入以下命令并执行: mysql -v 如出现-bash: mysql: command not found 则说明没有安装mysql 也可以输入rpm -qa | grep -i mysql 查看是否已…

mac下安装vue cli脚手架并搭建一个简易项目

目录 1、确定本电脑下node和npm版本是否为项目所需版本。 2、下载vue脚手架 3、创建项目 1、下载node。 如果有node,打开终端,输入node -v和npm -v , 确保node和npm的版本,(这里可以根据自己的需求去选择,如果对最新版本的内容有…

python 源码中 PyId_stdout 如何定义的

python 源代码中遇到一个变量名 PyId_stdout,搜不到在哪里定义的,如下只能搜到引用的位置(python3.8.10): 找了半天发现是用宏来构造的声明语句: // filepath: Include/cpython/object.h typedef struct …

Gradle build 失败后提示.lock文件,解决办法

在Gradle build失败之后时,有时候强制关闭AndroidStudio,再次打开build时,会提示各种.lock 文件问题,删除了一个还有下一个,而且路径不一样。 一般情况下是这两个文件夹下的lockfile影响继续build %GRADLE_HOME%/ca…

目标检测任务中常用的数据集格式(voc、coco、yolo)

一、Pascal VOC VOC数据集(Annotation的格式是xmI) Pascal VOC数据集是目标检测的常用的大规模数据集之一,从05年到12年都会举办比赛,比赛任务task: 分类Classification目标检测Object Detection语义分割Class Segmentation实例分割Object…

基于java+swing+mysql图书管理系统v8.0

基于javaswingmysql图书管理系统v8.0 一、系统介绍二、功能展示1.登陆及主页2.图书类别添加3.图书类别维护4.图书添加5.图书维护 三、系统实现1.BookManageMainFrame.java 四、其它1.其他系统实现 五、获取源码 一、系统介绍 该系统实现了用户登陆、图书类别管理(图书类别添加…

yolov5 onnx模型 转为 rknn模型

1、转换为rknn模型环境搭建 onnx模型需要转换为rknn模型才能在rv1126开发板上运行,所以需要先搭建转换环境 模型转换工具 模型转换相关文件下载: 网盘下载链接:百度网盘 请输入提取码 提取码:teuc 将其移动到虚拟机中&#xf…

基本排序算法

目录 一,插入排序 二,希尔排序 三,选择排序 四,冒泡排序 五,快排 5.1 Hoare法 5.2 挖坑法 5.3 指针法 5.4 非递归写法 六,归并排序 6.1 递归 6.2 非递归 一,插入排序 基本思想&…

CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程

1、打开软件CorelDRAW 2019,用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色,此时填充的颜色就是以后立体字正面的颜色。我填充了红色,并加上了灰色的描边。 3、选中文本,单击界面左侧…

superset为何无法上传excel,csv等外部文件

superset为何无法上传excel,csv等外部文件 这是由于没有打开数据库的上传外部文件的权限 1.打开数据库连接设置,选择Allow file uploads to database 2.发现这里的上传链接都可以使用

c++ 类

类的引入 c 语言的结构体只能定义变量 但是 c的结构体除了定义变量之外,还可以定义函数。 感受感受: #define _CRT_SECURE_NO_WARNINGS 1//我们声明一个结构体 struct Stack {// c可以把函数写在结构体中//叫成员函数:// 如下://c的写法&am…

股票回购不积极,遭分析师看空,汽车之家财务前景黯淡

来源:猛兽财经 作者:猛兽财经 第一季度财报后股价表现不佳 汽车之家(ATHM)于2023年5月11日公布了2023年第一季度业财报绩。 猛兽财经通过查询财报得知,汽车之家第一季度的实际营收为2.21亿美元,正常每股收…

uniapp实现预约时间选择弹窗组件

做了个组件&#xff0c;实现出当日预约时间组件&#xff0c;效果图如下 废话不多说&#xff0c;直接上代码&#xff0c;代码简单&#xff0c;参数自己任意改 <template><view class"inventory"><u-popup :show"show" :round"10"…

开源快速开发平台:做好数据管理,实现流程化办公!

做好数据管理&#xff0c;可以提升企业的办公协作效率&#xff0c;实现数字化转型。开源快速开发平台是深受企业喜爱的低代码开发平台&#xff0c;拥有多项典型功能&#xff0c;是可以打造自主可控快速开发平台&#xff0c;实现一对一框架定制的软件平台。在快节奏的社会中&…

Docker的安装与部署

Docker 基本概念介绍 通俗理解&#xff1a;镜像是类&#xff0c;容器是对象实例 仓库 应用商店、镜像 下载的应用安装程序、容器 应用程序 镜像(Image) 这里面保存了应用和需要的依赖环境 为什么需要多个镜像&#xff1f;当开发、构建和运行容器化应用程序时&#xff0c;我们…

redis集群设置

先下载redis数据库可以在一台机器上设置redis集群高可用 cd /etc/redis/ mkdir -p redis-cluster/redis600{1..6} for i in {1..6} do cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-s…

二叉搜索树的本质

引言 打算写写树形数据结构&#xff1a;二叉查找树、红黑树、跳表和 B 树。这些数据结构都是为了解决同一个基本问题&#xff1a;如何快速地对一个大集合执行增删改查。 本篇是第一篇&#xff0c;讲讲搜索树的基础&#xff1a;二叉搜索树。 基本问题 如何在一千万个手机号中…