3
>>> 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得到正确的结果。我不知道为什么,可能我犯了一些错误?为什么scipy.special.hankel1(0,10 ** 10)返回`nan`?
您可将函数的计算期间运行到浮点限制。该代码是一个FORTRAN算法,列在[here](https://github.com/scipy/scipy/blob/master/scipy/special/amos/zbesh.f)(至少,我认为这是使用的算法) ,这确实提到了一些限制(尽管没有适合你的)。也许用[scipy](https://github.com/scipy/scipy/issues?state=open)提出问题。请注意,我仍然可以这样计算:'np.complex(jv(0,1e10),yv(0,1e10))'。 – Evert
@Evert如何?-3621592938.02?用你的方法返回(6.210109276541645e-06 + nanj) – fronthem
那么,我没有说我建议的是整体解决方案;这只是1e10案例中的解决方法。在使用新号码时,可能'yv'与'hankel1'有类似的问题。我会接受scipy的人。 Mathematica和matlab可能运行的是比scipy使用的更新的代码版本。 – Evert