快速多极子方法实现的建议?

7
我对实现快速多极子方法以有效模拟一组斥力粒子的系统感兴趣。
我找到了很多关于FMM的参考资料,但似乎都不适合非数学专业人士全面理解算法。
你能推荐一个从基础开始的参考资料,清晰地解释了该过程的数学原理,并包含了示范正确实现的伪代码吗?

谢谢你的投票,但没有解释原因...我一直小心地不使用“最佳...”或类似的词语来表达问题。 - KomodoDave
4
我是一名软件工程师,与一组研究科学家共同编写使用FMM和类似方法的代码。我的经验是,这种方法的解释对于非数学专业人士并不容易理解。要想系统地学习这方面的知识,需要接受数学物理或计算科学相关专业的大学教育。您可以在http://www.amazon.co.uk/Essentials-Computational-Electromagnetics-Xin-Qing-Sheng/dp/0470829621/ref=sr_1_95?s=books&ie=UTF8&qid=1360075827&sr=1-95#reader_0470829621上看到的那种阐述方式可能是最容易理解的。 - High Performance Mark
1
我认为这个问题应该在compsci stackexchange上提问更好。无论如何,作为第一步可以尝试使用[Walter Dehnen](http://arxiv.org/abs/astro-ph/0003209)的FMM变种,它类似于Cartesian坐标系中的G&R FMM,还有其他一些小调整,这简化了很多算术运算。除了矢量泰勒展开之外,几乎不需要任何数学知识。(啊,这让我回想起了以前的日子。) - DSM
谢谢大家提供的信息。@High Performance Mark 我拥有牛津大学计算机科学专业的教育背景,并不害怕数学,只是由于有太多关于这个主题的参考资料,我想找到最全面覆盖该算法背后数学知识的资源,以帮助完全理解。 - KomodoDave
@DSM 根据摘要来看,那个参考资料看起来非常棒 - 非常感谢!如果你将该评论提交为答案,我会标记为正确。 - KomodoDave
3个回答

3
我并不是FMM方面的专家,但是这篇Java实现和介绍是我找到的最好的资源,可以仔细、慢慢地解释。文章在使用术语之前很好地定义了它们,代码至少作为参考点非常有用。尽管数学知识很快变得复杂,但就是这样 :) 一个行人对快速多极子方法的介绍是第二好的选择。它没有解释工作中FMM实现的具体细节,但是它是基本概念的良好介绍。

谢谢Jay,这些链接很棒。我之前看过第一个链接,但从未注意到源代码是可用的。确实非常有帮助。我期待着阅读你第二个链接中的PDF。 - KomodoDave
请注意第二个链接中的PDF实际上并没有详细说明如何计算多极展开或限制误差(它基本上只做了一个单项多极展开并停止了)。但它是一个很好的参考,可以理解远场相互作用如何被近似,并且整个算法如何使其在线性时间内运行。 - Jay Lemmon

3
我喜欢FMM短期课程。它从一维的FMM开始,然后使用复变量理论进行二维的FMM。然后是疯狂的三维版本,使用球谐函数理论,我猜非数学家可能会觉得很困难。但如果你只需要二维的FMM,那应该没问题。
不幸的是,没有提供伪代码。
但你真的需要FMM的准确性吗?您可能可以使用Barnes-Hut算法

3
在遇到类似问题后,我写了一个完全记录的Python快速多极子方法实现pybbfmm。我还写了一个简短的、无需数学知识的教程mathematics-free tutorial,介绍了该方法的工作原理。我认为它们比我能找到的其他任何演示文稿都更易于理解。
(元信息:虽然这实际上是一个链接帖子,但OP明确要求提供链接。我已经添加了我认为缺少的库名称,但除了名称和链接之外,我不知道如何提供这个答案。当然,它并没有比接受的答案更像一个链接帖子。如果这个答案也被删除了,我就放弃了)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接