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