/// <summary> /// Returns simulation results based on Monte Carlo method /// </summary> /// <param name="distributionInput">Represents user defined variables for /// probability distribution and simulation results</param> /// <param name="distributionType">Represents selected probability distribution</param> public IList <StatisticalResult> Run(DistributionInput distributionInput, DistributionType distributionType) { SimulationResult = ToggleDistribution(distributionInput, distributionType); if (SimulationResult.FittedValues.Count > 0) { if (_statisticalInput == null) { _statisticalInput = new StatisticalInput(); } _statisticalInput.Interval = distributionInput.Interval; _statisticalInput.Iteration = distributionInput.Iteration; _statisticalInput.FitMinValue = SimulationResult.FittedValues.Min(); _statisticalInput.FitMaxValue = SimulationResult.FittedValues.Max(); _statisticalInput.MaxValue = SimulationResult.SimulatedValues.Max(); _statisticalInput.MinValue = SimulationResult.SimulatedValues.Min(); return(GetSimResult(_statisticalInput, SimulationResult.FittedValues)); } throw new ArgumentException(); }
private IList <StatisticalResult> GetSimResult(StatisticalInput statisticalInput, IList <double> distribution) { SimulationResults = new List <StatisticalResult>(); var relFrequencies = MathUtils.GetRelFrequency(statisticalInput, distribution); var cumFrequencies = MathUtils.GetCumFrequency(statisticalInput, distribution); var expectations = MathUtils.GetExpectation(statisticalInput, distribution); var binSizes = MathUtils.GetBinSizes(statisticalInput.MaxValue, statisticalInput.MinValue, statisticalInput.Interval); var fittedbinSizes = MathUtils.GetBinSizes(statisticalInput.FitMaxValue, statisticalInput.FitMinValue, statisticalInput.Interval); for (int i = 0; i < _statisticalInput.Interval; i++) { SimulationResults.Add(new StatisticalResult() { Expectation = expectations[i], RelativeFrequency = relFrequencies[i], CumulativeFrequency = cumFrequencies[i], FittedBinSize = fittedbinSizes[i], BinSize = binSizes[i] }); } return(SimulationResults); }