public void CalculateExponentialExpectedStandardDeviation()
        {
            //Arrange
            ExponentialGenerator exponentialGenerator = new ExponentialGenerator(4, 100);

            //Act
            double number = exponentialGenerator.CalculateExpectedStandardDeviation();

            //Assert
            Assert.AreEqual(0.25, number);
        }
        public void CalculateExponentialExpectedVarianceTest()
        {
            //Arrange
            ExponentialGenerator exponentialGenerator = new ExponentialGenerator(4, 100);

            //Act
            double number = exponentialGenerator.CalculateExpectedVariance();

            //Assert
            Assert.AreEqual(0.0625, number);
        }
        public void CalculateExponentialTest()
        {
            //Arrange
            ExponentialGenerator exponentialGenerator = new ExponentialGenerator(4, 100);

            //Act
            double probability = exponentialGenerator.CalculateExponential(1);

            //Assert
            Assert.AreEqual(0.0183, Math.Round(probability, 4));
        }
        public void GenerateExponentialDistributionTest()
        {
            //Arrange
            ExponentialGenerator exponentialGenerator = new ExponentialGenerator(20, 100);

            //Act
            double[] distribution = exponentialGenerator.GenerateExponentialDistribution();

            //Assert
            foreach (double number in distribution)
            {
                Assert.AreEqual(0, Math.Round(number));
            }
        }
예제 #5
0
        private async void GenerateButton_Click(object sender, EventArgs e)
        {
            string distribution = DistributionComboBox.SelectedItem.ToString();

            int  count          = (int)CountInput.Value;
            int  seed           = (int)SeedInput.Value;
            int  multiplier     = (int)MultiplierInput.Value;
            int  range          = (int)RangeInput.Value;
            bool showAllNumbers = !DisplayedNumbersLimiter.Checked;

            IGenerator generator;
            MLCG       generatorMLCG = new MLCG(seed, multiplier, range);

            ClearComponents();
            GeneratingProgress.Maximum = count;

            switch (distribution)
            {
            case "Uniform":
                generator = new UniformGenerator(Input1.Value, Input2.Value, generatorMLCG);
                break;

            case "Gauss":
                generator = new GaussGenerator(Input1.Value, Input2.Value, Input3.Value, count, generatorMLCG);
                break;

            case "Exponential":
                generator = new ExponentialGenerator(Input1.Value, generatorMLCG);
                break;

            case "Gamma":
                generator = new GammaGenerator(Input1.Value, Input2.Value, count, generatorMLCG);
                break;

            case "Triangular":
                generator = new TriangularGenerator(Input1.Value, Input2.Value, TriangularMinCheckBox.Checked, count, generatorMLCG);
                break;

            case "Simpson":
                generator = new SimpsonGenerator(Input1.Value, Input2.Value, count, generatorMLCG);
                break;

            default:
                generator = generatorMLCG;
                break;
            }

            await Task.Factory.StartNew(() =>
            {
                ProgressStage("Generating numbers...");

                for (int i = 0; i < count; i++)
                {
                    if (showAllNumbers || i < 100)
                    {
                        string row = $"{i + 1}. {generator.NextNumber()}";
                        ExecuteInUIThread(() => NumbersList.Items.Add(row));
                    }
                    else
                    {
                        generator.NextNumber();
                    }

                    ExecuteInUIThread(() => GeneratingProgress.Value++);
                }

                ProgressStage("Calculating statistics...");

                Calculations calculations = new Calculations(generator);
                AddToOutputBox($"M = {calculations.ExpectedValue:F5}");
                AddToOutputBox($"D = {calculations.Variance:F5}");
                AddToOutputBox($"σ = {calculations.StandardDeviation:F5}");

                ProgressStage("Building plot...");
                calculations.BuildHistogram(Plot.plt);
                Plot.Render();

                ProgressStage("Complete.");
            });
        }
 public Simulator(double inputIntensity, double outputIntensity)
 {
     this.inputIntensity  = inputIntensity;
     this.outputIntensity = outputIntensity;
     random = new ExponentialGenerator(inputIntensity);
 }