/// <summary>
        /// EP message to 'subvector'
        /// </summary>
        /// <param name="SourceMean">Buffer 'SourceMean'.</param>
        /// <param name="SourceVariance">Buffer 'SourceVariance'.</param>
        /// <param name="startIndex">Constant value for 'startIndex'.</param>
        /// <param name="result">Modified to contain the outgoing message</param>
        /// <returns><paramref name="result"/></returns>
        /// <remarks><para>
        /// The outgoing message is the factor viewed as a function of 'subvector' conditioned on the given values.
        /// </para></remarks>
        public static VectorGaussian SubvectorAverageConditional([Fresh] Vector SourceMean, [Fresh] PositiveDefiniteMatrix SourceVariance, int startIndex, VectorGaussian result)
        {
            PositiveDefiniteMatrix subVariance = new PositiveDefiniteMatrix(result.Dimension, result.Dimension);

            subVariance.SetToSubmatrix(SourceVariance, startIndex, startIndex);
            Vector subMean = Vector.Zero(result.Dimension);

            subMean.SetToSubvector(SourceMean, startIndex);
            result.SetMeanAndVariance(subMean, subVariance);
            return(result);
        }
		/// <summary>
		/// EP message to 'subvector'
		/// </summary>
		/// <param name="SourceMean">Buffer 'SourceMean'.</param>
		/// <param name="SourceVariance">Buffer 'SourceVariance'.</param>
		/// <param name="startIndex">Constant value for 'startIndex'.</param>
		/// <param name="result">Modified to contain the outgoing message</param>
		/// <returns><paramref name="result"/></returns>
		/// <remarks><para>
		/// The outgoing message is the factor viewed as a function of 'subvector' conditioned on the given values.
		/// </para></remarks>
		public static VectorGaussian SubvectorAverageConditional([Fresh] Vector SourceMean, [Fresh] PositiveDefiniteMatrix SourceVariance, int startIndex, VectorGaussian result)
		{
			PositiveDefiniteMatrix subVariance = new PositiveDefiniteMatrix(result.Dimension, result.Dimension);
			subVariance.SetToSubmatrix(SourceVariance, startIndex, startIndex);
			Vector subMean = Vector.Zero(result.Dimension);
			subMean.SetToSubvector(SourceMean, startIndex);
			result.SetMeanAndVariance(subMean, subVariance);
			return result;
		}