"Репа" производительность для планетарного моделирования
Я написал симуляцию внешних планет Солнечной системы, используя симплектический метод Эйлера, и реализовал это а), используя repa
и б) используя yarr
,
yarr
кажется, работает около х30 быстрее, чемrepa
,
Учитывая это, я даже не пытался использовать параллелизм. Есть ли явные проблемы с производительностью в моем repa
код? Хранилище находится на GitHub. Я могу произвести сокращение repa
только версия, если это полезно, но тогда вы не получите сравнение производительности с yarr
,
Кроме того, как я могу отладить проблемы с производительностью в repa
?
1 ответ
Большинство методов численного интегрирования Эйлера страдают от кумулятивной ошибки округления, которая в конечном итоге приведет к "взрыву" симуляции. Возможно, вы захотите изучить передовые методы численного интегрирования, такие как Рунге-Кутта 4-го порядка или предиктор-корректор.
Другое место, где симуляции проблем n-тела становятся липкими, это когда два тела очень близко, например, луна с очень эксцентричной орбитой вокруг своей планеты. Если для моделирования используются фиксированные временные приращения, ошибка во время больших изменений угловой скорости может привести к ошибкам деления на ноль или делению на очень малые значения, которые приводят к взрыву симуляции. Использование переменной delta-t, которая зависит от угловой скорости, может быть полезным.
Эти предложения основаны на запуске многих таких симуляций в качестве проекта для курса физики для студентов, который я прошел в 1973 году, при тестировании различных методов численного интегрирования. Методы Рунге-Кутты и корректора предикторов существовали с момента появления цифровых вычислений, и существует множество книг. См., Например, " Численные рецепты: искусство научных вычислений " Уильяма Х. Пресса, Брайана П. Фланнери, Сола А. Теукольского и Уильяма Т. Веттерлинга. (Издательство Кембриджского университета, 1989)