Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przyspieszanie czasu a rozbieżności obliczeń od niego zależnych

Ostatnio zmodyfikowano 2020-03-09 00:41
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Przyspieszanie czasu a rozbieżności obliczeń od niego zależnych
» 2020-03-06 01:26:52
Witam. Ostatnio napisałem przy pomocy SFMLa symulacje ruchu ciał niebieskich. W skrócie każde ciało ma masę, prędkość początkową i pozycję. Dzięki tym danym oraz stałej grawitacji obliczam siły grawitacji między ciałami a następnie mając siłę wypadkową obliczam przyspieszenie, zmianę prędkości w czasie i zmianę pozycji - również w czasie.
Używam tu po prostu ∆t jako różnice czasów między kolejnymi obiegami pętli głównej.

I tu jest wydaje mi się problem. O ile wszystko się od strony matematyczno-fizycznej zgadza dla skali mikro to dla makro jest inna sytuacja. Postanowiłem wstawić faktyczne dane, czyli masę Ziemi, Słońca, odległość między nimi, pierwsza prędkość kosmiczną dla Ziemi i faktyczną stałą G. Oczywiście okres obiegu takiej planety będzie bliski 365 dniom (bliski ze względu na różnice między orbitą eliptyczną a kołową). Postanowiłem więc przyspieszyć czas w ten sposób, że co obieg zwiększam ∆t o pewną (dużą) stałą. I tu pojawia się problem - Ziemia spada na Słońce. domyslam się że to przez grzebanie przy czasie, bo zamiast na pewnym odcinku obliczyć siłę, prędkości itp 30000 razy, oblicza się je np. 10 razy. W jaki sposób mogę więc przyspieszyć czas bez wpływania na obliczenia? Czy w ogóle jest to możliwe, skoro funkcje są zależne od czasu?
P-176319
pekfos
» 2020-03-06 16:10:16
W jaki sposób mogę więc przyspieszyć czas bez wpływania na obliczenia?
Usuń sleepy. Jeśli symulacja jednej sekundy wymaga jednej sekundy obliczeń, to zoptymalizuj kod. Albo kup więcej sprzętu. Dokładne wyniki uzyskasz wyłącznie dla nieskończenie małego kroku czasu. Wszystko inne to przybliżenie, im większy krok tym gorsze. Kolejnym warunkiem koniecznym jest brak błędu obliczeń. Stałe o których pisałeś mają ekstremalne wartości, a do takich typy zmiennoprzecinkowe się nie nadają. Typy danych, jak i same techniki obliczeń, muszą być dostosowane do rozwiązywanego problemu. Nie możesz oczekiwać, że po prostu wpiszesz do programu wzory matematyczne i ot tak zadziałają.
P-176320
latajacaryba
Temat założony przez niniejszego użytkownika
» 2020-03-06 18:19:14
No dobrze, ale pomijając precyzję liczb, to jak wykonywać te obliczenia z przyzwoitą dokładnością jednocześnie w akceptowalnym czasie? Jak robi to np. universe sandbox czy inne symulacje Układu Słonecznego?
P-176321
pekfos
» 2020-03-08 16:37:30
Najpierw licz dokładnie, potem zastosuj optymalizacje. Co to w ogóle za pytanie, skoro nie wiadomo co masz w kodzie..?

Jak robi to np. universe sandbox czy inne symulacje Układu Słonecznego?
Na pewno nie z użyciem naiwnych algorytmów.
P-176330
latajacaryba
Temat założony przez niniejszego użytkownika
» 2020-03-09 00:41:18
Trochę za dużo kodu żeby go tu przytaczać, zresztą wydaje mi się, że uzyskałem już odpowiedzi na interesujące mnie pytania. Dzięki więc, temat zamykam.
P-176335
« 1 »
  Strona 1 z 1