Quais diretrizes devo usar ao procurar bons métodos de pré-condicionamento para um problema específico?

19

Para a solução de grandes sistemas lineares usando métodos iterativos, é frequentemente interessante introduzir o pré-condicionamento, por exemplo, resolva M - 1 ( A x = b ) , onde M é usado aqui para o pré-condicionamento à esquerda do sistema. Normalmente, devemos ter esse M - 1A - 1 e fornecer a base para (muito mais) solução eficiente ou redução de recursos computacionais (por exemplo, armazenamento de memória) em comparação com a solução do sistema original (ou seja, quando M = AAx=bM1(Ax=b)MM1A1M=UMA) No entanto, quais diretrizes devemos usar para escolher o pré-condicionador? Como os profissionais fazem isso para o seu problema específico?

Allan P. Engsig-Karup
fonte
1
Mesmo para uma determinada classe de equações, isso exigiria uma resposta muito longa e detalhada ...
Jack Poulson
Deve ser possível sugerir estratégias heurísticas de como os pré-condicionantes podem ser escolhidos. Por exemplo, dado um problema, o que os profissionais fazem na prática para tentar encontrar um bom pré-condicionador? Basta começar com um pré-condicionador diagonal básico baseado na extração da diagonal de ? ou? UMA
Allan P. Engsig-Karup
4
Vou canalizar @MattKnepley e dizer que a ação apropriada é fazer uma pesquisa bibliográfica. Se isso falhar, tente todas as opções facilmente disponíveis em um problema razoavelmente grande. Se isso falhar, pense profundamente na física e em como você pode encontrar uma solução aproximada para o problema mais barato, e use-a como precondicionador.
Jack Poulson
@JackPoulson: Como essa pergunta está em uma linha semelhante a Qual solucionador de sistema linear esparso usar? e Como escolher um solucionador linear escalável , parece-me um tópico (embora amplo). Como o seu comentário é basicamente uma resposta, você pode convertê-lo em uma resposta?
9603 Geoff Oxberry
Eu comecei uma recompensa nessa questão, mas também estou interessado em ver mais perguntas nesse sentido que possam ser mais bem colocadas ou restritas a uma classe específica de problemas.
Aron Ahmadia 03/04

Respostas:

17

Originalmente, eu não queria dar uma resposta porque isso merece um tratamento muito longo, e espero que alguém ainda o dê. No entanto, certamente posso dar uma breve visão geral da abordagem recomendada:

  1. Faça uma pesquisa completa na literatura.
  2. Se isso falhar, tente todos os pré-condicionadores que fizerem sentido para que você possa colocar as mãos em prática. MATLAB, PETSc e Trilinos são ambientes agradáveis ​​para isso.
  3. Se isso falhar, você deve pensar cuidadosamente sobre a física do seu problema e verificar se é possível encontrar uma solução aproximada barata, talvez até uma versão ligeiramente alterada do seu problema.

Exemplos de 3 são as versões laplacianas deslocadas de Helmholtz, e o trabalho recente de Jinchao Xu sobre pré-condicionar o operador biharmonic com os laplacianos.

Jack Poulson
fonte
Obrigado! O restante deste comentário atende ao limite mínimo de caracteres.
9602 Geoff Oxberry
14

Outros já comentaram a questão do pré-condicionamento, o que chamarei de matrizes "monolíticas", ou seja, por exemplo, a forma discretizada de uma equação escalar, como a equação de Laplace, a equação de Helmholtz ou, se você deseja generalizar, o valor vetorial equação da elasticidade. Por essas coisas, fica claro que o multigrid (algébrico ou geométrico) é o vencedor se a equação é elíptica e, para outras equações, não é tão clara - mas algo como o SSOR geralmente funciona razoavelmente bem (para algum significado de "razoável").

Para mim, a grande revelação tem sido o que fazer com problemas que não são monolíticos, por exemplo, para o operador Stokes Quando comecei com a análise numérica, há 15 anos, acho que as pessoas tinham a esperança de que as mesmas técnicas pudessem ser aplicadas a essas matrizes, como acima, e a direção da pesquisa era tentar multigrid diretamente ou usar generalizações do SSOR (usando " smoothers de ponto "como Vanka) e métodos semelhantes. Mas isso desapareceu, pois não funciona muito bem.

(UMABBT0 0).

O que veio substituir isso foi o que foi inicialmente chamado de "pré-condicionadores baseados na física" e mais tarde simplesmente (e talvez com mais precisão) "pré-condicionadores de bloco", como o de Silvester e Wathen. Geralmente, eles se baseiam na eliminação de blocos ou nos complementos de Schur e a idéia é criar um pré-condicionador de tal maneira que se possa reutilizar pré-condicionadores para blocos individuais que funcionam bem. No caso da equação de Stokes, por exemplo, o pré-condicionador de Silvester / Wathen usa que a matriz

(UMAB0 0BTUMA-1B)-1
quando usado como pré-condicionador com GMRES resultaria em convergência em exatamente duas iterações. Por ser triangular, a inversão também é muito mais simples, mas ainda temos o problema do que fazer com os blocos diagonais, e aí se usa aproximações: onde o til significa substituir o inverso exato por uma aproximação. Isso geralmente é muito mais simples: como o bloco A é um operador elíptico, ~ A - 1 é bem aproximada por uma ciclo-V multigrade, por exemplo, e verifica-se que aqui,
(UMA-1~B0 0(BTUMA-1B)-1~)
UMAUMA-1~ é bem aproximado por uma ILU de uma matriz de massa.(BTUMA-1B)-1~

