FC2ブログ

# 正規分布 Normal Distribution
# 引数 変数 平均 標準偏差 ($X, $Mean, $StandardDeviation)
# 戻り値 正規分布 (@NormalDistribution)
sub NORMALDISTRIBUTION{
my ($X, $Mean, $StandardDeviation) = @_;
my @NormalDistribution = ();
my $SimpsonsRule = 0;

# 標準偏差の確認
if($StandardDeviation <= 0){
return 0;
}

# 確率密度関数 Frequency Function
$NormalDistribution[0] = &FREQUENCYFUNCTION($X, $Mean, $StandardDeviation);

# シンプソンの公式 Simpson's Rule
$SimpsonsRule = &SIMPSONSRULE($X, $Mean, $StandardDeviation);

# 下側累積確率 Lower Cumulative Distribution
$NormalDistribution[1] = 0.5 + $SimpsonsRule;
# 上側累積確率 Upper Cumulative Distribution
$NormalDistribution[2] = 0.5 - $SimpsonsRule;

return @NormalDistribution;
}

# 確率密度関数 Frequency Function
# 引数 変数 平均 標準偏差 ($X, $Mean, $StandardDeviation)
# 戻り値 確率密度関数 ($FrequencyFunction)
sub FREQUENCYFUNCTION{
my ($X, $Mean, $StandardDeviation) = @_;
my $FrequencyFunction = 0;
my $Pi = atan2(1, 1) * 4;

# 正規分布 Frequency Function
$FrequencyFunction = (1 / ($StandardDeviation * sqrt(2 * $Pi))) * exp(-((($X - $Mean) * ($X - $Mean)) / (2 * ($StandardDeviation * $StandardDeviation))));

return $FrequencyFunction;
}

# シンプソンの公式 Simpson's Rule
# 引数 変数 平均 標準偏差 ($X, $Mean, $StandardDeviation)
# 戻り値 シンプソンの公式 ($SimpsonsRule)
sub SIMPSONSRULE{
my ($X, $Mean, $StandardDeviation) = @_;
my $SimpsonsRule = 0;
my $a = $Mean;
my $b = $X;
my $N = 100;
my $h = ($b - $a) / $N;
my $Sum = 0;
my $SumA = 0;
my $SumB = 0;

# 計算
$SumA = &FREQUENCYFUNCTION($a, $Mean, $StandardDeviation);
$SumB = &FREQUENCYFUNCTION($b, $Mean, $StandardDeviation);

# 分割数は適当
for(my $i = 1; $i < $N; $i++){
my $t = $a + ($i * $h);
my $num = ($i % 2 == 0 ? 2 : 4);
my $tmp = &FREQUENCYFUNCTION($t, $Mean, $StandardDeviation);

$Sum += $num * $tmp;
}

# シンプソンの公式 Simpson's Rule
$SimpsonsRule = ($SumA + $Sum + $SumB) * ($h / 3);

return $SimpsonsRule;
}


参考URL
正規分布 - 高精度計算サイト
チョコっと正規分布
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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