>>> 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得到正确的结果。我不知道为什么,可能我犯了一些错误?
答案 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)