Come riordinare le variabili per produrre una matrice fasciata con larghezza di banda minima?


15

Sto cercando di risolvere un'equazione di Poisson 2D con differenze finite. Nel processo, ottengo una matrice sparsa con solo variabili in ogni equazione. Ad esempio, se le variabili fossero , la discretizzazione produrrebbe:U5U

Uio-1,j+Uio+1,j-4Uio,j+Uio,j-1+Uio,j+1=fio,j

So che posso risolvere questo sistema con un metodo iterativo, ma mi è venuto in mente che se avessi ordinato le variabili in modo appropriato, sarei stato in grado di ottenere una matrice fasciata che potrebbe essere risolta con un metodo diretto (cioè l'eliminazione gaussiana w / o perno). È possibile? Esistono strategie per farlo con altri sistemi sparsi, forse meno strutturati?


2
Qualcosa come Cuthill-McKee, allora?
JM,

Interessante ... non ho mai sentito parlare dell'algoritmo Cuthill-McKee prima! :)
Paul

1
C'è anche un Reverse Cuthill-McKee.
Geoff Oxberry,

1
Spero che sia chiaro dalle risposte, ma non si desidera utilizzare un risolutore a bande per questo problema, né scegliere un ordine che minimizzi la larghezza di banda. Forse la domanda o la risposta prescelta possono essere modificate per renderlo chiaro, altrimenti temo che questo mito venga perpetuato. Ho dato un confronto visivo e confrontato compilare scicomp.stackexchange.com/a/880/119 .
Jed Brown,

@JedBrown: In realtà, non sto abbastanza lavorando con un problema di poisson, di per sé ... Il mio problema ha una struttura simile al problema di poisson ... Le indicazioni delle variabili (io e j) sono esattamente le stesse, e la matrice è diagonalmente dominante con le voci fuori diagonale (all'interno della stessa riga) che si aggiungono esattamente alla somma della voce diagonale.
Paul

Risposte:


13

Questo è un problema ben studiato nel campo dei solutori sparsi-diretti. Consiglio vivamente di leggere la panoramica di Joseph Liu sul metodo multifrontale per avere un'idea migliore di come i riordini e i supernodi influiscono sul tempo di riempimento e soluzione.

La dissezione nidificata è un modo estremamente comune per generare il riordino ed essenzialmente consiste nel partizionamento grafico ricorsivo. MeTiS è lo standard di fatto per il partizionamento dei grafici e puoi leggere alcune delle idee alla base qui . Un altro pacchetto comunemente usato è SCOTCH , e anche Chaco è importante, poiché i suoi autori hanno introdotto il partizionamento grafico multi-livello , che è anche l'idea fondamentale dietro MeTiS .

George e Liu hanno mostrato nel loro libro classico che le soluzioni sparse-diretta 2d richiedono solo lavoro e di memoria, mentre il 3d radi-diretto richiede lavoro e memoria.O(n3/2)O(nlogn)O(n2)O(n4/3)


Hai una citazione per il riferimento di George e Liu?
Paul

aggiunto; Stavo per uscire dall'auto quando l'ho presentata per la prima volta. So che esiste una versione liberamente disponibile del libro online da qualche parte (Jed sa dove si trova), ma non sono riuscito a trovarlo.
Jack Poulson, il

Ho aggiornato il link per indicare il PDF del libro anziché la recensione del libro.
Jed Brown,

@JedBrown È stato un ottimo riferimento! Grazie mille! :)
Paul

1
@Alexander Tutti attribuiscono il 3D associato a George e Liu, anche se non so se lo indicano esplicitamente nel libro. È ovvio dalla teoria comunque. Il separatore minimo di vertici per una griglia è . La matrice densa associata a quel supernodo ha voci e richiede operazioni per fattorizzare. Il termine logaritmico nel caso 2D è più sottile ed è trattato nel capitolo 8 sulla dissezione nidificata, che raggiunge il limite inferiore. n=m×m×mn2/3=m×m(n2/3)2=n4/3(n2/3)3=n2
Jed Brown,

5

Cuthill-McKee è lo standard di fatto per quello che vuoi fare. Se vuoi giocare con questo metodo, c'è un'implementazione facile da usare dell'algoritmo (e il suo contrario) nella Boost Graph Library (BGL), e la documentazione contiene esempi su come usarlo.


effettivamente invertire Cuhill-McKee; di solito dà meno riempimento. Ma un ordinamento di dissezione nidificato è di gran lunga superiore a un ordinamento a bassa larghezza di banda.
Arnold Neumaier,

4

Parlando di metodi multifrontali, Tim Davis , che lavora su metodi multifrontali per la fattorizzazione LU ( UMFPACK ) ha una serie di routine che riordineranno le matrici per ridurre al minimo il riempimento. Puoi trovarli come qui come parte di SuiteSparse . SuiteSparse utilizza MeTiS.

Un'altra cosa da notare: in alcuni problemi, puoi essere intelligente nell'ordinare le variabili in modo da ottenere modelli a banda o vicini a bande, che possono farti risparmiare il problema (e il tempo della CPU) di chiamare questi algoritmi. Tuttavia, questo riordino intelligente richiede intuizioni da parte vostra ed è tutt'altro che generale come gli algoritmi di riordino basati sulla teoria dei grafi che le persone hanno menzionato nelle loro risposte qui.


Prego, Paul. Se ti piace, votalo.
Geoff Oxberry,

3

C'è un algoritmo chiamato ADI (Alternating Direction Implicit) nei circoli matematici applicati e Split-operator nei circoli di fisica che fa sostanzialmente ciò che descrivi. È un metodo iterativo e segue questa procedura di base:

  1. yx

  2. xy

  3. Ripeti 1 e 2 fino a quando l'errore è piccolo quanto vuoi che sia.

Non conosco la complessità formale di questo algoritmo, ma l'ho trovato convergere in meno iterazioni rispetto a cose come Jacobi e Gauss-Seidel ogni volta che l'ho usato.


2
Se si decide di seguire il percorso di divisione dell'operatore, è necessario prestare attenzione al fatto che la divisione dell'operatore è nota per causare errori in soluzioni di stato stazionario in alcuni casi. (Uno dei miei compagni di laboratorio ha sviluppato un modo per superare questa difficoltà, ma non credo che l'abbia ancora pubblicato.) Inoltre, si sa che la divisione dell'operatore causa errori numerici. Esistono metodi consolidati per stimare questi errori a posteriori ; Don Estep ha svolto un lavoro eccellente in quella zona.
Geoff Oxberry,

@GeoffOxberry Sembra che ti stia riferendo a una divisione diversa. È possibile utilizzare ADI in uno schema completamente implicito che non presenta errori di divisione perché risolve effettivamente il sistema. Esistono anche metodi IMEX che controllano rigorosamente gli errori di divisione.
Jed Brown,

xy

Non ho mai sentito parlare della divisione di Godunov e Strang. Tendo a dividere il mio operatore con la formula Baker-Campbell-Hausdorf. È la stessa cosa?
Dan
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.