Существует ли отличный и эффективный способ поиска собственных значений и собственных векторов реальной, симметричной, очень большой, скажем, 10000×10000, разреженной матрицы в Eigen3? Для плотных матриц существует решатель собственных значений, но в нем не используются свойства матрицы, например, это симметрия Кроме того, я не хочу хранить матрицу в плотном.
Или есть лучшая (+ лучше задокументированная) библиотека для этого?
Предполагая, что вы ищете библиотеку C ++, проверьте броненосец.
eigs_sym()
Функция, кажется, то, что вы хотите. Цитируя документы, это:
Получает ограниченное число собственных значений и собственных векторов разреженной симметричной вещественной матрицы X
Минимальный пример из документов, адаптированных к желаемому размеру матрицы:
// generate sparse matrix
sp_mat A = sprandu<sp_mat>(10000, 10000, 0.1);
sp_mat B = A.t()*A;
vec eigval;
mat eigvec;
eigs_sym(eigval, eigvec, B, 5); // find 5 eigenvalues/eigenvectors