예제 #1
0
        public void CanCreateSymmetricDirichlet()
        {
            var d = new Dirichlet(0.3, 5);

            for (var i = 0; i < 5; i++)
            {
                Assert.AreEqual(0.3, d.Alpha[i]);
            }
        }
예제 #2
0
        public void CanGetAlpha()
        {
            Dirichlet d = new Dirichlet(0.3, 10);

            double[] alpha = new double[10];
            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(0.3, d.Alpha[i]);
            }
        }
예제 #3
0
        public void CanCreateDirichlet()
        {
            var alpha = new double[10];
            for (var i = 0; i < 10; i++)
            {
                alpha[i] = i;
            }

            var d = new Dirichlet(alpha);

            for (var i = 0; i < 5; i++)
            {
                Assert.AreEqual(i, d.Alpha[i]);
            }
        }
예제 #4
0
 public void ValidateDensity(double[] x, double res)
 {
     var d = new Dirichlet(new[] { 0.1, 0.3, 0.5, 0.8 });
     AssertHelpers.AlmostEqualRelative(res, d.Density(x), 12);
 }
예제 #5
0
        public void ValidateVariance()
        {
            var alpha = new double[10];
            var sum = 0.0;
            for (var i = 0; i < 10; i++)
            {
                alpha[i] = i;
                sum += i;
            }

            var d = new Dirichlet(alpha);
            for (var i = 0; i < 10; i++)
            {
                AssertHelpers.AlmostEqualRelative(i * (sum - i) / (sum * sum * (sum + 1.0)), d.Variance[i], 15);
            }
        }
예제 #6
0
        public void ValidateMean()
        {
            var d = new Dirichlet(0.3, 5);

            for (var i = 0; i < 5; i++)
            {
                AssertHelpers.AlmostEqualRelative(0.3 / 1.5, d.Mean[i], 15);
            }
        }
예제 #7
0
 public void CanSetRandomSource(int i)
 {
     Dirichlet d = new Dirichlet(0.3, 5);
     d.RandomSource = new Random();
 }
예제 #8
0
 public void CanSampleSingularDirichlet()
 {
     var d = new Dirichlet(new[] { 2.0, 1.0, 0.0, 3.0 });
     d.Sample();
 }
예제 #9
0
        public void ValidateEntropy(double[] x)
        {
            var d = new Dirichlet(x);

            var sum = x.Sum(t => (t - 1) * SpecialFunctions.DiGamma(t));
            var res = SpecialFunctions.GammaLn(x.Sum()) + ((x.Sum() - x.Length) * SpecialFunctions.DiGamma(x.Sum())) - sum;
            AssertHelpers.AlmostEqualRelative(res, d.Entropy, 12);
        }
예제 #10
0
 public void CanSampleSymmetricDirichlet()
 {
     Dirichlet d = new Dirichlet(1.0, 5);
     double[] s = d.Sample();
 }
예제 #11
0
 public void CanSampleSingularDirichlet()
 {
     Dirichlet d = new Dirichlet(new double[] {2.0, 1.0, 0.0, 3.0});
     double[] s = d.Sample();
 }
예제 #12
0
        public void ValidateVariance()
        {
            double[] alpha = new double[10];
            double sum = 0.0;
            for (int i = 0; i < 10; i++)
            {
                alpha[i] = i;
                sum += i;
            }

            Dirichlet d = new Dirichlet(alpha);

            for (int i = 0; i < 10; i++)
            {
                AssertHelpers.AlmostEqual(i * (sum - i) / (sum * sum * (sum + 1.0)), d.Variance[i], 15);
            }
        }
예제 #13
0
        public void ValidateMean()
        {
            Dirichlet d = new Dirichlet(0.3, 5);

            for (int i = 0; i < 5; i++)
            {
                AssertHelpers.AlmostEqual(0.3/1.5, d.Mean[i], 15);
            }
        }
예제 #14
0
 public void FailSetRandomSourceWithNullReference(int i)
 {
     Dirichlet d = new Dirichlet(0.3, 5);
     d.RandomSource = null;
 }
예제 #15
0
 public void FailCreateDirichlet(double alpha)
 {
     Dirichlet d = new Dirichlet(alpha, 5);
 }
예제 #16
0
 public void ValidateDensityLn(double[] x)
 {
     var d = new Dirichlet(new[] { 0.1, 0.3, 0.5, 0.8 });
     AssertHelpers.AlmostEqualRelative(d.DensityLn(x), Math.Log(d.Density(x)), 12);
 }
예제 #17
0
 public void ValidateBetaSpecialCaseDensityLn(double x)
 {
     var d = new Dirichlet(new[] { 0.1, 0.3 });
     var beta = new Beta(0.1, 0.3);
     AssertHelpers.AlmostEqualRelative(d.DensityLn(new[] { x }), beta.DensityLn(x), 10);
 }
예제 #18
0
 public void HasRandomSourceEvenAfterSetToNull()
 {
     var d = new Dirichlet(0.3, 5);
     Assert.DoesNotThrow(() => d.RandomSource = null);
     Assert.IsNotNull(d.RandomSource);
 }
예제 #19
0
 public void CanSampleSymmetricDirichlet()
 {
     var d = new Dirichlet(1.0, 5);
     d.Sample();
 }
예제 #20
0
 public void CanGetDimension()
 {
     var d = new Dirichlet(0.3, 10);
     Assert.AreEqual(10, d.Dimension);
 }
예제 #21
0
 public void CanGetAlpha()
 {
     var d = new Dirichlet(0.3, 10);
     for (var i = 0; i < 10; i++)
     {
         Assert.AreEqual(0.3, d.Alpha[i]);
     }
 }
예제 #22
0
        public void CanSetAlpha()
        {
            var d = new Dirichlet(0.3, 10);

            var alpha = new double[10];
            for (var i = 0; i < 10; i++)
            {
                alpha[i] = i;
            }

            d.Alpha = alpha;
        }
예제 #23
0
 public void HasRandomSource()
 {
     var d = new Dirichlet(0.3, 5);
     Assert.IsNotNull(d.RandomSource);
 }
예제 #24
0
        public void CanSetAlpha()
        {
            Dirichlet d = new Dirichlet(0.3, 10);

            double[] alpha = new double[10];
            for (int i = 0; i < 10; i++)
            {
                alpha[i] = i;
            }

            d.Alpha = alpha;
        }