Quando Newton-Krylov não é um solucionador apropriado?

16

Recentemente, comparei diferentes solucionadores não lineares do scipy e fiquei particularmente impressionado com o exemplo de Newton-Krylov no Scipy Cookbook, no qual eles resolvem uma equação de equação diferencial de segunda ordem com o termo de reação não linear em cerca de 20 linhas de código.

Modifiquei o código de exemplo para resolver a equação de Poisson não linear ( também chamada de equação de Poisson-Boltzmann , consulte a página 17 nestas notas) para heteroestruturas de semicondutores, que tem a forma,

d2ϕdx2-k(x)(p(x,ϕ)-n(x,ϕ)+N+(x))=0 0

(Essa é a função residual que é passada para o solucionador.)

Este é um problema electrostática onde e são funções não lineares para a forma . Os detalhes aqui não são importantes, mas o ponto é que a função não linear varia exponencialmente com modo que a função residual pode variar em uma faixa enorme ( com uma pequena alteração em .n(x,ϕ)p(x,ϕ)nEu(x)e-(EEu(x,ϕ)-Ef)ϕ10-6-1016)ϕ

Eu resolvo numericamente essa equação com Newton-Krylov, de Scipy, mas ela nunca convergiria (na verdade, sempre reportaria um erro no cálculo do jacobiano). Troquei de um solucionador de Newton-Krylov para fsolve (que é baseado no MINPACK hybrd) e funcionou pela primeira vez!

Existem razões gerais pelas quais Newton-Krylov não se ajusta a certos problemas? As equações de entrada precisam ser condicionadas de alguma forma?

Talvez seja necessário mais informações para comentar, mas por que você acha que o fsolve funcionou nesse caso?

boyfarrell
fonte
Eu tive o mesmo problema com Newton-Krylov que falhou com o jacobiano e descobri que alterar o método de "lgmres" para apenas "gmres" ( sol = newton_krylov(func, guess, method='gmres')) resolveu o problema. Não sei exatamente por que, mas qualquer outra pessoa com esse problema pode considerar fazer o mesmo.
Arthur Dent

Respostas:

18

Há dois problemas que você provavelmente encontrará.

Mau condicionamento

Primeiro, o problema está mal condicionado, mas se você fornecer apenas um resíduo, Newton-Krylov estará jogando fora metade dos seus dígitos significativos diferindo finamente o resíduo para obter a ação do jacobiano:

J[x]yF(x+ϵy)-F(x)ϵ

1016

Observe que os mesmos problemas se aplicam aos métodos quase-Newton, embora sem diferenciação finita. Todos os métodos escalonáveis ​​para problemas com operadores não compactos (por exemplo, equações diferenciais) devem usar informações jacobianas para pré-condicionamento.

É provável que fsolvenão tenha usado informações jacobianas ou que tenha usado um método dogleg ou uma mudança para avançar com um método de "descida gradiente", apesar de um jacobiano essencialmente singular (ou seja, a diferenciação finita teria muito "ruído" de precisão finita aritmética). Isso não é escalável e fsolveprovavelmente fica mais lento à medida que você aumenta o tamanho do problema.

Globalização

Se os problemas lineares forem resolvidos com precisão, podemos descartar problemas relacionados ao problema linear (Krylov) e focar naqueles devido à não linearidade. Mínimos locais e não suaves apresentam convergência lenta ou causam estagnação. Poisson-Boltzmann é um modelo suave, portanto, se você começar com um palpite inicial suficientemente bom, Newton convergirá quadraticamente. A maioria das estratégias de globalização envolve algum tipo de continuação para produzir um palpite inicial de alta qualidade para as iterações finais. Os exemplos incluem a continuação da grade (por exemplo, Multigrid completo), a continuação de parâmetros e a continuação pseudotransiente. Este último é geralmente aplicável a problemas de estado estacionário e oferece alguma teoria de convergência global, ver Coffey, Kelley e Keyes (2003) . Uma pesquisa mostra este documento, que pode ser útil para você:Shestakov, Milovich e Noy (2002) Solução da equação não-linear de Poisson-Boltzmann usando continuação pseudo-transitória e método dos elementos finitos . A continuação pseudotransiente está intimamente relacionada ao algoritmo de Levenberg-Marquardt.

Leitura adicional

Jed Brown
fonte