digamma_function.sf 608 B

12345678910111213141516171819202122232425262728
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 14 December 2016
  4. # https://github.com/trizen
  5. # Simple implementation of the digamma(n) function.
  6. # See also:
  7. # https://en.wikipedia.org/wiki/Digamma_function
  8. define γ = Num.EulerGamma
  9. func digamma(n) {
  10. -γ - ::sum(1 ..^ n, { |k|
  11. ((-1)**k / k) * binomial(n-1, k)
  12. })
  13. }
  14. func digamma_from_harmonic(n) {
  15. -γ + ::sum(1 ..^ n, { |k|
  16. 1/k
  17. })
  18. }
  19. say digamma(100) #=> 4.60016185273808740019860558557585072686681279076853
  20. say digamma_from_harmonic(100) #=> 4.60016185273808740019860558557585072686681279076853