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