-1

y がわかっている場合に z を見つけ、R に関数があるかどうかを知りたいと思っています。

ガンマ(z)=y

Uniroot は役に立つかもしれませんが、これをどのように使用できるかわかりません。

ありがとう

4

1 に答える 1

3

数学フォーラムの投稿から:

k はディガンマ関数の正のゼロ、約 1.461632 ... を表します。

c = Sqrt(2*pi)/e - ガンマ(k) ...

... 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
于 2016-11-15T22:35:14.310 に答える