2015-05-14 6 views
2

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

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

+0

Посмотрите эту ссылку на список библиотек, которые могут найти собственные значения, используя разреженные матрицы: [NetLib.org] (http://www.netlib.org/utk/people/JackDongarra/la-sw.html) – artoonie

+0

Это хороший список у вас есть, но у меня есть опасения, что это обновление – Philipp

+0

Этот вопрос является дубликатом http://stackoverflow.com/questions/30188482/sparse-eigenvalues-using-eigen3-sparse – mtall

ответ

1

Предполагая, что вы ищете библиотеку C++, отметьте Armadillo.

eigs_sym() функция, похоже, то, что вы хотите. Ссылаясь на документы, это:

Получает ограниченное число собственных значений и собственных векторов разреженной симметричной вещественной матрицы Х

минимальный пример из документации, адаптированных до нужного размера матрицы:

// 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 
Смежные вопросы