Istnieją dwa problemy, które możesz napotkać.
Źle warunkowane
Po pierwsze, problem jest źle uwarunkowany, ale jeśli podasz resztkę, Newton-Kryłow wyrzuca połowę twoich znaczących cyfr, różnicując skończoną różnicę, aby uzyskać działanie jakobianów:
jot[ x ] y≈ F.( x + ϵ y) - F( x )ϵ
Jeśli podasz analityczny jakobian, zachowasz wszystkie cyfry (np. 16 w podwójnej precyzji). Metody Kryłowa również opierają się na produktach wewnętrznych, więc jeśli twój Jakub jest źle uwarunkowany melodią , to jest efektywny w liczbie pojedynczej, a Kryłow może stagnować lub zwracać błędne rozwiązania. Może to również zapobiec zbieżności bezpośrednich solverów. Czasami można zastosować metody wielosiatkowe do homogenizacji do grubej siatki z kondycjonowalnym układem. Gdy problemu nie da się sformułować z lepszym uwarunkowaniem, warto pracować z poczwórną precyzją. (Jest to obsługiwane na przykład przez PETSc.)1016
Zauważ, że te same problemy dotyczą metod quasi-Newtonowych, jednak bez różnicowania skończonego. Wszystkie skalowalne metody rozwiązywania problemów z operatorami niedokładnymi (np. Równania różniczkowe) muszą wykorzystywać informacje jakobskie do wstępnego kondycjonowania.
Jest prawdopodobne, że fsolve
albo nie używał informacji jakobskiej, albo używał metody dogleg lub zmiany, aby robić postępy metodą „gradientu opadania”, pomimo zasadniczo pojedynczego jakobiańskiego (tj. Skończone różnicowanie miałoby dużo „szumu” z arytmetyka o skończonej precyzji). Nie jest to skalowalne i fsolve
prawdopodobnie zwiększa się wraz ze wzrostem rozmiaru problemu.
Globalizacja
Jeśli problemy liniowe zostaną rozwiązane dokładnie, możemy wykluczyć problemy związane z problemem liniowym (Kryłow) i skupić się na nich z powodu nieliniowości. Lokalne minima i nierówności cechują się powolną konwergencją lub powodują stagnację. Poisson-Boltzmann jest gładkim modelem, więc jeśli zaczniesz od wystarczająco dobrego wstępnego odgadnięcia, Newton zbiegnie się kwadratowo. Większość strategii globalizacji wymaga pewnego rodzaju kontynuacji w celu uzyskania wysokiej jakości wstępnego odgadnięcia ostatecznych iteracji. Przykłady obejmują kontynuację siatki (np. Full Multigrid), kontynuację parametrów i pseudotransient kontynuację. Ten ostatni ma ogólne zastosowanie do problemów w stanie ustalonym i oferuje pewną teorię globalnej konwergencji, patrz Coffey, Kelley i Keyes (2003) . Wyszukiwanie pokazuje ten artykuł, który może ci się przydać:Shestakov, Milovich i Noy (2002) Rozwiązanie nieliniowego równania Poissona-Boltzmanna za pomocą pseudo-przejściowej kontynuacji i metody elementów skończonych . Pseudotransjentowa kontynuacja jest ściśle związana z algorytmem Levenberga-Marquardta.
Dalsza lektura
sol = newton_krylov(func, guess, method='gmres')
) rozwiązała problem. Nie jestem pewien, dlaczego, ale każdy z tym problemem może rozważyć zrobienie tego samego.