我有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具有渐近展开,并且对于这些参数值不应存在任何极点。我错了,还是这个错误?在此先感谢您的帮助!
答案 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)只会返回错误的答案。