我正在尝试计算一个大矩阵的特征向量(比如前 10 个)。我最初的问题是由于对 Intel MKL 库的误解引起的。为了使我的问题清晰易懂,我决定概括它并删除一些不必要的细节。
基本问题是:应该使用哪种计算机代码来查找大型稀疏矩阵的特征值?
在某些近似下,我的矩阵可以被认为是稀疏的。也就是说,当远离对角线时,这些值变得非常小。其中一些甚至是非物理的,是由统计效应造成的(矩阵是由MC代码生成的)。这就是术语“稀疏”位于括号中的原因。
如果有人可以提供代码示例,我将不胜感激。
提前谢谢您,
亚历克斯
最佳答案
ARPACK可能是正确的使用方法。它是旧的 Fortran 代码,安装起来可能很麻烦(尽管维护的 arpack-ng 可能更好)。
或者,libigl在 Eigen 之上构建了功率迭代的粗略实现。您可以像 MATLAB 的 eigs
一样使用 libigl 版本:
Eigen::SparseMatrix<double> A;
Eigen::SparseMatrix<double> B;
...
Eigen::MatrixXd V;
Eigen::VectorXd D;
igl::eigs(A,B,3,igl::EIGS_TYPE_SM,V,D);
这将计算 V
列中的特征向量以及 D
中 3 个最小特征值的特征值。
关于matrix - 查找大(稀疏)矩阵的特征值和特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589781/