matrix - 查找大(稀疏)矩阵的特征值和特征向量

标签 matrix lapack eigenvector eigenvalue intel-mkl

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

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

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

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

提前谢谢您,

亚历克斯

最佳答案

ARPACK可能是正确的使用方法。它是旧的 Fortran 代码,安装起来可能很麻烦(尽管维护的 arpack-ng 可能更好)。

或者,libiglEigen 之上构建了功率迭代的粗略实现。您可以像 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/

相关文章:

python - 在 O(n) 的排序矩阵中查找小于目标的 # 元素的算法?

c++ - 如何使用线性代数的C++模板库Eigen?

c - 如何在 OpenMP 中实现并行化

python - 如何根据 python 中提供的 0 和 1 矩阵生成矩阵组合?

python - 如何检查 NumPy 和 SciPy 中的 BLAS/LAPACK 链接?

ubuntu - 将 LAPACK 与代码 :Blocks GNU fortran compiler Ubuntu 14. 04 链接时出现问题

python - f 在 MATLAB 代码中似乎总是正数,但在我的 Python 代码中,f 也得到负值

c++ - 如何找到OpenCV中最低特征值对应的特征向量?

matlab - 使用lapack/blas将矩阵的一个子集乘以另一个矩阵

c++ - eigen 中的 vector 加和点不会通过 mkl 加速