| besselIasym {Bessel} | R Documentation |
Compute Bessel function I[nu](x)
and K[nu](x)
for large x and small or moderate
nu, using the asymptotic expansions (9.7.1) and (9.7.2), p.377-8 of
Abramowitz & Stegun, for x -> Inf, even valid for
complex x,
I_a(x) = exp(x) / sqrt(2*pi*x)* f(x, a),
where
f(x,a) = 1 - (mu-1) / (8x) + (mu-1)(mu-9) / (2! (8x)^2) - ...,
and mu = 4*a^2 and |arg(x)| < π/2.
Whereas besselIasym(x,a) computes a possibly exponentially scaled
and/or logged version of I_a(x),
besselI.ftrms returns the corresponding terms in the
series expansion of f(x,a) above.
besselIasym (x, nu, k.max = 10, expon.scaled = FALSE, log = FALSE) besselKasym (x, nu, k.max = 10, expon.scaled = FALSE, log = FALSE) besselI.ftrms(x, nu, K = 20)
x |
numeric or complex (with real part) >= 0. |
nu |
numeric; the order (maybe fractional!) of the corresponding Bessel function. |
k.max, K |
integer number of terms in the expansion. |
expon.scaled |
logical; if |
log |
logical; if TRUE, \log(f(.)) is returned instead of f. |
Even though the reference (A. & S.) requires
|\arg(z)| < pi/2 for I() and
|\arg(z)| < 3 pi/2 for K(),
where arg(z) := Arg(z),
the zero-th order term seems correct also for negative (real) numbers.
a numeric (or complex) vector of the same length as x.
Martin Maechler
Abramowitz, M., and Stegun, I. A. (1955, etc). Handbook of mathematical functions (NBS AMS series 55, U.S. Dept. of Commerce).
From this package Bessel() BesselI(); further,
besselI.nuAsym() which is useful when ν is large
(as well); further base besselI, etc
x <- c(1:10, 20, 50, 100^(2:10))
nu <- c(1, 10, 20, 50, 100)
r <- lapply(c(0:4,10,20), function(k.)
sapply(nu, function(n.)
besselIasym(x, nu=n., k.max = k., log = TRUE)))
warnings()
try( # needs improvement in R [or a local workaround]
besselIasym(10000*(1+1i), nu=200, k.max=20, log=TRUE)
) # Error in log1p(-d) : unimplemented complex function