FC2ブログ

# 双曲線正割(近似) Hyperbolic Secant Approximation
# 引数 値 ($X)
# 戻り値 双曲線正割 ($HyperbolicSecantApproximation)
sub HYPERBOLICSECANT{
my ($X) = @_;
my $HyperbolicSecantApproximation = 0;
my $EulerNumber = 1;
my $Num = 0;
my $Sum = 0;
my $Factorial = 1;
my $Pi = atan2(1, 1) * 4;
my $Pi2 = $Pi / 2;
my $Expansion = 20;

# 値の確認
if(abs($X) >= $Pi2){
return 0;
}

for(my $i = 0; $i <= $Expansion; $i++){
# 分子
$Num = $X ** (2 * $i);
$EulerNumber = &EULERNUMBER(2 * $i);

if($i != 0){
# 分母 階乗
for(my $j = (2 * $i); $j > (2 * ($i - 1)); $j--){
$Factorial = $Factorial * $j;
}
}

$Sum += (($Num * $EulerNumber) / $Factorial);
}

# 双曲線正割(近似) Hyperbolic Secant
$HyperbolicSecantApproximation = $Sum;

return $HyperbolicSecantApproximation;
}

# オイラー数 Euler Number
# 引数 整数 ($n)
# 戻り値 オイラー数 ($EulerNumber)
sub EULERNUMBER{
my ($n) = @_;
my $EulerNumber = 1;
my @Euler = (1);
my $Sum = 0;
my $Factorial = 1;
my $Temp = 0;
my $N = int($n);
my $N2 = $N / 2;

# 整数の確認
if($N < 0){
return 0;
}

if(($N % 2) == 1){
return 0;
}

# 計算
for(my $i = 1; $i <= $N2; $i++){
$Sum = 0;

# 階乗
for(my $j = (2 * $i); $j > (2 * ($i - 1)); $j--){
$Factorial = $Factorial * $j;
}

for(my $j = 0; $j < $i; $j++){
$Temp = $Factorial;

for(my $k = (2 * $j); $k >= 2; $k--){
$Temp = $Temp / $k;
}
for(my $k = (2 * ($i - $j)); $k >= 2; $k--){
$Temp = $Temp / $k;
}

$Sum += $Temp * $Euler[$j];
}

$Euler[$i] = -$Sum;
}

# オイラー数 Euler Number
$EulerNumber = $Euler[$N2];

return $EulerNumber;
}


参考URL
Hyperbolic function - Wikipedia, the free encyclopedia
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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