Czytałem książkę Computer Simulation of Liquids autorstwa Allena i Tildesleya. Począwszy od strony 71, autorzy omawiają różne algorytmy stosowane do integracji równań ruchu Newtona w symulacjach dynamiki molekularnej (MD). Począwszy od strony 78, autorzy omawiają algorytm Verleta, który jest być może algorytmem integracji kanonicznej w MD. Stanowią one:
Być może najczęściej stosowaną metodą całkowania równań ruchu jest ta, którą początkowo przyjęła Verlet (1967) i przypisała Stormerowi (Gear 1971). Ta metoda jest bezpośrednim rozwiązaniem równania drugiego rzędu . Metoda oparta jest na postions , przyśpieszeniach i pozycjach z poprzedniego kroku. Równanie przesunięcia pozycji brzmi następująco:r ( t ) a ( t ) r ( t - δ t )
Należy zwrócić uwagę na kilka punktów dotyczących eqn (3.14). Okaże się, że prędkości w ogóle się nie pojawiają. Zostały one wyeliminowane przez dodanie równań uzyskanych przez rozwinięcie Taylora o :
Następnie, później (na stronie 80), autorzy stwierdzają:
W przeciwieństwie do algorytmu Verleta ... forma algorytmu może niepotrzebnie wprowadzać niedokładność liczbową. Wynika to z faktu, że w eqn (3.14) mały termin ( ) jest dodawany do różnicy dużych terminów ( ), w celu wygenerowania trajektorii. O ( δ t 0 )
Myślę, że „małym terminem” jest , a „różnica dużych terminów” wynosi 2 r ( t ) - r ( t - δ t ) .
Moje pytanie brzmi: dlaczego niedokładność liczbowa wynika z dodania małego terminu do różnicy dużych terminów?
Interesuje mnie raczej podstawowy, konceptualny powód, ponieważ w ogóle nie znam szczegółów arytmetyki zmiennoprzecinkowej. Czy znasz też jakieś odniesienia typu „przegląd” (książki, artykuły lub strony internetowe), które wprowadziłyby mnie w podstawowe idee arytmetyki zmiennoprzecinkowej związane z tym pytaniem? Dziękuję za Twój czas.