Come stabilire che un metodo iterativo per grandi sistemi lineari è convergente nella pratica?


11

Nella scienza computazionale incontriamo spesso grandi sistemi lineari che siamo tenuti a risolvere con mezzi (efficienti), ad esempio con metodi diretti o iterativi. Se ci concentriamo su quest'ultimo, come possiamo stabilire che un metodo iterativo per risolvere un sistema lineare di grandi dimensioni è convergente nella pratica?

È chiaro che possiamo fare analisi di prova ed errore (cfr. Perché il mio risolutore lineare iterativo non converge? ) E fare affidamento su metodi iterativi che garantiscono la convergenza tramite prove o hanno una solida base di esperienze (ad esempio metodi subspaziali di Krylov come CG e GMRES per sistemi simmetrici e non simmetrici rispettivamente).

Ma cosa si può fare per stabilire la convergenza nella pratica? e cosa si fa?


1
Ottima domanda! Quando dici "stabilisci la convergenza", intendi "stabilire che la soluzione sta convergendo" o che "stabilire che la convergenza avverrà"? So, ad esempio, che l'oggetto KSP PETSc ha alcune tecniche predefinite per testare la convergenza (la norma dell'errore sta diminuendo, il numero massimo di iterazioni). È questo il tipo di risposta che stai cercando?
Aron Ahmadia,

@aron: penso che sarà interessante vedere le risposte che affrontano entrambi i problemi.
Allan P. Engsig-Karup,

Risposte:


6

Per molte equazioni differenziali parziali che si presentano in natura, in particolare con forti non linearità o anisotropie, la scelta di un precondizionatore appropriato può avere un grande effetto sul fatto che il metodo iterativo converga rapidamente, lentamente o per niente. Esempi di problemi noti per avere precondizionatori veloci ed efficaci includono equazioni differenziali parziali fortemente ellittiche, in cui il metodo multigrid spesso raggiunge una rapida convergenza. Esistono numerosi test che è possibile utilizzare per valutare la convergenza; qui userò la funzionalità di PETSc come esempio, poiché è probabilmente la libreria più antica e più matura per risolvere iterativamente sistemi sparsi di equazioni lineari (e non lineari).

PETSc utilizza un oggetto chiamato KSPMonitor per monitorare l'avanzamento di un solutore iterativo e per decidere se il solutore è convergente o divergente. Il monitor utilizza quattro diversi criteri per decidere se interrompere. Maggiori dettagli sulla discussione qui sono disponibili nella pagina man di KSPGetConvergedReason () .

Partiamo dal presupposto che l'utente sta risolvendo il seguente sistema di equazioni per : Chiamiamo l'attuale ipotesi e definiamo il residuo base allo stile di precondizionamento:x

Ax=b

x^r^
  1. Precondizionamento a(P1(Axb))

    r^=P1(Ax^b)
  2. No / Precondizionamento a destra(AP1Px=b)

    r^=Ax^b

Criteri di convergenza

  1. Tolleranza assoluta - Il criterio di tolleranza assoluta è soddisfatto quando la norma del residuo è inferiore alla costante predefinita : atol
    r^atol
  2. Tolleranza relativa - Il criterio di tolleranza relativa è soddisfatto quando la norma del residuo è inferiore alla norma del lato destro di un fattore di costante predefinita :rr t o lb rtol
    r^rtolb
  3. Altri criteri : la soluzione iterativa può anche convergere a causa del rilevamento di una piccola lunghezza del gradino o di una curvatura negativa.

Criteri di divergenza

  1. Iterazioni massime : il numero di iterazioni che un solutore può eseguire è limitato dalle iterazioni massime. Se nessuno degli altri criteri è stato soddisfatto quando viene raggiunto il numero massimo di iterazioni, il monitor ritorna come divergente.

  2. NaN residuo - Se in qualsiasi momento il residuo viene valutato in NaN, il solutore ritorna divergente.

  3. Divergenza della norma residua Il monitor ritorna divergente se in qualsiasi momento la norma del residuo è maggiore della norma del lato destro di un fattore di costante predefinita : rd t o lb dtol

    r^dtolb
  4. Guasto del risolutore Il metodo Krylov stesso può segnalare divergenze se rileva una matrice singolare o un precondizionatore.

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.