public void CanCreateHypergeometric(int size, int m, int n)
 {
     var d = new Hypergeometric(size, m, n);
     Assert.AreEqual(size, d.PopulationSize);
     Assert.AreEqual(m, d.M);
     Assert.AreEqual(n, d.N);
 }
        public void ValidateToString()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
            var d = new Hypergeometric(10, 1, 1);

            Assert.AreEqual("Hypergeometric(N = 10, M = 1, n = 1)", d.ToString());
        }
예제 #3
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string populationSizeStr = req.Query["CardsRemaining"];
            string successesStr      = req.Query["Outs"];
            string drawsStr          = req.Query["Draws"];
            string neededStr         = req.Query["Needed"];

            if (string.IsNullOrWhiteSpace(populationSizeStr) || string.IsNullOrWhiteSpace(successesStr) ||
                string.IsNullOrWhiteSpace(drawsStr) || string.IsNullOrWhiteSpace(neededStr))
            {
                return(new BadRequestObjectResult("Missing Parameters"));
            }

            var popSuccess       = int.TryParse(populationSizeStr, out var population);
            var successesSuccess = int.TryParse(successesStr, out var successes);
            var drawsSuccess     = int.TryParse(drawsStr, out var draws);
            var neededSuccess    = int.TryParse(neededStr, out var needed);

            if (!popSuccess || !successesSuccess || !drawsSuccess || !neededSuccess)
            {
                return(new BadRequestObjectResult("Numbers have to be an int"));
            }

            var dist = new Hypergeometric(population, successes, draws);

            var result = 1 - dist.CumulativeDistribution(needed - 1);

            return(new OkObjectResult(result.ToString(CultureInfo.InvariantCulture)));
        }
 public void CanCreateHypergeometric(int N, int m, int n)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual<double>(N, d.PopulationSize);
     Assert.AreEqual<double>(m, d.M);
     Assert.AreEqual<double>(n, d.N);
 }
 public void CanCreateHypergeometric(int population, int success, int draws)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual(population, d.Population);
     Assert.AreEqual(success, d.Success);
     Assert.AreEqual(draws, d.Draws);
 }
예제 #6
0
        public void CumulativeDistributionMustNotOverflow_CodePlexIssue5729()
        {
            var d = new Hypergeometric(10000, 2, 9800);

            Assert.That(d.CumulativeDistribution(0.0), Is.Not.NaN);
            Assert.That(d.CumulativeDistribution(0.1), Is.Not.NaN);
        }
예제 #7
0
        public void CanSampleSequence()
        {
            var d   = new Hypergeometric(10, 1, 1);
            var ied = d.Samples();

            ied.Take(5).ToArray();
        }
 public void CanCreateHypergeometric([Values(0, 1, 2, 2, 10, 10)] int size, [Values(0, 1, 1, 2, 1, 5)] int m, [Values(0, 1, 1, 2, 1, 3)] int n)
 {
     var d = new Hypergeometric(size, m, n);
     Assert.AreEqual(size, d.PopulationSize);
     Assert.AreEqual(m, d.M);
     Assert.AreEqual(n, d.N);
 }
예제 #9
0
 public static double CalculateWeight(int N, int M, int n, int k)
 {
     if (M < k)
     {
         return(0);
     }
     return(Hypergeometric.CDF(N, M, n, k));
 }
예제 #10
0
        public void CanCreateHypergeometric([Values(0, 1, 2, 2, 10, 10)] int size, [Values(0, 1, 1, 2, 1, 5)] int m, [Values(0, 1, 1, 2, 1, 3)] int n)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(size, d.PopulationSize);
            Assert.AreEqual(m, d.M);
            Assert.AreEqual(n, d.N);
        }
