zeta_2n.sf 465 B

123456789101112131415161718192021222324
  1. #!/usr/bin/ruby
  2. #
  3. ## Closed-form for Zeta(2n)
  4. #
  5. # See also: https://en.wikipedia.org/wiki/Riemann_zeta_function
  6. func bernoulli_number(n) is cached {
  7. n.is_one && return 1/2
  8. n.is_odd && return 0
  9. ^n -> reduce({|a, k| a - (__FUNC__(k) * binomial(n, k) / (n - k + 1))}, 1)
  10. }
  11. func zeta_2n(Number n {.is_even}) {
  12. ((-1)**(n/2 + 1) * 2**(n - 1) * Num.pi**n * bernoulli_number(n)) / n!
  13. }
  14. for n in (1 .. 10) {
  15. say "zeta(#{2*n}) = #{zeta_2n(2*n)}"
  16. }