FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

# 負の二項分布 Negative Binomial Distribution
# 引数 変数 変数 変数 ($X, $K, $P)
# 戻り値 負の二項分布 (@NegativeBinomialDistribution)
sub NEGATIVEBINOMIALDISTRIBUTION{
my ($X, $K, $P) = @_;
my @NegativeBinomialDistribution = ();
$X = int($X);
$K = int($K);

# 変数の確認
if(($X < 0) || ($K < 0) || ($P < 0) || (1 < $P)){
return 0;
}

# 確率密度 Probability Function
$NegativeBinomialDistribution[0] = &PROBABILITYFUNCTION($X, $K, $P);
# 下側累積確率 Lower Probability
$NegativeBinomialDistribution[1] = &LOWERPROBABILITY($X, $K, $P);
# 上側累積確率 Upper Probability
$NegativeBinomialDistribution[2] = &UPPERPROBABILITY($X, $K, $P);

return @NegativeBinomialDistribution;
}

# 確率密度 Probability Function
# 引数 変数 変数 変数 ($X, $K, $P)
# 戻り値 確率密度 ($ProbabilityFunction)
sub PROBABILITYFUNCTION{
my ($X, $K, $P) = @_;
my $ProbabilityFunction = 0;

# 確率密度 Probability Function
$ProbabilityFunction = COMBINATION(($X + $K - 1), $X) * ($P ** $K) * ((1 - $P) ** $X);

return $ProbabilityFunction;
}

# 下側累積確率 Lower Probability
# 引数 変数 変数 変数 ($X, $K, $P)
# 戻り値 下側累積確率 ($LowerProbability)
sub LOWERPROBABILITY{
my ($X, $K, $P) = @_;
my $LowerProbability = 0;
my $Sum = 0;

for(my $i = 0; $i <= $X; $i++){
$Sum += &PROBABILITYFUNCTION($i, $K, $P);
}

# 下側累積確率 Lower Probability
$LowerProbability = $Sum;

return $LowerProbability;
}

# 上側累積確率 Upper Probability
# 引数 変数 変数 変数 ($X, $K, $P)
# 戻り値 上側累積確率 ($UpperProbability)
sub UPPERPROBABILITY{
my ($X, $K, $P) = @_;
my $UpperProbability = 0;
my $Sum = 0;
my $PrevSum = 0;
my $Limit = $X + 100;
my $Epsilon = 1.0e-20;

for(my $i = $X; $i <= $Limit; $i++){
$PrevSum = $Sum;
$Sum += &PROBABILITYFUNCTION($i, $K, $P);

# 収束判定
last if(($Sum - $PrevSum) < $Epsilon);
}

# 上側累積確率 Upper Probability
$UpperProbability = $Sum;

return $UpperProbability;
}

# 組合せ Combination
# 引数 n個 r個 ($n, $r)
# 戻り値 組合せ ($Combination)
sub COMBINATION{
my ($n, $r) = @_;
my $Combination = 1;
my $N = int($n);
my $R = int($r);
my $Temp = 1;
my $Limit = (($N - $R) > $R ? $R : ($N - $R));

# 個数の確認
if(($N < $R) || ($N < 0) || ($R < 0)){
return 0;
}

# 計算
for(my $i = 1; $i <= $Limit; $i++){
$Temp = $Temp * (($N - ($i - 1)) / $i);

# 組合せ Combination
$Combination = $Temp;
}

return $Combination;
}


参考URL
負の二項分布 - Wikipedia
Negative binomial distribution - Wikipedia, the free encyclopedia
負の二項分布 - 高精度計算サイト

一言
カシオに載っている上側累積確率のNはどうだすんだ?
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。