예제 #11
0
        public void CanCreateHypergeometric(int population, int success, int draws)
        {
            var d = new Hypergeometric(population, success, draws);

            Assert.AreEqual(population, d.Population);
            Assert.AreEqual(success, d.Success);
            Assert.AreEqual(draws, d.Draws);
        }
        public void CanCreateHypergeometric(int N, int m, int n)
        {
            var d = new Hypergeometric(N, m, n);

            Assert.AreEqual <double>(N, d.PopulationSize);
            Assert.AreEqual <double>(m, d.M);
            Assert.AreEqual <double>(n, d.N);
        }
예제 #13
0
        public void CanCreateHypergeometric(int size, int m, int n)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(size, d.PopulationSize);
            Assert.AreEqual(m, d.M);
            Assert.AreEqual(n, d.N);
        }
예제 #14
0
        public void ValidateProbabilityLn(
            [Values(0, 1, 2, 2, 2, 10, 10, 10, 10)] int size,
            [Values(0, 1, 1, 1, 2, 1, 1, 5, 5)] int m,
            [Values(0, 1, 1, 1, 2, 1, 1, 3, 3)] int n,
            [Values(0, 1, 0, 1, 2, 0, 1, 1, 3)] int x)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(Math.Log(d.Probability(x)), d.ProbabilityLn(x));
        }
예제 #15
0
        public void ValidateProbability(
            [Values(0, 1, 2, 2, 2, 10, 10, 10, 10)] int size,
            [Values(0, 1, 1, 1, 2, 1, 1, 5, 5)] int m,
            [Values(0, 1, 1, 1, 2, 1, 1, 3, 3)] int n,
            [Values(0, 1, 0, 1, 2, 0, 1, 1, 3)] int x)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(SpecialFunctions.Binomial(m, x) * SpecialFunctions.Binomial(size - m, n - x) / SpecialFunctions.Binomial(size, n), d.Probability(x));
        }
예제 #16
0
        public void ValidateCumulativeDistribution(
            [Values(0, 1, 2, 2, 2, 10, 10, 10, 10)] int size,
            [Values(0, 1, 1, 1, 2, 1, 1, 5, 5)] int m,
            [Values(0, 1, 1, 1, 2, 1, 1, 3, 3)] int n,
            [Values(0.5, 1.1, 0.3, 1.2, 2.4, 0.3, 1.2, 1.1, 3.0)] double x,
            [Values(1.0, 1.0, 0.5, 1.0, 1.0, 0.9, 1.0, 0.5, 0.916666666666667)] double cdf)
        {
            var d = new Hypergeometric(size, m, n);

            AssertHelpers.AlmostEqual(cdf, d.CumulativeDistribution(x), 14);
        }
예제 #17
0
    private static void hypergeometric_cdf_test()

//****************************************************************************80
//
//  Purpose:
//
//    HYPERGEOMETRIC_CDF_TEST tests HYPERGEOMETRIC_CDF.
//
//  Licensing:
//
//    This code is distributed under the GNU LGPL license.
//
//  Modified:
//
//    08 April 2016
//
//  Author:
//
//    John Burkardt
//
    {
        Console.WriteLine("");
        Console.WriteLine("HYPERGEOMETRIC_CDF_TEST");
        Console.WriteLine("  HYPERGEOMETRIC_CDF evaluates the Hypergeometric CDF.");
        Console.WriteLine("  HYPERGEOMETRIC_PDF evaluates the Hypergeometric PDF.");

        const int n = 10;
        const int m = 7;
        const int l = 100;

        Console.WriteLine("");
        Console.WriteLine("  Total number of balls L =         " + l + "");
        Console.WriteLine("  Number of white balls M =         " + m + "");
        Console.WriteLine("  Number of balls taken N =         " + n + "");

        if (!Hypergeometric.hypergeometric_check(n, m, l))
        {
            Console.WriteLine("");
            Console.WriteLine("HYPERGEOMETRIC_CDF_TEST - Fatal error!");
            Console.WriteLine("  The parameters are not legal.");
            return;
        }

        int x = 7;

        double pdf = Hypergeometric.hypergeometric_pdf(x, n, m, l);

        double cdf = Hypergeometric.hypergeometric_cdf(x, n, m, l);

        Console.WriteLine("  PDF argument X =                " + x + "");
        Console.WriteLine("  PDF value =                   = " + pdf + "");
        Console.WriteLine("  CDF value =                   = " + cdf + "");
    }
