Quando Newton-Krylov non è un risolutore appropriato?


16

Recentemente ho confrontato diversi solutori non lineari di scipy e sono stato particolarmente colpito dall'esempio di Newton-Krylov nel ricettario di Scipy in cui risolvono un'equazione differenziale di secondo ordine con il termine di reazione non lineare in circa 20 righe di codice.

Ho modificato il codice di esempio per risolvere l'equazione di Poisson non lineare ( chiamata anche equazione di Poisson-Boltzmann , vedi pagina 17 in queste note) per eterostrutture a semiconduttore, che ha la forma,

d2φdX2-K(X)(p(X,φ)-n(X,φ)+N+(X))=0

(Questa è la funzione residua che viene passata al solutore.)

Questo è un problema elettrostatico in cui e p ( x , ϕ ) sono funzioni non lineari per la forma n i ( x ) e - ( E i ( x , ϕ ) - E f ) . I dettagli qui non sono importanti, ma il punto è che la funzione non lineare varia in modo esponenziale con ϕ quindi la funzione residua può variare in un ampio intervallo ( 10 - 6 - 10 16 )n(X,φ)p(X,φ)nio(X)e-(Eio(X,φ)-Ef)φ10-6-1016)con una leggera variazione in .φ

Risolvo numericamente questa equazione con Newton-Krylov di Scipy, ma non converrebbe mai (in effetti segnalerebbe sempre un errore nel calcolo del giacobino). Sono passato da un solutore di Newton-Krylov a fsolve (che si basa su MINPACK hybrd) e ha funzionato per la prima volta!

Ci sono ragioni generali per cui Newton-Krylov non è adatto a determinati problemi? Le equazioni di input devono essere condizionate in qualche modo?

Forse sono necessarie ulteriori informazioni per commentare, ma perché pensi che fsolve abbia funzionato in questo caso?


Ho avuto lo stesso problema con il fallimento di Newton-Krylov con il giacobino, e ho scoperto che cambiando il metodo da "lgmres" a "gmres" ( sol = newton_krylov(func, guess, method='gmres')) risolto il problema. Non sono esattamente sicuro del perché, ma chiunque altro con questo problema potrebbe considerare di fare lo stesso.
Arthur Dent,

Risposte:


18

Ci sono due problemi che potresti incontrare.

Ill condizionata

Innanzitutto, il problema è mal condizionato, ma se fornisci solo un residuo, Newton-Krylov sta gettando via metà delle tue cifre significative differenziando finito il residuo per ottenere l'azione del giacobino:

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

Se si fornisce un giacobino analitico, si arriva a conservare tutte le cifre (ad es. 16 in doppia precisione). I metodi di Krylov si basano anche sui prodotti interiori, quindi se il tuo giacobino è mal condizionato al ritmo di1016, è effettivamente singolare e Krylov può ristagnare o restituire soluzioni errate. Ciò può anche impedire la convergenza dei solutori diretti. A volte è possibile utilizzare metodi multigrid per omogeneizzare in una griglia grossolana con condizionamento trattabile. Quando un problema non può essere formulato con un migliore condizionamento, può valere la pena lavorare in quadrupla precisione. (Questo è supportato da PETSc, ad esempio.)

Si noti che gli stessi problemi si applicano ai metodi quasi-Newton, sebbene senza differenze finite. Tutti i metodi scalabili per problemi con operatori non compatti (ad es. Equazioni differenziali) devono utilizzare le informazioni giacobine per il precondizionamento.

È probabile che fsolveo non abbia usato le informazioni giacobine o che abbia usato un metodo dogleg o uno spostamento per progredire con un metodo di "discesa gradiente", nonostante un Jacobiano essenzialmente singolare (cioè, la differenza finita avrebbe molto "rumore" da aritmetica di precisione finita). Questo non è scalabile e fsolveprobabilmente diventa più lento quando si aumenta la dimensione del problema.

Globalizzazione

Se i problemi lineari vengono risolti accuratamente, possiamo escludere i problemi relativi al problema lineare (Krylov) e concentrarci su quelli dovuti alla non linearità. I minimi locali e le caratteristiche non fluide rallentano la convergenza o causano stagnazione. Poisson-Boltzmann è un modello fluido, quindi se inizi con un'ipotesi iniziale abbastanza buona, Newton converge quadraticamente. La maggior parte delle strategie di globalizzazione prevede una sorta di continuazione per produrre un'ipotesi iniziale di alta qualità per le iterazioni finali. Gli esempi includono la continuazione della griglia (ad es. Full Multigrid), la continuazione dei parametri e la continuazione pseudotrasparente. Quest'ultimo è generalmente applicabile a problemi di stato stazionario e offre alcune teorie sulla convergenza globale, vedi Coffey, Kelley e Keyes (2003) . Una ricerca mostra questo documento, che potrebbe esserti utile:Shestakov, Milovich e Noy (2002) Soluzione dell'equazione non lineare di Poisson-Boltzmann usando la continuazione pseudo-transitoria e il metodo degli elementi finiti . La continuazione pseudotrasparente è strettamente correlata all'algoritmo Levenberg-Marquardt.

Ulteriori letture

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.