Пример #1
0
 def test_computeLogPDF_diagonal_case(self):
     """Test InverseWishart.computeLogPDF in the case of diagonal matrices"""
     dimension, DoF = self.dimension, self.DoF
     k = 0.5 * (DoF + dimension - 1)
     diagX = ot.Uniform(0.5, 1.).getSample(dimension)
     Scale = ot.CovarianceMatrix(dimension)
     X = ot.CovarianceMatrix(dimension)
     for d in range(dimension):
         Scale[d, d], X[d, d] = self.Scale[d, d], diagX[d, 0]
     inverse_wishart = ot.InverseWishart(Scale, DoF)
     logdensity = inverse_wishart.computeLogPDF(X)
     logratio = - self.logmultigamma(dimension, 0.5 * DoF) \
         + dimension * ot.SpecFunc_LnGamma(0.5 * (DoF + dimension - 1))
     for d in range(dimension):
         inverse_gamma = ot.InverseGamma(k, 2. / Scale[d, d])
         logdensity = logdensity - inverse_gamma.computeLogPDF(diagX[d, 0])
         logratio = logratio + 0.5 * \
             (1 - dimension) * log(0.5 * Scale[d, d])
     assert_almost_equal(logdensity, logratio)
Пример #2
0
 def logmultigamma(self, p, x):
     """Computes the logarithm of the multi-gamma function at x"""
     logmgpx = 0.25 * p * (p - 1) * log(pi)
     for i in range(1, p + 1):
         logmgpx = logmgpx + ot.SpecFunc_LnGamma(x + 0.5 * (1 - i))
     return logmgpx