mpmath
가 환상적인 라이브러리 및 고정밀 계산에 갈 수있는 방법입니다. 이러한 함수가 더 기본적인 구성 요소로부터 계산 될 수 있다는 점은 주목할 가치가 있습니다. 따라서 scipy의 제한을 따르지 않아도되며 다른 고정밀 라이브러리를 사용할 수 있습니다. 아래 최소한의 예 :
import numpy as np
from scipy.special import *
X = np.random.random(3)
v = 2.000000000
print "Bessel Function J"
print jn(v,X)
print "Modified Bessel Function, Iv"
print ((1j**(-v))*jv(v,1j*X)).real
print iv(v,X)
print "Modified Bessel Function of the second kind, Kv"
print (iv(-v,X)-iv(v,X)) * (np.pi/(2*sin(v*pi)))
print kv(v,X)
print "Modified spherical Bessel Function, in"
print np.sqrt(np.pi/(2*X))*iv(v+0.5,X)
print [sph_in(floor(v),x)[0][-1] for x in X]
print "Modified spherical Bessel Function, kn"
print np.sqrt(np.pi/(2*X))*kv(v+0.5,X)
print [sph_kn(floor(v),x)[0][-1] for x in X]
print "Modified spherical Bessel Function, in"
print np.sqrt(np.pi/(2*X))*iv(v+0.5,X)
print [sph_in(floor(v),x)[0][-1] for x in X]
이 제공 :
Bessel Function J
[ 0.01887098 0.00184202 0.08399226]
Modified Bessel Function, Iv
[ 0.01935808 0.00184656 0.09459852]
[ 0.01935808 0.00184656 0.09459852]
Modified Bessel Function of the second kind, Kv
[ 12.61494864 135.05883902 2.40495388]
[ 12.61494865 135.05883903 2.40495388]
Modified spherical Bessel Function, in
[ 0.0103056 0.00098466 0.05003335]
[0.010305631072943869, 0.00098466280846548084, 0.050033450286650107]
Modified spherical Bessel Function, kn
[ 76.86738631 2622.98228411 6.99803515]
[76.867205587011171, 2622.9730878542782, 6.998023749439338]
Modified spherical Bessel Function, in
[ 0.0103056 0.00098466 0.05003335]
[0.010305631072943869, 0.00098466280846548084, 0.050033450286650107]
이렇게하면 기본 데이터는 높은 정밀도를 가지고 있지 않는 찾고있는 큰 값을 실패합니다.
을 scipy.special.kve. scipy는 실제로 베셀 함수를 구현하는 C 코드 주위에 래퍼를 제공합니다. 따라서 두 배의 범위로 제한됩니다. – sizzzzlerz
예, 방금 sys.float_info를 수행하고 무엇을 추측합니까? max_10_exp = 308 이는 한계에서 베셀 함수에 대한 해답입니다. 이것은 나에게 나쁜 소식이다. Wolfram Alpha는 어떻게 그것을 해결할 수 있습니까? – Rapid
Magic? 몰라요.하지만 꽤 정교한 툴인 Wolfram의 Mathematica에서 Alpha가 코드 기반을 얻었습니다. 그들은 베셀과 같은 초월 함수에 대해 본질적으로 무제한의 정밀도와 범위를 반환 할 수있는 일종의 알고리즘을 구현했습니다. – sizzzzlerz