# ゼータ関数 Zeta Function # 引数 次数 変数 ($N, $X) # 戻り値 ゼータ関数 ($ZetaFunction) sub ZETAFUNCTION{ my ($X) = @_; my $ZetaFunction = 0; my $Zeta = 0; my $PrevZeta = 0; my $BinomialCoefficient = 0; my $Sum = 0; my $Sign = 0; my $Limit = 100; my $Epsilon = 1.0e-10; # 値の確認 if($X == 1){ return 0; } # 計算 for(my $i = 0; $i < $Limit; $i++){ $Sum = 1 ** (-$X); $BinomialCoefficient = 1; for(my $j = 1; $j <= $i; $j++){ # 符号 $Sign = (($j % 2) == 0 ? 1 : -1); # 二項係数 Binomial Coefficient $BinomialCoefficient = $BinomialCoefficient * (($i - ($j - 1)) / $j); $Sum += ($Sign * $BinomialCoefficient * (($j + 1) ** (-$X))); } # 一つ前 $PrevZeta = $Zeta; $Zeta += ((2 ** (-($i + 1))) * $Sum); # 収束判定 last if(abs($Zeta - $PrevZeta) < $Epsilon); } # ゼータ関数 Zeta Function $ZetaFunction = (1 / (1 - (2 ** (1 - $X)))) * $Zeta; return $ZetaFunction; }