Dlaczego RK4 jest lepszy od integracji Eulera? [Zamknięte]

20

Na końcu tych wspaniałych slajdów autor porównuje wszystkich zaprezentowanych integratorów. Tak czy inaczej, wszystkie one nie wystarczają, z wyjątkiem ulepszonej integracji Eulera i integracji Runge Kutta 4 , które oba przeszły wszystkie testy.

Przypuszczam, że powinienem wspomnieć, że pracuję nad grą 2D, która nie wymaga zbyt dużej fizyki. Jestem tylko ciekawy, gdzie udoskonalona integracja Eulera nie byłaby wystarczająca, a zamiast niej musiałaby zostać użyta RK4.

Moja gra składa się głównie z prostej grawitacji (skakanie i spadanie), ruchu wzdłuż osi X i Y oraz zderzenia ramki ograniczającej. Czy warto wdrożyć RK4, czy też ulepszony Euler byłby wystarczający? Widzę wiele dyskusji, w których karani są użytkownicy Euler Integration, ale z tego, co widzę, ulepszony Euler jest równoważny w prostych sprawach 2D. Wyobrażam sobie, że byłoby to również szybsze.

John Tyler
źródło
offtopic, ale te obszary to świetne slajdy, bardzo jasne z przykładami i wszystkim. Dzięki za ten link!
Roy T.
Jeśli rzeczywiście jest to nie na temat, prawdopodobnie dobrze by to pasowało w nauce obliczeniowej .
David Z
Także: Integracja Verleta z korekcją czasową - wygląda podobnie do Improved Euler: zbyt leniwy, aby dowiedzieć się, czy jest dokładnie taki sam. TCV jest świetny, ponieważ możesz być pobłażliwy ze swoim stałym krokiem czasowym (inni integratorzy chcą gwarantowanego stałego kroku czasowego).
Jonathan Dickinson
1
Nie można edytować: widzę, że o tym wspomina. Nie jestem pewien, czy jego implementacja jest błędna pod względem wymagań warunków początkowych określonych w artykule: ale nigdy nie widziałem tego problemu grawitacji z moją implementacją TCV, jeśli poprawnie obliczę warunki początkowe.
Jonathan Dickinson

Odpowiedzi:

15

Osobiście wolę Velocity Verlet dla większości symulacji. Z mojego doświadczenia z tą metodą jest ona całkiem odpowiednia do dość sztywnych równań. Wygląda na to, że ta „ulepszona metoda Eulera” jest dość podobna do metody Velocity Verlet i opiera się na klasie metod integracji znanych jako predykcyjno-korektor . W dzisiejszych czasach możesz przeczytać wiele rzeczy o tych metodach, zaczynając od „Dużych kroków w symulacji ubrań” Davida Baraffa, w których moc ukrytych metod naprawdę świeci. Ich wadą jest to, że:

  1. muszą zbliżyć się do Jakobianów lub Hessian, a następnie muszą,
  2. obliczyć sporą liczbę odwrotności macierzy na ramkę.

Więc jeśli nie jesteś guru matematyki, możesz utknąć w palcach. Po prostu eksperymentuj z dowolną metodą, którą chcesz, a następnie zadowalaj się tą, która wydaje się najlepiej dla Ciebie. Proste nie zawsze jest lepsze, ale dla interaktywnych klatek znam tylko jedno słowo: kompromis.

Niektóre dodatkowe zasoby, na które warto spojrzeć:

Jakobsen jest rodzajem geniuszu, jeśli chodzi o wymyślenie tak prostego pomysłu na pretensjonalny problem (jego specjalizacja to Kryptografia, jeśli się nie myli, ale udało mu się udowodnić matematyczną równoważność swojej metody z klasą iteracyjnego algorytmu Gaussa-Seidla, który jest zbieżny ). Dla uproszczenia przejdź do tego pierwszego, zanim zagłębisz się w ukryte metody.

PÓŹNA EDYCJA : Niedawno dostałem artykuł na temat używania jawnych integratorów do symulacji ciała miękkiego lub półsztywnego oraz tego, jaki jest ich wpływ na wydajność i jakość. Ten dokument powinien służyć jako przewodnik przy wyborze określonego integratora, w zależności od scenariusza.

