Calculer toutes les valeurs propres d'une matrice d'adjacence très grande et très clairsemée

13

J'ai deux graphiques avec près de n ~ 100 000 nœuds chacun. Dans les deux graphiques, chaque nœud est connecté à exactement 3 autres nœuds, de sorte que la matrice d'adjacence est symétrique et très clairsemée.

La partie difficile est que j'ai besoin de toutes les valeurs propres de la matrice d'adjacence mais pas des vecteurs propres. Pour être précis, cela va être une fois dans ma vie (pour autant que je puisse voir, au moins!) Je veux donc obtenir toutes les valeurs propres et ne me dérange pas d'attendre quelques jours pour les obtenir.

J'ai essayé des scipyemballages ARPACK, mais cela prend beaucoup trop de temps. J'ai trouvé plusieurs bibliothèques mais elles fonctionnent mieux pour obtenir un sous-ensemble de valeurs propres les plus grandes / les plus petites. Existe-t-il une bibliothèque qui fonctionne pour les matrices clairsemées symétriques avec éventuellement une implémentation parallèle pour obtenir toutes les valeurs propres?

Mahdi
la source
6
Par curiosité, pourquoi avez-vous exactement besoin de toutes les valeurs propres? La plupart des problèmes de cette taille sont des approximations de problèmes encore plus grands (ou même de dimension infinie), et donc les valeurs propres des petits problèmes ne se rapprochent que de celles du problème que l'on veut vraiment résoudre. Le plus souvent, la qualité de l'approximation n'est bonne que pour les valeurs propres les plus petites ou les plus grandes, et toutes les autres ne sont que mal approximées et, par conséquent, n'ont pas beaucoup d'intérêt pratique.
Wolfgang Bangerth
@WolfgangBangerth: (Pardonnez-moi si cela vous semble évident) Le problème vient de la physique des matériaux. Il est lié à l'approximation de liaison étroite des matériaux pour obtenir la structure de la bande, les propriétés vibratoires et électriques. Pour les obtenir, j'ai besoin de tout le spectre des valeurs propres. BTW, ce n'est rien de nouveau et ça remonte aux années 70 et 80 mais comme mon système est amorphe, j'avais besoin d'un très gros système pour obtenir de bons résultats. Bien que la plupart des gens se soucient uniquement des cristaux, ce qui est extrêmement facile par rapport à mon cas.
Mahdi
2
@ Mahdi: Eh bien, ce que je voulais dire, c'est que les propriétés physiques sont déterminées par le spectre d'un opérateur différentiel partiel. Je soupçonne (mais bien sûr, je ne sais pas, parce que vous ne décrivez pas d'où vient le problème) que le problème de valeurs propres à grande matrice que vous avez n'est qu'une approximation du problème PDE. Par conséquent, vos valeurs propres ne seront également que des approximations.
Wolfgang Bangerth

Réponses:

8

Vous pouvez utiliser la transformation spectrale à inversion de décalage [1] et calculer le spectre bande par bande.

La technique est également expliquée dans mon article [2]. Outre l'implémentation dans [1], une implémentation est disponible en C ++ dans mon logiciel Graphite [3] ( mise à jour 17 janvier : maintenant tout est porté sur géogramme / graphite version 3 ), que j'ai utilisé pour calculer les fonctions propres de l'opérateur Laplace pour mailles avec jusqu'à 1 million de sommets (un problème similaire au vôtre).

Comment ça fonctionne:

UNE(V,λ)UNE(V,1/λ)UNE-1UNEUNE-1UNELLtUNEX=bUNE-σjeσ(UNE-σje)-1σ

[1] http://www.mcs.anl.gov/uploads/cels/papers/P1263.pdf

[2] http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008

[3] http://alice.loria.fr/software/graphite/doc/html/

BrunoLevy
la source
Merci Bruno! Ceux-ci ont l'air très prometteurs, je vais les examiner!
Mahdi
1

Une autre option serait d'utiliser des rotations Jacobi. Puisque votre matrice est déjà presque diagonale, la convergence ne devrait pas prendre beaucoup de temps. En général, il converge en vitesse linéaire, mais après suffisamment d'itérations, la vitesse de convergence devient quadratique.

Gil
la source