Cosa significa "simplettico" in riferimento agli integratori numerici, e l'odeo di SciPy li usa?


25

In questo commento ho scritto:

... integratore SciPy predefinito, che presumo utilizza solo metodi simplettici.

in cui mi riferisco a SciPy's odeint, che utilizza un "metodo non rigido (Adams)" o un "metodo rigido (BDF)". Secondo la fonte :

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

Ecco un esempio in cui propagherò l'orbita di un satellite intorno alla terra per tre mesi solo per dimostrare che esso procede come previsto.

Credo che gli integratori non simplettici abbiano la proprietà indesiderabile che tenderanno a non conservare energia (o altre quantità) e quindi sono indesiderabili nella meccanica orbitale, ad esempio. Ma non sono esattamente sicuro di cosa sia un simplettico integratore simplettico.

È possibile spiegare quale sia la proprietà (che semplifica un integratore simplettico) in modo semplice e (abbastanza) facile da capire ma non impreciso? Sto chiedendo dal punto di vista di come funziona l'integratore internamente , piuttosto che come si comporta nei test.

E il mio sospetto è corretto odeinte utilizza solo integratori simplettici?


4
Come regola empirica, dovresti solo sperare che un integratore di black box sia semplicistico se ti richiede di separare equazioni di posizione e momento.
origimbo,

@origimbo Grazie. Questi lo fanno, e sembra che odeintsia un wrapper Python per codici sorgente abbastanza vecchi, consolidati e ben referenziati (domanda modificata, riferimenti a ODEPACK e LSODA) anche se certamente ammetto di usarlo in modalità black-box. Il mio esempio collegato mostra che il vettore di stato 6D è composto da tre posizioni e tre velocità.
uhoh,

11
Gli integratori ODE in ODEPACK e LSODA non sono integratori simplettici.
Brian Borchers,

2
Ecco un esempio funzionante che confronta due solutori molto semplici: Euler e Symplectic Euler: idontgetoutmuch.wordpress.com/2013/08/06/… .
Idontgetoutmuch

2
Il libro di Hairer, Nørsett e Wanner offre una buona spiegazione dei metodi simplettici. Guarda in particolare la Figura 16.1 e le figure qui .
JM,

Risposte:


47

Vorrei iniziare con le correzioni. No, odeintnon ha integratori simplettici. No, l'integrazione simplettica non significa conservazione dell'energia.

Cosa significa symplectic e quando dovresti usarlo?

Prima di tutto, cosa significa symplectic? Symplectic significa che la soluzione esiste su una varietà simplettica. Una varietà simplettica è un insieme di soluzioni che è definito da una 2-forma. I dettagli delle varietà simplettiche probabilmente suonano come sciocchezze matematiche, quindi il senso è che esiste una relazione diretta tra due insiemi di variabili su una tale varietà. Il motivo per cui questo è importante per la fisica è perché le equazioni di Hamiltoniano hanno naturalmente che le soluzioni risiedono su una molteplicità simplettica nello spazio delle fasi, con la divisione naturale che è la posizione e le componenti del momento. Per la vera soluzione hamiltoniana, quel percorso nello spazio delle fasi è energia costante.

Un integratore simplettico è un integratore la cui soluzione risiede su una molteplicità simplettica. A causa dell'errore di discretizzazione, quando risolve un sistema hamiltoniano non ottiene esattamente la traiettoria corretta sul collettore. Invece, quella stessa traiettoria è perturbata per l'ordine dalla vera traiettoria. Quindi c'è una deriva lineare dovuta all'errore numerico di questa traiettoria nel tempo. Gli integratori normali tendono ad avere una deriva quadratica (o più) e non hanno buone garanzie globali su questo percorso dello spazio delle fasi (solo locale).nO(Δtn)n

Ciò che ciò tende a significare è che gli integratori simplettici tendono a catturare i modelli di lungo periodo meglio degli integratori normali a causa di questa mancanza di deriva e di questa quasi garanzia di periodicità. Questo notebook mostra bene quelle proprietà sul problema di Kepler . La prima immagine mostra ciò di cui sto parlando con la natura periodica della soluzione.

inserisci qui la descrizione dell'immagine

Ciò è stato risolto utilizzando l' integratore simplettico del 6 ° ordine di Kahan e Li di DifferentialEquations.jl . Puoi vedere che l'energia non è esattamente conservata, ma la sua variazione dipende da quanto è lontana la varietà perturbata dalla varietà reale. Ma poiché la soluzione numerica stessa risiede su una molteplicità simplettica, tende ad essere quasi esattamente periodica (con qualche deriva numerica lineare che puoi vedere), facendola fare molto bene per l'integrazione a lungo termine. Se fai lo stesso con RK4, puoi ottenere un disastro:

inserisci qui la descrizione dell'immagine