teodron
źródło
1
+1 To była naprawdę dobra jakość odpowiedzi pod względem treści: ale była odrobinę zbyt trudna do przyswojenia (ściana tekstu). Przekonałem się, że dobre formatowanie zawsze pomaga zwiększyć liczbę głosów. Poprawiłem to i mam nadzieję, że dostaniesz więcej głosów, na które zasługujesz.
Jonathan Dickinson
Dzięki Jonathan, zrobiłem to pośpiesznie, nie uwzględniając procedury „przyjaznej czytelnikowi”, ale musiałem wspomnieć o tych kilku źródłach, ponieważ są one bardzo często używane nawet dzisiaj).
teodron
10

P: Dlaczego warto korzystać z zaawansowanej Kutty Runge?
Odp .: Ponieważ jest to bardzo dokładne.

P: Dlaczego nie?
Odp .: Ponieważ tworzysz grę, a bardzo dokładny silnik fizyki nie ma znaczenia, musi być wystarczająco dobry, aby oszukać gracza.

Nawiasem mówiąc, jeśli masz duże tłumienie podczas kolizji, jak większość platformówek, prosty Euler jest w porządku.

Zdecydowanie zalecam, abyś w przeciwieństwie do kodu w prezentacji korzystał z ustalonej fizyki kroków, co pozwala zaoszczędzić trochę potencjalnych błędów i pozwala rozwiązać problem pozyskiwania lub utraty energii w bardzo prosty sposób. Po prostu znajdź środkowy punkt między jawną a niejawną integracją:

velocity += 0.5 * acceleration;
position += velocity;
velocity += 0.5 * acceleration;

Prezentacja nie pokazuje, jak radzić sobie z kolizjami, aby obiekty nie wykraczały poza granice. Prostym rozwiązaniem tego problemu jest użycie wysokiej częstotliwości aktualizacji. Bardziej złożonym, ale potencjalnie lepszym rozwiązaniem jest przenoszenie obiektów z powrotem w momencie kolizji, dokładna implementacja zależy od pożądanego zachowania fizyki.

aaaaaaaaaaaa
źródło
1
+1 za „oszukanie gracza” - ale osobiście miałem „bardzo proste” systemy wybuchające z powodu integracji eulera.
Jonathan Dickinson
@JathanathanDickinson Powiedziałbym, że to nie z powodu integracji Eulera, ale raczej z powodu mieszanki okoliczności, integracja Eulera jest tylko jedną z nich. Jeśli masz przykład, jestem pewien, że mogę znaleźć sposób na uniknięcie wybuchania systemów.
aaaaaaaaaaaa
Och, jest na moich naprawdę starych materiałach VB6 (kiedy miałem dosłownie około 14 lat), zanim dowiedziałem się o RK / Verlet - nie mam już nawet kodu: co daje dużą wiarygodność temu, że mógł to być coś innego w miksie :).
Jonathan Dickinson
1
Myślę, że powinienem dodać, że jak tylko zaczniesz bawić się przyciąganiem między obiektami, a nie zwykłą grawitacją, wydaje mi się rozsądne, aby wzmocnić metodę integracji, może to nie być absolutnie konieczne, ale jeśli masz moc przetwarzania, jedynym minusem jest nieco bardziej złożony kod.
aaaaaaaaaaaa
1

W prezentacji wystąpił błąd. Metoda określana przez prezentera jako „Improved Euler” jest w rzeczywistości metodą Velocity Verlet!

Zobacz tutaj, aby uzyskać bardziej wiarygodne źródło: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html

Te same równania są w Wikipedii .

Powszechną natychmiastową poprawą w stosunku do metody Eulera jest metoda Midpoint, którą prezenter prawdopodobnie miał na myśli, ale ostatecznie pomylił Velocity Verlet jako ulepszony Euler. Jedyną różnicą między metodą punktu środkowego i Velocity Verlet jest to, że prędkość jest średnią z ostatniego i następnego przyspieszenia, a nie tylko zależy od ostatniego przyspieszenia.

Shital Shah
źródło