2013-08-07 3 views
53

Я написал симуляцию внешних планет солнечной системы с использованием Euler symplectic method и реализовал это: a) используя repa и b) используя yarr.«Репа» для моделирования планет

yarr seems to perform about x30 quicker than repa.

Учитывая это, я даже не пытался использовать параллелизм. Есть ли очевидные проблемы с производительностью в моем коде repa? Репозиторий находится в github. Я могу создать сокращенную версию repa - только если это полезно, но тогда вы не получите сравнение производительности с yarr.

В качестве альтернативы, как мне отладить проблемы с производительностью в repa?

+0

Не могли бы вы также опубликовать модуль 'Initial', поэтому это компилируется? – leftaroundabout

+0

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

ответ

2

Большинство цифровых методов интеграции Эйлера страдают от суммарной ошибки округления, которая в конечном итоге приведет к «взрыву» симуляции. Вы можете исследовать современные методы цифровой интеграции, такие как Рунге-Кутта 4-го порядка или корректор-предсказатель.

Другое место, где моделирование проблемы n-body становится липким, - это когда два тела очень близко, например, луна с очень эксцентричной орбитой вокруг своей планеты. Если вы используете фиксированные приращения времени для моделирования, ошибка при больших изменениях угловой скорости может привести к ошибкам деления на нуль или делению на очень небольшие значения, которые приводят к взрыву моделирования. Использование переменной дельта-t, зависящей от угловой скорости, может быть полезным.

Эти предложения основаны на использовании многих таких симуляций, как проект для курса физики бакалавриата, который я взял в 1973 году, при тестировании различных методов цифровой интеграции. Рунге-Кутта и методы корректора предикторов существуют с самого начала цифровых вычислений и доступно несколько книг. См., , например., Цифровые рецепты: искусство научных вычислений by William H. Press, Brian P. Flannery, Saul A. Teukolsky и William T. Vetterling. (Cambridge University Press, 1989)

+0

Обратите внимание, что коды NR на самом деле защищены авторским правом, поэтому вы не можете * действительно использовать их в общедоступных кодах. –

+2

Спасибо, но это не похоже на мой вопрос, касающийся * производительности * библиотеки * repa * для этой конкретной проблемы. Поскольку в сторону RK4 страдает одна и та же проблема, как явные и неявные методы Эйлера, которая заключается в том, что энергия не сохраняется; Я мог бы добавить «смягчение» для решения проблемы слишком близких планет, но для грубых круговых орбит, рассмотренных в статье, это не нужно. – idontgetoutmuch

+0

Кайл, я не подразумеваю, что код в Numericical Recipes будет использоваться без разрешения. Многие примеры, показанные в книге, основаны на методах численного расчета без авторских прав, некоторые даже предшествуют разработке цифровых компьютеров. Это хорошее место для начала, если вы не знакомы с различными приемами. –