Quali linee guida devo seguire quando scelgo un risolutore di sistemi lineare sparsa?


49

I sistemi lineari sparsi si presentano con frequenza crescente nelle applicazioni. Uno ha molte routine tra cui scegliere per risolvere questi sistemi. Al livello più alto, esiste uno spartiacque tra i metodi diretti (ad es. Eliminazione gaussiana sparsa o decomposizione di Cholesky, con speciali algoritmi di ordinamento e metodi multifrontali) e metodi iterativi (ad es. GMRES, (bi) coniugato gradiente).

Come si determina se utilizzare un metodo diretto o iterativo? Dopo aver fatto questa scelta, come si sceglie un algoritmo particolare? Conosco già lo sfruttamento della simmetria (ad esempio, usare il gradiente coniugato per un sistema definito positivo simmetrico rado), ma ci sono altre considerazioni come questa da prendere in considerazione nella scelta di un metodo?

Risposte:


33

La cosa importante quando si scelgono i solutori iterativi è lo spettro dell'operatore, vedere questo documento . Tuttavia, ci sono così tanti risultati negativi, vedi questo documento in cui nessun risolutore iterativo vince per tutti i problemi e questo documento in cui dimostrano di poter ottenere qualsiasi curva di convergenza per GMRES per qualsiasi spettro. Pertanto, sembra impossibile prevedere il comportamento dei solutori iterativi, tranne in alcuni casi isolati. Pertanto, l'opzione migliore è provarli tutti, utilizzando un sistema come PETSc , che ha anche solutori diretti.


2
"Lancia tutto quello che puoi" era praticamente il consiglio a cui ero abituato. :) Il terzo documento a cui ti colleghi è qualcosa che non ho mai visto prima; grazie per quello!
JM,

2
Matt ha un'ottima risposta, ma devi prenderla nel contesto della comunità da cui proviene (informatica scientifica su larga scala). Scoprirai che per piccoli problemi (diciamo, meno di centomila incognite), i risolutori diretti superano ampiamente i metodi iterativi se il problema non è fortemente ellittico. In letteratura non ho visto buoni articoli generali che potrebbero indirizzarti verso una strategia iniziale iniziale, il che è un po 'imbarazzante per me.
Aron Ahmadia,

5
La stima di Aron è buona ma fortemente dipendente dal riempimento poiché i metodi diretti e sparsi di solito esauriscono la memoria prima che esauriscano la pazienza.
Matt Knepley,

18

La scelta tra metodi diretti e metodi iterativi dipende dagli obiettivi e dal problema in questione.

Per i metodi diretti, possiamo notare:

  • La matrice dei coefficienti del sistema lineare cambia nel corso del calcolo e può per i sistemi sparsi esaurire i requisiti di memoria e aumentare lo sforzo di lavoro a causa del riempimento
  • È necessario completare per dare risultati utili
  • La fattorizzazione può essere riutilizzata nei passaggi successivi se sono presenti più lati di destra
  • Può essere usato solo per risolvere sistemi lineari.
  • Di rado fallisce.

Per i metodi iterativi, possiamo notare:

  • L'obiettivo è quello di dare un risultato parziale solo dopo un numero limitato di iterazioni.
  • Lo sforzo di soluzione dovrebbe essere inferiore ai metodi diretti per lo stesso problema.
  • Economico rispetto allo stoccaggio (nessun riempimento)
  • Spesso facile da programmare.
  • È possibile sfruttare una soluzione approssimativa nota.
  • A volte sono veloci ea volte no (a volte anche divergenti).
  • Per problemi complessi, i metodi iterativi sono notevolmente meno robusti rispetto ai metodi diretti.

Linee guida su quando utilizzare metodi diretti o iterativi?

  • Metodi iterativi quando la matrice dei coefficienti è scarsa e i metodi diretti non possono sfruttare in modo efficiente la sparsità (evitare la creazione di riempimenti).
  • Metodi diretti per più lati di destra.
  • I metodi iterativi possono essere più efficienti se l'accuratezza è meno preoccupante
  • Metodi iterativi per sistemi di equazioni non lineari.

8
Penso che sia importante notare che i metodi diretti non sono sempre migliori per più lati di destra. Forse sono migliori per lato destro, ma se il metodo iterativo è mentre il metodo diretto è , è comunque vantaggioso utilizzare il solutore iterativo per lati di destra. O ( n ) O ( n 2 ) O ( 1 )O(n)O(n)O(n2)O(1)
Jack Poulson l'

8

Concordo pienamente con le risposte già fornite. Volevo aggiungere che tutti i metodi iterativi richiedono una sorta di ipotesi iniziale. La qualità di questa ipotesi iniziale può spesso influire sul tasso di convergenza del metodo scelto. Metodi come Jacobi, Gauss Seidel e Successive Over Relaxation lavorano tutti per "appianare" ripetutamente il maggior numero di errori possibile ad ogni passaggio ( vedere questo documento per i dettagli). I primi passaggi riducono piuttosto rapidamente l'errore ad alta frequenza, ma l'errore a bassa frequenza richiede molte più itrazioni per attenuarsi. Questo è ciò che rende la convergenza lenta per questi metodi. In casi come questo, possiamo accelerare la convergenza risolvendo prima l'errore a bassa frequenza (ad esempio risolvendo lo stesso problema su una mesh più grossolana), quindi risolvendo l'errore di frequenza più elevata (ad esempio su una mesh più fine). Se applichiamo questo concetto in modo ricorsivo per divisione e conquista, otteniamo quello che viene chiamato un metodo multi-griglia. Anche se il sistema lineare non è simmetrico, esistono implementazioni alternative del metodo multi-griglia per qualsiasi sistema di matrice sparsa non singolare (ad esempio il metodo multi-griglia algebrico) che può accelerare la convergenza del solutore. La loro scalabilità su sistemi paralleli, tuttavia, è oggetto di molte ricerche.


5
Questa risposta sembra dare l'impressione che l'efficacia di multigrid provenga dal trovare una buona ipotesi iniziale. In realtà, l'ipotesi iniziale è una preoccupazione minore per i problemi lineari e in realtà solo una preoccupazione per Full Multigrid. Multigrid funziona a causa della separazione spettrale. Notare che far funzionare bene i multigrid per problemi difficili è una sfida significativa. Multigrid funziona abbastanza bene in parallelo, è stato l'ingrediente chiave in numerosi premi Gordon Bell e alcuni pacchetti open source funzionano con alta efficienza sulle macchine più grandi di oggi. Per le implementazioni GPU, guarda la libreria CUSP.
Jed Brown,

Il più delle volte un'ipotesi iniziale casuale è abbastanza buona. Nell'estrazione di autovalori mediante l'algoritmo Lanczos, un vettore di avvio / riavvio casuale aiuta. I riavvii si verificano a volte nell'algoritmo di Lanczos.
AnilJ,

3

Manca un'informazione importante nella tua domanda: da dove proviene la matrice. La struttura del problema che stavi cercando di risolvere ha un grande potenziale per suggerire un metodo di soluzione.

Se la tua matrice ha avuto origine da un'equazione differenziale parziale con coefficienti lisci, un metodo multigrid geometrico sarà difficile da battere, in particolare in tre dimensioni. Se il tuo problema è meno regolare, il multigrid algebrico è un buon metodo. Entrambi di solito combinati con i metodi dello spazio di Krylov. Altri solutori efficienti possono essere derivati ​​da metodi multipolari veloci o trasformata di Fourier veloce.

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.