Costruire metodi espliciti di Runge Kutta dall'ordine 9 in poi


9

Alcuni libri più vecchi che ho visto affermano che il numero minimo di fasi di un metodo Runge-Kutta esplicito di un ordine specificato è sconosciuto per ordini . È ancora vero?9

Quali librerie ci sono per lavorare automaticamente con i metodi Runge-Kutta di alto ordine?


Cosa intendi con "lavorare automaticamente con"?
David Ketcheson,

@DavidKetcheson Generazione dei coefficienti ed esame delle loro proprietà. Non riesco proprio a immaginare che qualcuno deriverebbe un metodo di ordine superiore puramente a mano, date quante condizioni e variabili ci sono.
Kirill,

Non conosco alcun software per generare tali coefficienti. Ho visto metodi RK di alto livello online, come quelli , sviluppati da Terry Feagin. Il documento che descrive il processo di ottenimento dei coefficienti per l'ordine 10 è qui . Non sembra che il metodo automatizzato possa essere facilmente implementato e dubito che esistano. (Come nota a margine, non ho mai visto un RK di ordine 9, sempre (7) 8 o (8) 10. Non sono sicuro che esista nemmeno RK9!)
Etienne Pellegrini,

(7) 8, (8) 9, (8) 10, (10) 12 e (12) 14 hanno tutti implementazioni in DifferrntialEquations.jl . Puoi quindi provare un sacco di problemi. Darò una valutazione dettagliata tra un po '.
Chris Rackauckas,

Si noti che sopra l'8 ° ordine non è generalmente utile nella precisione in virgola mobile. I metodi Verner sono davvero buoni, ma solo fino a 6 è facile da usare per FSAL. Feagin non ha interpolazioni.
Chris Rackauckas,

Risposte:


14

misura

Questo è ancora vero. Nel libro di Butcher , pagina 196, si legge quanto segue: In un articolo del 1985, Butcher ha mostrato che sono necessarie 11 fasi per ottenere l'ordine 8 , e questo è preciso. Per l'ordine 10, Hairer ha derivato una famiglia di metodi in 17 fasi , ma non si sa se si può fare di meglio. Le stesse informazioni sono fornite nella Sezione II.5 di Hairer, Norsett e Wanner vol. Io . Quest'ultimo riferimento passa anche attraverso alcune delle tecniche per lo sviluppo di coppie di alto ordine (fino all'ordine 8).

Esiste un limite superiore per il numero minimo di fasi richieste per qualsiasi ordine, poiché è possibile costruirle mediante estrapolazione. Questo è noto da molto tempo; vedere questo mio recente documento per una spiegazione. Tuttavia, questo limite è quadratico nell'ordine ed è certamente abbastanza pessimista. Il software nodepy discusso di seguito può generare coefficienti esatti per questi metodi e anche per i metodi di correzione differiti (che sono i metodi Runge-Kutta) di qualsiasi ordine.

Credo che @Etienne abbia ragione nel dire che i metodi di ordine più elevato che sono stati costruiti a mano sono dovuti a Terry Feagin. Per quanto riguarda l'altro suo commento, questo documento contiene circa 9 (8) coppie:

JH Verner, coppie esplicite di ordine elevato Runge-Kutta con ordine di basso livello, matematica numerica applicata, volume 22, numeri 1–3, novembre 1996, pagine 345-357

Np

p | N
-----
1 | 1
2 | 2
3 | 4
4 | 8
5 | 17
6 | 37
7 | 85
8 | 200
9 | 486
10| 1205
11| 3047
12| 7813
13| 20300
14| 53264

Software

Per metodi di ordine molto elevato, il numero e la complessità delle condizioni dell'ordine diventano impossibili da gestire a mano. Alcuni pacchetti simbolici (almeno Mathematica) hanno capacità di generare condizioni di ordine Runge-Kutta. Probabilmente ci sono altri pacchetti là fuori, ma sono a conoscenza di quanto segue (entrambi i quali ho scritto):

  • nodepy : un pacchetto Python in grado di generare espressioni simboliche e codice per le condizioni dell'ordine in ordine arbitrario. Include anche il codice Python per verificare tali condizioni, calcolare i coefficienti di errore, ecc.
  • RK-Opt : un pacchetto MATLAB che, tra le altre cose, può trovare metodi Runge-Kutta di alto ordine con coefficienti ottimizzati per alcuni scopi diversi. Attualmente non è in grado di gestire l'RK esplicito del 9 ° ordine (sale all'8 ° ordine per i metodi di ordine 1, il decimo ordine per i metodi con ordine di livello superiore). Se è qualcosa che ti interessa, potrei aggiungere abbastanza facilmente le condizioni del 9 ° ordine (e superiori).

