簡體   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