【问题标题】:Recommendations for Fast Multipole Method implementation?对快速多极方法实施的建议?
【发布时间】:2013-02-05 13:54:08
【问题描述】:

我有兴趣实现Fast Multipole Method 以有效地模拟排斥粒子系统。

我找到了大量讨论 FMM 的参考资料,但对于想要完全理解该算法的非数学家来说,似乎没有一个非常容易理解。

您能否推荐一份完整的参考资料,清楚地解释该过程背后的数学原理,并包含示例正确实现的伪代码?

【问题讨论】:

  • 感谢您在不解释原因的情况下投反对票...我一直小心不要用“Best..”或类似的词来回答这个问题。
  • 我是一名软件工程师,与一组研究科学家一起编写使用 FMM 和类似方法的代码。我的经验是,对于这种非数学家可以理解的方法,没有任何解释。您寻求的基础参考是数学物理或计算科学方面的大学教育。您可以在amazon.co.uk/… 中看到的那种展示方式与您将获得的一样平易近人。
  • 我认为这对compsci stackexchange 来说是一个更好的问题。无论如何,作为第一步可能很容易遵循的 FMM 变体是 Walter Dehnen:它类似于 G&R FMM,但在笛卡尔坐标系中,并进行了一些其他调整,从而简化了很多算术。除了向量泰勒展开之外,不需要太多的数学运算。 (啊,这让我回来了。)
  • 感谢您的信息。 @High Performance Mark 我接受过牛津大学 Comp Sci 教育,并且不怕数学,只是关于这个主题的参考资料太多了,我想找到最全面的算法背后的数学知识,以帮助全面理解.
  • @DSM 从摘要来看,参考文献看起来很棒 - 非常感谢!如果您将该评论作为答案提交,我会将其标记为正确。

标签: algorithm reference physics fastmm


【解决方案1】:

我绝不是 FMM 方面的专家,但这个 java implementation and introduction 是迄今为止我找到的最好的资源,可以仔细而缓慢地解释它。该论文擅长在使用术语之前对其进行定义,并且代码至少可以作为参考点。数学仍然很快变得毛茸茸,但它就是这样:)

A pedestrian introduction to fast multipole methods 紧随其后。它没有解释有效的 FMM 实现的实际细节,但它很好地介绍了基本思想。

【讨论】:

  • 谢谢杰,这些链接很棒。我以前看过第一个,但从未注意到源可用。确实很有帮助。我期待通过您的第二个链接阅读 PDF。
  • 对于第二个链接中的 PDF,请注意,它实际上并没有详细说明您需要做什么来计算多极展开或任何限制错误的方法(它基本上是一个单项多极展开并保留它)。但对于了解远场中的交互如何近似,以及整体算法如何工作以使其在线性时间内运行,这是一个很好的参考。
  • 好的,我明白了。谢谢你告诉我,杰。
【解决方案2】:

我喜欢short course on FMM。在一维中从FMM开始,而不是在二维中使用复变量理论来进行FMM。还有使用球谐函数理论的疯狂 3D 版本,我想这对于非数学家来说可能非常困难。但是如果你只需要二维的 FMM,你应该没问题。

很遗憾,这里没有给出伪代码。

但是你真的需要 FMM 的准确性吗? Barnes-Hut's algorithm

你可能没问题

【讨论】:

    【解决方案3】:

    在遇到与您类似的问题后,我最终编写了一个完整记录的 Python 快速多极方法实现,pybbfmm。我还写了一个简短的mathematics-free tutorial,介绍了该方法的工作原理。总之,我认为它们比我能找到的任何其他演示文稿都更易于访问。

    (meta:虽然这实际上是一个链接帖子,但 OP 明确要求提供一个链接。我添加了我认为最后一个链接中缺少的内容 - 库的名称 - 但我不确定还有什么提供这个答案,除了作为一个名字和一个链接。当然,它不会比接受的答案有更多的链接帖子。如果这个也被删除,我会放弃)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多