A principal idéia por trás do multigrid é a projeção. Eu tento pensar sobre isso da seguinte maneira:
Suponha que eu queira resolver um PDE com muita precisão, por isso procuro discretizar o domínio (digamos, usando o método das diferenças finitas) em uma grade muito fina com muitos e muitos pontos. No final, configurei meu sistema de equações e estou pronto para resolvê-lo. Eu tento usar o meu solucionador iterativo favorito (jacobi, gauss seidel, gradiente conjugado, etc ...). Eu espero mais de um dia e percebo que meu computador ainda está tentando calcular a resposta !!!
A razão pela qual esses métodos iterativos não estão funcionando rapidamente é porque (geralmente) quando você configura um grande sistema de equações como essa, a própria matriz tem valores próprios extremamente próximos de 1. Por que isso importa? Como a taxa de convergência de muitos métodos iterativos está inversamente relacionada ao maior autovalor (consulte o link de Christian Clason para os slides do tutorial Multigrid de Brigg, parte 1, página 27). Portanto, quanto mais próximo estiver o maior valor próprio de 1, mais lento será o método iterativo. (Observação: isso simplifica um pouco demais as coisas, mas ajuda a motivar a necessidade de multigrid).
Obviamente, é sempre mais rápido resolver o problema se houver menos incógnitas (ou seja, em uma grade grossa com menos pontos de grade). Mais importante, porém, a solução (ou solução aproximada) em uma grade mais grossa é um bom ponto de partida para resolver o problema em uma grade mais fina. Essa é a ideia principal por trás da maioria dos métodos multigrid (se não todos). Por que esse é o caso? Intuitivamente, faz sentido, mas existe uma maneira matematicamente rigorosa de justificar isso.
Vejamos os quatro modos do erro em um método iterativo (por razões de argumento, digamos jacobi ou gauss seidel) aplicado ao problema original da grade fina. Veríamos que, nas primeiras iterações, a maioria dos erros de alta frequência (altamente oscilatórios) é removida! Isso é ótimo, mas há um erro de baixa frequência (menos oscilatório) que ainda permanece e não desaparece rapidamente. De fato, é o erro de baixa frequência que impede que um método iterativo padrão converja rapidamente.
quando resolvemos o problema em uma grade mais grossa (digamos, por um método iterativo como jacobi ou gauss-seidel), somos essencialmente capazes de remover erros de frequência mais baixa muito mais rapidamente (ou seja, em menos iterações) do que na grade fina . Portanto, se resolvermos o problema de uma grade grossa, teremos uma solução cujos erros de menor frequência foram significativamente reduzidos. Assim, seria útil como ponto de partida para um método iterativo na grade mais fina.
Embora existam métodos multigrid diferentes, a maioria deles opera com algumas variações do seguinte:
- Comece com o problema de grade fina
- Projeto em uma grade grossa (também conhecida como restrição )
- Aproximar a solução na grade grossa (usando outro solucionador)
- Projete a solução de grade grossa na grade mais fina (também conhecida como prolongamento )
- Usando a projeção de 4. como um palpite inicial, resolva o problema da grade fina por um método iterativo.
Para mim, a parte mais difícil do método multigrid é as projeções entre grades. Os tutoriais de Briggs sugeridos por @ChristianClason lidam com esse assunto muito melhor do que eu.