Calcola tutti gli autovalori di una matrice di adiacenza molto grande e molto sparsa


13

Ho due grafici con quasi n ~ 100000 nodi ciascuno. In entrambi i grafici, ciascun nodo è collegato esattamente ad altri 3 nodi, quindi la matrice di adiacenza è simmetrica e molto sparsa.

La parte difficile è che ho bisogno di tutto autovalori della matrice di adiacenza ma non degli autovettori. Per essere precisi, questo sarà una volta nella mia vita (per quanto posso vedere, almeno!) Quindi voglio ottenere tutti gli autovalori e non mi dispiace aspettare qualche giorno per ottenerli.

Ho provato i scipywrapper in giro ARPACK, ma ci vuole troppo tempo. Ho trovato più librerie ma funzionano meglio per ottenere un sottoinsieme di autovalori più grandi / più piccoli. Esiste una libreria che funziona per matrici sparse simmetriche con possibilmente implementazione parallela per ottenere tutti gli autovalori?


6
Per curiosità, perché hai bisogno esattamente di tutti gli autovalori? La maggior parte dei problemi di questa dimensione sono approssimazioni di problemi anche più grandi (o persino di dimensione infinita), e quindi gli autovalori dei piccoli problemi si avvicinano solo a quello del problema che si vuole veramente risolvere. Molto spesso, la qualità dell'approssimazione è buona solo per gli autovalori più piccoli o più grandi, e tutti gli altri sono solo scarsamente approssimati e di conseguenza non di grande interesse pratico.
Wolfgang Bangerth,


@ WolfgangBangerth: (Scusami se sono ovvi per te) Il problema deriva dalla fisica dei materiali. È legato alla stretta approssimazione dei materiali per ottenere la struttura della banda, le proprietà vibrazionali ed elettriche. Per ottenere questi, ho bisogno dell'intero spettro di autovalori. A proposito, questa non è una novità e risale agli anni '70 e '80 ma poiché il mio sistema è amorfo, per ottenere buoni risultati avevo bisogno di un sistema molto grande. Sebbene la maggior parte delle persone si preoccupi solo dei cristalli, il che è estremamente facile rispetto al mio caso.
Mahdi,

2
@Mahdi: Beh, ciò che intendevo è che le proprietà fisiche sono determinate dallo spettro di un operatore differenziale parziale. Sospetto (ma ovviamente non lo so, perché non descrivi da dove provenga il problema) che il problema degli autovalori a matrice grande che hai è solo un'approssimazione del problema PDE. Di conseguenza, le vostre autovalori saranno anche essere solo approssimazioni.
Wolfgang Bangerth,

Risposte:


8

È possibile utilizzare la trasformazione spettrale shift-invert [1] e calcolare la banda di spettro per banda.

La tecnica è anche spiegata nel mio articolo [2]. Oltre all'implementazione in [1], un'implementazione è disponibile in C ++ nel mio software Graphite [3] ( aggiornamento 17 gennaio : ora tutto è portato su geogramma / grafite versione 3 ), che ho usato per calcolare le autofunzioni dell'operatore Laplace per mesh con un massimo di 1 milione di vertici (un problema simile al tuo).

Come funziona:

UN(V,λ)UN(V,1/λ)UN-1UNUN-1UNLLtUNX=BUN-σiodσ(UN-σiod)-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/


Grazie Bruno! Questi sembrano molto promettenti, li esaminerò!
Mahdi,

1

Un'altra opzione sarebbe usare le rotazioni di Jacobi. Poiché la tua matrice è già quasi diagonale, non dovrebbe impiegare molto tempo a convergere. Generalmente converge in velocità lineare, ma dopo un numero sufficiente di iterazioni la velocità di convergenza diventa quadratica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.