行星模拟的“修复”性能

时间:2013-08-07 09:37:07

标签: arrays haskell repa

我使用Euler symplectic method编写了太阳系外行星的模拟,并使用repa和b)使用yarr实现了这一点a。

yarr seems to perform about x30 quicker than repa

鉴于此,我甚至没有尝试使用并行性。我的repa代码中是否存在明显的性能问题?存储库位于github。如果这有用,我可以生成一个仅限repa - 仅限版本的版本,但是您将无法与yarr进行性能比较。

或者,我如何调试repa中的性能问题?

1 个答案:

答案 0 :(得分:2)

大多数欧拉数值积分方法都会遇到累积舍入误差,最终导致模拟“爆炸”。您可能想要研究高级数值积分方法,例如4阶Runge-Kutta或预测校正器。

n体问题模拟变得粘稠的另一个地方是两个物体非常靠近,例如月球周围有一个非常偏心的轨道。如果使用固定时间增量进行模拟,则角速度大幅度变化期间的误差可能导致被零除误差或除以非常小的值,从而导致模拟爆炸。使用取决于角速度的变量delta-t可能是有益的。

这些建议是基于运行许多这样的模拟作为我在1973年参加的本科物理课程的项目,同时测试各种数值积分方法。自数字计算开始以来,Runge-Kutta和预测校正器方法已经存在,并且有许多书籍可供使用。参见例如 数字食谱:科学计算的艺术 作者:William H. Press,Brian P. Flannery,Saul A. Teukolsky和William T. Vetterling。 (剑桥大学出版社,1989年)