Essa ideia de trabalhar com os blocos individuais que compõem a matriz e reutilizar pré-condicionadores em blocos individuais provou ser extremamente poderosa e mudou completamente a maneira como pensamos hoje nos sistemas de equações de pré-condicionamento. Obviamente, isso é relevante porque a maioria dos problemas reais são, de fato, sistemas de equações.

Wolfgang Bangerth
fonte
1
Cara, sim, eu queria tanto a recompensa! ;-)
Wolfgang Bangerth
No seu segundo parágrafo: "Mas isso desapareceu, pois não funciona muito bem". Você pode dar alguma intuição sobre por que não funciona muito bem? Existem circunstâncias em que isso pode funcionar?
Andrew T. Barker
A razão pela qual o multigrid direto aplicado a sistemas inteiros não provou ser tão bem-sucedido é que o mais suave precisa conservar as propriedades estruturais da equação, e isso não é trivial de alcançar. Por exemplo, se você deseja aplicar multigrid às equações de Stokes, é necessário ter uma suavidade que, dado um vetor livre de divergência, forneça um vetor livre de divergência. Existem essas características para a Stokes, mas sua construção não é trivial e geralmente tira a qualidade de mais suave / solucionadora. Torna-se muito mais difícil preservar propriedades em casos mais gerais.
Wolfgang Bangerth
Quanto à generalização de coisas como Jacobi / SSOR / etc para sistemas: a maioria desses métodos exige que as entradas diagonais da matriz sejam diferentes de zero. Obviamente esse não é o caso de Stokes. Portanto, o próximo método mais simples é não examinar linhas de matriz individuais, mas blocos de linhas, por exemplo, todas as linhas de DoFs associadas a um único vértice. Eles são chamados de "point-smoothers" (aponte como no vértice) e funcionam até certo ponto, mas sofrem com a mesma degradação de desempenho que Jacobi / SSOR quando os problemas se tornam grandes. Para evitar isso, um pré-condicionador precisa trocar informações globalmente. como multigrid.
precisa saber é o seguinte
O Multigrid é notoriamente ineficaz na solução de Helmholtz porque, principalmente porque os modos oscilatórios de baixa energia são difíceis de suavizar ou representar em um espaço grosseiro. Houve algum trabalho sobre multigrid de raios-onda, mas a formulação é muito técnica e não é uma metodologia madura neste momento. Observe que sistemas não simétricos também podem ser resolvidos usando esse tipo de decomposição de blocos. Dependendo da escolha das variáveis ​​(por exemplo, primitiva x conservadora), uma mudança de base pode ser necessária dentro do pré-condicionador para expor a estrutura bloqueada.
Jed Brown
13

Jack deu um bom procedimento para encontrar um pré-condicionador. Vou tentar abordar a questão "O que faz um bom pré-condicionador?". A definição operacional é:

UMAx=bM-1UMA-1

no entanto, isso não nos dá uma ideia do design de um pré-condicionador. A maioria dos pré-condicionadores é baseada na manipulação do espectro do operador. Geralmente, os métodos de Krylov convergem mais rapidamente quando os valores próprios são agrupados, consulte Iterações de matriz ou funções meromorfas e álgebra linear . Às vezes, podemos provar que os resultados de um pré-condicionador são apenas alguns autovalores únicos, por exemplo, uma nota sobre pré-condicionamento para sistemas lineares indefinidos .

Uma estratégia comum é exemplificada pelo Multigrid. Pré-condicionantes relaxantes (aqui smoothers) como o SOR removem componentes de alta frequência no erro. Quando o resíduo é projetado em uma grade grosseira, os componentes de erro de frequência mais baixa se tornam uma frequência mais alta e podem ser atacados novamente pelo SOR. Essa estratégia básica está subjacente às versões mais complicadas do MG, como o AMG. Observe que, na parte inferior, o solucionador deve resolver as frequências mais baixas do erro com precisão.

Outra estratégia envolve resolver a equação em pequenos subespaços, exatamente o que os solucionadores de Krylov estão fazendo. Na forma mais simples, esse é o método Kaczmarz ou o Método Aditivo Schwarz . A tensão avançada da teoria aqui, Decomposição de Domínio , concentra-se na aproximação espectral do erro na interface, já que se supõe que os domínios sejam resolvidos com bastante precisão.

UMA

Matt Knepley
fonte
Obrigado por sua resposta. Quaisquer experiências a respeito de quão longe devemos ir para realmente provar que o pré-condicionamento funciona para sistemas grandes - e possivelmente como isso pode ou deve ser feito na prática. A minha experiência é que, para muitos sistemas, temos de confiar na intuição, heurísticas, etc.
Allan P. Engsig-Karup
Eu acho que a intuição está indo longe demais. O que vejo na prática é uma prova de um sistema simples. Então, um argumento de que alguma modificação deve ser insensível a um parâmetro ou a um certo tipo de variação. Depois, experimentos numéricos mostrando que ele funciona mesmo fora desse modelo de variação.
precisa saber é o seguinte