# 標準正規分布 Standard Normal Distribution # 引数 変数 ($X) # 戻り値 標準正規分布 (@StandardNormalDistribution) sub STANDARDNORMALDISTRIBUTION{ my ($X) = @_; my @StandardNormalDistribution = (); my $SimpsonsRule = 0; # 確率密度関数 Frequency Function $StandardNormalDistribution[0] = &FREQUENCYFUNCTION($X); # シンプソンの公式 Simpson's Rule $SimpsonsRule = &SIMPSONSRULE($X); # 下側累積確率 Lower Cumulative Distribution $StandardNormalDistribution[1] = 0.5 + $SimpsonsRule; # 上側累積確率 Upper Cumulative Distribution $StandardNormalDistribution[2] = 0.5 - $SimpsonsRule; return @StandardNormalDistribution; } # 確率密度関数 Frequency Function # 引数 変数 ($X) # 戻り値 確率密度関数 ($FrequencyFunction) sub FREQUENCYFUNCTION{ my ($X) = @_; my $FrequencyFunction = 0; my $Pi = atan2(1, 1) * 4; # 標準正規分布 Frequency Function $FrequencyFunction = (1 / sqrt(2 * $Pi)) * exp(-(($X * $X) / 2)); return $FrequencyFunction; } # シンプソンの公式 Simpson's Rule # 引数 変数 ($X) # 戻り値 シンプソンの公式 ($SimpsonsRule) sub SIMPSONSRULE{ my ($X) = @_; 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; # 計算 $SumA = &FREQUENCYFUNCTION($a); $SumB = &FREQUENCYFUNCTION($b); # 分割数は適当 for(my $i = 1; $i < $N; $i++){ my $t = $a + ($i * $h); my $num = ($i % 2 == 0 ? 2 : 4); my $tmp = &FREQUENCYFUNCTION($t); $Sum += $num * $tmp; } # シンプソンの公式 Simpson's Rule $SimpsonsRule = ($SumA + $Sum + $SumB) * ($h / 3); return $SimpsonsRule; }