예제 #18
0
    public static void hypergeometric_pdf_values_test()
    //****************************************************************************80
    //
    //  Purpose:
    //
    //    HYPERGEOMETRIC_PDF_VALUES_TEST tests HYPERGEOMETRIC_PDF_VALUES.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    28 January 2008
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        double fx   = 0;
        int    pop  = 0;
        int    sam  = 0;
        int    succ = 0;
        int    x    = 0;

        Console.WriteLine("");
        Console.WriteLine("HYPERGEOMETRIC_PDF_VALUES_TEST:");
        Console.WriteLine("  HYPERGEOMETRIC_PDF_VALUES stores values of");
        Console.WriteLine("  the Hypergeometric PDF.");
        Console.WriteLine("");
        Console.WriteLine("     SAM    SUC   POP     X   HyperPDF(S,S,P)(X)");
        Console.WriteLine("");
        int n_data = 0;

        for (;;)
        {
            Hypergeometric.hypergeometric_pdf_values(ref n_data, ref sam, ref succ, ref pop, ref x, ref fx);
            if (n_data == 0)
            {
                break;
            }

            Console.WriteLine("  "
                              + sam.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + succ.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + pop.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + x.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + fx.ToString("0.################").PadLeft(24) + "");
        }
    }
예제 #19
0
    public static void hyper_2f1_values_test()
    //****************************************************************************80
    //
    //  Purpose:
    //
    //    HYPER_2F1_VALUES_TEST tests HYPER_2F1_VALUES.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 September 2007
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        double a  = 0;
        double b  = 0;
        double c  = 0;
        double fx = 0;
        double x  = 0;

        Console.WriteLine("");
        Console.WriteLine("HYPER_2F1_VALUES_TEST:");
        Console.WriteLine("  HYPER_2F1_VALUES stores values of");
        Console.WriteLine("  the hypergeometric function 2F1.");
        Console.WriteLine("");
        Console.WriteLine("      A      B     C      X   Hyper_2F1(A,B,C,X)");
        Console.WriteLine("");
        int n_data = 0;

        for (;;)
        {
            Hypergeometric.hyper_2f1_values(ref n_data, ref a, ref b, ref c, ref x, ref fx);
            if (n_data == 0)
            {
                break;
            }

            Console.WriteLine("  "
                              + a.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + b.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + c.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + x.ToString(CultureInfo.InvariantCulture).PadLeft(8) + "  "
                              + fx.ToString("0.################").PadLeft(24) + "");
        }
    }
예제 #20
0
        public static double GetHyperGeometricPvalue(int n, int k, int n1, int k1, bool upperTailProb = true)
        {
            if (k >= n)
            {
                return(1.0d);
            }

            var pValue = Hypergeometric.CDF(n, k, n1, k1);

            if (upperTailProb)
            {
                pValue = 1 - pValue;
            }
            else
            {
                pValue = Math.Min(pValue, 1 - pValue);
            }

            return(pValue);
        }
