Learn R Programming

expint (version 0.1-6)

expint: 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 \(e^x\).

Value

The value of the exponential integral.

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

Details

Abramowitz and Stegun (1972) first define the exponential integral as $$ E_1(x) = \int_x^\infty \frac{e^{-t}}{t}\, dt, \quad x \ne 0.$$

An alternative definition (to be understood in terms of the Cauchy principal value due to the singularity of the integrand at zero) is $$ \mathrm{Ei}(x) = - \int_{-x}^\infty \frac{e^{-t}}{t}\, dt = - E_1(-x).$$

The exponential integral can also generalized to order \(n\) as $$ E_n(x) = \int_1^\infty \frac{e^{-xt}}{t^n}\, dt,$$ for \(n = 0, 1, 2, \dots\); \(x\) a real number (non-negative when \(n > 2\)).

The following relation holds: $$ E_n(x) = x^{n - 1} \Gamma(1 - n, x),$$ where \(\Gamma(a, x)\) is the incomplete gamma function implemented in gammainc.

By definition, \(E_0(x) = x^{-1} e^{-x}\), \(x \ne 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.

References

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

See Also

gammainc

Examples

Run this code
# NOT RUN {
## 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))
# }

Run the code above in your browser using DataLab