R中是否存在一个函数,如果我知道gamma(z)=y中的y,它就能求出z

ycl3bljg  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(146)

我想知道R中是否有函数在已知y和
伽玛(z)=y
Uniroot可能有用,但不确定我如何使用它。
谢谢

6jjcrrmo

6jjcrrmo1#

a mathforum post开始:
设k表示二γ函数的正零点,约为1.461632...
c =平方(2pi)/e -伽玛(k)...
设L(x)= ln((x+c)/Sqrt(2
pi)),则伽马近似的逆为
近似值为反伽玛或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

相关问题