为什么scipy.special.hankel1(0,10 ** 10)返回`nan`?

时间:2014-06-16 07:52:37

标签: python scipy

>>> import scipy.special
>>> scipy.special.hankel1(0, 10**8)
(3.2060295340412074e-05+7.3063911655217044e-05j)
>>> scipy.special.hankel1(0, 10**9)
(2.4687471886269185e-05-5.2104226538976152e-06j)
>>> scipy.special.hankel1(0, 10**10)
(nan+nan*j)

我认为这些示例适用于Mathematica或MATLAB。但我无法从scipy得到正确的结果。我不知道为什么,可能我犯了一些错误?

1 个答案:

答案 0 :(得分:0)

我不会认为这是一个错误,而是一个功能。

您应该通过执行

启用错误报告功能
scipy.special.errprint(1)

然后你会注意到:

In : scipy.special.hankel1(0, 10**4)
Out: (-0.0070961603533888007+0.0036478055589866053j)

In : scipy.special.hankel1(0, 10**9)
/usr/bin/ipython:1: SpecialFunctionWarning: scipy.special/hankel1:: loss of precision
  #!/usr/bin/python3
Out: (2.4687471886269192e-05-5.2104226538976127e-06j)

In : scipy.special.hankel1(0, 10**10)
/usr/bin/ipython:1: SpecialFunctionWarning: scipy.special/hankel1:: no result obtained
  #!/usr/bin/python3
Out: (nan+nan*j)