Accord.Tests.Statistics.MultivariateNormalDistributionTest.ProbabilityFunctionTest4 C# (CSharp) Method

ProbabilityFunctionTest4() private method

private ProbabilityFunctionTest4 ( ) : void
return void
        public void ProbabilityFunctionTest4()
        {
            // https://code.google.com/p/accord/issues/detail?id=98

            /*
                mean = c(0.25, 0.082)
                sigma = matrix(c(0.0117, 0.0032}, 0.0032, 0.001062), 2, 2)

                d = seq(0.03, 0.13, 0.0001)
                n <- length(d)
                r <- rep(0, n)

                for (i in 1:n) {
                  r[i] = dmnorm(c(0.25, d[i]), mean, sigma) 
                }
             */

            var target = new MultivariateNormalDistribution(
                new[] { 0.25, 0.082 },
                new[,] { { 0.0117, 0.0032 }, { 0.0032, 0.001062 } });

            double[] vec = { 0.25, -1d };

            double[] d = Matrix.Vector(0.03, 0.13, 0.01);
            double[] actual = new double[d.Length];

            double[] expected = 
            {
                  0.07736363146686682512598, 0.95791683037271524447931, 6.94400533773376249513376, 
                  29.47023331179536498325433, 73.22314665629953367442795, 106.51345886810220520146686, 
                  90.70931216253406148553040, 45.22624649290145271152142, 13.20141558295499173425469,  
                  2.25601377127287250345944, 0.22571180597171525139544, 0.2257118059717152513954
            };

            for (int i = 0; i < d.Length; i++)
            {
                vec[1] = d[i];
                actual[i] = target.ProbabilityDensityFunction(vec);
            }

            for (int i = 0; i < actual.Length; i++)
                Assert.AreEqual(expected[i], actual[i], 1e-12);

            for (int i = 0; i < d.Length; i++)
            {
                vec[1] = d[i];
                actual[i] = System.Math.Exp(target.LogProbabilityDensityFunction(vec));
            }

            for (int i = 0; i < actual.Length; i++)
                Assert.AreEqual(expected[i], actual[i], 1e-12);
        }