예제 #1
0
        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);
        }