Собственные значения разреженной матрицы с использованием Eigen3

Существует ли отличный и эффективный способ поиска собственных значений и собственных векторов реальной, симметричной, очень большой, скажем, 10000×10000, разреженной матрицы в Eigen3? Для плотных матриц существует решатель собственных значений, но в нем не используются свойства матрицы, например, это симметрия Кроме того, я не хочу хранить матрицу в плотном.

Или есть лучшая (+ лучше задокументированная) библиотека для этого?

2

Решение

Предполагая, что вы ищете библиотеку 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
1

Другие решения


По вопросам рекламы [email protected]