# 不完全ベータ関数 Incomplete Beta Function # 引数 変数 変数 変数 ($AA, $BB, $X) # 戻り値 不完全ベータ関数 ($IncompleteBetaFunction) sub INCOMPLETEBETAFUNCTION{ my ($AA, $BB, $X) = @_; my $IncompleteBetaFunction = 0; my $SimpsonsRule = 0; my $a = 0; my $b = $X; my $N = 100; my $h = ($b - $a) / $N; my $Sum = 0; my $SumA = 0; my $SumB = 0; # 値の確認 if(($AA <= 0) || ($BB <= 0) || ($X < 0) || (1 < $X)){ return 0; } # シンプソンの公式 Simpson's Rule $SumA = ($a ** ($AA - 1)) * ((1 - $a) ** ($BB - 1)); $SumB = ($b ** ($AA - 1)) * ((1 - $b) ** ($BB - 1)); # 分割数は適当 for(my $i = 1; $i < $N; $i++){ my $t = $a + ($i * $h); my $num = ($i % 2 == 0 ? 2 : 4); my $tmp = ($t ** ($AA - 1)) * ((1 - $t) ** ($BB - 1)); $Sum += $num * $tmp; } # 不完全ベータ関数 Incomplete Beta Function $IncompleteBetaFunction = ($SumA + $Sum + $SumB) * ($h / 3); return $IncompleteBetaFunction; }