当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Special 数学的特殊函数


R语言 Special 位于 base 包(package)。

说明

与 beta 和 gamma 函数相关的特殊数学函数。

用法

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)

参数

a, b

非负数值向量。

x, n

数值向量。

k, deriv

整数向量。

细节

函数 betalbeta 返回 beta 函数和 beta 函数的自然对数,

正式的定义是

(Abramowitz 和 Stegun 第 6.2.1 节,第 258 页)。请注意,它仅定义在R对于非负数ab,如果其中一个为零,则为无限。

函数gammalgamma返回伽玛函数 以及伽玛函数绝对值的自然对数。伽马函数由(Abramowitz 和 Stegun 第 6.1.1 节,第 255 页)定义

对于所有真实的x除了零和负整数(当NaN被返回)。如果值太接近(大约在 ) 为小于‘的负整数⁠-10⁠’。

factorial(x)(非负整数x )定义为gamma(x+1)lfactorial定义为lgamma(x+1)

函数digammatrigamma 返回伽马函数对数的一阶和二阶导数。 psigamma(x, deriv) ( deriv >= 0 ) 计算 deriv 阶导数。

及其派生物 psigamma() 函数通常称为 ‘polygamma’ 函数,例如Abramowitz 和 Stegun(第 6.4.1 节,第 260 页);更高阶的导数(deriv = 2:4)有时也被称为‘tetragamma’, ‘pentagamma’和‘hexagamma’。

函数chooselchoose返回二项式系数及其绝对值的对数。注意choose(n, k)为所有实数定义 和整数 。为了 它被定义为 , 作为 为了 并作为 对于负数 。非整数值k四舍五入为整数,并带有警告。
choose(*, k)使用直接算术(而不是[l]gamma调用)小k,出于速度和准确性的原因。注意函数combn(包utils)用于枚举所有可能的组合。

gammalgammadigammatrigamma 函数是 internal generic primitive 函数:可以单独为它们定义方法,也可以通过 Math 组泛型为它们定义方法。

例子

require(graphics)

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, ...
## this will generate loss of precision warnings, so turn off
op <- options("warn")
options(warn = -1)
x <- sort(c(seq(-3, 4, length.out = 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")
options(op)

x <- seq(0.1, 4, length.out = 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 <- paste0(ch, "gamma")
  if (is.deriv) {
    dy <- diff(y) / dx # finite difference
    der <- which(ch == c("di","tri","tetra","penta")) - 1
    nm2 <- paste0("psigamma(*, deriv = ", der,")")
    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)
}
par(mfrow = c(1, 1))

## "Extended" Pascal triangle:
fN <- function(n) formatC(n, width=2)
for (n in -4:10) {
    cat(fN(n),":", fN(choose(n, k = -2:max(3, n+2))))
    cat("\n")
}

## R code version of choose()  [simplistic; warning for k < 0]:
mychoose <- function(r, k)
    ifelse(k <= 0, (k == 0),
           sapply(k, function(k) prod(r:(r-k+1))) / factorial(k))
k <- -1:6
cbind(k = k, choose(1/2, k), mychoose(1/2, k))

## Binomial theorem for n = 1/2 ;
## sqrt(1+x) = (1+x)^(1/2) = sum_{k=0}^Inf  choose(1/2, k) * x^k :
k <- 0:10 # 10 is sufficient for ~ 9 digit precision:
sqrt(1.25)
sum(choose(1/2, k)* .25^k)


来源

gammalgammabetalbeta 基于洛斯阿拉莫斯科学实验室的 W. Fullerton(现已作为 SLATEC 的一部分提供)对 Fortran 子例程的 C 翻译。

x >= 0digammatrigammapsigamma 基于

阿莫斯,D.E.(1983)。用于 psi 函数导数的可移植 Fortran 子例程,算法 610,ACM Transactions on Mathematical Software 9(4), 494-502。

对于x < 0deriv <= 5,使用Abramowitz和Stegun的反射公式(6.4.7)。

参考

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. https://en.wikipedia.org/wiki/Abramowitz_and_Stegun provides links to the full text which is in public domain.
Chapter 6: Gamma and Related Functions.

也可以看看

Arithmetic 表示简单函数,sqrt 表示各种数学函数,Bessel 表示实数贝塞尔函数。

对于不完整的 gamma 函数,请参阅 pgamma

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Special Functions of Mathematics。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。