获取双对角矩阵的奇异值分解的最快方法(使用LAPACK)?

时间:2017-08-05 04:37:05

标签: c matrix linear-algebra lapack svd

我希望找到最快的代码/算法/包来获得真实的方形双对角矩阵的奇异值分解(SVD)。我正在使用的矩阵相当小 - 通常大约15x15。但是,我执行此SVD数千次(可能是数百万次),因此计算成本变得非常大。

我在C中编写了所有代码。我假设执行SVD的最快代码可能来自LAPACK。我一直在研究LAPACK,看起来我有很多不同的选项来执行真实的双对角矩阵的SVD:

  1. dbdsqr - 使用零移位QR算法获取双对角矩阵的SVD

  2. dbdsdc - 使用分而治之算法获取双对角矩阵的SVD

  3. dgesvd - 不确定这个是如何工作的,但它可以处理任意矩阵,所以我假设我更善于使用dbdsqr或dbdsdc

  4. dgesdd - 不确定这个是如何工作的,但它也可以处理任意矩阵,所以我假设我更善于使用dbdsqr或dbdsdc

  5. dstemr - 估算三对角矩阵的特征向量/特征值;我可以用它来通过找到A * A'的特征向量/值来估计左奇异向量/值;然后,我可以通过找到A'* A

  6. 的特征向量/值来估计正确的奇异向量/值。
  7. dstemr - 也许有更快的方式来使用dstemr来获取SVD ...如果你知道某种方式请告诉我

  8. 我不知道这些方法中哪一个最快。有没有更快的方法来获得我上面没有列出的真实双向对齐矩阵的SVD?

    理想情况下,我正在寻找一个小的示例C代码来演示相对较小的真实双对角矩阵的最快SVD。

0 个答案:

没有答案