寻找大(稀疏)矩阵的特征值和特征向量

时间:2014-07-05 19:16:37

标签: matrix lapack eigenvector eigenvalue intel-mkl

我正在尝试计算大矩阵的特征向量(比如前10个)。我最初的问题是由于对英特尔MKL库的误解造成的。为了使我的问题清晰易懂,我决定对其进行概括并删除一些不必要的细节。

基本问题是:应该使用哪个计算机代码来查找大型稀疏矩阵的特征值?

在某些近似值下,我所拥有的矩阵可以被认为是稀疏的。即,当远离对角线移动时,值变得非常小。其中一些甚至是非物理的,由统计效应引起(矩阵由MC代码生成)。这就是稀疏术语在括号中的原因。

如果有人可以提供代码示例,我将不胜感激。

提前谢谢你,

亚历

1 个答案:

答案 0 :(得分:1)

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个最小特征值的特征值。