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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.