예제 #21
0
        public void CalculateHypergeometric()
        {
            if (SamplesCount > this.PopulationSize || this.SuccessesCount > this.PopulationSize)
            {
                return;
            }
            Hypergeometric dist = new Hypergeometric(this.PopulationSize, this.SuccessesCount, this.SamplesCount);

            LineChart cdfchart = new LineChart()
            {
                Entries = Enumerable.Range(0, this.SamplesCount + 1).Select(i =>
                                                                            new Microcharts.Entry(1 - (float)dist.CumulativeDistribution(i - 1))
                {
                    Label      = i.ToString(),
                    ValueLabel = (100 - dist.CumulativeDistribution(i - 1) * 100).ToString("0.00") + "%"
                }),
                MinValue = 0,
                MaxValue = 1,
                LineMode = LineMode.Straight
            };

            this.HyperGeometricCdfChart.Chart = cdfchart;

            LineChart pdfchart = new LineChart()
            {
                Entries = Enumerable.Range(0, this.SamplesCount + 1).Select(i =>
                                                                            new Microcharts.Entry((float)dist.Probability(i))
                {
                    Label      = i.ToString(),
                    ValueLabel = (dist.Probability(i) * 100).ToString("0.00") + "%"
                }),
                MinValue = 0,
                MaxValue = 1,
                LineMode = LineMode.Straight
            };

            this.HyperGeometricPdfChart.Chart = pdfchart;
        }
 public void ValidateEntropy()
 {
     var d = new Hypergeometric(10, 1, 1);
     var e = d.Entropy;
 }
 public void ValidateProbability(int N, int m, int n, int x)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual<double>(SpecialFunctions.Binomial(m, x) * SpecialFunctions.Binomial(N - m, n - x) / SpecialFunctions.Binomial(N, n), d.Probability(x));
 }
예제 #24
0
        public void ValidateToString()
        {
            var d = new Hypergeometric(10, 1, 1);

            Assert.AreEqual("Hypergeometric(N = 10, m = 1, n = 1)", d.ToString());
        }
예제 #25
0
        public void ValidateCumulativeDistribution(int size, int m, int n, double x, double cdf)
        {
            var d = new Hypergeometric(size, m, n);

            AssertHelpers.AlmostEqual(cdf, d.CumulativeDistribution(x), 14);
        }
예제 #26
0
        public void CanSample()
        {
            var d = new Hypergeometric(10, 1, 1);

            d.Sample();
        }
 public void CanSetSize(int N)
 {
     var d = new Hypergeometric(10, 1, 1);
     d.PopulationSize = N;
 }
 public void CanSetn(int n)
 {
     var d = new Hypergeometric(10, 1, 1);
     d.N = n;
 }
 public void CanSetm(int m)
 {
     var d = new Hypergeometric(10, 1, 1);
     d.M = m;
 }
 public void ValidateSkewness(int N, int m, int n)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual<double>((Math.Sqrt(N - 1.0) * (N - 2 * n) * (N - 2 * m)) / (Math.Sqrt(n * m * (N - m) * (N - n)) * (N - 2.0)), d.Skewness);
 }
 public void ValidateProbabilityLn(int N, int m, int n, int x)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual(Math.Log(d.Probability(x)), d.ProbabilityLn(x));
 }
예제 #32
0
        public void ValidateProbability(int size, int m, int n, int x)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(SpecialFunctions.Binomial(m, x) * SpecialFunctions.Binomial(size - m, n - x) / SpecialFunctions.Binomial(size, n), d.Probability(x));
        }
예제 #33
0
        public void ValidateProbabilityLn(int size, int m, int n, int x)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(Math.Log(d.Probability(x)), d.ProbabilityLn(x));
        }
 public void ValidateMinimum(int population, int success, int draws)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual(Math.Max(0, draws + success - population), d.Minimum);
 }
 public void ValidateMinimum(int N, int m, int n)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual(Math.Max(0, n + m - N), d.Minimum);
 }
 public void ValidateProbability(int population, int success, int draws, int x)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual(SpecialFunctions.Binomial(success, x)*SpecialFunctions.Binomial(population - success, draws - x)/SpecialFunctions.Binomial(population, draws), d.Probability(x));
 }
 public void ValidateMedian()
 {
     var d = new Hypergeometric(10, 1, 1);
     var m = d.Median;
 }
 public void ValidateSkewness(int population, int success, int draws)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual((Math.Sqrt(population - 1.0)*(population - (2*draws))*(population - (2*success)))/(Math.Sqrt(draws*success*(population - success)*(population - draws))*(population - 2.0)), d.Skewness);
 }
 public void SetDrawsFails(int draws)
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.Throws<ArgumentOutOfRangeException>(() => d.Draws = draws);
 }
 public void SetSuccessFails(int success)
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.Throws<ArgumentOutOfRangeException>(() => d.Success = success);
 }
