expint | R Documentation |
The exponential integrals E_1(x), E_2(x), E_n(x) and Ei.
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)
x |
vector of real numbers. |
order |
vector of non-negative integers; see Details. |
scale |
logical; when |
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.
The value of the exponential integral.
Invalid arguments will result in return value NaN
, with a warning.
The C implementation is based on code from the GNU Software Library https://www.gnu.org/software/gsl/.
Vincent Goulet vincent.goulet@act.ulaval.ca
Abramowitz, M. and Stegun, I. A. (1972), Handbook of Mathematical Functions, Dover.
gammainc
## 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))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.