Quali linee guida dovrei usare quando cerco buoni metodi di precondizionamento per un problema specifico?


19

Per la soluzione di grandi sistemi lineari usando metodi iterativi, è spesso interessante introdurre il precondizionamento, ad esempio risolvere invece M - 1 ( A x = b ) , dove M è qui usato per il precondizionamento di sinistra del sistema. In genere, dovremmo avere M - 1A - 1 e fornire la base per (molto più) soluzione efficiente o riduzione delle risorse computazionali (ad es. Memoria di archiviazione) rispetto alla soluzione del sistema originale (ovvero quando M = AAx=bM1(Ax=b)MM1A1M=A). Tuttavia, quali linee guida dovremmo usare per scegliere il precondizionatore? In che modo i professionisti lo fanno per il loro problema specifico?


1
Anche per una particolare classe di equazioni, ciò richiederebbe una risposta molto lunga e dettagliata ...
Jack Poulson,

Dovrebbe essere possibile suggerire strategie euristiche su come scegliere i precondizionatori. Ad esempio, dato un problema, cosa fanno in pratica i professionisti per cercare di trovare un buon precondizionatore? Basta iniziare con un precondizionatore diagonale di base basato sull'estrazione della diagonale da ? o? A
Allan P. Engsig-Karup,

4
Ho intenzione di canalizzare @MattKnepley e dire che l'azione appropriata è fare una ricerca in letteratura. Se fallisce, prova tutte le opzioni facilmente disponibili su un problema ragionevolmente grande. Se fallisce, pensa profondamente alla fisica e al modo in cui puoi trovare una soluzione approssimativa al problema a buon mercato, e usalo come precondizionatore.
Jack Poulson,

@JackPoulson: Dal momento che questa domanda è simile a Quale risolutore di sistemi lineari sparsi usare? e Come scegliere un risolutore lineare scalabile , mi sembra in tema (anche se ampio). Poiché il tuo commento è sostanzialmente una risposta, potresti convertirlo in una risposta?
Geoff Oxberry,

Ho iniziato una generosità su questa domanda, ma sono anche interessato a vedere più domande in questa vena che potrebbero essere meglio poste o limitate a una specifica classe di problemi.
Aron Ahmadia,

Risposte:


17

Inizialmente non volevo dare una risposta perché questo merita un trattamento molto lungo, e spero che qualcun altro lo dia ancora. Tuttavia, posso certamente fornire una breve panoramica dell'approccio raccomandato:

  1. Esegui una ricerca bibliografica approfondita .
  2. Se fallisce, prova ogni precondizionatore che ha senso che puoi mettere le mani su. MATLAB, PETSc e Trilinos sono ambienti piacevoli per questo.
  3. Se ciò fallisce, dovresti riflettere attentamente sulla fisica del tuo problema e vedere se è possibile trovare una soluzione approssimativa economica, forse anche a una versione leggermente modificata del tuo problema.

Esempi di 3 sono le versioni Laplaciane di Helmholtz spostate e il recente lavoro di Jinchao Xu sul precondizionamento dell'operatore biarmonico con Laplaciani.


Grazie! Il resto di questo commento soddisfa il limite minimo di caratteri.
Geoff Oxberry,

14

Altri hanno già commentato la questione del precondizionamento di quelle che chiamerò matrici "monolitiche", ad esempio la forma discretizzata di un'equazione scalare come l'equazione di Laplace, l'equazione di Helmholtz o, se si desidera generalizzarla, la valutazione vettoriale equazione di elasticità. Per queste cose, è chiaro che il multigrid (algebrico o geometrico) è il vincitore se l'equazione è ellittica, e per altre equazioni non è abbastanza chiaro - ma qualcosa come SSOR spesso funziona abbastanza bene (per un certo significato di "ragionevole").

(ABBT0).

(AB0BTA1B)1
(A1~B0(BTA1B)1~)
AA1~(BTA1B)1~

Questa idea di lavorare con i singoli blocchi che compongono la matrice e riutilizzare i precondizionatori su quelli individuali si è dimostrata enormemente potente e ha cambiato completamente il modo in cui oggi pensiamo ai sistemi di precondizionamento delle equazioni. Certamente, questo è rilevante perché la maggior parte dei problemi reali sono, di fatto, sistemi di equazioni.


1
Amico, sì, volevo così tanto la taglia! ;-)
Wolfgang Bangerth,

Nel tuo secondo paragrafo: "Ma questo è sbiadito poiché non funziona molto bene". Puoi darci qualche intuizione sul perché non funziona molto bene? Ci sono circostanze in cui può funzionare?
Andrew T. Barker,

