Główną ideą multigrid jest projekcja. Staram się myśleć o tym w następujący sposób:
Załóżmy, że chcę rozwiązać PDE z dużą dokładnością, więc dyskretyzuję domenę (powiedzmy, stosując metodę różnic skończonych) na bardzo drobnej siatce z dużą ilością punktów. Na koniec ustawiam swój system równań i jestem gotów go rozwiązać. Próbuję użyć mojego ulubionego solvera iteracyjnego (jacobi, gauss seidel, gradient sprzężony itp.). Poczekam dłużej niż dzień i zdaję sobie sprawę, że mój komputer wciąż próbuje obliczyć odpowiedź !!!
Powodem, dla którego te metody iteracyjne nie działają szybko, jest to, że (zazwyczaj), gdy konfigurujesz duży układ równań takich jak ten, sama macierz ma wartości własne bardzo zbliżone do 1. Dlaczego to ma znaczenie? Ponieważ szybkość zbieżności wielu metod iteracyjnych jest odwrotnie proporcjonalna do największej wartości własnej (patrz link Christiana Clasona do Multigrid Tutorial Slides Brigga, część 1, strona 27). Zatem im bliższa największej wartości własnej jest 1, tym wolniejsza jest metoda iteracyjna. (Uwaga: nieco to upraszcza, ale pomaga zmotywować potrzebę korzystania z wielu sieci).
Oczywiście, zawsze szybciej jest rozwiązać problem, jeśli jest mniej niewiadomych (tj. Na grubej siatce z mniejszą liczbą punktów siatki). Co ważniejsze, rozwiązanie (lub rozwiązanie przybliżone) na grubszej siatce jest dobrym punktem wyjścia do rozwiązania problemu na drobniejszej siatce. Jest to kluczowa idea większości (jeśli nie wszystkich) metod wielosieciowych. Dlaczego tak jest? Intuicyjnie ma to sens, ale istnieje matematycznie rygorystyczny sposób uzasadnienia tego.
Spójrzmy na cztery tryby błędu w metodzie iteracyjnej (dla argumentów, powiedzmy Jacobi lub Gauss Seidel) zastosowane do pierwotnego problemu drobnej siatki. Widzimy, że w ciągu pierwszych kilku iteracji większość błędów wysokiej częstotliwości (wysoce oscylacyjnych) jest usuwana! Jest to świetne, ale nadal występuje błąd niskiej częstotliwości (mniej oscylacyjny), który wciąż pozostaje i nie ustępuje szybko. W rzeczywistości jest to błąd niskiej częstotliwości, który uniemożliwia szybką konwergencję standardowej metody iteracyjnej.
kiedy rozwiązujemy problem na grubszej siatce (powiedzmy, metodą iteracyjną, taką jak Jacobi lub Gauss-Seidel), zasadniczo jesteśmy w stanie znacznie szybciej usunąć błędy niższej częstotliwości (tj. w mniejszej liczbie iteracji) niż na drobnej siatce . Tak więc, jeśli rozwiążemy problem grubej siatki, mamy rozwiązanie, którego błędy dolnej częstotliwości zostały znacznie zmniejszone. Byłby zatem użyteczny jako punkt wyjścia do iteracyjnej metody na drobniejszej siatce.
Chociaż istnieją różne metody wielosieciowe, większość z nich działa w kilku wariantach:
- Zacznij od problemu z drobną siatką
- Projektuj na grubej siatce (znanej również jako ograniczenie )
- Przybliżenie rozwiązania na grubej siatce (za pomocą innego solwera)
- Rzuć gruboziarniste rozwiązanie na drobniejszą siatkę (znaną również jako przedłużenie )
- Wykorzystując projekcję z 4. jako wstępne przypuszczenie, rozwiąż problem drobnej siatki metodą iteracyjną.
Dla mnie najtrudniejszą częścią metody wielosiatkowej są rzuty między siatkami. Samouczki Briggs sugerowane przez @ChristianClason radzą sobie z tym tematem znacznie lepiej niż ja.