FC2ブログ
最初
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/IncompleteBetaFunction1.txt

修正1 8/20

# 不完全ベータ関数 Incomplete Beta Function
# 引数 変数 変数 変数 ($AA, $BB, $X)
# 戻り値 不完全ベータ関数 ($IncompleteBetaFunction)
sub INCOMPLETEBETAFUNCTION{
my ($AA, $BB, $X) = @_;
my $IncompleteBetaFunction = 0;
my $TrapezoidalRule = 0;
my $T = 0;
my $Sum = 0;
my $HyperbolicSine = 0;
my $HyperbolicCosine = 0;
my $TempA = 0;
my $TempB = 0;
my $a = 0;
my $b = $X;
my $N = 100;
my $Pi = atan2(1, 1) * 4;
my $Pi_2 = $Pi / 2;
my $BA_2 = (($b - $a) / 2);
my $h = (2 * $Pi) / $N;
my $Begin = -($N / 2);
my $End = $N / 2;

# 値の確認
if(($AA <= 0) || ($BB <= 0) || ($X < 0) || (1 < $X)){
return 0;
}

# 計算
for(my $i = $Begin; $i <= $End; $i++){
$HyperbolicSine = &HYPERBOLICSINE($i * $h);
$HyperbolicCosine = &HYPERBOLICCOSINE($Pi_2 * $HyperbolicSine);
$T = (($BA_2 * &HYPERBOLICTANGENT($Pi_2 * $HyperbolicSine)) + (($b + $a) / 2));
$TempA = &FUNCTION($AA, $BB, $T);
$TempB = &HYPERBOLICCOSINE($i * $h) / ($HyperbolicCosine * $HyperbolicCosine);

$Sum += ($TempA * $TempB);
}

# 台形公式 Trapezoidal Rule
$TrapezoidalRule = ((($b - $a) * $Pi * $h) / 4) * $Sum;

# 不完全ベータ関数 Incomplete Beta Function
$IncompleteBetaFunction = $TrapezoidalRule;

return $IncompleteBetaFunction;
}

# 関数 Function
# 引数 積分変数 被積分関数 (\@Integrand)
# 戻り値 関数 ($Function)
sub FUNCTION{
my ($AA, $BB, $X) = @_;
my $Function = ($X ** ($AA - 1)) * ((1 - $X) ** ($BB - 1));

return $Function;
}

# 双曲線正弦 Hyperbolic Sine
# 引数 値 ($X)
# 戻り値 双曲線正弦 ($HyperbolicSine)
sub HYPERBOLICSINE{
my ($X) = @_;
my $HyperbolicSine = 0;

# 双曲線正弦 Hyperbolic Sine
$HyperbolicSine = (exp($X) - exp(-$X)) / 2;

return $HyperbolicSine;
}

# 双曲線余弦 Hyperbolic Cosine
# 引数 値 ($X)
# 戻り値 双曲線余弦 ($HyperbolicCosine)
sub HYPERBOLICCOSINE{
my ($X) = @_;
my $HyperbolicCosine = 0;

# 双曲線余弦 Hyperbolic Cosine
$HyperbolicCosine = (exp($X) + exp(-$X)) / 2;

return $HyperbolicCosine;
}

# 双曲線正接 Hyperbolic Tangent
# 引数 値 ($X)
# 戻り値 双曲線正接 ($HyperbolicTangent)
sub HYPERBOLICTANGENT{
my ($X) = @_;
my $HyperbolicSine = (exp($X) - exp(-$X)) / 2;
my $HyperbolicCosine = (exp($X) + exp(-$X)) / 2;
my $HyperbolicTangent = 0;

# 双曲線正接 Hyperbolic Tangent
$HyperbolicTangent = $HyperbolicSine / $HyperbolicCosine;

return $HyperbolicTangent;
}


参考URL
不完全ベータ関数 - Wikipedia
Free Incomplete Beta Function Calculator

修正1
シンプソンの公式から台形公式に変更
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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