ベータ関数

Takami Torao
  • このエントリーをはてなブックマークに追加

定義と性質

ベータ関数 (beta function) は以下の積分で定義される特殊関数。またガンマ関数を使用して以下のように表すこともできる。したがって が正の整数であれば階乗として表すことができる。

不完全ベータ関数

不完全ベータ関数 (incomplete beta function) はベータ関数を一般化し の範囲で不定積分とした関数である。

正則ベータ関数 (regularized beta function) ここで , の制約。対象関係

もし がともに 1 より大きい場合は

アルゴリズム

ベータ関数の実装

ベータ関数は式 () を用いて対数ガンマ関数を用いて算出することができる。ガンマ関数は分数で打ち消し合うため小さな , に対して発散することはなく対数ベータ関数を用意する必要はない。

def beta(x:Double, y:Double):Double = {
  math.exp(gammaln(x) + gammaln(y) - gammaln(x + y))
}

Scala の REPL での実行結果は以下の通り。



不完全ガンマ関数の実装

不完全ガンマ関数は級数展開が可能である。

def betai(z:Double)(x:Double, y:Double):Double = {
  if(z < 0.0 || z > 1.0){
    throw new IllegalArgumentException()
  }

  val bt = if(x == 0.0 || x == 1.0) 0.0 else {
    math.exp(gammaln(x + y) - gammaln(x) - gammaln(y) + x * math.log(z) + y * math.log(1.0 - z))
  }
  if(z < (x + 1.0) / (x + y + 2.0)){
    bt * beta
  }
}

scala>