【问题标题】:What's the best small C++ package to compute the largest eigenvalue of a matrix? [closed]计算矩阵的最大特征值的最佳小型 C++ 包是什么? [关闭]
【发布时间】:2011-03-08 17:17:57
【问题描述】:

我需要计算(稀疏)矩阵的最大特征值。我实现了幂次迭代的方法,但是收敛速度太慢了,所以我想用一个包来实现它。有人有推荐吗?

最好的 C++ 特征值计算包是什么?最好是小型且易于编译的。

【问题讨论】:

    标签: c++ matrix eigenvalue


    【解决方案1】:

    我无法向您提供任何细节,因为我自己没有使用过它,但我认为 ARPACK 可能会有所帮助,尤其是 ARPACK++,它是 C++ 改编版,因为原始包位于 Fortran77 中。我认为 MATLAB 函数 eigs() 使用它来找到最大的特征值(和相应的特征向量)。据我所知,t 应该也可以与 STL 交互。

    MATLAB 使用 Fortran77 例程 DSAUPD、DSEUPD、DNAUPD、DNEUPD、ZNAUPD 和 ZNEUPD。它们似乎是 ARPACK++ 中要寻找的。​​p>

    Check it out here.

    【讨论】:

    • 确实,ARPACK 是目前最好的之一 (+1)。但不能保证它的 C++ 接口。
    【解决方案2】:

    至少如果记忆有用,一种可能性是Boost::uBlas。虽然 Boost 整体相当大,但 uBlas 本身就更合理一些。此外,如果内存服务它是一个仅标头库,因此使用它非常容易(您不必先构建库,为链接器设置任何东西等)

    编辑:我应该补充一点,通常计算特征值/向量非常慢,即使使用相当优化的代码也是如此。根据您正在做什么,通常值得研究一些方法(例如)让您只计算矩阵子集的特征值(例如,Landmark Multidimensional Scaling)。

    【讨论】:

    • 谢谢,但是它有返回最大特征值的功能吗?我没有在文档中看到它。
    • 没有返回最大特征值的 LAPACK 函数。你可以做一个蛮力矩阵对角化,给你所有的特征值,但这会比你使用专门的 Lanzos 求解器快得多。
    猜你喜欢
    • 2023-04-11
    • 2019-06-09
    • 1970-01-01
    • 2012-12-17
    • 2019-05-21
    • 2021-02-04
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多