expint: Exponential Integral

View source: R/expint.R

expintR Documentation

Exponential Integral

Description

The exponential integrals E_1(x), E_2(x), E_n(x) and Ei.

Usage

expint(x, order = 1L, scale = FALSE)
expint_E1(x, scale = FALSE)
expint_E2(x, scale = FALSE)
expint_En(x, order, scale = FALSE)
expint_Ei(x, scale = FALSE)

Arguments

x

vector of real numbers.

order

vector of non-negative integers; see Details.

scale

logical; when TRUE the result will be scaled by exp(x).

Details

Abramowitz and Stegun (1972) first define the exponential integral as

E_1(x) = int_x^Inf exp(-t)/t dt, x != 0.

An alternative definition (to be understood in terms of the Cauchy principal value due to the singularity of the integrand at zero) is

Ei(x) = - int_{-x}^Inf exp(-t)/t dt = - E_1(-x).

The exponential integral can also generalized to order n as

E_n(x) = int_1^Inf exp(-xt)/t^n dt,

for n = 0, 1, 2, …; x a real number (non-negative when n > 2).

The following relation holds:

E_n(x) = x^(n-1) G(1-n, x),

where G(a, x) is the incomplete gamma function implemented in gammainc.

By definition, E_0(x) = exp(-x)/x, x != 0.

Function expint is vectorized in both x and order, whereas function expint_En expects a single value for order and will only use the first value if order is a vector.

Non-integer values of order will be silently coerced to integers using truncation towards zero.

Value

The value of the exponential integral.

Invalid arguments will result in return value NaN, with a warning.

Note

The C implementation is based on code from the GNU Software Library https://www.gnu.org/software/gsl/.

Author(s)

Vincent Goulet vincent.goulet@act.ulaval.ca

References

Abramowitz, M. and Stegun, I. A. (1972), Handbook of Mathematical Functions, Dover.

See Also

gammainc

Examples

## See section 5.3 of Abramowitz and Stegun
expint(1.275, order = 1:10)
expint(10, order = 1:10) * 1e5
expint(c(1.275, 10), order = c(1, 2))

expint_E1(1.275)                        # same as above
expint_E2(10)                           # same as above

## Figure 5.1 of Abramowitz and Stegun
curve(expint_Ei, xlim = c(0, 1.6), ylim = c(-3.9, 3.9),
      ylab = "y")
abline(h = 0)
curve(expint_E1, add = TRUE)
x <- 1.5
text(x, c(expint_Ei(x), expint_E1(x)),
     expression(Ei(x), E[1](x)),
     adj = c(0.5, -0.5))

## Figure 5.2 of Abramowitz and Stegun
plot(NA, xlim = c(-1.6, 1.6), ylim = c(0, 1),
     xlab = "x", ylab = expression(E[n](x)))
n <- c(10, 5, 3, 2, 1, 0)
for (order in n)
    curve(expint_En(x, order), add = TRUE)
x <- c(0.1, 0.15, 0.25, 0.35, 0.5, 0.7)
text(x, expint(x, n), paste("n =", n),
     adj = c(-0.2, -0.5))

expint documentation built on Oct. 29, 2022, 1:08 a.m.