@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-48
errore. 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.