public void GaussianOpMean() { Gaussian result = new Gaussian(); Gaussian X0 = Gaussian.FromMeanAndVariance(7, 1.0 / 3); Gaussian Mean0 = Gaussian.FromMeanAndVariance(3, 0.5); Gamma Precision0 = Gamma.FromShapeAndScale(3, 3); // Unknown precision Gamma Precision = Gamma.FromShapeAndScale(3, 3); Gaussian X = X0; Gaussian Mean = Mean0; // in matlab: test_t_msg result = GaussianOp.MeanAverageConditional_slow(X, Mean, Precision); Console.WriteLine(result); Assert.True(GaussianOp.MeanAverageConditional_slow(X, Mean, Precision).MaxDiff(new Gaussian(-9.9121, -4.5998)) < 1e-0); X = Gaussian.FromMeanAndVariance(1, 2); Mean = Gaussian.PointMass(0); Precision = Gamma.FromShapeAndRate(3, 1); Gaussian xPostExpected = Gaussian.FromMeanAndVariance(0.178378819440295, 0.365796599498963); Console.WriteLine(GaussianOp.SampleAverageConditional_slow(X, Mean, Precision) * X); Assert.True(GaussianOp.SampleAverageConditional_slow(X, Mean, Precision).MaxDiff(xPostExpected / X) < 5e-7); Console.WriteLine(GaussianOp_Slow.SampleAverageConditional(X, Mean, Precision) * X); Assert.True(GaussianOp_Slow.SampleAverageConditional(X, Mean, Precision).MaxDiff(xPostExpected / X) < 5e-7); }