Quand Newton-Krylov n'est-il pas un solveur approprié?

16

Récemment, j'ai comparé différents solveurs non linéaires de scipy et j'ai été particulièrement impressionné par l' exemple de Newton-Krylov dans le livre de recettes Scipy dans lequel ils résolvent une équation d'équation différentielle de second ordre avec un terme de réaction non linéaire dans environ 20 lignes de code.

J'ai modifié l'exemple de code pour résoudre l'équation de Poisson non linéaire ( également appelée équation de Poisson-Boltzmann , voir page 17 dans ces notes) pour les hétérostructures semi-conductrices, qui a la forme,

2ϕX2-k(X)(p(X,ϕ)-n(X,ϕ)+N+(X))=0

(Il s'agit de la fonction résiduelle transmise au solveur.)

Il s'agit d'un problème électrostatique où et sont des fonctions non linéaires pour la forme . Les détails ici ne sont pas importants, mais le fait est que la fonction non linéaire varie exponentiellement avec sorte que la fonction résiduelle peut varier sur une énorme plage ( avec un léger changement dans .n(X,ϕ)p(X,ϕ)nje(X)e-(Eje(X,ϕ)-EF)ϕdix-6-dix16)ϕ

Je résous numériquement cette équation avec Newton-Krylov de scipy, mais elle ne convergerait jamais (en fait, elle rapporterait toujours une erreur avec le calcul du jacobien). Je suis passé d'un solveur Newton-Krylov à fsolve (qui est basé sur MINPACK hybrd) et cela a fonctionné la première fois!

Y a-t-il des raisons générales pour lesquelles Newton-Krylov ne convient pas à certains problèmes? Les équations d'entrée doivent-elles être conditionnées d'une manière ou d'une autre?

Peut-être que plus d'informations sont nécessaires pour commenter, mais pourquoi pensez-vous que fsolve a fonctionné dans ce cas?

boyfarrell
la source
J'ai eu le même problème avec Newton-Krylov échouant avec le jacobien, et j'ai constaté que le changement de la méthode de "lgmres" à seulement "gmres" ( sol = newton_krylov(func, guess, method='gmres')) a résolu le problème. Je ne sais pas exactement pourquoi, mais toute autre personne ayant ce problème pourrait envisager de faire de même.
Arthur Dent

Réponses:

18

Il y a probablement deux problèmes que vous rencontrerez.

Mauvais conditionnement

Tout d'abord, le problème est mal conditionné, mais si vous ne fournissez qu'un résiduel, Newton-Krylov jette la moitié de vos chiffres significatifs en différenciant finement le résidu pour obtenir l'action du jacobien:

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

Si vous fournissez un jacobien analytique, vous pouvez conserver tous les chiffres (par exemple, 16 en double précision). Les méthodes Krylov reposent également sur des produits intérieurs, donc si votre jacobien est mal conditionné à hauteur de , il est effectivement singulier et Krylov peut stagner ou renvoyer des solutions erronées. Cela peut également empêcher la convergence des solveurs directs. Parfois, vous pouvez utiliser des méthodes multigrilles pour homogénéiser en une grille grossière avec un conditionnement traitable. Lorsqu'un problème ne peut pas être formulé avec un meilleur conditionnement, il peut être utile de travailler en quadruple précision. (Ceci est pris en charge par PETSc, par exemple.)dix16

Notez que les mêmes problèmes s'appliquent aux méthodes quasi-Newton, mais sans différenciation finie. Toutes les méthodes évolutives pour les problèmes avec les opérateurs non compacts (par exemple, les équations différentielles) doivent utiliser des informations jacobiennes pour le préconditionnement.

Il est probable que fsolve soit n'a pas utilisé d'informations jacobiennes, soit qu'il ait utilisé une méthode dogleg ou un changement pour progresser avec une méthode de «descente en gradient», malgré une méthode jacobienne essentiellement singulière (c.-à-d. Que la différenciation finie aurait beaucoup de «bruit» de arithmétique de précision finie). Ce n'est pas évolutif et fsolvedevient probablement plus lent lorsque vous augmentez la taille du problème.

Mondialisation

Si les problèmes linéaires sont résolus avec précision, nous pouvons exclure les problèmes liés au problème linéaire (Krylov) et nous concentrer sur ceux dus à la non-linéarité. Les minima locaux et les caractéristiques non lisses ralentissent la convergence ou provoquent la stagnation. Poisson-Boltzmann est un modèle lisse, donc si vous commencez avec une estimation initiale suffisamment bonne, Newton convergera quadratique. La plupart des stratégies de mondialisation impliquent une sorte de poursuite pour produire une estimation initiale de haute qualité pour les itérations finales. Les exemples incluent la continuation de la grille (par exemple, Full Multigrid), la continuation des paramètres et la continuation pseudotransitoire. Ce dernier est généralement applicable aux problèmes d'état stationnaire et offre une théorie de convergence globale, voir Coffey, Kelley et Keyes (2003) . Une recherche révèle ce papier, qui peut vous être utile: Shestakov, Milovich et Noy (2002) Solution de l'équation de Poisson-Boltzmann non linéaire utilisant la continuation pseudo-transitoire et la méthode des éléments finis . La continuation pseudo-transitoire est étroitement liée à l'algorithme de Levenberg-Marquardt.

Lectures complémentaires

Jed Brown
la source