用于稀疏矩阵的完整SVD的库

时间:2015-11-22 17:18:30

标签: c++ sparse-matrix svd

我想对包含大量零的大型矩阵进行奇异值分解。特别是我需要从对称矩阵A的对角化获得的U和S.这意味着A = U * S *转置(U ^ *),其中S是对角矩阵,U包含所有特征向量作为列。

我在网上搜索了结合SVD和稀疏矩阵的c ++库,但只能找到找到一些但不是所有特征向量的库。有谁知道是否有这样的图书馆?

在获得U和S之后,我需要将它们乘以一些密集向量。

1 个答案:

答案 0 :(得分:0)

对于这个问题,我使用了不同技术的组合:

  • Arpack可以计算一组特征值和相关的特征向量,遗憾的是它只对高频很快而对低频很慢

  • 但由于矩阵的逆矩阵的特征向量与矩阵的特征向量相同,因此可以对矩阵进行因子分析(使用稀疏矩阵分解例程,如SuperLU,或者如果矩阵是对称的,则为Choldmod) )。使用Arpack的“通信协议”只需要你计算一个矩阵矢量乘积,所以如果你使用因子矩阵进行线性系统求解,那么这使得Arpack可以快速用于频谱的低频(不要忘记那么用1 / lambda替换特征值lambda!)

  • 此技巧可用于探索整个频谱,使用广义变换(前一点中的变换称为“反转”变换)。还有一个“移位反转”变换,允许人们探索频谱的任意部分并快速收敛Arpack。然后你计算(1 / lambda + sigma)而不是lambda,当sigma是“shift”时(变换稍微比“invert”变换复杂,请参阅下面的参考资料以获得完整的解释)。

    < / LI>

ARPACK:http://www.caam.rice.edu/software/ARPACK/

SUPERLU:http://crd-legacy.lbl.gov/~xiaoye/SuperLU/

我的文章中解释了数值算法,可在此处下载: http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008

源代码可在那里找到: https://gforge.inria.fr/frs/download.php/file/27277/manifold_harmonics-a4-src.tar.gz

另见我对这个问题的回答: https://scicomp.stackexchange.com/questions/20243/sparse-generalized-eigensolver-using-opencl/20255#20255