from __future__ import print_function def printhankelrow(lMax, x, file=sys.stdout): print(lMax, N(x), end=' ', file=file); for l in range(lMax+1): print(N(spherical_hankel1(l,x)), end = ' ', file=file) print('', file=file) def printbesselJrow(lMax, x, file=sys.stdout): print(lMax, N(x), end=' ', file=file); for l in range(lMax+1): print(N(spherical_bessel_J(l,x)), end = ' ', file=file) print('', file=file) def printbesselYrow(lMax, x, file=sys.stdout): print(lMax, N(x), end=' ', file=file); for l in range(lMax+1): print(N(spherical_bessel_Y(l,x)), end = ' ', file=file) print('', file=file) #cf DLMF 10.51.2 def printbesselDJrow(lMax, x, file=sys.stdout): print(lMax, N(x), end=' ', file=file); for l in range(lMax+1): print(N(-spherical_bessel_J(l+1,x) + l/x*spherical_bessel_J(l,x)), end = ' ', file=file) print('', file=file) def printbesselDYrow(lMax, x, file=sys.stdout): print(lMax, N(x), end=' ', file=file); for l in range(lMax+1): print(N(-spherical_bessel_Y(l+1,x) + l/x*spherical_bessel_Y(l,x)), end = ' ', file=file) print('', file=file) def ank(n, k): return factorial(n+k)/2**k/factorial(k)/factorial(n-k) def genall(lMax): f = open('besselDJcases', 'w') for o in IntegerRange(1,100): printbesselDJrow(lMax, o, file=f) printbesselDJrow(lMax, 1/o, file=f) printbesselDJrow(lMax, o/sqrt(3), file=f) f = open('besselDYcases', 'w') for o in IntegerRange(1,100): printbesselDYrow(lMax, o, file=f) printbesselDYrow(lMax, 1/o, file=f) printbesselDYrow(lMax, o/sqrt(3), file=f) f = open('besselJcases', 'w') for o in IntegerRange(1,100): printbesselJrow(lMax, o, file=f) printbesselJrow(lMax, 1/o, file=f) printbesselJrow(lMax, o/sqrt(3), file=f) f = open('besselYcases', 'w') for o in IntegerRange(1,100): printbesselYrow(lMax, o, file=f) printbesselYrow(lMax, 1/o, file=f) printbesselYrow(lMax, o/sqrt(3), file=f) import math M_LN2 = math.log(2) def ankf(n,k): n = float(n) k = float(k) return math.exp(math.lgamma(n+k+1) - k * M_LN2 - math.lgamma(k+1) - math.lgamma(n-k+1)) def ankrelerr(n,k): a = ank(n,k) b = ankf(n,k) return 2 * abs(a - b)/(abs(a)+abs(b))