예제 #41
0
    private static void hypergeometric_sample_test()

//****************************************************************************80
//
//  Purpose:
//
//    HYPERGEOMETRIC_SAMPLE_TEST tests HYPERGEOMETRIC_SAMPLE.
//
//  Licensing:
//
//    This code is distributed under the GNU LGPL license.
//
//  Modified:
//
//    08 April 2016
//
//  Author:
//
//    John Burkardt
//
    {
        const int SAMPLE_NUM = 1000;

        int j;
        int seed = 123456789;

        int[] x = new int[SAMPLE_NUM];

        Console.WriteLine("");
        Console.WriteLine("HYPERGEOMETRIC_SAMPLE_TEST");
        Console.WriteLine("  HYPERGEOMETRIC_MEAN computes the Hypergeometric mean;");
        Console.WriteLine("  HYPERGEOMETRIC_SAMPLE samples the Hypergeometric distribution;");
        Console.WriteLine("  HYPERGEOMETRIC_VARIANCE computes the Hypergeometric variance.");

        const int n = 10;
        const int m = 7;
        const int l = 100;

        Console.WriteLine("");
        Console.WriteLine("  Total number of balls L =         " + l + "");
        Console.WriteLine("  Number of white balls M =         " + m + "");
        Console.WriteLine("  Number of balls taken N =         " + n + "");

        if (!Hypergeometric.hypergeometric_check(n, m, l))
        {
            Console.WriteLine("");
            Console.WriteLine("HYPERGEOMETRIC_SAMPLE_TEST - Fatal error!");
            Console.WriteLine("  The parameters are not legal.");
            return;
        }

        double mean     = Hypergeometric.hypergeometric_mean(n, m, l);
        double variance = Hypergeometric.hypergeometric_variance(n, m, l);

        Console.WriteLine("  PDF mean =                    " + mean + "");
        Console.WriteLine("  PDF variance =                " + variance + "");

        for (j = 0; j < SAMPLE_NUM; j++)
        {
            x[j] = Hypergeometric.hypergeometric_sample(n, m, l, ref seed);
        }

        mean     = typeMethods.i4vec_mean(SAMPLE_NUM, x);
        variance = typeMethods.i4vec_variance(SAMPLE_NUM, x);
        int xmax = typeMethods.i4vec_max(SAMPLE_NUM, x);
        int xmin = typeMethods.i4vec_min(SAMPLE_NUM, x);

        Console.WriteLine("");
        Console.WriteLine("  Sample size =     " + SAMPLE_NUM + "");
        Console.WriteLine("  Sample mean =     " + mean + "");
        Console.WriteLine("  Sample variance = " + variance + "");
        Console.WriteLine("  Sample maximum =  " + xmax + "");
        Console.WriteLine("  Sample minimum =  " + xmin + "");
    }
 public void ValidateEntropyThrowsNotSupportedException()
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.Throws<NotSupportedException>(() => { var e = d.Entropy; });
 }
 public void CumulativeDistributionMustNotOverflow_CodePlexIssue5729()
 {
     var d = new Hypergeometric(10000, 2, 9800);
     Assert.That(d.CumulativeDistribution(0.0), Is.Not.NaN);
     Assert.That(d.CumulativeDistribution(0.1), Is.Not.NaN);
 }
 public void ValidateMode(int N, int m, int n)
 {
     var d = new Hypergeometric(N, m, n);
     Assert.AreEqual<double>((n + 1) * (m + 1) / (N + 2), d.Mode);
 }
 public void SetPopulationFails(int population)
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.Throws<ArgumentOutOfRangeException>(() => d.Population = population);
 }
 public void CanSampleSequence()
 {
     var d = new Hypergeometric(10, 1, 1);
     var ied = d.Samples();
     ied.Take(5).ToArray();
 }
 public void ValidateCumulativeDistribution(int population, int success, int draws, double x, double cdf)
 {
     var d = new Hypergeometric(population, success, draws);
     AssertHelpers.AlmostEqual(cdf, d.CumulativeDistribution(x), 10);
 }
