Beispiel #1
0
		/// <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;
		}
Beispiel #2
0
        /// <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);
        }