Arrays ';Repa';行星模拟的性能

Arrays ';Repa';行星模拟的性能,arrays,haskell,repa,Arrays,Haskell,Repa,我已经使用编写了一个太阳系外行星的模拟,并实现了a)使用repa和b)使用yarr 鉴于此,我甚至没有尝试使用并行性。我的repa代码中是否存在任何明显的性能问题?存储库位于。如果这有帮助,我可以生成一个精简版的repa——仅此版本,但是您将无法获得与yarr的性能比较 或者,如何调试repa中的性能问题?大多数Euler数值积分方法都会遇到累积舍入误差,最终导致模拟“爆炸”。您可能需要研究高级数值积分方法,例如四阶龙格-库塔法或预测-校正法 n体问题模拟变得棘手的另一个地方是当两个物体非常接

我已经使用编写了一个太阳系外行星的模拟,并实现了a)使用
repa
和b)使用
yarr

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


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

大多数Euler数值积分方法都会遇到累积舍入误差,最终导致模拟“爆炸”。您可能需要研究高级数值积分方法,例如四阶龙格-库塔法或预测-校正法

n体问题模拟变得棘手的另一个地方是当两个物体非常接近时,例如月球绕其行星的轨道非常偏心。如果在模拟中使用固定的时间增量,角速度大变化期间的误差可能导致零误差除法或非常小的值除法,从而导致模拟爆炸。使用取决于角速度的可变delta-t可能是有益的


这些建议是基于我在1973年参加的一个本科物理课程的一个项目中运行了许多这样的模拟,同时测试了各种数值积分方法。Runge-Kutta和预测-校正方法自数字计算出现以来就已经存在,并且有很多书可供阅读。例如,请参见威廉·H·普莱斯、布莱恩·P·弗兰纳里、索尔·A·特考斯基和威廉·T·维特林的《数字配方:科学计算的艺术》。(剑桥大学出版社,1989年)

您是否也可以发布
初始
模块,这样就可以编译了?请注意,NR代码实际上是受版权保护的,所以您不能在公共代码中使用它们。谢谢您,但这似乎并没有解决我关于repa库在这个特定问题上的性能的问题。由于RK4与显式和隐式Euler方法存在相同的问题,即能量不守恒;我本可以添加“软化”来解决行星变得太近的问题,但对于本文中考虑的大致圆形轨道来说,这是不必要的。凯尔,我不是在暗示数值公式中的代码可以在未经许可的情况下使用。书中的许多例子都是基于无版权的数值计算方法,有些甚至早于数字计算机的发展。如果一个人不熟悉各种技术,这是一个很好的开始。