| Special {base} | R Documentation |
Special Functions of Mathematics
Description
Special mathematical functions related to the beta and gamma functions.
Usage
beta(a, b)
lbeta(a, b)
gamma(x)
lgamma(x)
psigamma(x, deriv = 0)
digamma(x)
trigamma(x)
choose(n, k)
lchoose(n, k)
factorial(x)
lfactorial(x)
Arguments
a, b, x |
numeric vectors. |
n, k, deriv |
integer vectors. |
Details
The functions beta and lbeta return the beta function
and the natural logarithm of the beta function,
B(a,b) = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}.
The formal definition is
B(a, b) = \int_0^1 t^{a-1} (1-t)^{b-1} dt
(Abramowitz and Stegun (6.2.1), page 258).
The functions gamma and lgamma return the gamma function
\Gamma(x) and the natural logarithm of the absolute value of the
gamma function. The gamma function is defined by (Abramowitz and Stegun (6.1.1), page 255)
\Gamma(x) = \int_0^\infty t^{a-1} e^{-t} dt
factorial(x) is x! and identical to
gamma(x+1) and lfactorial is lgamma(x+1).
The functions digamma and trigamma return the first and second
derivatives of the logarithm of the gamma function.
psigamma(x, deriv) (deriv >= 0) is more generally
computing the deriv-th derivative of \psi(x).
\code{digamma(x)} = \psi(x) = \frac{d}{dx}\ln\Gamma(x) =
\frac{\Gamma'(x)}{\Gamma(x)}
The functions choose and lchoose return binomial
coefficients and their logarithms.
All the *gamma* functions are generic: methods can be
defined for them individually or via the Math group generic.
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
The New S Language.
Wadsworth \& Brooks/Cole. (for gamma and lgamma.)
Abramowitz, M. and Stegun, I. A. (1972) Handbook of Mathematical Functions. New York: Dover. Chapter 6: Gamma and Related Functions.
See Also
Arithmetic for simple, sqrt for
miscellaneous mathematical functions and Bessel for the
real Bessel functions.
For the incomplete gamma function see pgamma.
Examples
choose(5, 2)
for (n in 0:10) print(choose(n, k = 0:n))
factorial(100)
lfactorial(10000)
## gamma has 1st order poles at 0, -1, -2, ...
x <- sort(c(seq(-3,4, length=201), outer(0:-3, (-1:1)*1e-6, "+")))
plot(x, gamma(x), ylim=c(-20,20), col="red", type="l", lwd=2,
main=expression(Gamma(x)))
abline(h=0, v=-3:0, lty=3, col="midnightblue")
x <- seq(.1, 4, length = 201); dx <- diff(x)[1]
par(mfrow = c(2, 3))
for (ch in c("", "l","di","tri","tetra","penta")) {
is.deriv <- nchar(ch) >= 2
nm <- paste(ch, "gamma", sep = "")
if (is.deriv) {
dy <- diff(y) / dx # finite difference
der <- which(ch == c("di","tri","tetra","penta")) - 1
nm2 <- paste("psigamma(*, deriv = ", der,")",sep='')
nm <- if(der >= 2) nm2 else paste(nm, nm2, sep = " ==\n")
y <- psigamma(x, deriv=der)
} else {
y <- get(nm)(x)
}
plot(x, y, type = "l", main = nm, col = "red")
abline(h = 0, col = "lightgray")
if (is.deriv) lines(x[-1], dy, col = "blue", lty = 2)
}