Собственные значения разреженной матрицы с использованием 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
Другие вопросы по тегам