R: Exponential Integral

expint {expint} | R 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))

[Package expint version 0.1-7 Index]