Konfiguracja testu porównawczego
W oprogramowaniu Julia DifferentialEquations.jl zaimplementowaliśmy wiele metod wyższego rzędu, w tym metody Feagina. Możesz to zobaczyć na naszej liście metod , a następnie istnieje mnóstwo innych, których możesz użyć jako dostarczonych tabel . Ponieważ wszystkie te metody są zebrane razem, możesz łatwo porównywać między nimi. Możesz zobaczyć testy, które mam online tutaj i że bardzo łatwo jest przetestować wiele różnych algorytmów. Jeśli chcesz poświęcić kilka minut na przetestowanie testów, wybierz go. Oto podsumowanie tego, co wychodzi.
Po pierwsze, należy zauważyć, że jeśli spojrzysz na każdy z testów, zobaczysz, że nasze DP5
(zamówienie Dormand-Prince Prince 5) i DP8
metody są szybsze niż kody Hairer Fortran ( dopri5
i dop853
), a zatem te implementacje są bardzo dobrze zoptymalizowane . Pokazują one, że, jak zauważono w innym wątku, nadmierne użycie metod Dormanda-Prince'a wynika z tego, że metody te są już napisane, a nie dlatego, że wciąż są najlepsze. Tak więc rzeczywiste porównanie najbardziej zoptymalizowanych implementacji jest między metodami Tsitorous, Verner i Feagin z DifferentialEquations.jl.
Wyniki
Ogólnie, metody rzędu wyższego niż 7 mają dodatkowy koszt obliczeniowy, który zwykle nie jest równoważony przez porządek, biorąc pod uwagę wybrane tolerancje. Jednym z powodów jest to, że wybory współczynników dla metod niższego rzędu są bardziej zoptymalizowane (mają małe „zasadnicze współczynniki błędu obcięcia”, które mają większe znaczenie, gdy nie jesteś asymetrycznie mały). Widać, że w wielu problemach, takich jak tutaj, metody Verner Efficient 6 i 7 działają wyjątkowo dobrze, ale metody takie jak Verner Efficient 8 mogą mieć niższe nachylenie. Wynika to z tego, że „korzyści” wyższego rzędu łączą się przy niższych tolerancjach, więc zawsze istnieje tolerancja, w której metody wyższego rzędu będą bardziej wydajne.
Pytanie brzmi jednak, jak nisko? W dobrze zoptymalizowanej implementacji poziom ten jest dość niski z dwóch powodów. Pierwszym powodem jest to, że metody niższego rzędu implementują coś o nazwie FSAL (pierwszy taki sam jak ostatni). Ta właściwość oznacza, że metody niższego rzędu ponownie wykorzystują ocenę funkcji z poprzedniego kroku w następnym kroku, a tym samym mają efektywnie jedną ocenę mniejszą funkcji. Jeśli zostanie to właściwie zastosowane, wówczas coś w rodzaju metody 5. rzędu (Tsitorous lub Dormand-Prince) faktycznie bierze 5 ocen funkcji zamiast 6, które sugerowałyby tableau. Dotyczy to również metody Verner 6.
Drugi powód wynika z interpolacji. Jednym z powodów korzystania z metody bardzo wysokiego rzędu jest podejmowanie mniejszej liczby kroków i po prostu interpolowanie wartości pośrednich. Jednak w celu uzyskania wartości pośrednich funkcja interpolująca może wymagać większej liczby ocen funkcji niż użyto do wykonania kroku.Jeśli spojrzysz na metody Vernera, potrzeba 8 dodatkowych ocen funkcji dla metody Order 8, aby uzyskać interpolant rzędu 8. Wiele razy metody niskiego rzędu zapewniają „wolny” interpolant, na przykład większość metod piątego rzędu ma swobodną interpolację czwartego rzędu (bez dodatkowych ocen funkcji). Oznacza to, że jeśli potrzebujesz wartości pośrednich (które będą potrzebne dla dobrej fabuły, jeśli używasz metody wysokiego rzędu), istnieją dodatkowe ukryte koszty. Uwzględnij fakt, że te interpolowane wartości są naprawdę ważne w obsłudze zdarzeń i rozwiązywaniu równań różniczkowych opóźnienia, i rozumiesz, dlaczego wpływają na to dodatkowe koszty interpolacji.
A co z metodami Feagina?
Zobaczysz więc, że podejrzanie brakuje metod Feagina w testach porównawczych. Są w porządku, testy zbieżności działają na liczbach o dowolnej dokładności itp., Ale aby je dobrze wykonać, musisz poprosić o kilka absurdalnie niskich tolerancji. Na przykład w niepublikowanych testach porównawczych stwierdziłem, że Feagin14
osiąga lepsze wyniki Vern9
(metoda Vernera 9 rzędu) przy tolerancjach takich jak 1e-30
. W przypadku aplikacji z chaotyczną dynamiką (jak w przypadku problemów Pleides lub astrofizyki 3-ciał) możesz chcieć takiej dokładności ze względu na wrażliwą zależność (błędy w układach chaotycznych szybko się łączą). Jednak większość ludzi prawdopodobnie wykonuje obliczenia na liczbach zmiennoprzecinkowych o podwójnej precyzji i nie znalazłem testu porównawczego, w którym osiągają lepsze wyniki w tej dziedzinie tolerancji.
Ponadto nie ma interpolanta zgodnego z metodami Feagina. Więc po prostu umieszczam na nich interpolację Hermite'a trzeciego rzędu, aby taki istniał (i działa zaskakująco dobrze). Jeśli jednak nie ma standardowej funkcji interpolacji, możesz wykonać rekurencyjną metodę Hermite (użyj tej interpolacji, aby uzyskać punkt środkowy, a następnie interpolacji 5. rzędu itp.), Aby uzyskać interpolację wysokiego rzędu, ale jest to bardzo kosztowne, a wynikowe interpolacja niekoniecznie ma niską zasadę błędu skracania (więc jest dobra, gdy dt
jest naprawdę mała, co jest dokładnym przeciwieństwem pożądanego przypadku!). Więc jeśli kiedykolwiek potrzebujesz naprawdę dobrej interpolacji w celu dopasowania do swojej dokładności, musisz przynajmniej powrócić do czegoś takiego Vern9
.
Uwaga na temat ekstrapolacji
Zauważ, że metody ekstrapolacji są po prostu algorytmami do generowania metod Runge-Kutta o dowolnym porządku. Jednak dla swojej kolejności podejmują więcej kroków niż to konieczne i mają wysokie współczynniki błędów skracania, a zatem nie są tak wydajne, jak dobrze zoptymalizowana metoda RK przy danym zamówieniu. Ale biorąc pod uwagę poprzednią analizę, oznacza to, że istnieje dziedzina o wyjątkowo niskiej tolerancji, w której metody te będą lepsze niż „znane” metody RK. Ale w każdym teście, który przeprowadziłem, wydaje mi się, że nie byłem tak niski.
Uwaga na temat stabilności
Wybór naprawdę nie ma nic wspólnego z kwestiami stabilności. W rzeczywistości, jeśli przejdziesz przez tabelę DifferentialEquations.jl (możesz tylko plot(tab)
dla regionów stabilności) zobaczysz, że większość metod ma podejrzanie podobne regiony stabilności. To jest właściwie wybór. Zwykle podczas opracowywania metod autor zwykle wykonuje następujące czynności:
- Znajdź najniższe współczynniki błędu obcięcia zasady (czyli współczynniki dla warunków następnego zamówienia)
- Z zastrzeżeniem ograniczeń zamówienia
- I uczyń obszar stabilności zbliżonym do tego z metody Dormand-Prince Order 5.
Dlaczego ostatni warunek? Cóż, ponieważ metoda ta jest zawsze stabilna w sposobie dokonywania wyborów adaptacyjnych stopniowania kontrolowanych przez PI, więc jest to dobry słupek dla „wystarczająco dobrych” obszarów stabilności. To nie przypadek, że wszystkie regiony stabilności są zwykle podobne.
Wniosek
W każdym wyborze metody występują kompromisy. Metody RK najwyższego rzędu po prostu nie są tak wydajne przy niższych tolerancjach, zarówno dlatego, że trudniej jest zoptymalizować wybór współczynników, jak i dlatego, że liczba złożonych funkcji oceny związków (i rośnie nawet szybciej, gdy zaangażowane są interpolacje). Jednakże, jeśli tolerancja stanie się wystarczająco niska, wygrywają, ale wymagane tolerancje mogą być znacznie poniżej „standardowych” aplikacji (tj. Naprawdę dotyczą tylko systemów chaotycznych).