‘Repa’-prestaties voor planetaire simulatie

Ik heb een simulatie geschreven van de buitenste planeten van het zonnestelsel met behulp van de Euler symplectische methodeen implementeerde dit a) met behulp van repaen b) met behulp van yarr.

yarrlijkt ongeveer x30 sneller te presteren dan repa.

Gezien dit heb ik niet eens geprobeerd parallellisme te gebruiken. Zijn er duidelijke prestatieproblemen in mijn repa-code? De repository bevindt zich op github. Ik kan een uitgeklede versie met alleen repamaken als dit nuttig is, maar dan krijg je geen prestatievergelijking met yarr.

Hoe kan ik als alternatief prestatieproblemen in repaoplossen?


Antwoord 1, autoriteit 100%

De meeste numerieke integratiemethoden van Euler hebben last van cumulatieve afrondingsfouten die er uiteindelijk voor zullen zorgen dat de simulatie “opgeblazen” wordt. Misschien wilt u geavanceerde numerieke integratiemethoden onderzoeken, zoals 4e-orde Runge-Kutta of predictor-corrector.

Een andere plaats waar simulaties van n-lichaamsproblemen plakkerig worden, is wanneer twee lichamen heel dichtbij komen, zoals een maan met een zeer excentrieke baan om zijn planeet. Als men voor de simulatie vaste tijdsintervallen gebruikt, kan de fout tijdens grote veranderingen van de hoeksnelheid leiden tot fouten bij het delen door nul of het delen door zeer kleine waarden die ertoe leiden dat de simulatie opblaast. Het gebruik van een variabele delta-t die afhangt van de hoeksnelheid kan gunstig zijn.

Deze suggesties zijn gebaseerd op het uitvoeren van veel van dergelijke simulaties als een project voor een niet-gegradueerde natuurkundecursus die ik in 1973 volgde, terwijl ik verschillende numerieke integratiemethoden testte. Runge-Kutta en predictor corrector-methoden bestaan ​​al sinds het begin van digitaal computergebruik en er zijn een aantal boeken beschikbaar. Zie bijv., Numerical Recipes: The Art of Scientific Computingdoor William H. Press, Brian P. Flannery, Saul A. Teukolsky en William T. Vetterling. (Cambridge University Press, 1989)

Other episodes