最新記事
- perl で特殊関数 40 対数積分 li(x) (Logarithmic Integral li: LOGARITHMICINTEGRALLI)
- perl で特殊関数 39 指数積分 Ei(x) (Exponential Integral Ei: EXPONENTIALINTEGRALEI)
- perl で特殊関数 38 指数積分 En(x) (Exponential Integral En: EXPONENTIALINTEGRALEN)
- perlで統計 34 ロジスティック分布 (逆関数) (Logistic Distribution (Inverse Function): LOGISTICDISTRIBUTIONINVERSE)
- perlで統計 33 コーシー分布 (逆関数) (Cauchy Distribution (Inverse Function): CAUCHYDISTRIBUTIONINVERSE)
- 全ての記事タイトル一覧
- ランキングに参加しています。この記事が参考になりましたら、応援お願い致します。
# コーシー分布 (逆関数) Cauchy Distribution (Inverse Function)
# 引数 # 引数 変数 変数 変数 ($X, $A, $B)
# 戻り値 コーシー分布 (逆関数) (@InverseFunction)
sub CAUCHYDISTRIBUTIONINVERSE{
my ($X, $A, $B) = @_;
my @InverseFunction = ();
# 累積確率 変数の確認
if(($X < 0) || (1 < $X) || ($B <= 0)){
return "Error";
}
if(($X == 0) || ($X == 1)){
return "-Inf or Inf";
}
# コーシー分布 (逆関数) Cauchy Distribution (Inverse Function)
# 下側 Lower
$InverseFunction[0] = &BISECTIONMETHOD($X, $A, $B);
# 上側 Upper
$InverseFunction[1] = &BISECTIONMETHOD((1 - $X), $A, $B);
return @InverseFunction;
}
# 二分法 Bisection Method
# 引数 累積確率 変数 変数 ($X, $A, $B)
# 戻り値 二分法 ($BisectionMethod)
sub BISECTIONMETHOD{
my ($X, $A, $B) = @_;
my $BisectionMethod = 0;
my $X1 = 0;
my $X2 = 0;
my $F_m = 0;
my $F_x1 = 0;
my $F_x2 = 0;
my $Middle = 0;
my $PrevMiddle = 0;
my $Limit = 100;
my $Epsilon = 1.0e-20;
# 区間
$X1-- while((&CAUCHYDISTRIBUTION($X1, $A, $B) - $X) > 0);
$X2++ while((&CAUCHYDISTRIBUTION($X2, $A, $B) - $X) < 0);
# 初期値
$F_x1 = &CAUCHYDISTRIBUTION($X1, $A, $B) - $X;
$F_x2 = &CAUCHYDISTRIBUTION($X2, $A, $B) - $X;
# 計算
for(my $i = 0; $i < $Limit; $i++){
# 一つ前
$PrevMiddle = $Middle;
# 中間点
$Middle = ($X1 + $X2) / 2;
# f(Middle)
$F_m = &CAUCHYDISTRIBUTION($Middle, $A, $B) - $X;
# 置き換え
if(($F_m * $F_x1) > 0){
$X1 = $Middle
}
elsif(($F_m * $F_x2) > 0){
$X2 = $Middle;
}
# 二分法 Bisection Method
$BisectionMethod = $Middle;
# 収束判定
last if(abs($Middle - $PrevMiddle) < $Epsilon);
}
return $BisectionMethod;
}
# コーシー分布 Cauchy Distribution
# 引数 変数 変数 変数 ($X, $A, $B)
# 戻り値 コーシー分布 ($CauchyDistribution)
sub CAUCHYDISTRIBUTION{
my ($X, $A, $B) = @_;
my $CauchyDistribution = 0;
my $Pi = atan2(1, 1) * 4;
# 下側累積確率 Lower Probability
$CauchyDistribution = (atan2(($X - $A), $B) / $Pi) + 0.5;
return $CauchyDistribution;
}
参考URL
コーシー分布(逆関数) - 高精度計算サイト
スポンサードリンク :
Prev :
Next :
Home :
シリーズ
月別アーカイブ カテゴリ
オンライン コンパイラ/インタプリタ
Perl リファレンス
株式
テクニカル分析
計算式ライブラリ
プロフィール
Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない
5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用