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

# 第三種不完全楕円積分 Complete Elliptic Integral of the Third Kind
# 引数 角度 値 値 ($Angle, $Y, $K)
# 戻り値 第三種不完全楕円積分 ($CompleteEllipticIntegralOfTheThirdKind)
sub COMPLETEELLIPTICINTEGRALTHIRD{
my ($Angle, $Y, $K) = @_;
my $CompleteEllipticIntegralOfTheThirdKind = 0;
my $SimpsonsRule = 0;
# 角度からラジアンに変換
my $ConvertAngle = $Angle * 0.0174532925199432957692369076849;
my $a = 0;
my $b = sin($ConvertAngle);
my $N = 1000;
my $h = ($b - $a) / $N;
my $Sum = 0;
my $SumA = 0;
my $SumB = 0;

# 角度と値の確認
if(($Angle < -360) || (360 < $Angle) || ($K < -1) || (1 < $K)){
return 0;
}

# シンプソンの公式 Simpson's Rule
$SumA = &INTEGRAND($K, $Y, $a);
$SumB = &INTEGRAND($K, $Y, $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, $Y, $T);

$Sum += $Number * $Integrand;
}

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

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

return $CompleteEllipticIntegralOfTheThirdKind;
}

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

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

return $Integrand;
}


参考URL
第3種不完全楕円積分 Π(φ,n,k) - 高精度計算サイト

一言
$Yの値が1.3を超えたあたりからcasioの結果とまったく一致しなくなる
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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

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