예제 #48
0
        public void ValidateMaximum(int size, int m, int n)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual(Math.Min(m, n), d.Maximum);
        }
 public void ValidateMedianThrowsNotSupportedException()
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.Throws<NotSupportedException>(() => { var m = d.Median; });
 }
 public void ValidateCumulativeDistribution(int N, int m, int n, double x, double cdf)
 {
     var d = new Hypergeometric(N, m, n);
     AssertHelpers.AlmostEqual(cdf, d.CumulativeDistribution(x), 14);
 }
 public void ValidateMode(int population, int success, int draws)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual((draws + 1)*(success + 1)/(population + 2), d.Mode);
 }
예제 #52
0
        public void SetnFails(int n)
        {
            var d = new Hypergeometric(10, 1, 1);

            Assert.Throws <ArgumentOutOfRangeException>(() => d.N = n);
        }
 public void ValidateProbabilityLn(int population, int success, int draws, int x)
 {
     var d = new Hypergeometric(population, success, draws);
     Assert.AreEqual(Math.Log(d.Probability(x)), d.ProbabilityLn(x));
 }
예제 #54
0
        public void ValidateEntropyThrowsNotSupportedException()
        {
            var d = new Hypergeometric(10, 1, 1);

            Assert.Throws <NotSupportedException>(() => { var e = d.Entropy; });
        }
 public void ValidateToString()
 {
     var d = new Hypergeometric(10, 1, 1);
     Assert.AreEqual("Hypergeometric(N = 10, M = 1, n = 1)", d.ToString());
 }
예제 #56
0
        public void ValidateSkewness(int size, int m, int n)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual((Math.Sqrt(size - 1.0) * (size - (2 * n)) * (size - (2 * m))) / (Math.Sqrt(n * m * (size - m) * (size - n)) * (size - 2.0)), d.Skewness);
        }
 public void CanSample()
 {
     var d = new Hypergeometric(10, 1, 1);
     d.Sample();
 }
예제 #58
0
        public void ValidateMode(int size, int m, int n)
        {
            var d = new Hypergeometric(size, m, n);

            Assert.AreEqual((n + 1) * (m + 1) / (size + 2), d.Mode);
        }
