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

# ラプラス分布 Laplace Distribution
# 引数 変数 変数 変数 ($X, $A, $B)
# 戻り値 ラプラス分布 (@LaplaceDistribution)
sub LAPLACEDISTRIBUTION{
my ($X, $A, $B) = @_;
my @LaplaceDistribution = ();

# 変数の確認
if($B <= 0){
return 0;
}

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

return @LaplaceDistribution;
}

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

# 確率密度 Probability Function
$ProbabilityFunction = exp(-(abs($X - $A) / $B)) / (2 * $B);

return $ProbabilityFunction;
}

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

# 下側累積確率 Lower Probability
$LowerProbability = (1 + (SIGNUMFUNCTION($X - $A) * (1 - exp(-(abs($X - $A) / $B))))) / 2;

return $LowerProbability;
}

# 上側累積確率 Upper Probability
# 引数 変数 変数 変数 ($X, $A, $B)
# 戻り値 上側累積確率 ($UpperProbability)
sub UPPERPROBABILITY{
my ($X, $A, $B) = @_;
my $UpperProbability = 0;
my $SimpsonsRule = 0;
my $h = 0.01;
my $i = 1;
my $Sum = 0;
my $SumA = 0;
my $SumB = 0;
my $PrevSum = 0;
my $Epsilon = 1.0e-20;

do {
# 刻み幅 $h は適当
my $T = $X + ($i * $h);
my $Number = ($i % 2 == 0 ? 2 : 4);
my $Temp = &PROBABILITYFUNCTION($T, $A, $B);

$PrevSum = $Sum;
$Sum += $Number * $Temp;
$i++;
} while(($Sum - $PrevSum) >= $Epsilon);

$SumA = &PROBABILITYFUNCTION($X, $A, $B);
$SumB = &PROBABILITYFUNCTION((($h * $i) - $X), $A, $B);

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

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

return $UpperProbability;
}

# 符号関数 Signum Function
# 引数 変数 ($X)
# 戻り値 符号関数 ($SignumFunction)
sub SIGNUMFUNCTION{
my ($X) = @_;
my $SignumFunction = 0;

if($X != 0){
# 符号関数 Signum Function
$SignumFunction = ($X > 0 ? 1 : -1);
}

return $SignumFunction;
}


参考URL
ラプラス分布 - Wikipedia
Laplace distribution - Wikipedia, the free encyclopedia
ラプラス分布 - 高精度計算サイト
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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

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