示例#1
0
        public void generate_test()
        {
            double kappa  = 35;
            var    vm     = new VonMisesDistribution(0, kappa);
            var    target = new VonMisesFisherDistribution(new double[] { -1, 0, 0 }, kappa);

            double[][] actual = target.Generate(100);

            var sphere = new UniformSphereDistribution(3);

            for (int i = 0; i < actual.Length; i++)
            {
                double p = sphere.ProbabilityDensityFunction(actual[i]);
                Assert.AreEqual(0.025330295910584444, p, 1e-8);
            }
        }
示例#2
0
        public void ConstructorTest1()
        {
            // If p=2 the distribution reduces to the von Mises distribution on the circle.

            double kappa  = 4.2;
            var    vm     = new VonMisesDistribution(0, kappa);
            var    target = new VonMisesFisherDistribution(new double[] { -1, 0 }, kappa);

            double s = Math.Sqrt(2) / 2;

            double[] mean = target.Mean;

            double a000 = target.ProbabilityDensityFunction(new double[] { +1, +0 });
            double a045 = target.ProbabilityDensityFunction(new double[] { +s, +s });
            double a090 = target.ProbabilityDensityFunction(new double[] { +0, +1 });
            double a135 = target.ProbabilityDensityFunction(new double[] { -s, +s });
            double a180 = target.ProbabilityDensityFunction(new double[] { -1, +0 });
            double a225 = target.ProbabilityDensityFunction(new double[] { -s, -s });
            double a270 = target.ProbabilityDensityFunction(new double[] { +0, -1 });
            double a315 = target.ProbabilityDensityFunction(new double[] { +s, -s });
            double a360 = target.ProbabilityDensityFunction(new double[] { +1, +0 });

            double offset = -Math.PI;
            double e000   = vm.ProbabilityDensityFunction(offset + 0);
            double e045   = vm.ProbabilityDensityFunction(offset + Math.PI / 4);
            double e090   = vm.ProbabilityDensityFunction(offset + Math.PI / 2);
            double e135   = vm.ProbabilityDensityFunction(offset + Math.PI * (3 / 4.0));
            double e180   = vm.ProbabilityDensityFunction(offset + Math.PI);
            double e225   = vm.ProbabilityDensityFunction(offset + Math.PI * (5 / 4.0));
            double e270   = vm.ProbabilityDensityFunction(offset + Math.PI * (3 / 2.0));
            double e315   = vm.ProbabilityDensityFunction(offset + Math.PI * (7 / 4.0));
            double e360   = vm.ProbabilityDensityFunction(offset + Math.PI * 2);


            Assert.AreEqual(e000, a000, 1e-8);
            Assert.AreEqual(e045, a045, 1e-8);
            Assert.AreEqual(e090, a090, 1e-8);
            Assert.AreEqual(e135, a135, 1e-8);
            Assert.AreEqual(e180, a180, 1e-8);
            Assert.AreEqual(e225, a225, 1e-8);
            Assert.AreEqual(e270, a270, 1e-8);
            Assert.AreEqual(e315, a315, 1e-8);
            Assert.AreEqual(e360, a360, 1e-8);
        }