FC2ブログ

# 第一種完全楕円積分 Complete Elliptic Integral of the First Kind
# 引数 値 ($K)
# 戻り値 第一種完全楕円積分 ($CompleteEllipticIntegralOfTheFirstKind)
sub COMPLETEELLIPTICINTEGRALFIRST{
my ($K) = @_;
my $CompleteEllipticIntegralOfTheFirstKind = 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($K, $a);
$SumB = &INTEGRAND($K, $b);

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

$Sum += $Number * $Integrand;
}

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

# 第一種完全楕円積分 Complete Elliptic Integral of the First Kind
$CompleteEllipticIntegralOfTheFirstKind = $SimpsonsRule;

return $CompleteEllipticIntegralOfTheFirstKind;
}

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

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

return $Integrand;
}


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

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

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

検索フォーム


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

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