如果我在gamma(z)= y中知道y,那么R中是否有一个找到z的函数

时间:2016-11-15 22:05:17

标签: r gamma-function

我想知道如果我知道y和

,R中是否有任何找到z的函数

伽马(Z)= Y

Uniroot可能很有用,但不确定如何使用它。

由于

1 个答案:

答案 0 :(得分:3)

来自a mathforum post

  

设k近似表示digamma函数的正零   1.461632 ...

     

c = Sqrt(2 * pi)/ e - Gamma(k)......

     

... Leting L(x)= ln((x + c)/ Sqrt(2 * pi)),我的伽玛的倒数   近似是

     

ApproxInvGamma或AIG(x)= L(x)/ W(L(x)/ e)+ 1/2。

k <- 1.461632
cc <- sqrt(2*pi)/exp(1)-gamma(k)
L <- function(x) {
    log((x+cc)/sqrt(2*pi))
}
AIG <- function(x) {
    Lx <- L(x)
    Lx/(emdbook::lambertW(Lx*exp(-1))) + 1/2
}


par(las=1,bty="l")
curve(1-AIG(gamma(x))/x,from=2,to=20,
      ylab="relative error of approximation")

或者,您可以使用uniroot()

AIG(5)
ufun <- function(x=5) {
   uniroot(function(z) gamma(z)-x,c(1.00001,10))$root
}
ufun(5) ## 3.852341
AIG(5)  ## 3.848149