/// <summary>
		/// Update the buffer 'CovarianceOfB'
		/// </summary>
		/// <param name="B">Incoming message from 'B'. Must be a proper distribution.  If any element is uniform, the result will be uniform.</param>
		/// <returns>New value of buffer 'CovarianceOfB'</returns>
		/// <exception cref="ImproperMessageException"><paramref name="B"/> is not a proper distribution</exception>
		public static PositiveDefiniteMatrix Eaat(GaussianArray A, PositiveDefiniteMatrix result)
		{
			int inner = A.Count;
			var VarianceOfA = Vector.Zero(inner);
			var MeanOfA = Vector.Zero(inner);
			for (int k = 0; k < inner; k++) {
				MeanOfA[k] = A[k].GetMean();
				VarianceOfA[k] = A[k].GetVariance();
			}
			result.SetToDiagonal(VarianceOfA);
			result.SetToSumWithOuter(result, 1, MeanOfA, MeanOfA);
			return result;
		}
Ejemplo n.º 2
0
        /// <summary>
        /// Update the buffer 'CovarianceOfB'
        /// </summary>
        /// <param name="B">Incoming message from 'B'. Must be a proper distribution.  If any element is uniform, the result will be uniform.</param>
        /// <returns>New value of buffer 'CovarianceOfB'</returns>
        /// <exception cref="ImproperMessageException"><paramref name="B"/> is not a proper distribution</exception>
        public static PositiveDefiniteMatrix Eaat(GaussianArray A, PositiveDefiniteMatrix result)
        {
            int inner       = A.Count;
            var VarianceOfA = Vector.Zero(inner);
            var MeanOfA     = Vector.Zero(inner);

            for (int k = 0; k < inner; k++)
            {
                MeanOfA[k]     = A[k].GetMean();
                VarianceOfA[k] = A[k].GetVariance();
            }
            result.SetToDiagonal(VarianceOfA);
            result.SetToSumWithOuter(result, 1, MeanOfA, MeanOfA);
            return(result);
        }