예제 #59
0
        public override void ExecuteExample()
        {
            // <a href="http://en.wikipedia.org/wiki/Binomial_distribution">Binomial distribution</a>
            MathDisplay.WriteLine("<b>Binomial distribution</b>");
            // 1. Initialize the new instance of the Binomial distribution class with parameters P = 0.2, N = 20
            var binomial = new Binomial(0.2, 20);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Binomial distribution class with parameters P = {0}, N = {1}", binomial.P, binomial.N);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", binomial);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", binomial.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", binomial.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", binomial.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", binomial.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", binomial.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", binomial.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", binomial.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            MathDisplay.WriteLine(@"{0} - Median", binomial.Median.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", binomial.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", binomial.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", binomial.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", binomial.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Binomial distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Binomial distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(binomial.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Bernoulli_distribution">Bernoulli distribution</a>
            MathDisplay.WriteLine("<b>Bernoulli distribution</b>");
            // 1. Initialize the new instance of the Bernoulli distribution class with parameter P = 0.2
            var bernoulli = new Bernoulli(0.2);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Bernoulli distribution class with parameter P = {0}", bernoulli.P);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", bernoulli);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", bernoulli.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", bernoulli.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", bernoulli.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", bernoulli.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", bernoulli.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", bernoulli.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", bernoulli.Mean.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", bernoulli.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", bernoulli.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", bernoulli.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", bernoulli.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Bernoulli distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Bernoulli distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(bernoulli.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Categorical_distribution">Categorical distribution</a>
            MathDisplay.WriteLine("<b>Categorical distribution</b>");
            // 1. Initialize the new instance of the Categorical distribution class with parameters P = (0.1, 0.2, 0.25, 0.45)
            var binomialC = new Categorical(new[] { 0.1, 0.2, 0.25, 0.45 });

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Categorical distribution class with parameters P = (0.1, 0.2, 0.25, 0.45)");
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", binomialC);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", binomialC.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", binomialC.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", binomialC.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", binomialC.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", binomialC.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", binomialC.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", binomialC.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            MathDisplay.WriteLine(@"{0} - Median", binomialC.Median.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", binomialC.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", binomialC.StdDev.ToString(" #0.00000;-#0.00000"));

            // 3. Generate 10 samples of the Categorical distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Categorical distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(binomialC.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Conway%E2%80%93Maxwell%E2%80%93Poisson_distribution">ConwayMaxwellPoisson distribution</a>
            MathDisplay.WriteLine("<b>Conway Maxwell Poisson distribution</b>");
            // 1. Initialize the new instance of the ConwayMaxwellPoisson distribution class with parameters Lambda = 2, Nu = 1
            var conwayMaxwellPoisson = new ConwayMaxwellPoisson(2, 1);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the ConwayMaxwellPoisson distribution class with parameters Lambda = {0}, Nu = {1}", conwayMaxwellPoisson.Lambda, conwayMaxwellPoisson.Nu);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", conwayMaxwellPoisson);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", conwayMaxwellPoisson.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", conwayMaxwellPoisson.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", conwayMaxwellPoisson.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", conwayMaxwellPoisson.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", conwayMaxwellPoisson.Mean.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", conwayMaxwellPoisson.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", conwayMaxwellPoisson.StdDev.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the ConwayMaxwellPoisson distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the ConwayMaxwellPoisson distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(conwayMaxwellPoisson.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Discrete_uniform">DiscreteUniform distribution</a>
            MathDisplay.WriteLine("<b>Discrete Uniform distribution</b>");
            // 1. Initialize the new instance of the DiscreteUniform distribution class with parameters LowerBound = 2, UpperBound = 10
            var discreteUniform = new DiscreteUniform(2, 10);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the DiscreteUniform distribution class with parameters LowerBound = {0}, UpperBound = {1}", discreteUniform.LowerBound, discreteUniform.UpperBound);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", discreteUniform);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", discreteUniform.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", discreteUniform.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", discreteUniform.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", discreteUniform.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", discreteUniform.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", discreteUniform.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", discreteUniform.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            MathDisplay.WriteLine(@"{0} - Median", discreteUniform.Median.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", discreteUniform.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", discreteUniform.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", discreteUniform.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", discreteUniform.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the DiscreteUniform distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the DiscreteUniform distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(discreteUniform.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Geometric_distribution">Geometric distribution</a>
            MathDisplay.WriteLine("<b>Geometric distribution</b>");
            // 1. Initialize the new instance of the Geometric distribution class with parameter P = 0.2
            var geometric = new Geometric(0.2);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Geometric distribution class with parameter P = {0}", geometric.P);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", geometric);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", geometric.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", geometric.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", geometric.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", geometric.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", geometric.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", geometric.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", geometric.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            MathDisplay.WriteLine(@"{0} - Median", geometric.Median.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", geometric.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", geometric.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", geometric.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", geometric.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Geometric distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Geometric distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(geometric.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Hypergeometric_distribution">Hypergeometric distribution</a>
            MathDisplay.WriteLine("<b>Hypergeometric distribution</b>");
            // 1. Initialize the new instance of the Hypergeometric distribution class with parameters PopulationSize = 10, M = 2, N = 8
            var hypergeometric = new Hypergeometric(30, 15, 10);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Hypergeometric distribution class with parameters Population = {0}, Success = {1}, Draws = {2}", hypergeometric.Population, hypergeometric.Success, hypergeometric.Draws);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", hypergeometric);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", hypergeometric.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", hypergeometric.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", hypergeometric.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", hypergeometric.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", hypergeometric.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", hypergeometric.Mean.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", hypergeometric.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", hypergeometric.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", hypergeometric.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", hypergeometric.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Hypergeometric distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Hypergeometric distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(hypergeometric.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Negative_binomial">NegativeBinomial distribution</a>
            MathDisplay.WriteLine("<b>Negative Binomial distribution</b>");
            // 1. Initialize the new instance of the NegativeBinomial distribution class with parameters P = 0.2, R = 20
            var negativeBinomial = new NegativeBinomial(20, 0.2);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the NegativeBinomial distribution class with parameters P = {0}, N = {1}", negativeBinomial.P, negativeBinomial.R);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", negativeBinomial);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", negativeBinomial.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", negativeBinomial.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", negativeBinomial.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", negativeBinomial.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", negativeBinomial.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", negativeBinomial.Mean.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", negativeBinomial.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", negativeBinomial.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", negativeBinomial.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", negativeBinomial.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the NegativeBinomial distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the NegativeBinomial distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(negativeBinomial.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Poisson_distribution">Poisson distribution</a>
            MathDisplay.WriteLine("<b>Poisson distribution</b>");
            // 1. Initialize the new instance of the Poisson distribution class with parameter Lambda = 1
            var poisson = new Poisson(1);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Poisson distribution class with parameter Lambda = {0}", poisson.Lambda);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", poisson);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", poisson.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", poisson.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", poisson.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", poisson.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", poisson.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", poisson.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", poisson.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            MathDisplay.WriteLine(@"{0} - Median", poisson.Median.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", poisson.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", poisson.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", poisson.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", poisson.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Poisson distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Poisson distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(poisson.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();


            // <a href="http://en.wikipedia.org/wiki/Zipf_distribution">Zipf distribution</a>
            MathDisplay.WriteLine("<b>Zipf distribution</b>");
            // 1. Initialize the new instance of the Zipf distribution class with parameters S = 5, N = 10
            var zipf = new Zipf(5, 10);

            MathDisplay.WriteLine(@"1. Initialize the new instance of the Zipf distribution class with parameters S = {0}, N = {1}", zipf.S, zipf.N);
            MathDisplay.WriteLine();

            // 2. Distributuion properties:
            MathDisplay.WriteLine(@"2. {0} distributuion properties:", zipf);

            // Cumulative distribution function
            MathDisplay.WriteLine(@"{0} - Сumulative distribution at location '3'", zipf.CumulativeDistribution(3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            MathDisplay.WriteLine(@"{0} - Probability mass at location '3'", zipf.Probability(3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            MathDisplay.WriteLine(@"{0} - Log probability mass at location '3'", zipf.ProbabilityLn(3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            MathDisplay.WriteLine(@"{0} - Entropy", zipf.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            MathDisplay.WriteLine(@"{0} - Largest element in the domain", zipf.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            MathDisplay.WriteLine(@"{0} - Smallest element in the domain", zipf.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            MathDisplay.WriteLine(@"{0} - Mean", zipf.Mean.ToString(" #0.00000;-#0.00000"));

            // Mode
            MathDisplay.WriteLine(@"{0} - Mode", zipf.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            MathDisplay.WriteLine(@"{0} - Variance", zipf.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            MathDisplay.WriteLine(@"{0} - Standard deviation", zipf.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            MathDisplay.WriteLine(@"{0} - Skewness", zipf.Skewness.ToString(" #0.00000;-#0.00000"));
            MathDisplay.WriteLine();

            // 3. Generate 10 samples of the Zipf distribution
            MathDisplay.WriteLine(@"3. Generate 10 samples of the Zipf distribution");
            for (var i = 0; i < 10; i++)
            {
                MathDisplay.Write(zipf.Sample().ToString("N05") + @" ");
            }
            MathDisplay.FlushBuffer();
            MathDisplay.WriteLine();
            MathDisplay.WriteLine();
        }
예제 #60
0
        public void ValidateMedianThrowsNotSupportedException()
        {
            var d = new Hypergeometric(10, 1, 1);

            Assert.Throws <NotSupportedException>(() => { var m = d.Median; });
        }