Chciałbym użyć metody Runge-Kutta 8. rzędu (89) w niebiańskiej aplikacji do mechaniki / astrodynamiki, napisanej w C ++, za pomocą komputera z systemem Windows. Dlatego zastanawiam się, czy ktoś zna dobrą bibliotekę / implementację, która jest udokumentowana i może być używana bezpłatnie? Jest w porządku, jeśli jest napisany w C, o ile nie ma żadnych problemów z kompilacją.
Do tej pory znalazłem tę bibliotekę (mymathlib) . Kod wydaje się w porządku, ale nie znalazłem żadnych informacji na temat licencjonowania.
Czy możesz mi pomóc, ujawniając niektóre z alternatyw, które możesz znać i które pasowałyby do mojego problemu?
EDYCJA:
Widzę, że tak naprawdę nie ma tak wielu kodów źródłowych C / C ++, jak się spodziewałem. Dlatego też wersja Matlab / Octave byłaby w porządku (nadal musi być darmowa).
źródło
Jeśli wykonujesz mechanizmy niebieskie w długich skalach czasowych, użycie klasycznego integratora Runge-Kutta nie oszczędza energii. W takim przypadku użycie integratora symplektycznego byłoby prawdopodobnie lepsze. Boost.odeint implementuje również symetryczny schemat Runge-Kutta czwartego rzędu, który działałby lepiej w długich odstępach czasu. O ile mi wiadomo, GSL nie wdraża żadnych metod symplektycznych.
źródło
podsumowując niektóre punkty:
DP5
), gdy patrzysz na 4 cyfry dokładności (tolerancje są jednak znacznie niższe w tym przypadku. Tolerancje są tylko problemem dla każdego problemu). Gdy obniżysz tolerancje, jeszcze niższa poprawa z metody wysokiego rzędu RK, ale może być konieczne rozpoczęcie korzystania z liczb o wyższej precyzji.dop853
i DifferentialEquations.jlDP8
(które są takie same). Ta ostatnia metoda 853 nie może zostać zaimplementowana w standardowej wersji tableau metody Runge-Kutta, ponieważ jej estymator błędów jest niestandardowy. Ale ta metoda jest znacznie bardziej wydajna i nie poleciłbym nawet stosowania starszych metod Fehlberga 7/8 lub DP 7/8.źródło
Chciałbym dodać, że choć to, co sugeruje Geoff Oxberry dla długoterminowej integracji (przy użyciu integratorów symplektycznych), jest prawdą, w niektórych przypadkach nie zadziała. Mówiąc dokładniej, jeśli masz siły rozpraszające, twój system nie zachowuje już energii, a zatem nie możesz w tym przypadku skorzystać z integratorów symplektycznych. Osoba zadająca pytanie mówiła o niskich orbitach Ziemi, a takie orbity wykazują dużą siłę oporu atmosferycznego, czyli siłę rozpraszającą, która wyklucza stosowanie takich integratorów symplektycznych.
W tym konkretnym przypadku (oraz w przypadkach, w których nie możesz używać / nie masz dostępu do / nie chcesz używać integratorów symplektycznych), zaleciłbym użycie integratora Bulirsch-Stoer, jeśli potrzebujesz precyzji i wydajności w dłuższych terminach. Działa dobrze z doświadczenia i jest również zalecany przez Przepisy numeryczne (Press i in., 2007).
źródło
odex
nie wydaje mi się, żeby było dobrze. Tak więc przynajmniej dla ODE pierwszego rzędu i dla tolerancji>=1e-13
ekstrapolacja nie wydaje się dobrze i zwykle nie jest nawet bliska. Jest to zgodne z powyższym twierdzeniem.