Matrix 求大型(稀疏)矩阵的特征值和特征向量

Matrix 求大型(稀疏)矩阵的特征值和特征向量,matrix,lapack,eigenvector,eigenvalue,intel-mkl,Matrix,Lapack,Eigenvector,Eigenvalue,Intel Mkl,我试图计算一个大矩阵的特征向量(比如前10个)。我最初的问题是由于对“英特尔MKL库”的误解造成的。为了使我的问题清晰易懂,我决定对其进行概括,删除一些不必要的细节 基本问题是:应该使用哪种计算机代码来求大型稀疏矩阵的特征值 在某些近似下,我得到的矩阵可以被认为是稀疏的。也就是说,当远离对角线时,值变得非常小。其中一些甚至是非物理的,这是由统计效应引起的(矩阵是由MC代码生成的)。这就是为什么术语稀疏在括号中 如果有人能提供代码示例,我将不胜感激 提前谢谢大家, Alex可能是正确的选择。它是旧

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

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

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

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

提前谢谢大家,

Alex可能是正确的选择。它是旧的fortran代码,安装起来很麻烦(尽管维护的版本可能更好)

或者,在其上构建了power迭代的粗略实现。您可以使用libigl版本,就像MATLAB的
eigs

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);
Eigen::SparseMatrix A;
本征::稀疏矩阵B;
...
本征::矩阵xD V;
本征::向量xd D;
igl::EIG(A,B,3,igl::EIG\U类型\U SM,V,D);

这将计算
V
列中的本征向量和
D
中的3个最小本征值的本征值。

英特尔在其文档中没有提供代码示例吗?除非你能展示你所做的事情,最好是用代码,否则你不可能在这里得到太多的帮助。你甚至可能会获得否决票,你的问题可能会吸引接近票数的选票。这个例程称为
DGEEV
(如果使用double)。以下是一些例子:嗨,弗朗西斯,谢谢你的回复。这正是我需要的,但事实证明我需要稀疏存储。当使用密集存储时,我的矩阵太大,无法放入内存。你可以看看SLEPc库,特别是它们的使用指南和EPS模块看看它们的示例嗨,我一直在试验特征值例程。不幸的是,除了MKL,我并没有真正能够让它们运行。这些手册真是一派胡言,应该怎么做还不是很清楚。ARPACK是这方面最生动的例子。我试着自己编写一些算法。不幸的是,我没能得到我需要的东西。