Vorrei iniziare con le correzioni. No, odeint
non 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.
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:
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
:
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.