diff --git a/GPy/kern/src/stationary.py b/GPy/kern/src/stationary.py index 286edcc2..fa7c8bd3 100644 --- a/GPy/kern/src/stationary.py +++ b/GPy/kern/src/stationary.py @@ -489,18 +489,21 @@ class RatQuad(Stationary): self.link_parameters(self.power) def K_of_r(self, r): - r2 = np.power(r, 2.) - return self.variance*np.power(1. + r2/2., -self.power) + r2 = np.square(r) +# return self.variance*np.power(1. + r2/2., -self.power) + return self.variance*np.exp(-self.power*np.log1p(r2/2.)) def dK_dr(self, r): - r2 = np.power(r, 2.) - return -self.variance*self.power*r*np.power(1. + r2/2., - self.power - 1.) + r2 = np.square(r) +# return -self.variance*self.power*r*np.power(1. + r2/2., - self.power - 1.) + return-self.variance*self.power*r*np.exp(-(self.power+1)*np.log1p(r2/2.)) def update_gradients_full(self, dL_dK, X, X2=None): super(RatQuad, self).update_gradients_full(dL_dK, X, X2) r = self._scaled_dist(X, X2) - r2 = np.power(r, 2.) - dK_dpow = -self.variance * np.power(2., self.power) * np.power(r2 + 2., -self.power) * np.log(0.5*(r2+2.)) + r2 = np.square(r) +# dK_dpow = -self.variance * np.power(2., self.power) * np.power(r2 + 2., -self.power) * np.log(0.5*(r2+2.)) + dK_dpow = -self.variance * np.exp(self.power*(np.log(2.)-np.log1p(r2+1)))*np.log1p(r2/2.) grad = np.sum(dL_dK*dK_dpow) self.power.gradient = grad