Il motivo per cui il multigrid diretto applicato a interi sistemi non ha dimostrato di avere così tanto successo è che il più fluido deve conservare le proprietà strutturali dell'equazione, e questo non è banale da raggiungere. Ad esempio, se si desidera applicare il multigrid alle equazioni di Stokes, è necessario disporre di una levigatezza che, dato un vettore libero da divergenza, dia un vettore libero da divergenza. Ci sono tali leviganti per Stokes, ma non è banale da costruire e di solito toglie la qualità di liscia / risolutore. Diventa molto più difficile preservare le proprietà in casi più importanti.
Wolfgang Bangerth,

Per quanto riguarda la generalizzazione di cose come Jacobi / SSOR / etc ai sistemi: la maggior parte di questi metodi richiede che le voci diagonali della matrice siano diverse da zero. Questo ovviamente non è il caso di Stokes. Quindi il prossimo metodo più semplice è quello di non guardare le singole righe della matrice ma i blocchi di righe, ad esempio tutte le righe per i DoF associati a un singolo vertice. Questi sono chiamati "smussatori di punti" (punto come nel vertice) e funzionano fino a un certo punto, ma soffrono dello stesso degrado delle prestazioni di Jacobi / SSOR quando i problemi diventano grandi. Per evitare ciò, un precondizionatore deve scambiare informazioni a livello globale come multigrid.
Wolfgang Bangerth,

Multigrid è notoriamente inefficace nel risolvere Helmholtz perché, soprattutto perché le modalità oscillatorie a bassa energia sono difficili da lisciare o da rappresentare in uno spazio approssimativo. C'è stato un po 'di lavoro sul multigrid a raggi d'onda, ma la formulazione è molto tecnica e non è una metodologia matura a questo punto. Si noti che i sistemi non simmetrici possono anche essere risolti usando questo tipo di decomposizione dei blocchi. A seconda della scelta delle variabili (ad es. Primitivo vs. conservativo), all'interno del precondizionatore potrebbe essere necessario un cambiamento di base per esporre la struttura bloccata.
Jed Brown,

13

Jack ha dato una buona procedura per trovare un precondizionatore. Proverò un indirizzo alla domanda "Cosa rende un buon precondizionatore?". La definizione operativa è:

Ax=bM1A1

tuttavia ciò non ci fornisce alcuna idea sulla progettazione di un precondizionatore. La maggior parte dei precondizionatori si basa sulla manipolazione dello spettro dell'operatore. Generalmente, i metodi di Krylov convergono più velocemente quando gli autovalori sono raggruppati, vedi Iterazioni a matrice o Funzioni meromorfe e Algebra lineare . A volte possiamo dimostrare che i risultati di un precondizionatore sono solo alcuni autovalori unici, ad esempio una nota sul precondizionamento per i sistemi lineari indefiniti .

Una strategia comune è esemplificata da Multigrid. I precondizionatori rilassanti (qui smoother) come SOR rimuovono i componenti ad alta frequenza dall'errore. Quando il residuo viene proiettato su una griglia grossolana, i componenti di errore a frequenza più bassa diventano frequenza più elevata e possono essere nuovamente attaccati da SOR. Questa strategia di base è alla base di versioni più complicate di MG, come AMG. Si noti che in fondo, il risolutore deve risolvere accuratamente le frequenze più basse nell'errore.

Un'altra strategia consiste nel risolvere l'equazione in piccoli sottospazi, che è esattamente ciò che stanno facendo i solutori di Krylov. Nella forma più semplice, questo è il metodo Kaczmarz o il metodo Additivo Schwarz . La tendenza avanzata della teoria qui, la decomposizione del dominio , si concentra sull'approssimazione spettrale dell'errore sull'interfaccia, poiché si presume che i domini siano risolti in modo abbastanza accurato.

A


Grazie per la risposta. Qualunque esperienza su quanto dovremmo andare a dimostrare effettivamente che il precondizionamento funziona per sistemi di grandi dimensioni - e possibilmente come questo può o dovrebbe essere fatto in pratica. È mia esperienza che per molti sistemi dobbiamo fare affidamento su intuizione, euristica, ecc.
Allan P. Engsig-Karup

Penso che l'intuizione stia andando troppo lontano. Quello che vedo in pratica è una prova per un sistema semplice. Quindi un argomento secondo cui alcune modifiche dovrebbero essere insensibili a un parametro o a un certo tipo di variazione. Quindi esperimenti numerici che mostrano che funziona anche al di fuori di questo modello di variazione.
Matt Knepley,
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.