【发布时间】:2014-08-15 20:08:50
【问题描述】:
在R中编码时,我发现函数svd()有时可能会抛出错误消息:
Error in La.svd(x, nu, nv) : error code 1 from Lapack routine 'dgesdd'.
在谷歌上搜索了一些资料,发现这个错误是指svd()中使用的算法不收敛。很多人也遇到了同样的错误信息,我尝试了很多他们使用的方法,但没有一个能正常工作,例如使用参数LINPACK = TRUE,对矩阵进行四舍五入甚至使用propack.svd()和trlan.svd()。
我的输入数据是一个矩阵,对角线条目等于 1,其他条目为 0 或相对较小。我猜这个错误与数值精度有关,所以我尝试用round(matrix,6) 之类的东西来舍入矩阵。这有时会有所帮助,但不能从根本上解决问题,我担心这种四舍五入会导致一些有偏差的结果。
如果有人能告诉我如何解决这个问题,我将不胜感激。
【问题讨论】:
-
可能是您的输入数据有问题,而不是
svd()。但是由于没有对您的数据进行描述,因此进一步探索很复杂。 -
增加输入数据的说明。
-
在 Linux Debian 3.10.11-1 中使用该函数时,我遇到了与 svd() 和大型矩阵相同的问题。我搬到了 Windows 并且讽刺地它工作了。不知道为什么。
标签: r svd convergence