/// <summary> /// Get the integral of this distribution times another distribution raised to a power. /// </summary> /// <param name="that"></param> /// <param name="power"></param> /// <returns></returns> public double GetLogAverageOfPower(SparseGP that, double power) { throw new NotImplementedException(); if (IsPointMass) { return(power * that.GetLogProb(Point)); } else if (that.IsPointMass) { if (power < 0) { throw new DivideByZeroException("The exponent is negative and the distribution is a point mass"); } return(this.GetLogProb(that.Point)); } else { } }
/// <summary> /// Gets the log of the integral of the product of this SparseGP and that SparseGP /// </summary> /// <param name="that"></param> /// <returns></returns> public double GetLogAverageOf(SparseGP that) { if (this.FixedParameters != that.FixedParameters) { throw new ArgumentException("SparseGPs do not have the same FixedParameters. this.FixedParameters = " + this.FixedParameters + ", that.FixedParameters = " + that.FixedParameters); } if (this.IncludePrior && that.IncludePrior) { throw new ArgumentException("Both SparseGPs include the prior"); } if (that.IsPointMass) { return(GetLogProb(that.Point)); } if (this.IsPointMass) { return(that.GetLogProb(this.Point)); } if (this.IncludePrior && !that.IncludePrior) { // gBB is the distribution of the function on the basis VectorGaussian gBB; if (true) { gBB = new VectorGaussian(InducingDist.Dimension); gBB.Precision.SetToSum(FixedParameters.InvKernelOf_B_B, InducingDist.Precision); gBB.MeanTimesPrecision.SetTo(InducingDist.MeanTimesPrecision); // since prior has zero mean } else { // equivalent but slower gBB = VectorGaussian.FromMeanAndVariance(Mean_B, Var_B_B); } return(gBB.GetLogAverageOf(that.InducingDist)); } if (!this.IncludePrior && that.IncludePrior) { return(that.GetLogAverageOf(this)); } throw new NotImplementedException(); }