Integracja Verleta
[vɛʁˈlɛ] Całkowanie Verleta ( wymowa francuska: <a i=3>[ ) to metoda numeryczna używana do całkowania równań ruchu Newtona . Jest często używany do obliczania trajektorii cząstek w symulacjach dynamiki molekularnej i grafice komputerowej . Algorytm został po raz pierwszy użyty w 1791 roku przez Jeana Baptiste Delambre i od tego czasu był wielokrotnie odkrywany na nowo, ostatnio przez Loupa Verleta w latach 60. XX wieku do wykorzystania w dynamice molekularnej. Używany był również przez PH Cowell i ACC Crommelin w 1909 r. do obliczenia orbity komety Halleya , a przez Carla Størmera w 1907 r. do zbadania trajektorii cząstek elektrycznych w polu magnetycznym (stąd nazywana jest również metodą Störmera ). Integrator Verleta zapewnia dobrą stabilność numeryczną , a także inne właściwości, które są ważne w układach fizycznych , takie jak odwracalność w czasie i zachowanie postaci symplektycznej w przestrzeni fazowej , bez znaczących dodatkowych kosztów obliczeniowych w stosunku do prostej metody Eulera .
Podstawowy Störmer-Verlet
Dla równania różniczkowego drugiego rzędu typu z warunkami początkowymi i przybliżone rozwiązanie numeryczne w czasach z wielkością kroku można uzyskać następującą metodą:
- zestaw ,
- dla n = 1, 2, ... iteracja
Równania ruchu
Równanie ruchu Newtona dla konserwatywnych układów fizycznych to
lub indywidualnie
Gdzie
- to czas,
- to zespół wektora pozycji obiektów ,
- jest funkcją potencjału skalarnego,
- to ujemny gradient potencjału , dający zespół sił działających na cząstki, fa {\ displaystyle F}
- macierzą mas , zwykle ukośną z blokami o cząstki
To równanie, dla różnych wyborów potencjalnej funkcji , może być użyte do opisania ewolucji różnych układów fizycznych, od ruchu po orbity planet .
Po przekształceniu mającym na celu przeniesienie masy na prawą stronę i zapomnieniu o strukturze wielu cząstek, równanie można uprościć do
z odpowiednią funkcją o wartościach wektorowych reprezentującą przyspieszenie zależne od położenia. pozycja początkowa prędkość również podane.
Całkowanie Verleta (bez prędkości)
Aby zdyskretyzować i numerycznie rozwiązać ten problem z wartością początkową , wybiera się krok czasowy i sekwencję punktów próbkowania brane pod uwagę. Zadanie polega na skonstruowaniu sekwencji punktów \ na trajektorii rozwiązania dokładnego.
Tam, gdzie metoda Eulera wykorzystuje przybliżenie różnicy w przód do pierwszej pochodnej w równaniach różniczkowych rzędu pierwszego, całkowanie Verleta można postrzegać jako wykorzystujące przybliżenie różnicy centralnej do drugiej pochodnej:
Całkowanie Verleta w postaci używanej jako metoda Störmera wykorzystuje to równanie do uzyskania następnego wektora położenia z dwóch poprzednich bez użycia prędkości jako
Błąd dyskretyzacji
poziom lokalnych błędów wprowadzanych do całkowania przez dyskretyzację poprzez usunięcie wszystkich wyrazów nieparzystych stopni, tutaj wyrazów trzeciego . Błąd lokalny jest kwantyfikowany przez wstawienie dokładnych wartości obliczania Taylora Displaystyle wektora pozycji w różnych kierunkach czasowych: t = t n {\ displaystyle t = t_ {n } }
gdzie to pozycja, prędkość, przyspieszenie i } szarpnięcie (trzecia pochodna pozycji względem czasu).
Dodanie tych dwóch rozszerzeń daje
Widzimy, że wyrazy pierwszego i trzeciego rzędu z rozwinięcia Taylora znoszą się, czyniąc w ten sposób integrator Verleta rzędem dokładniejszym niż całkowanie przez samo proste rozwinięcie Taylora.
Należy zwrócić uwagę na fakt, że przyspieszenie tutaj jest obliczane z dokładnego rozwiązania, , podczas gdy w iteracji jest obliczany w centralnym punkcie iteracji, . Przy obliczaniu błędu globalnego, czyli odległości między rozwiązaniem dokładnym a ciągiem aproksymacyjnym, te dwa wyrazy nie znoszą się dokładnie, wpływając na kolejność błędu globalnego.
Prosty przykład
Aby uzyskać wgląd w relacje między błędami lokalnymi i globalnymi, pomocne jest zbadanie prostych przykładów, w których dokładne rozwiązanie, jak również rozwiązanie przybliżone, można wyrazić za pomocą jawnych wzorów. Standardowym przykładem tego zadania jest funkcja wykładnicza .
Rozważ liniowe równanie różniczkowe ze stałą . Jego dokładne rozwiązania bazowe to i .
Metoda Störmera zastosowana do tego równania różniczkowego prowadzi do liniowej relacji powtarzalności
Lub
Można to rozwiązać, znajdując pierwiastki jego charakterystycznego wielomianu . To są
Podstawowymi rozwiązaniami powtarzalności liniowej są i . Aby porównać je z dokładnymi rozwiązaniami, obliczane są rozwinięcia Taylora:
Iloraz tego szeregu z ilorazem wykładniczym 1 , więc
Stąd wynika, że dla pierwszego rozwiązania bazowego błąd można obliczyć jako
Oznacza to, że chociaż lokalny błąd dyskretyzacji jest rzędu 4, ze względu na drugi rząd równania różniczkowego błąd globalny jest rzędu 2, ze stałą rosnącą wykładniczo w czasie.
Rozpoczęcie iteracji
na początku iteracji Verleta w kroku czas , obliczanie , potrzebny jest już wektor pozycji w czasie . Na pierwszy rzut oka może to sprawiać problemy, ponieważ warunki początkowe są znane tylko w czasie początkowym . Jednak przyspieszenie odpowiednie położenie w pierwszym kroku czasowym można uzyskać za pomocą wielomianu Taylora stopnia drugiego:
Błąd w pierwszym kroku czasowym jest więc rzędu . Nie jest to uważane za problem, ponieważ w symulacji obejmującej dużą liczbę kroków czasowych błąd w pierwszym kroku czasowym stanowi tylko pomijalnie małą część całkowitego błędu, który w czasie wynosi t n {\ displaystyle t_ { rzędu pozycji do co do odległości podzielonych różnic do . Co więcej, aby uzyskać błąd globalny drugiego rzędu, błąd początkowy musi być co najmniej trzeciego rzędu.
Niestałe różnice czasu
Wadą metody Störmera-Verleta jest to, że jeśli zmienia się krok czasowy ( nie przybliża rozwiązania równania różniczkowego. Można to poprawić za pomocą wzoru
Dokładniejsze wyprowadzenie wykorzystuje szereg Taylora (do drugiego rzędu) Δ i uzyskać po eliminacja
tak, że formuła iteracji staje się
Obliczanie prędkości – metoda Störmera-Verleta
Prędkości nie są podane wprost w podstawowym równaniu Störmera, ale często są niezbędne do obliczenia pewnych wielkości fizycznych, takich jak energia kinetyczna. Może to stwarzać techniczne wyzwania w dynamiki molekularnej , ponieważ energia kinetyczna i temperatury w czasie nie mogą obliczone dla układu, dopóki pozycje nie będą znane w czasie . Z tym niedoborem można sobie poradzić za pomocą prędkości Verlet algorytm lub przez oszacowanie prędkości przy użyciu warunków pozycji i twierdzenia o wartości średniej :
położenia, ponieważ dotyczy prędkości w czasie , nie , co oznacza że jest przybliżeniem drugiego rzędu do . Z tym samym argumentem, ale o połowę w czasie, ( , gdzie .
Można skrócić przedział, aby przybliżyć prędkość w czasie kosztem dokładności:
Prędkość Verleta
Powiązanym i częściej używanym algorytmem jest algorytm Verleta dotyczący prędkości , podobny do metody przeskakującej , z tym wyjątkiem, że prędkość i położenie są obliczane przy tej samej wartości zmiennej czasowej (żaba przeskakująca nie, jak sugeruje nazwa). Wykorzystuje to podobne podejście, ale wyraźnie uwzględnia prędkość, rozwiązując problem pierwszego kroku czasowego w podstawowym algorytmie Verleta:
Można wykazać, że błąd w prędkości Verleta jest tego samego rzędu, co w podstawowym Verlecie. Zauważ, że algorytm prędkości niekoniecznie wymaga więcej pamięci, ponieważ w podstawowym Verlecie śledzimy dwa wektory położenia, podczas gdy w Verlecie prędkości śledzimy jeden wektor położenia i jeden wektor prędkości. Standardowy schemat implementacji tego algorytmu to:
- Oblicz .
- Oblicz .
- za z potencjału interakcji za pomocą .
- Oblicz .
Algorytm ten działa również ze zmiennymi krokami czasowymi i jest identyczny z formą integracji metody „skok-drift-kick” .
Eliminując prędkość półkrokową, algorytm ten można skrócić do
- Oblicz .
- za z potencjału interakcji za pomocą .
- Oblicz .
Należy jednak zauważyć, że algorytm ten zakłada, że przyspieszenie od położenia. za i nie zależy od prędkości .
Można zauważyć, że długoterminowe wyniki prędkości Verleta i podobnie przeskakującej żaby są o jeden rząd lepsze niż półukryta metoda Eulera . Algorytmy są prawie identyczne aż do przesunięcia o pół kroku czasu w prędkości. Można to udowodnić, obracając powyższą pętlę, aby rozpocząć od kroku 3, a następnie zauważając, że składnik przyspieszenia w kroku 1 można wyeliminować, łącząc kroki 2 i 4. Jedyna różnica polega na tym, że prędkość punktu środkowego w prędkości Verlet jest uważana za prędkość końcową w półukrytej metodzie Eulera.
Błąd globalny wszystkich metod Eulera jest rzędu pierwszego, podczas gdy błąd globalny tej metody jest, podobnie jak metody punktu środkowego , rzędu drugiego. Dodatkowo, jeśli przyspieszenie rzeczywiście wynika z sił w konserwatywnym układzie mechanicznym lub hamiltonowskim , energia przybliżenia zasadniczo oscyluje wokół stałej energii dokładnie rozwiązanego układu, z błędem globalnym ponownie związanym rzędu pierwszego dla półjawnego Eulera i zamów dwa dla Verlet-leapfrog. To samo dotyczy wszystkich innych zachowanych wielkości układu, takich jak pęd liniowy lub kątowy, które są zawsze zachowane lub prawie zachowane w integrator symplektyczny .
szczególnym przypadkiem metody Newmark-beta i γ .
Reprezentacja algorytmiczna
Ponieważ prędkość Verlet jest ogólnie użytecznym algorytmem w aplikacjach 3D, ogólne rozwiązanie napisane w C++ mogłoby wyglądać jak poniżej. Uproszczona siła oporu służy do zademonstrowania zmiany przyspieszenia, jednak jest potrzebna tylko wtedy, gdy przyspieszenie nie jest stałe.
struct Body { Vec3d poz { 0.0 , 0.0 , 0.0 }; Wersja Vec3d { 2.0 , 0.0 , 0.0 }; // 2 m/s wzdłuż osi x Vec3d acc { 0.0 , 0.0 , 0.0 }; // brak przyspieszenia przy pierwszej podwójnej masie = 1,0 ; // podwójne przeciągnięcie 1 kg = 0,1 ;
// rho*C*Area – uproszczone przeciąganie dla tego przykładu /** * Zaktualizuj pos i vel za pomocą integracji „Velocity Verlet” * @param dt DeltaTime / time step [np.: 0.01] */ void update ( double dt ) { Vec3d new_pos = poz + vel * dt + acc * ( dt * dt * 0.5 ); Vec3d new_acc = zastosuj_siły ();
// potrzebne tylko wtedy, gdy przyspieszenie nie jest stałe Vec3d new_vel = vel + ( ac + new_acc ) * ( dt * 0.5 ); pozycja = nowa_pozycja ; poziom = nowy_poziom ; acc = nowy_akc ; } Vec3d apply_forces () const { Vec3d grav_acc = Vec3d { 0.0 , 0.0
, -9,81 }; // 9,81 m/s² w dół w osi Z Vec3d drag_force = 0,5 * drag * ( vel * vel ); // D = 0,5 * (rho * C * Powierzchnia * vel^2) Vec3d drag_acc = siła_przeciągania / masa ; // a = F/m return grav_acc - drag_acc ; } };
Terminy błędów
Globalny błąd obcięcia metody Verleta wynosi , zarówno dla położenia, jak i prędkości. Kontrastuje to z faktem, że lokalny błąd powyżej Różnica wynika z akumulacji lokalnego błędu obcięcia we wszystkich iteracjach.
Globalny błąd można wyprowadzić, zauważając, co następuje:
I
Dlatego
Podobnie:
co można uogólnić na (można to wykazać przez indukcję, ale jest tu podane bez dowodu):
błąd i gdzie , jasne jest, że [ potrzebne źródło ]
a zatem globalny (skumulowany) błąd w stałym przedziale czasu jest określony przez
Ponieważ prędkość jest określana w sposób niekumulacyjny na podstawie pozycji w integratorze Verleta, globalny błąd prędkości również wynosi .
W symulacjach dynamiki molekularnej błąd globalny jest zwykle znacznie ważniejszy niż błąd lokalny, dlatego integrator Verleta jest nazywany integratorem drugiego rzędu.
Ograniczenia
Układy wielu cząstek z ograniczeniami są łatwiejsze do rozwiązania za pomocą integracji Verleta niż metodami Eulera. Ograniczeniami między punktami mogą być na przykład potencjały ograniczające je do określonej odległości lub siły przyciągania. Można je modelować jako sprężyny łączące cząstki. Wykorzystując sprężyny o nieskończonej sztywności, model można następnie rozwiązać za pomocą algorytmu Verleta.
jednym wymiarze związek między nieograniczonymi pozycjami a pozycjami punktów w czasie , biorąc pod uwagę pożądaną odległość ograniczenia , można znaleźć za pomocą algorytmu
Całkowanie Verleta jest przydatne, ponieważ bezpośrednio wiąże siłę z położeniem, zamiast rozwiązywać problem za pomocą prędkości.
Problemy pojawiają się jednak, gdy na każdą cząstkę działa wiele sił ograniczających. Jednym ze sposobów rozwiązania tego problemu jest przejście przez każdy punkt symulacji, tak aby w każdym punkcie rozluźnienie ograniczeń ostatniego punktu było już wykorzystane do przyspieszenia rozprzestrzeniania się informacji. W symulacji można to zaimplementować, stosując małe kroki czasowe do symulacji, stosując ustaloną liczbę kroków rozwiązywania ograniczeń na krok czasowy lub rozwiązując ograniczenia, dopóki nie zostaną spełnione przez określone odchylenie.
Podczas lokalnego przybliżania ograniczeń do pierwszego rzędu jest to to samo, co metoda Gaussa – Seidela . Wiadomo, że dla małych macierzy rozkład LU jest szybszy. Duże systemy można podzielić na klastry (na przykład każdy ragdoll = klaster). Wewnątrz klastrów stosowana jest metoda LU, pomiędzy klastrami metoda Gaussa–Seidela . Kod macierzowy może być ponownie użyty: zależność sił od pozycji może być lokalnie przybliżona do pierwszego rzędu, a integracja Verleta może być bardziej ukryta.
Wyrafinowane oprogramowanie, takie jak SuperLU, istnieje do rozwiązywania złożonych problemów przy użyciu rzadkich macierzy. Specyficzne techniki, takie jak stosowanie (klastrów) matryc, mogą być stosowane w celu rozwiązania konkretnego problemu, takiego jak siła rozchodząca się przez arkusz materiału bez tworzenia fali dźwiękowej .
Innym sposobem rozwiązania ograniczeń holonomicznych jest użycie algorytmów ograniczeń .
Reakcje zderzenia
Jednym ze sposobów reagowania na kolizje jest stosowanie systemu opartego na karach, który zasadniczo przykłada ustaloną siłę do punktu po zetknięciu. Problem polega na tym, że bardzo trudno jest wybrać przekazywaną siłę. Użyj zbyt dużej siły, a obiekty staną się niestabilne, zbyt słabe, a przedmioty będą się przenikać. Innym sposobem jest użycie reakcji kolizji projekcji, które biorą punkt obrażający i próbują przesunąć go na jak najkrótszą odległość, aby wysunąć go z drugiego obiektu.
W tym drugim przypadku całkowanie Verleta automatycznie obsłużyłoby prędkość nadaną przez zderzenie; należy jednak pamiętać, że nie gwarantuje się, że zrobi to w sposób zgodny z fizyką zderzeń (to znaczy, że zmiany pędu nie są gwarantowane jako realistyczne). Zamiast niejawnie zmieniać składnik prędkości, należałoby jawnie kontrolować końcowe prędkości zderzających się obiektów (poprzez zmianę zarejestrowanej pozycji z poprzedniego kroku czasowego).
Dwie najprostsze metody określania nowej prędkości to zderzenia doskonale sprężyste i niesprężyste . Nieco bardziej skomplikowana strategia, która zapewnia większą kontrolę, wymagałaby zastosowania współczynnika restytucji .
Zobacz też
- Warunek Couranta-Friedrichsa-Lewy'ego
- Dryf energii
- Integrator symplektyczny
- Integracja Leapfroga
- Algorytm Beemana
Literatura
- ^ Verlet, Loup (1967). „Komputer„ Eksperymenty ”na płynach klasycznych. I. Właściwości termodynamiczne cząsteczek Lennarda-Jonesa” . Przegląd fizyczny . 159 (1): 98–103. Bibcode : 1967PhRv..159...98V . doi : 10.1103/PhysRev.159.98 .
- ^ Prasa, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). „Sekcja 17.4. Równania konserwatywne drugiego rzędu” . Przepisy numeryczne: sztuka obliczeń naukowych (wyd. 3). Nowy Jork: Cambridge University Press. ISBN 978-0-521-88068-8 .
- ^ strona internetowa zarchiwizowana 2004-08-03 w Wayback Machine z opisem metody Störmera.
- Bibliografia _ „Prosta metoda integracji Verlet z korektą czasową” .
- ^ Swope, William C.; HC Andersena; PH Berens; KR Wilson (1 stycznia 1982). „Metoda symulacji komputerowej do obliczania stałych równowagi dla tworzenia fizycznych skupisk cząsteczek: zastosowanie do małych skupisk wody”. The Journal of Chemical Physics . 76 (1): 648 (dodatek). Bibcode : 1982JChPh..76..637S . doi : 10.1063/1.442716 .
- Bibliografia _ Lubich, chrześcijanin; Wanner, Gerhard (2003). „Geometryczna całka numeryczna zilustrowana metodą Störmera / Verleta”. Acta Numerica . 12 : 399–450. Bibcode : 2003AcNum..12..399H . CiteSeerX 10.1.1.7.7106 . doi : 10.1017/S0962492902000144 . S2CID 122016794 .
- ^ Podręcznik użytkownika SuperLU .
- Bibliografia _ Witkin, A. (1998). „Duże kroki w symulacji tkaniny” (PDF) . Postępowanie w zakresie grafiki komputerowej . Doroczna seria konferencji: 43–54.