使用svd()对矩阵奇异值分解(singular value decomposition)

简介:
奇异值分解 (singular value decomposition)是 线性代数 中一种重要的 矩阵分解 ,在 信号处理 统计学 等领域有重要应用。奇异值分解在某些方面与 对称矩阵 Hermitian矩阵 基于 特征向量 对角化 类似。然而这两种矩阵分解尽管有其相关性,但还是有明显的不同。对称阵特征向量分解的基础是 谱分析 ,而奇异值分解则是谱分析理论在任意矩阵上的推广。

A为m×n矩阵,rank(A)= r, 可以分解为:A=UDV',其中U'U=V'V=I。在R中可以用函数svd()进行奇异值分解,其中D需要使用diag()转换为矩阵.

例如 : 
> A=matrix(1:18,3,6)
> A
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    7   10   13   16
[2,]    2    5    8   11   14   17
[3,]    3    6    9   12   15   18
> rank(A)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
> svd(A)
$d
[1] 4.589453e+01 1.640705e+00 1.366522e-15

$u
           [,1]        [,2]       [,3]
[1,] -0.5290354  0.74394551  0.4082483
[2,] -0.5760715  0.03840487 -0.8164966
[3,] -0.6231077 -0.66713577  0.4082483

$v
            [,1]        [,2]       [,3]
[1,] -0.07736219 -0.71960032 -0.4076688
[2,] -0.19033085 -0.50893247  0.5745647
[3,] -0.30329950 -0.29826463 -0.0280114
[4,] -0.41626816 -0.08759679  0.2226621
[5,] -0.52923682  0.12307105 -0.6212052
[6,] -0.64220548  0.33373889  0.2596585


验证 : 
A=UDV',  
注意$d是向量, 需要转换为矩阵  diag(svd(A)$d).
> svd(A)$u %*% diag(svd(A)$d) %*% t(svd(A)$v)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    7   10   13   16
[2,]    2    5    8   11   14   17
[3,]    3    6    9   12   15   18


验证 : 
U'U=V'V=I

> t(svd(A)$u) %*% svd(A)$u
             [,1]         [,2]         [,3]
[1,] 1.000000e+00 3.330669e-16 1.665335e-16
[2,] 3.330669e-16 1.000000e+00 5.551115e-17
[3,] 1.665335e-16 5.551115e-17 1.000000e+00
> t(svd(A)$v) %*% svd(A)$v
             [,1]          [,2]          [,3]
[1,] 1.000000e+00  2.775558e-17  2.775558e-17
[2,] 2.775558e-17  1.000000e+00 -2.081668e-16
[3,] 2.775558e-17 -2.081668e-16  1.000000e+00
> round(t(svd(A)$v) %*% svd(A)$v)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
> round(t(svd(A)$u) %*% svd(A)$u)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
 
参考]

目录
相关文章
|
编解码 前端开发 Java
大华相机接入web页面实现人脸识别
大华相机接入web页面实现人脸识别
431 0
|
SQL 监控 网络协议
DM8数据守护集群安装部署详细教程
DM8数据守护集群安装部署详细教程
430 0
|
SQL 监控 druid
MySQL连接池DataSource怎么使用?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,特别聚焦于阿里巴巴的DruidDataSource。DruidDataSource是一个高效的Java数据库连接池,包含监控、SQL防护和日志功能。文中通过示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成,并提到了启用SQL监控。此外,还分享了设置连接池参数的技巧,如合理设定初始、最大和最小连接数,并强调了定期监控和使用内置监控工具优化性能的重要性。
656 0
|
机器学习/深度学习 运维 算法
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
1998 0
|
存储 数据处理 Perl
阿里云服务网格ASM的流量标签及路由功能之(1): 流量标签定义
服务网格ASM新增扩展了流量标签TrafficLabel 自定义资源CRD。 通过该CRD定义具体的流量标签逻辑,实现为命名空间、工作负载进行设置流量标签。
747 0
阿里云服务网格ASM的流量标签及路由功能之(1): 流量标签定义
|
存储 JSON 安全
ElasticsearchRestTemplate 和ElasticsearchRepository 的使用
ElasticsearchRestTemplate 和ElasticsearchRepository 的使用
1427 1
|
JavaScript 前端开发 IDE
React+TypeScript项目中如何使用CodeMirror?
React+TypeScript项目中如何使用CodeMirror?
601 0
|
easyexcel API 数据安全/隐私保护
EasyExcel使用与详细说明,EasyExcel工具类(三)
EasyExcel使用与详细说明,EasyExcel工具类
13887 1
IDEA项目如何切换JDK版本
IDEA项目切换JDK版本
3215 0
|
弹性计算 网络协议 Linux
阿里云服务器安装PPTP VPN全流程
阿里云服务器安装PPTP VPN全流程,现在安全组中开放PPTP的1723端口,然后在服务器上安装PPTP服务端,最后配置客户端即可
18330 1
阿里云服务器安装PPTP VPN全流程