首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R和MATLAB中不同的SVD结果

R和MATLAB中不同的SVD结果
EN

Stack Overflow用户
提问于 2017-02-01 13:21:27
回答 2查看 795关注 0票数 2

我是R的新手,正在尝试矩阵的奇异值分解。当我与MATLAB交叉验证时,SVD的V矩阵显示了不同的结果。有没有我遗漏的解释,或者我在R编程中做错了什么。以下是R和MATLAB的屏幕截图。但是,U和D矩阵是相似的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 13:54:03

svd可以接受nunv参数,指定要发出的UV的大小。它们默认为min(# of rows, # of cols),这意味着在R中,奇异值分解是“瘦”或经济模式奇异值分解,而Matlab默认为完整的奇异值分解,除非你要瘦的版本。

下面是如何获取完整的VS = svd(M, nu=3, nv=4)。更广泛地说,是nu=nrow(M)nv=ncol(M)

完整示例:

代码语言:javascript
代码运行次数:0
运行
复制
> M = matrix(c(2,3,4,5,1,2,3,4,0,1,2,3), nrow=3, ncol=4)
> M
     [,1] [,2] [,3] [,4]
[1,]    2    5    3    1
[2,]    3    1    4    2
[3,]    4    2    0    3
> S = svd(M, nu=3, nv=4)
> S$u
          [,1]        [,2]       [,3]
[1,] 0.6486710  0.63810301  0.4147897
[2,] 0.5607706 -0.03225566 -0.8273427
[3,] 0.5145506 -0.76927506  0.3787527
> S$d
[1] 8.790352 3.524115 2.882763
> S$v
          [,1]       [,2]        [,3]        [,4]
[1,] 0.5731120 -0.5384787 -0.04767577 -0.61588176
[2,] 0.5498331  0.4596073  0.69520488  0.05598925
[3,] 0.4765560  0.5065914 -0.71632725  0.05598925
[4,] 0.3769888 -0.4921046 -0.03595079  0.78384952

在这种情况下,Matlab和R SVD匹配!(一般来说,它们不需要匹配,因为UV的任何旋转也是奇异值分解。)

票数 3
EN

Stack Overflow用户

发布于 2017-02-01 13:31:50

总而言之,它们是相同的。

那么,为什么这些矩阵看起来不同呢?

回想一下奇异值分解是如何将矩阵分解成UΣV*的。

矩阵的维数分别为m×m,m×n,n×n。

然而,Σ是一个对角矩阵,并且只需要最大(m,n)维来表示该矩阵。

完成此缩减后,U或V*将根据m和n的大小进行降维。例如,在这种情况下,Σ可以缩减为3 x 3矩阵,而V*将是3 x 4矩阵。

最后,人们可以问这种减少是否会导致信息丢失。但是,矩阵的“缺失部分”可以从它们是么正矩阵的事实中恢复。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41972419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档