Un'altra nota interessante sulle condizioni degli ordini, che diventa significativa a ordini così elevati, è che ci sono due modi per ricavarli e che ti danno condizioni diverse (ma collettivamente equivalenti): una è dovuta a Butcher, l'altra ad Albrecht .


5

@La risposta di DavidKetcheson colpisce i punti più importanti: puoi sempre costruire metodi di ordine abbastanza alto usando l'estrapolazione, questo è un limite molto pessimistico e puoi sempre fare molto meglio, tutti quelli buoni sono derivati ​​a mano (con l'aiuto di alcuni computer algebra), non è noto alcun limite inferiore e i metodi di ordine più elevato sono dovuti a Feagin. Dati alcuni dei commenti, ho voluto completare la risposta con una discussione sugli attuali tableau allo stato dell'arte sul campo.

Se vuoi un compendio dei tableau RK, puoi trovarne uno in questo codice Julia . Le citazioni per il documento da cui provengono sono nei documenti per i costruttori di tableau. La documentazione per gli sviluppatori di DifferentialEquations.jl elenca tutti questi tableau come disponibili per l'uso , e puoi vedere qui che questi sono tutti testati usando le suite di integrazione continua Travis e AppVeyor per assicurarsi che non solo le condizioni dell'ordine siano soddisfatte, ma in realtà raggiungere la convergenza richiesta (test di verifica). Da questi, puoi vedere che ci sono:

  • 5 metodi di ordine 9
  • 6 ordina 10 metodi
  • 2 ordine 12 metodi
  • Metodo 1 ordine 14

(che ho scoperto che sono stati pubblicati). Ancora una volta, tutto derivato a mano.

I test di convergenza mostrano che alcune derivazioni non sono state eseguite con una precisione sufficientemente elevata da funzionare per numeri superiori a 64 bit (sono commentate in questo modo ). Quindi è una curiosità interessante da tenere presente: a questi ordini elevati di solito si ottengono solo coefficienti che "a un errore x" soddisfano le condizioni dell'ordine, ma quando si utilizza l'aritmetica di precisione arbitraria è possibile rilevare effettivamente questi limiti. Quindi la precisione con cui si eseguono i coefficienti è importante, e dovresti sceglierla per coprire la precisione che desideri testare (/ usare, ovviamente).

Se vuoi un sacco di grafici di stabilità, puoi semplicemente plot(tableau)usare la ricetta Plots.jl. Una buona serie di note che contiene molte di queste scritte può essere trovata sul sito Web di Peter Stone (vai sotto e fai clic su dì gli schemi dell'ordine 10 e otterrai un sacco di PDF). Durante lo sviluppo di DifferentialEquations.jl, ho creato quella serie di tableau per esaminarli sistematicamente su problemi di test / guardare gli indicatori analitici per vedere quali dovrebbero essere inclusi nella libreria principale. Ho preso alcune brevi note qui . Come puoi vedere dagli algoritmi inclusi nella libreria principale, quelli che ho trovato utili erano i metodi Verner e Feagin. Il metodo Verner del 9 ° ordine è il metodo di ordine più elevato con un interpolante che corrisponde anche all'ordine. È qualcosa da riconoscere: i metodi Feagin non hanno un interpolante corrispondente (anche se puoi avviare Bootstrap Hermite, ma è davvero inefficiente).

Dal momento che sono tutti implementati con implementazioni molto efficienti, puoi giocarci da solo e vedere quanto contano effettivamente le diverse funzionalità. Ecco un quaderno Jupyter che mostra i metodi Feagin in uso . Si noti che il diagramma di convergenza sta davvero andando in 1e-48errore. I metodi di ordine superiore sono solo più efficienti dei metodi di ordine inferiore quando è davvero necessaria una tolleranza molto bassa. Puoi trovare alcuni parametri di riferimento che ne utilizzano alcuni su DiffEqBenchmarks.jl , anche se quando vengono utilizzati di solito è il metodo Verner del 9 ° ordine, e di solito mostra che il punto di riferimento non rientra nel regime in cui questo massimo di ordine è efficiente.

Quindi, se vuoi giocare e lavorare con alcuni metodi di alto ordine, RK-Opt è quello che ho trovato è un buon strumento per derivarne alcuni (come menzionato @DavidKetcheson), e DifferentialEquations.jl ha tutti i metodi pubblicati (penso? ) implementato in modo da poter facilmente testare / confrontare con loro. Tuttavia, a meno che non trovi un presupposto che può essere abbandonato, dai miei test non sono stato in grado di trovare qualcosa che batte i metodi Verner (ordini 6-9) e Feagin (ordini 10+). YMMV però, e mi piacerebbe vedere ulteriori ricerche in questo.

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.