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