Si può vedere che il problema è che non esiste una vera periodicità nella soluzione numerica e quindi gli straordinari tendono a spostarsi.

Ciò evidenzia la vera ragione per scegliere integratori simplettici: gli integratori simplettici sono bravi su integrazioni di lunga data su problemi che hanno la proprietà simplettica (sistemi Hamiltoniani) . Vediamo quindi alcune cose. Nota che non hai sempre bisogno di integratori simplettici anche su un problema simplettico. In questo caso, un metodo adattivo Runge-Kutta del 5 ° ordine può andare bene. Ecco Tsit5:

inserisci qui la descrizione dell'immagine

Nota due cose. Uno, ottiene una precisione abbastanza buona da non poter vedere la deriva effettiva nel grafico dello spazio delle fasi. Tuttavia, sul lato destro puoi vedere che c'è questa deriva di energia, e quindi se stai facendo un'integrazione abbastanza lunga questo metodo non funzionerà così come il metodo di soluzione con le proprietà periodiche. Ma ciò solleva la domanda: come si comporta in termini di efficienza rispetto all'integrazione estremamente accurata? Bene, questo è un po 'meno certo. In DiffEqBenchmarks.jl puoi trovare alcuni benchmark che indagano su questa domanda. Ad esempio, questo notebookesamina l'errore energetico rispetto al runtime su un sistema di equazioni hamiltoniane da un modello quadruplo di Boson e mostra che se si desidera una precisione davvero elevata, anche per tempi di integrazione piuttosto lunghi è più efficiente utilizzare solo un RK di ordine elevato o Runge-Kutta Nystrom ( Metodo RKN). Ciò ha senso perché per soddisfare la proprietà simplettica gli integratori rinunciano a una certa efficienza e praticamente devono essere fissati un passo temporale (c'è qualche ricerca che fa progressi in quest'ultimo, ma non è molto lontana).

Inoltre, notate da entrambi questi notebook che potete anche semplicemente adottare un metodo standard e proiettarlo sulla varietà della soluzione ogni passo (o ogni pochi passi). Questo è ciò che stanno facendo gli esempi che utilizzano il callback DifferentialEquations.jl ManifoldProjection . Vedete che le leggi sulla conservazione sono rispettate ma con un costo aggiuntivo per risolvere un sistema implicito ad ogni passo. Puoi anche usare un solutore ODE completamente implicito o matrici di massa singolari per aggiungere equazioni di conservazione, ma il risultato finale è che questi metodi sono più costosi dal punto di vista computazionale come un compromesso.

Quindi, per riassumere, la classe di problemi in cui si desidera raggiungere un integratore simplettico sono quelli che hanno una soluzione su una varietà simplettica (sistemi Hamiltoniani) in cui non si desidera investire le risorse computazionali per avere una tolleranza molto precisa (tolleranza <1e-12) soluzione e non necessita di energia esatta / ecc. conservazione. Ciò evidenzia che si tratta di proprietà di integrazione a lungo termine, quindi non dovresti semplicemente accontentarti di tutti, volenti o nolenti, come suggerisce una parte della letteratura. Ma sono ancora uno strumento molto importante in molti campi come l'astrofisica in cui si hanno integrazioni di lunga data che è necessario risolvere in modo sufficientemente rapido senza avere una precisione assurda.

Dove trovo gli integratori simplettici? Che tipo di integratori simplettici esistono?

