Files
gonum/mathext/digamma.go
2017-05-23 00:02:50 -06:00

29 lines
768 B
Go

// Copyright ©2016 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mathext
import (
"math"
)
// Digamma returns the logorithmic derivative of the gamma function at x.
// ψ(x) = d/dx (Ln (Γ(x)).
// Note that if x is a negative integer in [-7, 0] this function will return
// negative Inf.
func Digamma(x float64) float64 {
// This is adapted from
// http://web.science.mq.edu.au/~mjohnson/code/digamma.c
var result float64
for ; x < 7.0; x++ {
result -= 1 / x
}
x -= 1.0 / 2.0
xx := 1.0 / x
xx2 := xx * xx
xx4 := xx2 * xx2
result += math.Log(x) + (1./24.)*xx2 - (7.0/960.0)*xx4 + (31.0/8064.0)*xx4*xx2 - (127.0/30720.0)*xx4*xx4
return result
}