超几何汇合函数与scipy发散

时间:2013-12-12 15:41:40

标签: python scipy

我有scipy的超几何汇合函数的问题。 代码是

from scipy import special

print special.hyp1f1(-0.5, 0.5, -705)
print special.hyp1f1(-0.5, 0.5, -706)

我获得了输出

47.0619041347
inf

我不明白为什么这个功能有分歧。超几何汇合函数对于大x具有渐近展开,并且对于这些参数值不应存在任何极点。我错了,还是这个错误?在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

(已知)错误:scipy.special.hyp1f1(0.5, 1.5, -1000) fails.

另请参阅pull request hyp1f1: better handling of large negative arguments,原因(即指数溢出)。

Kummer的超几何函数仅在负整数中具有极点,因此为您的用例定义明确。

答案 1 :(得分:1)

仅供参考:您可以使用优秀的mpmath library来获取没有此问题的hyp1f1函数。如果没有安装GMP / MPIR + gmpy2,库将比scipy函数慢一点,但你可以使用任意精度。

mpmath例子:

In [19]: hyp1f1(-0.5, 0.5, -706)
Out[19]: mpf('47.1')

In [20]: mp.dps = 25

In [21]: hyp1f1(-0.5, 0.5, -706)
Out[21]: mpf('47.09526954413143632617966605')

重要提示

当它无法处理返回值的大小时,这个scipy函数不会总是返回inf。值(-0.5,0.5,706)只会返回错误的答案。