mpmath_riccati_bessel.py 535 B

12345678910111213141516171819202122232425
  1. #!/usr/bin/env python3
  2. import mpmath as mp
  3. # APPLIED OPTICS / Vol. 53, No. 31 / 1 November 2014, eq(13)
  4. def LeRu_cutoff(z):
  5. x = mp.fabs(z)
  6. return int(x + 11 * x**(1/3) + 1)
  7. # Riccati-Bessel z*j_n(z)
  8. def psi(n,z):
  9. return mp.sqrt( (mp.pi * z)/2 ) * mp.autoprec(mp.besselj)(n+1/2,z)
  10. # to compare r(n,z) with Wolfram Alpha
  11. # n=49, z=1.3-2.1i, SphericalBesselJ[n-1,z]/SphericalBesselJ[n,z]
  12. def r(n,z):
  13. if n > 0:
  14. return psi(n-1,z)/psi(n,z)
  15. return mp.cos(z)/mp.sin(z)
  16. def D1(n,z):
  17. return r(n,z) - n/z