我很想知道有哪些好的数值算法可用于评估广义超几何函数(或系列),定义为
一般来说,这个系列不一定会很快(或根本没有)收敛,所以一个一个地总结术语似乎不太理想。有没有更好的替代方法?具体来说,我正在寻找能够提供 4 或 5 位精度和合理计算次数的东西。
我通常看到使用的最常见的情况是和,但在我正在从事的特定项目中,我需要. 显然,任何一个通用算法和是理想的,但我会尽我所能。
我很想知道有哪些好的数值算法可用于评估广义超几何函数(或系列),定义为
一般来说,这个系列不一定会很快(或根本没有)收敛,所以一个一个地总结术语似乎不太理想。有没有更好的替代方法?具体来说,我正在寻找能够提供 4 或 5 位精度和合理计算次数的东西。
我通常看到使用的最常见的情况是和,但在我正在从事的特定项目中,我需要. 显然,任何一个通用算法和是理想的,但我会尽我所能。
在单个应用程序中,您很可能只需要广义超几何函数所有可能极端值的一小部分。毕竟,这是一个非常通用的功能。对范围有一个想法和参数将允许提供更具体的建议。
一般来说,标准方法,假设, 当然是使用定义幂级数时是小。如果,最好切换到渐近展开式很大,或者是因为泰勒级数收敛太慢和/或由于灾难性抵消而变得太不准确。这些算法之间的最佳截止值取决于参数和精度要求。
为了渐近级数由http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/给出它看起来相当可怕,但如果你是固定的,您可以提前计算系数的数值。通用公式可在 DLMF 中找到:http://dlmf.nist.gov/16.11 (请注意,需要注意选择正确的分支切割。)
如果存在泰勒级数和渐近级数都不够好的范围,则“指数改进扩展”可能有用。另一个值得一提的可能性是,您可以将超几何微分方程插入通用 ODE 求解器。这应该工作得很好,特别是如果你只需要 4-5 位数字。这可以用来从一个小的(幂级数运行良好)到更大的一个,或者与通过渐近级数获得的值相反(您可能需要做更多的工作才能获得所需的所有导数作为初始值)。
如果您需要功能那么在整个复平面上转换公式可用于将单位圆盘的外部映射到内部。一些收敛加速算法或其他方法,如 ODE 的数值积分,必须在单位圆附近使用。如果半径是收敛为零,因此如果您要评估的函数由这样一个发散级数给出,您可能需要应用 Borel 变换(数字或符号)以将其减少为收敛级数。
对于完整的实现,还需要考虑其他问题(例如,处理非常大或非常接近负整数的参数)。对于足够糟糕的参数,无论您做什么,都很难获得具有双精度的准确值,因此可能需要任意精度的算术。
我应该注意到,我已经为 mpmath 库编写了一个几乎完整的广义超几何函数的数值实现(它目前缺少高于),这对于研究或运行测试可能很有用(假设它对于您的目的还不够快)。
所有特殊函数的规范参考是 Abramowicz 和 Stegun。这是一本已经出版了大约半个世纪的书,如果您在其中找不到某些内容,请查看“更新的第二版”,它实际上是由美国国家标准研究院 (NIST) 组织的网站)。我没有确切的网址,但应该不难找到。