Package 'expint'

Title: Exponential Integral and Incomplete Gamma Function
Description: The exponential integrals E_1(x), E_2(x), E_n(x) and Ei(x), and the incomplete gamma function G(a, x) defined for negative values of its first argument. The package also gives easy access to the underlying C routines through an API; see the package vignette for details. A test package included in sub-directory example_API provides an implementation. C routines derived from the GNU Scientific Library <https://www.gnu.org/software/gsl/>.
Authors: Vincent Goulet [cre, aut], Gerard Jungman [aut] (Original GSL code), Brian Gough [aut] (Original GSL code), Jeffrey A. Ryan [aut] (Package API), Robert Gentleman [aut] (Parts of the R to C interface), Ross Ihaka [aut] (Parts of the R to C interface), R Core Team [aut] (Parts of the R to C interface), R Foundation [aut] (Parts of the R to C interface)
Maintainer: Vincent Goulet <[email protected]>
License: GPL (>= 2)
Version: 0.1-8
Built: 2024-10-31 20:32:09 UTC
Source: https://github.com/cran/expint

Help Index


Exponential Integral and Incomplete Gamma Function

Description

The exponential integrals E1(x)E_1(x), E2(x)E_2(x), En(x)E_n(x) and Ei(x)Ei(x), and the incomplete gamma function Γ(a,x)\Gamma(a, x) that is defined for negative values of its first argument.

Details

The exponential integral

E1(x)=xettdtE_1(x) = \int_x^\infty \frac{e^{-t}}{t}\, dt

and the incomplete gamma function

Γ(a,x)=xta1etdt\Gamma(a, x) = \int_x^\infty t^{a-1} e^{-t}\, dt

are closely related functions that arise in various fields of mathematics.

expint is a small package that provides R functions to compute the exponential integral and the incomplete gamma function.

Most conveniently for R package developers, the package also gives access to the underlying C workhorses through an API; see the package vignette for instructions.

The C routines are adapted versions of those of the GNU Scientific Library https://www.gnu.org/software/gsl/.

Author(s)

Vincent Goulet [email protected]

References

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

See Also

expint for the exponential integral family of functions.

gammainc for the incomplete gamma function.

vignette("expint") for a detailed presentation of the package.


Exponential Integral

Description

The exponential integrals E1(x)E_1(x), E2(x)E_2(x), En(x)E_n(x) and EiEi.

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 exe^x.

Details

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

E1(x)=xettdt,x0.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

Ei(x)=xettdt=E1(x).\mathrm{Ei}(x) = - \int_{-x}^\infty \frac{e^{-t}}{t}\, dt = - E_1(-x).

The exponential integral can also generalized to order nn as

En(x)=1exttndt,E_n(x) = \int_1^\infty \frac{e^{-xt}}{t^n}\, dt,

for n=0,1,2,n = 0, 1, 2, \dots; xx a real number (non-negative when n>2n > 2).

The following relation holds:

En(x)=xn1Γ(1n,x),E_n(x) = x^{n - 1} \Gamma(1 - n, x),

where Γ(a,x)\Gamma(a, x) is the incomplete gamma function implemented in gammainc.

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

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 [email protected]

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))

Incomplete Gamma Function

Description

The incomplete gamma function Γ(a,x)\Gamma(a, x).

Usage

gammainc(a, x)

Arguments

a

vector of real numbers.

x

vector of non-negative real numbers.

Details

As defined in 6.5.3 of Abramowitz and Stegun (1972), the incomplete gamma function is

Γ(a,x)=xta1etdt\Gamma(a, x) = \int_x^\infty t^{a-1} e^{-t}\, dt

for aa real and x0x \ge 0.

For non-negative values of aa, we have

Γ(a,x)=Γ(a)(1P(a,x)),\Gamma(a, x) = \Gamma(a) (1 - P(a, x)),

where Γ(a)\Gamma(a) is the function implemented by R's gamma() and P(a,x)P(a, x) is the cumulative distribution function of the gamma distribution (with scale equal to one) implemented by R's pgamma().

Also, Γ(0,x)=E1(x)\Gamma(0, x) = E_1(x), x>0x > 0, where E1(x)E_1(x) is the exponential integral implemented in expint.

Value

The value of the incomplete gamma function.

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 [email protected]

References

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

See Also

expint

Examples

## a > 0
x <- c(0.2, 2.5, 5, 8, 10)
a <- 1.2
gammainc(a, x)
gamma(a) * pgamma(x, a, 1, lower = FALSE) # same

## a = 0
a <- 0
gammainc(a, x)
expint(x)                                 # same

## a < 0
a <- c(-0.25, -1.2, -2)
sapply(a, gammainc, x = x)