/// <summary> /// VMP message to 'innerProduct' /// </summary> /// <param name="AMean">Buffer 'AMean'.</param> /// <param name="AVariance">Buffer 'AVariance'.</param> /// <param name="BMean">Buffer 'BMean'.</param> /// <param name="BVariance">Buffer 'BVariance'.</param> /// <returns>The outgoing VMP message to the 'innerProduct' argument</returns> /// <remarks><para> /// The outgoing message is the factor viewed as a function of 'innerProduct' conditioned on the given values. /// </para></remarks> public static Gaussian InnerProductAverageLogarithm(Vector AMean, PositiveDefiniteMatrix AVariance, Vector BMean, PositiveDefiniteMatrix BVariance) { Gaussian result = new Gaussian(); // p(x|a,b) = N(E[a]'*E[b], E[b]'*var(a)*E[b] + E[a]'*var(b)*E[a] + trace(var(a)*var(b))) // Uses John Winn's rule for deterministic factors. // Strict variational inference would set the variance to 0. result.SetMeanAndVariance(AMean.Inner(BMean), AVariance.QuadraticForm(BMean) + BVariance.QuadraticForm(AMean) + AVariance.Inner(BVariance)); return result; }
/// <summary>VMP message to <c>innerProduct</c>.</summary> /// <param name="AMean">Buffer <c>AMean</c>.</param> /// <param name="AVariance">Buffer <c>AVariance</c>.</param> /// <param name="BMean">Buffer <c>BMean</c>.</param> /// <param name="BVariance">Buffer <c>BVariance</c>.</param> /// <returns>The outgoing VMP message to the <c>innerProduct</c> argument.</returns> /// <remarks> /// <para>The outgoing message is the factor viewed as a function of <c>innerProduct</c> conditioned on the given values.</para> /// </remarks> public static Gaussian InnerProductAverageLogarithm(Vector AMean, PositiveDefiniteMatrix AVariance, Vector BMean, PositiveDefiniteMatrix BVariance) { Gaussian result = new Gaussian(); // p(x|a,b) = N(E[a]'*E[b], E[b]'*var(a)*E[b] + E[a]'*var(b)*E[a] + trace(var(a)*var(b))) // Uses John Winn's rule for deterministic factors. // Strict variational inference would set the variance to 0. result.SetMeanAndVariance(AMean.Inner(BMean), AVariance.QuadraticForm(BMean) + BVariance.QuadraticForm(AMean) + AVariance.Inner(BVariance)); return(result); }