Bessel                 package:base                 R Documentation

Bessel Functions

Description:

     Bessel Functions of integer and fractional order, of first and
     second kind, J(nu) and Y(nu), and Modified Bessel functions (of
     first and third kind), I(nu) and K(nu).

Usage:

     besselI(x, nu, expon.scaled = FALSE)
     besselK(x, nu, expon.scaled = FALSE)
     besselJ(x, nu)
     besselY(x, nu)

Arguments:

       x: numeric, >= 0.

      nu: numeric; The _order_ (maybe fractional!) of the corresponding
          Bessel function.

expon.scaled: logical; if 'TRUE', the results are exponentially scaled
          in order to avoid overflow (I(nu)) or underflow (K(nu)),
          respectively.

Details:

     If 'expon.scaled = TRUE', exp(-x) I(x;nu), or exp(x) K(x;nu) are
     returned.

     For nu < 0, formulae 9.1.2 and 9.6.2 from Abramowitz & Stegun  are
     applied (which is probably suboptimal), except for 'besselK' which
     is symmetric in 'nu'.

Value:

     Numeric vector of the same length of 'x' with the (scaled, if
     'expon.scale=TRUE') values of the corresponding Bessel function.

Author(s):

     Original Fortran code: W. J. Cody, Argonne National Laboratory 
      Translation to C and adaption to R: Martin Maechler
     maechler@stat.math.ethz.ch.

Source:

     The C code is a translation of Fortran routines from <URL:
     http://www.netlib.org/specfun/r[ijky]besl>.

References:

     Abramowitz, M. and Stegun, I. A. (1972) _Handbook of Mathematical
     Functions._ Dover, New York; Chapter 9: Bessel Functions of
     Integer Order.

See Also:

     Other special mathematical functions, such as 'gamma', Gamma(x),
     and 'beta', B(x).

Examples:

     require(graphics)

     nus <- c(0:5, 10, 20)

     x <- seq(0, 4, length.out = 501)
     plot(x, x, ylim = c(0, 6), ylab = "", type = "n",
          main = "Bessel Functions  I_nu(x)")
     for(nu in nus) lines(x, besselI(x, nu=nu), col = nu+2)
     legend(0, 6, legend = paste("nu=", nus), col = nus+2, lwd = 1)

     x <- seq(0, 40, length.out = 801); yl <- c(-.8, .8)
     plot(x, x, ylim = yl, ylab = "", type = "n",
          main = "Bessel Functions  J_nu(x)")
     for(nu in nus) lines(x, besselJ(x, nu=nu), col = nu+2)
     legend(32,-.18, legend = paste("nu=", nus), col = nus+2, lwd = 1)

     ## Negative nu's :
     xx <- 2:7
     nu <- seq(-10, 9, length.out = 2001)
     op <- par(lab = c(16, 5, 7))
     matplot(nu, t(outer(xx, nu, besselI)), type = "l", ylim = c(-50, 200),
             main = expression(paste("Bessel ", I[nu](x), " for fixed ", x,
                                     ",  as ", f(nu))),
             xlab = expression(nu))
     abline(v=0, col = "light gray", lty = 3)
     legend(5, 200, legend = paste("x=", xx), col=seq(xx), lty=seq(xx))
     par(op)

     x0 <- 2^(-20:10)
     plot(x0, x0^-8, log="xy", ylab="",type="n",
          main = "Bessel Functions  J_nu(x)  near 0\n log - log  scale")
     for(nu in sort(c(nus, nus+.5)))
         lines(x0, besselJ(x0, nu=nu), col = nu+2)
     legend(3, 1e50, legend = paste("nu=", paste(nus, nus+.5, sep=",")),
            col = nus + 2, lwd = 1)

     plot(x0, x0^-8, log="xy", ylab="", type="n",
          main = "Bessel Functions  K_nu(x)  near 0\n log - log  scale")
     for(nu in sort(c(nus, nus+.5)))
         lines(x0, besselK(x0, nu=nu), col = nu+2)
     legend(3, 1e50, legend = paste("nu=", paste(nus, nus+.5, sep=",")),
            col = nus + 2, lwd = 1)

     x <- x[x > 0]
     plot(x, x, ylim=c(1e-18, 1e11), log = "y", ylab = "", type = "n",
          main = "Bessel Functions  K_nu(x)")
     for(nu in nus) lines(x, besselK(x, nu=nu), col = nu+2)
     legend(0, 1e-5, legend=paste("nu=", nus), col = nus+2, lwd = 1)

     yl <- c(-1.6, .6)
     plot(x, x, ylim = yl, ylab = "", type = "n",
          main = "Bessel Functions  Y_nu(x)")
     for(nu in nus){
         xx <- x[x > .6*nu]
         lines(xx, besselY(xx, nu=nu), col = nu+2)
     }
     legend(25, -.5, legend = paste("nu=", nus), col = nus+2, lwd = 1)

     ## negative nu in bessel_Y -- was bogous for a long time
     curve(besselY(x, -0.1), 0, 10, ylim = c(-3,1), ylab = '')
     for(nu in c(seq(-0.2, -2, by = -0.1)))
       curve(besselY(x, nu), add = TRUE)
     title(expression(besselY(x, nu) * "   " *
                      {nu == list(-0.1, -0.2, ..., -2)}))

