贝塞尔函数计算的最快开源实现是什么?

计算科学 表现 特殊功能 开源的
2021-11-25 10:43:28

我正在寻找一种开源(使用和学习)软件,它计算实参整数阶的 Bessel 函数,以在所有此类实现中最快实现双精度。目前我已经尝试过Boost.MathGSL从这些来看,GSL 对于较小的论点似乎更快,而对于较大的论点则慢得多。

是否有任何专门设计用于对参数和命令的整个工作范围非常快但仍不忽略精度的实现?

3个回答

合适且最快的库取决于几件事。哪些 Bessel 函数(仅 J、Y 和 Hankel 或修改的 Bessel 函数 I 和 K),哪些类型的参数(实数或复数、整数、分数或一般顺序)?

Amos 的库是用 Fortran-77 编写的(在 Alan Miller 的 fortran 页面的镜像上,有 TOMS 644 的 Fortran-90 隐蔽版本:http: //jblev​​ins.org/mirror/amiller/),并且对于复杂的论点在数值上是准确和快速的所有贝塞尔函数,但它们很难理解源代码。他制作了他的图书馆的几个版本,但只有一个包含在 SLATEC ( http://www.netlib.org/slatec/ ) 中实际上是开源的,其他版本的版权与数学软件期刊上的交易相关。

http://octave-bug-tracker.gnu.narkive.com/ym1U5WEL/bessel-function-scaling-limited-range

mpmath ( http://mpmath.org/ ) 使用完全不同且更通用的方法,将所有贝塞尔函数表示为超几何函数的特殊情况。Mpmath 也是任意精度,所以如果你只需要双精度,这可能是矫枉过正。这更通用,但速度较慢。mpmath 的作者有一个名为 arb ( http://fredrikj.net/arb/ ) 的基于 C 的库,它实现了 mpmath 中的一些功能,但速度更快(因为它是基于 C 而不是基于 Python)。由于 arb 和 mpmath 是任意精度,因此它们可能适用于基准测试,但可能不适用于速度测试。

我个人对 Gnu 科学图书馆的工作并不多,但我相信它对于它所涵盖的功能来说是快速和准确的。它可能没有您需要的所有功能。与 Amos 库相比,它可能是编写良好的现代代码的更好示例。

这确实需要一些关于速度的测试,但这里有一些我记得遇到的不是 Boost 或 GS​​L 的例子:

此外,这里有一个相关的 SO 问题,其中包含指向其他 C 实现的链接

您可以尝试 Java 的 Colt 库:

http://dst.lbl.gov/ACSSoftware/colt/

尽管在设置它们时遇到了麻烦,但我仍然能够运行 GNU GMP 和 MPFR 库。MPFR 也有一些 Bessel 函数。请参阅以下链接中的文档:

http://www.mpfr.org/mpfr-current/#doc

GSL 的一个好处是您可以使用函数来获取计算错误。如果您在 Fortran 中计算函数,您可能需要查看 GSL 的 Fortran 版本 FGSL。