Esistono generalmente due classi di integratori simplettici. Esistono gli integratori simpatici di Runge-Kutta (che sono quelli mostrati negli esempi precedenti) e ci sono metodi impliciti di Runge-Kutta che hanno la proprietà simplettica. Come menziona @origimbo, i simpatici integratori Runge-Kutta richiedono di fornire loro una struttura partizionata in modo che possano gestire le parti di posizione e quantità di moto separatamente. Tuttavia, contrariamente al commento, i metodi impliciti di Runge-Kutta sono semplicistici senza richiedere questo, ma richiedono invece di risolvere un sistema non lineare. Questo non è troppo male perché se il sistema non è rigido questo sistema non lineare può essere risolto con iterazione funzionale o accelerazione di Anderson, ma i metodi RK simpatici dovrebbero comunque essere preferiti per efficienza (

Detto questo, odeint non ha metodi da nessuna di queste famiglie , quindi non è una buona scelta se stai cercando integratori simplettici. A Fortran, il sito di Hairer ha un piccolo set che puoi usare . Mathematica ne ha alcuni integrati . I solutori ODE GSL hanno integratori di punti gaussiani RK impliciti che IIRC sono simpatici, ma questo è l'unico motivo per usare i metodi GSL.

Ma il set più completo di integratori simplettici si trova in DifferentialEquations.jl in Julia (ricorda che questo è stato usato per i notebook sopra). L'elenco dei metodi Runge-Kutta simplettici disponibili si trova in questa pagina e noterai che anche il metodo implicito del punto medio è simplettico (il metodo implicito trapezoidale Runge-Kutta è considerato "quasi simplettico" perché è reversibile). Non solo ha il più ampio set di metodi, ma è anche open-source (puoi vedere il codice e i suoi test in un linguaggio di alto livello) e ha molti benchmark . Un buon quaderno introduttivo per usarlo per risolvere problemi fisici è questo quaderno tutorial. Ma ovviamente si consiglia di iniziare con il pacchetto attraverso il primo tutorial ODE .

In generale puoi trovare un'analisi dettagliata delle suite numeriche di equazioni differenziali in questo post del blog . È abbastanza dettagliato ma dal momento che deve coprire molti argomenti, ciascuno di essi ha meno dettagli di questo, quindi sentiti libero di chiedere che venga espanso in qualsiasi modo.


10
Con questa risposta mi sembra di aver colpito il Jackpot Stack Exchange! Questa è la risposta perfetta per me, poiché ne comprendo immediatamente una parte e le parti che non mi lasciano ansioso di leggere oltre. Apprezzo molto il tempo che hai impiegato per trovare questa risposta e includere altri link utili e istruttivi.
uhoh,

Prima di entrare nei dettagli matematici, potremmo approssimativamente dire che simpatico significa conservazione del volume , no?
Miguel,

2
FTR, il motivo per cui il 5 ° ordine adattivo Runge-Kutta si comporta molto meglio di RK4 qui non è che ha un ordine superiore ma che sceglie dimensioni di passo più adatte. Il motivo per cui RK4 ha prestazioni così scarse è principalmente che la dimensione del gradino è inadeguatamente alta sul perigeo; lo stesso solutore con metà della dimensione del passo darebbe una soluzione molto migliore. (Solo, perderebbe un sacco di tempo a risolvere l'orbita finemente attorno all'apogeo, dove questo non è affatto necessario.)
leftaroundabout

1
ottima esposizione. Come domanda secondaria: l'OP inizia con un riferimento a Python - ci sono tutorial / pacchetti Python raccomandati sulla falsariga degli esempi Julia collegati?
Quetzalcoatl,

1
L'unico pacchetto Python che conosco per questo tipo di integratori è diffeqpy , dove non è documentato su README ma puoi accedere a tutti questi stessi metodi e riscriverlo in Python usando quel pacchetto.
Chris Rackauckas,

14

pqH(p,q)

dqdt=+Hp
dpdt=Hq.
H
p(t),q(t)=ϕt(p(t0),q(t0))
dpdqpqsono unidimensionali che puoi pensare a questo come dire che l'area all'interno delle curve chiuse nello spazio delle fasi viene conservata. Ciò garantisce tutti i tipi di belle proprietà di stabilità, poiché le "sfere" delle traiettorie devono rimanere "vicine" tra loro.

In termini numerici, un integratore simplettico agisce allo stesso modo, conservando anche questa area / due forme. A sua volta ciò significa che esiste un "hamiltoniano numerico" conservato (che potrebbe non essere [leggi 'non è'] uguale a quello esatto). Si noti che la stabilità non è la stessa dell'accuratezza, quindi la maggior parte dei vantaggi dei metodi simplettici derivano dall'integrazione per tempi molto lunghi (ad esempio, il metodo può posizionare rapidamente un satellite dalla parte sbagliata della Terra, senza mai lasciarlo decadere esso).


Grazie per questo! Ora userò le parole sopra il mio voto. Le n-palle delle traiettorie sono più a rischio quando si trovano vicino a biforcazioni come quelle nelle simulazioni a 3 corpi. cf. Doedel et al. 2007, int. J. Bifurcation and Chaos, v 17, n. 8 (2007) 2625–2677 Come ho fatto? Anche ieec.cat/hosted/web-libpoint/papers/…
uhoh

2
A meno che il lettore non sia a conoscenza dei dettagli matematici, la menzione della stabilità è fuorviante, poiché la conservazione del volume non significa che le singole traiettorie rimangano vicine.
Miguel,

1
@Miguel Penso che questa sia una di quelle situazioni in cui il lettore che non segue i dettagli matematici è danneggiato in entrambi i modi, ma in termini di troika del solito numericista di precisione, stabilità ed efficienza computazionale, direi che sottolineando la stabilità i benefici sono utili. Sono felice di accettare suggerimenti per una riscrittura se riesci a pensare a qualcosa di meglio che non è intenzionalmente inaccurato.
origimbo,

22

1
@Miguel: Ma la massa di particelle può dividersi in due o più parti. Il suo volume totale deve solo rimanere costante.
Wolfgang Bangerth,
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.