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

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

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


person Philipp    schedule 14.05.2015    source источник
comment
Перейдите по этой ссылке для получения списка библиотек, которые могут находить собственные значения с использованием разреженных матриц: NetLib.org   -  person artoonie    schedule 15.05.2015
comment
Это хороший список, который у вас есть, но у меня есть опасения, что он актуален.   -  person Philipp    schedule 15.05.2015
comment
Этот вопрос является дубликатом stackoverflow.com/questions/30188482 /   -  person mtall    schedule 18.05.2015
comment
Просто потому, что он был мигрирован   -  person Philipp    schedule 18.05.2015
comment
Возможный дубликат разреженных собственных значений с использованием eigen3/sparse   -  person Ruslan    schedule 10.02.2018


Ответы (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
person seldak    schedule 17.05.2015