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


16

我很好奇,知道有什么好的数值算法可以用来评估广义超几何函数(或级数),定义为

pFq一种1个一种p;b1个bq;ž=ķ=0一种1个ķ一种pķb1个ķbqķžķķ

通常,该系列不一定会很快收敛(或根本不会收敛),因此,逐项汇总术语似乎并不理想。有一些更好的替代方法吗?具体来说,我正在寻找能够提供4或5位精度并具有合理数量的计算的东西。

我通常看到的最常见的情况是p = 2 q = 1,但是在我正在研究的特定项目中,我需要p = 1 q = 2。显然,针对任何pq的通用算法都是理想的,但是我将尽我所能。p=1个q=1个p=2q=1个p=1个q=2pq


如果您的案子不在Abramowitz和Stegun的手册(people.math.sfu.ca/~cbm/aands/subj.htm)中涵盖,但事实并非如此,您基本上注定要自己解决这个问题,我就是害怕...
Jaime 2012年

Answers:


15

在单个应用程序中,您很有可能只需要广义超几何函数所有可能极端的一小部分。毕竟,这是一个非常通用的功能。对的范围和参数a ib i有一个了解将可以给出更具体的建议。zai,bi

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

对于 的渐近级数是由http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/给出的,它看起来很可怕,但是如果您的 a 1b 1b 2是固定的,则可以预先计算系数的数值。通用公式可在DLMF中找到:http://dlmf.nist.gov/16.11(请注意,选择正确的分支切口需要格外小心。)1F2a1,b1,b2

如果泰勒级数和渐近级数都无法很好地发挥作用,则“按指数改进的展开”可能会有用。值得一提的另一种可能性是,您可以将超几何微分方程插入通用ODE求解器中。这应该工作得很好,尤其是在您只需要4-5位数字的情况下。这可以用于从小(幂级数在其中起作用)到较大的z进行解析延续,或者与通过渐近级数获得的值相反(您可能需要做更多的工作才能获得所有的需要作为初始值的导数)。z

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

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

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


优秀!不幸的是,我无法真正更具体地了解参数值,因为该函数会在许多地方弹出各种值。在某个时候,我绝对会对在mpmath中使用和/或查看您的实现感兴趣。
David Z

1
弗雷德里克的答案是正确的。我只指出,我最终使用了有理近似(来自Mathematica)来近似表示“ a”和“ b”系数的特殊值,因为它对于所有实数“ z”都是准确的(我将实轴划分为区间并在每个上使用了不同的有理近似值,而且速度非常快。我使用了mpmath来检查Fortran中双精度实现的准确性。
昂德里杰·塞蒂克

2

所有特殊功能的规范参考是Abramowicz和Stegun。这是一本已存在约半个世纪的书,如果找不到,请看一看“第二版”,它实际上是由美国国家标准学会(NIST)组织的网站)。我没有确切的URL,但应该不会很难找到。


2
现在称为“数学函数数字图书馆”;超几何函数是第15章的主题。
Christian Clason

1
2F11F2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.