Por que o método de Newton não está convergindo?

22

Estou usando o SNES do pacote de resolução não-linear do PETSc para resolver um sistema de equações não-lineares obtido discretizando uma equação diferencial parcial. Como posso determinar por que o solucionador não está convergindo e o que posso fazer para resolver com êxito minhas equações?

Jed Brown
fonte
8
Como em qualquer método iterativo, é fundamental que alguém tenha uma boa semente para iniciar o método Newton-Raphson. Um ponto de partida ruim geralmente resulta em caos.
JM
6
Eu acho que "muitas vezes resulta em caos" está incorreto. Referindo-se a Blum, Cucker, Shub e Smale, Newton possui bacias atraentes separadas por limites que podem resultar em iterações caóticas. Portanto, esse tipo de comportamento é muito improvável comparado à convergência. Se o algoritmo estiver apenas procurando soluções reais, ele falhará frequentemente, mas não ficará caótico.
Matt Knepley 01/12/19
5
Eu quis dizer "caos" no sentido não técnico, @Matt; por exemplo, divergência para o infinito ou comportamento cíclico. Talvez "desastre" tivesse sido uma escolha melhor de palavras?
JM

Respostas:

42

O método de Newton pode não convergir por muitas razões, aqui estão algumas das mais comuns.

  • O jacobiano está errado (ou correto em seqüência, mas não em paralelo).
  • O sistema linear não é resolvido ou não é resolvido com precisão suficiente.
  • O sistema jacobiano tem uma singularidade com a qual o solucionador linear não está lidando.
  • Há um erro na rotina de avaliação da função.
  • A função não é contínua ou não possui primeiras derivadas contínuas (por exemplo, mudança de fase ou limitadores de TVD).
  • As equações podem não ter uma solução (por exemplo, ciclo limite em vez de estado estacionário) ou pode haver uma "colina" entre a estimativa inicial e o estado estacionário (por exemplo, os reagentes devem inflamar e queimar antes de atingir um estado estacionário, mas o estado estacionário). estado residual será maior durante a combustão).

Aqui estão algumas das maneiras de ajudar a depurar a falta de convergência de Newton.

  • Corra com as opções -snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason. Se a resolução linear não convergir, verifique se o jacobiano está correto e veja esta pergunta . Se o resíduo pré-condicionado convergir, mas o resíduo verdadeiro não, o pré-condicionador pode ser singular. Se a resolução linear convergir bem, mas a pesquisa de linha falhar, o jacobiano pode estar incorreto.
  • Corra -pc_type lu or -pc_type svdpara ver se o problema é um solucionador linear ruim
  • Corra com -mat_viewou -mat_view_drawpara ver se o jacobiano parece razoável
  • Corra -snes_type test -snes_test_displaypara ver se o jacobiano que você está usando está errado. Compare a saída ao adicionar -mat_fd_type dspara ver se o resultado é sensível à escolha do parâmetro diferencial.
  • Corra -snes_mf_operator -pc_type lupara ver se o jacobiano que você está usando está errado. Se o problema for muito grande para uma solução direta, tente -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12. Compare a saída ao adicionar -mat_mffd_type dspara ver se o resultado é sensível à escolha do parâmetro diferencial.
  • Execute em um processador para ver se o problema é apenas em paralelo.
  • Corra -snes_ls_monitorpara ver se a pesquisa de linha está falhando (isso geralmente é um sinal de um jacobiano ruim).
  • Execute com -infopara obter informações mais detalhadas sobre o processo da solução.

Aqui estão algumas maneiras de ajudar o processo de Newton se tudo acima

  • Execute com o seqüenciamento de grade ( -snes_grid_sequenceé tudo o que você precisa se estiver trabalhando com a DM) para gerar uma melhor estimativa inicial de sua malha mais fina
  • Executar com precisão quad ( ./configure --with-precision=__float128 --download-f2cblaslapackcom PETSc 3.2 e posterior, precisa da versão 4.6 ou posterior dos compiladores GNU)
  • Altere as unidades (não dimensionalização), escala da condição de contorno ou formulação, para que o jacobiano seja melhor condicionado.
  • Mollify recursos na função que não possuem primeiras derivadas contínuas (geralmente ocorre quando há ifdeclarações na avaliação residual, por exemplo, mudança de fase ou limitadores de TVD). Use um solucionador de desigualdades variacionais ( SNESVINEWTONRSLS ) se as descontinuidades forem de importância fundamental.
  • Tente um método de região confiável ( -ts_type tr, pode ser necessário ajustar os parâmetros).
  • Execute com algum parâmetro de continuação a partir de um ponto em que você conhece a solução, consulte TSPSEUDO para resolver problemas de estado estacionário. Existem pacotes de solucionadores de homotopia, como o PHCpack, que podem oferecer todas as soluções possíveis (e dizer que foram encontradas todas), mas elas não são escalonáveis ​​e não conseguem resolver nada além de pequenos problemas.
Jed Brown
fonte