【问题标题】:'Repa' performance for planetary simulation行星模拟的“Repa”性能
【发布时间】:2013-08-08 14:56:26
【问题描述】:

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

yarr seems to perform about x30 quicker than repa.

鉴于此,我什至没有尝试使用并行性。我的repa 代码中是否存在明显的性能问题?存储库位于github。如果这有帮助,我可以制作一个缩减版的 repa-only 版本,但是您将无法获得与 yarr 的性能比较。

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

【问题讨论】:

标签: arrays haskell repa


【解决方案1】:

大多数欧拉数值积分方法都存在累积舍入误差,最终会导致模拟“崩溃”。您可能想研究高级数值积分方法,例如 4 阶龙格库塔或预测校正器。

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

这些建议基于我在 1973 年参加的本科物理课程项目中运行的许多此类模拟,同时测试了各种数值积分方法。 Runge-Kutta 和预测校正器方法自数字计算出现以来就已经存在,并且有许多书籍可供使用。参见,egNumerical Recipes: The Art of Scientific Computing,William H. Press、Brian P. Flannery、Saul A. Teukolsky 和 ​​William T.维特林。 (剑桥大学出版社,1989 年)

【讨论】:

  • 请注意,NR 代码实际上是受版权保护的,因此您不能真正在公共代码中使用它们。
  • 谢谢,但这似乎并没有解决我关于 repa 库的 performance 问题的问题。顺便说一句,RK4 与显式和隐式欧拉方法存在相同的问题,即能量不守恒。我本可以添加“软化”来解决行星离得太近的问题,但对于文章中考虑的大致圆形轨道,这是不必要的。
  • Kyle,我并不是在暗示未经许可使用数字食谱中的代码。书中展示的许多例子都是基于非版权的数值计算方法,有些甚至早于数字计算机的发展。如果您不熟悉各种技术,这是一个很好的起点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多