2013-08-07 14 views
53

Napisałem symulację zewnętrznych planet Układu Słonecznego za pomocą Euler symplectic method i zaimplementowałem to a) używając repa i b) używając yarr.Wydajność "Repa" do symulacji planetarnej

yarr seems to perform about x30 quicker than repa.

Biorąc to pod uwagę, nie próbowałem nawet używać paralelizmu. Czy są jakieś oczywiste problemy z wydajnością w moim kodzie repa? Repozytorium ma numer github. Mogę wytworzyć wyciętą wersję repa -jeden, jeśli jest to pomocne, ale wtedy nie uzyskasz porównania wydajności z yarr.

Ewentualnie, w jaki sposób debugować problemy z wydajnością w repa?

+0

Czy możesz również opublikować moduł 'Initial', więc to kompiluje? – leftaroundabout

+0

https://github.com/idontgetoutmuch/Leapfrog/blob/master/Initial.hs – idontgetoutmuch

Odpowiedz

2

Większość metod numerycznych integracji Eulera ma łączny błąd zaokrąglania, który w końcu spowoduje symulację "wysadzenia". Możesz zbadać zaawansowane metody numeryczne, takie jak Runge-Kutta czwartego rzędu lub korektor predykcyjny.

Innym miejscem, w którym symulacje problemów z ciałem są coraz bardziej bliskie, są dwa bliskie ciała, takie jak księżyc o bardzo ekscentrycznej orbicie wokół swojej planety. Jeśli do symulacji zostanie użyty stały przyrost czasu, błąd podczas dużych zmian prędkości kątowej może prowadzić do błędów dzielenia lub dzielenia przez bardzo małe wartości, które powodują wysadzanie symulacji. Użyteczne może być zastosowanie zmiennej delta-t, która zależy od prędkości kątowej.

Sugestie te opierają się na przeprowadzeniu wielu takich symulacji, jak projekt na kurs fizyki licencjackich, który odbyłem w 1973 roku, podczas testowania różnych metod integracji numerycznej. Metody Runge-Kutta i korektor predykcyjny istnieją już od zarania cyfrowej techniki komputerowej i dostępnych jest wiele książek. Zobacz, np., Recepty numeryczne: Sztuka pracy naukowej Williama H. ​​Pressa, Briana P. Flannery'ego, Saula A. Teukolskiego i Williama T. Vetterlinga. (Cambridge University Press, 1989)

+0

Należy pamiętać, że kody NR są w rzeczywistości chronione prawem autorskim, więc nie można ich * używać * w publicznych kodach. –

+2

Dziękuję, ale to nie wydaje się adresować moje pytanie, które jest o * wydajności * biblioteki * repa * dla tego konkretnego problemu. Na marginesie RK4 cierpi na ten sam problem, co jawne i niejawne metody Eulera, czyli energia nie jest zachowana; Mógłbym dodać "zmiękczenie", aby rozwiązać problem zbliżania się planet, ale dla okrężnych orbit rozważanych w artykule jest to niepotrzebne. – idontgetoutmuch

+0

Kyle, nie sugeruję, że kod w przepisach numerycznych może być użyty bez pozwolenia. Wiele przykładów pokazanych w książce opiera się na metodach obliczeń numerycznych, które nie są chronione prawami autorskimi, a niektóre nawet przed opracowaniem komputerów cyfrowych. To dobre miejsce do rozpoczęcia, jeśli ktoś nie jest zaznajomiony z różnymi technikami. –

Powiązane problemy