评估超几何函数的有效、准确算法是什么?

计算科学 特殊功能
2021-12-18 23:15:15

我很想知道有哪些好的数值算法可用于评估广义超几何函数(或系列),定义为

pFq(a1,,ap;b1,,bq;z)=k=0(a1)k(ap)k(b1)k(bq)kzkk!

一般来说,这个系列不一定会很快(或根本没有)收敛,所以一个一个地总结术语似乎不太理想。有没有更好的替代方法?具体来说,我正在寻找能够提供 4 或 5 位精度和合理计算次数的东西。

我通常看到使用的最常见的情况是p=1,q=1p=2,q=1,但在我正在从事的特定项目中,我需要p=1,q=2. 显然,任何一个通用算法pq是理想的,但我会尽我所能。

2个回答

在单个应用程序中,您很可能只需要广义超几何函数所有可能极端值的一小部分。毕竟,这是一个非常通用的功能。对范围有一个想法z和参数ai,bi将允许提供更具体的建议。

一般来说,标准方法,假设pq+1, 当然是使用定义幂级数时|z|是小。如果p<q+1,最好切换到渐近展开式|z|很大,或者是因为泰勒级数收敛太慢和/或由于灾难性抵消而变得太不准确。这些算法之间的最佳截止值取决于参数和精度要求。

为了1F2渐近级数由http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/给出它看起来相当可怕,但如果你a1,b1,b2是固定的,您可以提前计算系数的数值。通用公式可在 DLMF 中找到:http://dlmf.nist.gov/16.11 请注意,需要注意选择正确的分支切割。)

如果存在泰勒级数和渐近级数都不够好的范围,则“指数改进扩展”可能有用。另一个值得一提的可能性是,您可以将超几何微分方程插入通用 ODE 求解器。这应该工作得很好,特别是如果你只需要 4-5 位数字。这可以用来从一个小的z(幂级数运行良好)到更大的一个,或者与通过渐近级数获得的值相反(您可能需要做更多的工作才能获得所需的所有导数作为初始值)。

如果您需要功能p=q+1那么在整个复平面上1/z转换公式可用于将单位圆盘的外部映射到内部。一些收敛加速算法或其他方法,如 ODE 的数值积分,必须在单位圆附近使用。如果p>q+1半径是收敛为零,因此如果您要评估的函数由这样一个发散级数给出,您可能需要应用 Borel 变换(数字或符号)以将其减少为收敛级数。

对于完整的实现,还需要考虑其他问题(例如,处理非常大或非常接近负整数的参数)。对于足够糟糕的参数,无论您做什么,都很难获得具有双精度的准确值,因此可能需要任意精度的算术。

我应该注意到,我已经为 mpmath 库编写了一个几乎完整的广义超几何函数的数值实现(它目前缺少高于2F3),这对于研究或运行测试可能很有用(假设它对于您的目的还不够快)。

所有特殊函数的规范参考是 Abramowicz 和 Stegun。这是一本已经出版了大约半个世纪的书,如果您在其中找不到某些内容,请查看“更新的第二版”,它实际上是由美国国家标准研究院 (NIST) 组织的网站)。我没有确切的网址,但应该不难找到。