繁体   English   中英

R 中的 Gamma 函数

[英]Gamma Function in R

我正在尝试使用以下规则从头开始实现伽马函数:

  1. 如果 z 等于 1,我们返回 1;
  2. 项目清单
  3. gama(z) (使用函数的递归) (z-1)*gamma(z-1);
  4. 如果 z 是一个自然数,那么我们返回 (z-1) 的阶乘;
  5. 如果 z 等于 1/2,我们返回 sqrt(pi)。

这个条件使我得到以下更简化的条件

  1. 如果 z 是自然的,我们使用第三个属性;
  2. 如果 z 是 b/2 的形状,其中 b 是自然数,我们使用性质 2 和 4。
  3. 否则我们应用第二个公式直到 n 小于 1。当 z 小于 1 时,我们应用这个公式: gamma(z) 公式

我的代码看起来像这样,但我似乎无法使其适用于符合第 8 点标准的值。

gama <-function(z){
    fgama <- function(x)
    {
    x**(z-1)*exp(-x)
    }
    functie <-integrate(fgama,0,Inf)
    
    if(z==1/2)
    {
      return (sqrt(pi))
    }
    if(isNatural(z))
    {
      return(factorial(z-1))
    }
    if(z%%2==0.5 || z%%2==1.5){
      return((z-1)*gama(z-1))
    }
    else
    {
      while(z > 1)
      {
        n <- (z-1)*gama(z-1)
       
      }
    return(functie)
    }
 
}
  
print(gama(4.3))




它给出了这个错误:

Error in (z - 1) * gama(z - 1) : non-numeric argument to binary operator

你可以试试下面的代码

fg <- function(z) {
  integrate(function(x) exp(-x) * x^(z - 1), 0, Inf)
}

你会看到

> fg(10)
362880 with absolute error < 0.025

> gamma(10)
[1] 362880

> fg(1.5)
0.8862265 with absolute error < 2.5e-06

> gamma(1.5)
[1] 0.8862269

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM