FC2ブログ

# 第三種完全楕円積分 Complete Elliptic Integral of the Third Kind
# 引数 値 値 ($X, $K)
# 戻り値 第三種完全楕円積分 ($CompleteEllipticIntegralOfTheThirdKind)
sub COMPLETEELLIPTICINTEGRALTHIRD{
my ($X, $K) = @_;
my $CompleteEllipticIntegralOfTheThirdKind = 0;
my $SimpsonsRule = 0;
my $Pi= atan2(1, 1) * 4;
my $a = 0;
my $b = $Pi / 2;
my $N = 1000;
my $h = ($b - $a) / $N;
my $Sum = 0;
my $SumA = 0;
my $SumB = 0;

# 値の確認
if(($K < -1) || (1 < $K)){
return 0;
}

# シンプソンの公式 Simpson's Rule
$SumA = &INTEGRAND($X, $K, $a);
$SumB = &INTEGRAND($X, $K, $b);

# 分割数$Nは適当
for(my $i = 1; $i < $N; $i++){
my $Theta = $a + ($i * $h);
my $Number = ($i % 2 == 0 ? 2 : 4);
my $Integrand = &INTEGRAND($X, $K, $Theta);

$Sum += $Number * $Integrand;
}

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

# 第三種完全楕円積分 Complete Elliptic Integral of the Third Kind
$CompleteEllipticIntegralOfTheThirdKind = $SimpsonsRule;

return $CompleteEllipticIntegralOfTheThirdKind;
}

# 被積分関数 Integrand
# 引数 変数 変数 変数 ($X, $K, $Theta)
# 戻り値 被積分関数 ($Integrand)
sub INTEGRAND{
my ($X, $K, $Theta) = @_;
my $Integrand = 0;
my $Sin = sin($Theta);

# 被積分関数 Integrand
$Integrand = 1 / ((1 - ($X * ($Sin * $Sin))) * sqrt(1 - (($K * $K) * ($Sin * $Sin))));

return $Integrand;
}


参考URL
第3種完全楕円積分 Π(n,k) - 高精度計算サイト
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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

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