expint {expint} | R Documentation |
Exponential Integral
Description
The exponential integrals ,
,
and
.
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
An alternative definition (to be understood in terms of the Cauchy principal value due to the singularity of the integrand at zero) is
The exponential integral can also generalized to order
as
for ;
a real number (non-negative when
).
The following relation holds:
where is the incomplete gamma function
implemented in
gammainc
.
By definition, ,
.
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))