Собственные значения разреженной матрицы с использованием Eigen3
Существует ли четкий и эффективный способ нахождения собственных значений и собственных векторов реальной, симметричной, очень большой, скажем, 10000x10000, разреженной матрицы в Eigen3? Для плотных матриц существует решатель собственных значений, но в нем не используются свойства матрицы, например, ее симметрия. Кроме того, я не хочу хранить матрицу в плотном.
Или есть лучшая (+ лучше задокументированная) библиотека для этого?
1 ответ
Предполагая, что вы ищете библиотеку C++, проверьте Armadillo.
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