2015-04-13 14 views
7

Sono interessato alla scomposizione di Cholesky di matrici sparse di grandi dimensioni. Il problema che sto avendo è che i fattori Cholesky non sono necessariamente sparsi (proprio come il prodotto di due matrici sparse non è necessariamente scarso).Scomposizione di Cholesky di matrici sparse mediante matrici di permutazione

Ad esempio per una matrice con zero non solo lungo la prima riga, prima colonna e diagonale, i fattori Cholesky hanno il 100% di fill-in (i triangoli inferiore e superiore sono 100% densi). Nel image sotto il grigio non è zero e il bianco è zero.

dense

Una soluzione Sono consapevole è quello di trovare una permutazione P matrice e fare la decomposizione di Cholesky di P T AP. Ad esempio con la stessa matrice applicando una matrice di permutazione che sposta la prima riga all'ultima riga e la prima colonna all'ultima colonna i fattori di Cholesky sono sparsi.

sparse

La mia domanda è come determinare P in generale?

Per avere un'idea della differenza della decomposizione di Cholesky di A e P T AP da una matrice più realistica vedi immagine sotto. Ho preso tutte queste immagini dal http://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdf

permutation matrices

Secondo i lecture notes

molti metodi euristici (che non riguardiamo) esistere per la selezione di buona permutazione matrici P.

Mi piacerebbe sapere quali sono alcuni di questi metodi (il codice in C, C++, o anche Java sarebbe l'ideale).

+2

Le persone simpatiche mettono interi libri sull'argomento online: [Y. Saad: Metodi iterativi per sistemi lineari sparsi] (http://www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf), esp. capitolo 3. Prova "riordino sparse" su google, possibilmente con "hypergraph" come parola chiave aggiuntiva. – LutzL

+0

@LutzL, conosci qualche libreria che fa questo? Per esempio. Eigen o MKL? O uno [per Java] (http://stackoverflow.com/questions/29604527/cholesky-decomposition-of-large-sparse-matrices-in-java)? –

+0

[Patrick R. Amestoy et al .: Algebra lineare e metodi diretti sparsi] (http://amestoy.perso.enseeiht.fr/COURS/unesco2004.pdf) capitolo "Riordino di matrici sparse" e altro testo sulla sua pagina http : //amestoy.perso.enseeiht.fr/ – LutzL

risposta

5

Il problema di trovare una permutazione ottimale di righe e colonne di una matrice per una fattorizzazione minima della matrice di riempimento non è un cestino trascurabile (come indicato nei commenti). Pertanto, gli algoritmi euristici sono utilizzati nella prassi.

Esistono alcune librerie che implementano strategie di rinumerazione/ordinamento euristico, spesso basate su algoritmi grafici per il grafico di adiacenza della matrice. Si tenta di ridurre la larghezza di banda della corrispondente matrice di adiacenza. Un algoritmo facile da implementare è l'algoritmo Cuthill-McKee Algorithm o Minimum-Degree Ordering. Maggiori informazioni su questo problema sono disponibili nel Libro Yousef Saad: Iterative Methods for Sparse Linear Systems (2003), su molti altri.

Molte librerie implementano algoritmi euristici, come

  • Suitesparse Una collezione di librerie per solutori diretti per sistemi lineari sparsi largse.metodi di ordinazione implementati nelle librerie AMD, CAMD, COLAMD, e CCOLAMD
  • (Par-)Metis Una biblioteca per Graph-partizionamento, ma fornisce Matrix riordino algoritmi così
  • Boost.Graph Lavorando sul grafico di adiacenza direttamente e fornisce alcuni algoritmi di ordinamento, come il citato Cuthill-McKee, e minimo-Degree ordinazione
  • (PT-)Scotch per Graph-partizionamento e radi-matrice riordino

Alcune di queste librerie forniscono anche metodi sparse fattorizzazione di Cholesky e può essere utilizzato direttamente.

+0

Ci scusiamo per l'accettazione ritardata.Ho sospeso questo progetto per un po 'e tornerò più tardi quest'anno. –

+0

Nel caso siate interessati, ho "risolto" il mio problema alla fine [utilizzando Eigen] (http://stackoverflow.com/a/30526005/2542702). –