L'idea principale dietro multigrid è la proiezione. Provo a pensarci come segue:
Supponiamo che io voglia risolvere un PDE con molta precisione, quindi continuo a discretizzare il dominio (diciamo, usando il metodo della differenza finita) su una griglia molto fine con molti e molti punti. Alla fine, ho impostato il mio sistema di equazioni e sono pronto a risolverlo. Provo a usare il mio solutore iterativo preferito (jacobi, gauss seidel, coniugato gradiente, ecc ...). Continuo ad aspettare più di un giorno e mi rendo conto che il mio computer sta ancora cercando di calcolare la risposta !!!
Il motivo per cui questi metodi iterativi non funzionano rapidamente è perché (in genere) quando si imposta un grande sistema di equazioni come questo, la matrice stessa ha autovalori estremamente vicini a 1. Perché è importante? Perché il tasso di convergenza di molti metodi iterativi è inversamente correlato al più grande autovalore (vedere il link di Christian Clason alle diapositive di esercitazione multigrid di Brigg, parte 1, pagina 27). Quindi, più il più grande autovalore è vicino a 1, più lento è il metodo iterativo. (Nota: questo semplifica un po 'le cose, ma aiuta a motivare la necessità di multigrid).
Ovviamente, è sempre più veloce risolvere il problema se ci sono meno incognite (cioè su una griglia grossolana con meno punti griglia). Ma soprattutto, la soluzione (o soluzione approssimativa) su una griglia più grossolana è un buon punto di partenza per risolvere il problema su una griglia più fine. Questa è l'idea chiave dietro la maggior parte (se non tutti) i metodi multigrid. Perché è così? Intuitivamente, ha senso, ma esiste un modo matematicamente rigoroso di giustificarlo.
Diamo un'occhiata alle quattro modalità dell'errore in un metodo iterativo (per amor di argomenti, diciamo jacobi o gauss seidel) applicato al problema della griglia fine originale. Vedremmo che entro le prime iterazioni, la maggior parte degli errori ad alta frequenza (altamente oscillatori) è stata rimossa! Questo è fantastico, ma c'è un errore a bassa frequenza (meno oscillatorio) che rimane e non scompare rapidamente. In realtà, è un errore a bassa frequenza che impedisce a un metodo iterativo standard di convergere rapidamente.
quando risolviamo il problema su una griglia più grossolana (diciamo, con un metodo iterativo come jacobi o gauss-seidel), siamo essenzialmente in grado di rimuovere gli errori di frequenza inferiore molto più rapidamente (cioè in meno iterazioni) rispetto alla griglia fine . Quindi, se risolviamo il problema di una griglia grossolana, abbiamo una soluzione i cui errori di frequenza inferiore sono stati ridotti in modo significativo. Pertanto, sarebbe utile come punto di partenza per un metodo iterativo sulla griglia più fine.
Sebbene esistano diversi metodi multigrid, la maggior parte di essi opera con una variazione di quanto segue:
- Inizia con il problema della griglia fine
- Proietta su una griglia grossolana (nota anche come restrizione )
- Approssimazione della soluzione sulla griglia grossolana (usando qualche altro solutore)
- Proiettare la soluzione a griglia grossa sulla griglia più fine (nota anche come prolungamento )
- Usando la proiezione da 4. come ipotesi iniziale, risolvi il problema della griglia fine con un metodo iterativo.
Per me, la parte più difficile del metodo multigrid sono le proiezioni tra le griglie. I tutorial di Briggs suggeriti da @ChristianClason gestiscono questo argomento molto meglio di me.