/// <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; }
/// <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); }