我正在尝试使用以下规则从头开始实现伽玛函数:
- 如果 z 等于 1,我们返回 1;
- 项目清单
- gama(z) (使用函数的递归) (z-1)*gamma(z-1);
- 如果 z 是自然数,那么我们返回 (z-1) 的阶乘;
- 如果 z 等于 1/2,我们返回 sqrt(pi)。
这种条件使我得到以下更简化的条件
- 如果 z 是自然的,我们使用第三个属性;
- 如果 z 是 b/2 的形状,其中 b 是自然数,我们使用属性 2 和 4。
- 否则,我们应用第二个公式,直到 n 小于 1。当 z 小于 1 时,我们应用这个公式:
我的代码看起来像这样,但我似乎无法使其适用于符合第 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