使用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
 
参考]

相关文章
|
9月前
|
机器学习/深度学习 存储 vr&ar
线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用
线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用
|
7天前
|
算法
R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
17 0
|
3月前
|
人工智能 算法 计算机视觉
VGen与SVD的比较
【1月更文挑战第7天】VGen与SVD的比较
46 1
VGen与SVD的比较
|
9月前
|
Android开发 iOS开发
Cellular Matrix 蜂窝矩阵(一)
最近的新项目要在兴趣选择的标签上做一些文章,看了一些国内需要兴趣选择的APP的样式,基本都是不规则的横向排列标签选择模式,基本都是用`CollectionView`配合着自己重新写的`FLowLayout`进行重新的布局排布。然而,虎嗅APP的兴趣选择标签的样式倒是很独特,用了一种类似蜂窝样式的排布来进行选择,同时还配合动画效果,进一步的提升了用户的体验感受。但是只是在安卓版本的虎嗅APP才有,iOS版本的并没有体验到。
|
5月前
三对角矩阵(Triangular Matrix)
三对角矩阵(Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以及主对角线两侧的相邻对角线上。三对角矩阵在数学、工程和计算机科学等领域中都有广泛应用,特别是在线性代数中。以下是一些关于三对角矩阵的特点和应用:
285 6
|
5月前
|
机器学习/深度学习
下三角矩阵(Lower Triangular Matrix)
下三角矩阵(Lower Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以下。在数学和工程领域中,下三角矩阵通常用于线性代数和微积分等问题。以下是一些关于下三角矩阵的特点和应用:
443 1
|
5月前
|
机器学习/深度学习
上三角矩阵(Upper Triangular Matrix
上三角矩阵(Upper Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以上。在数学和工程领域中,上三角矩阵通常用于线性代数和微积分等问题。以下是一些关于上三角矩阵的特点和应用:
422 0
|
算法
【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number
【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number
【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number

热门文章

最新文章