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

修正1 5/27
IncompleteGammaFunctionFirst2.txt

修正2 8/7

# 第1種不完全ガンマ関数 Incomplete Gamma Function Of The First Kind
# 引数 値 値 ($A, $X)
# 戻り値 第1種不完全ガンマ関数 ($IncompleteGammaFunction)
sub COMPLEMENTGAMMAFUNCTIONFIRST{
my ($A, $X) = @_;
my $IncompleteGammaFunction = 0;
my $IncompleteGamma = 0;
my $PrevIncompleteGamma = 0;
my $Factorial = 1;
my $Num = 0;
my $Den = 1;
my $Sum = 0;
my $Sign = 0;
my $Limit = 100;
my $Epsilon = 1.0e-10;

# 値の確認
if($X < 0){
return 0;
}

if(($A > 0) && (($A - int($A)) == 0)){
# 正の整数
for(my $i = 0; $i < $A; $i++){
# 階乗
$Factorial = ($i == 0 ? 1 : $Factorial * $i);
# 分子
$Num = $X ** $i;
# 分母
$Den = $Factorial;

$Sum += ($Num / $Den);
}

# 第1種不完全ガンマ関数 Incomplete Gamma Function Of The First Kind
$IncompleteGamma = $Factorial * (1 - (exp(-$X) * $Sum));
}else {
for(my $i = 0; $i < $Limit; $i++){
# 符号
$Sign = (($i % 2) == 0 ? 1: -1);
# 分子
$Num = $X ** $i;
# 分母
$Den = $A + $i;
# 階乗
$Factorial = ($i == 0 ? 1 : $Factorial * $i);

# 一つ前
$PrevIncompleteGamma = $IncompleteGamma;
# 第1種不完全ガンマ関数 Incomplete Gamma Function Of The First Kind
$IncompleteGamma += ($Sign * ($Num / ($Den * $Factorial)));

# 収束判定
last if(abs($IncompleteGamma - $PrevIncompleteGamma) < $Epsilon);
}

# 第1種不完全ガンマ関数 Incomplete Gamma Function Of The First Kind
$IncompleteGamma = ($X ** $A) * $IncompleteGamma
}

# 第1種不完全ガンマ関数 Incomplete Gamma Function Of The First Kind
$IncompleteGammaFunction = $IncompleteGamma;

return $IncompleteGammaFunction;
}


参考URL
不完全ガンマ関数 - Wikipedia
不完全ガンマ関数 - 高精度計算サイト
http://www.a.phys.nagoya-u.ac.jp/~teppei/study/mc_seminar/10.pdf

一言
ロンバーグ積分 シンプソンの公式だと$Aが一以下の時、値が出ないのでガウス-ルジャンドル数値積分を使用
ただし一以下で値を出しても誤差が大きく出る
$Aが負だと値が出せない

後で別の出し方を探す
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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