public Dictionary <double, double> ObtenerDensidadInversa(int cantidad)
        {
            Dictionary <double, double> densidades = new Dictionary <double, double>();
            var rand = new Random();

            double[] arr = new double[cantidad];
            for (int i = 0; i < cantidad; i++)
            {
                arr[i] = rand.NextDouble();
            }
            arr = arr.Distinct().ToArray();
            try
            {
                if (DistribucionContinua != null)
                {
                    foreach (var item in arr)
                    {
                        densidades.Add(item, DistribucionContinua.QuantileDensityFunction(item));
                    }
                }
                else
                {
                    foreach (var item in arr)
                    {
                        densidades.Add(item, DistribucionDiscreta.QuantileDensityFunction(item));
                    }
                }
                return(densidades.OrderBy(x => x.Key).ToDictionary(x => x.Key, y => y.Value));
            }
            catch (Exception)
            {
                FuncionDensidadProbabilidad aux = FactoryFuncionDensidad.Instancia(FuncionDensidad.LOG_LOGISTICA, arr);
                return(aux.ObtenerDensidadInversa(cantidad));
            }
        }
        public Dictionary <double, double> ObtenerDensidad(Dictionary <double, double> valoresReales)
        {
            Dictionary <double, double> densidades = new Dictionary <double, double>();

            if (DistribucionContinua != null)
            {
                foreach (var item in valoresReales)
                {
                    densidades.Add(item.Key, DistribucionContinua.ProbabilityDensityFunction(item.Key));
                }
            }
            else
            {
                foreach (var item in valoresReales)
                {
                    try
                    {
                        densidades.Add(item.Key, DistribucionDiscreta.ProbabilityMassFunction(Convert.ToInt32(item.Key)));
                    }
                    catch (Exception)
                    {
                        // densidades.Add(item.Key, DistribucionDiscreta.d(DistribucionDiscreta.Generate()));
                    }
                }
            }
            return(densidades.OrderBy(x => x.Key).ToDictionary(x => x.Key, y => y.Value));
        }
 public double[] GenerarValores(int cantidad, double[] eventos)
 {
     try
     {
         if (DistribucionContinua != null)
         {
             return(DistribucionContinua.Generate(cantidad));
         }
         else
         {
             return(DistribucionDiscreta.Generate(cantidad).Select(x => Convert.ToDouble(x)).ToArray());
         }
     }
     catch (Exception)
     {
         Random   r        = new Random();
         int      min      = Convert.ToInt32(eventos.Min());
         int      max      = Convert.ToInt32(eventos.Max());
         double[] toReturn = new double[cantidad];
         for (int i = 0; i < cantidad; i++)
         {
             toReturn[i] = r.Next(min, max);
         }
         return(toReturn);
     }
 }
 public Double getYforX(double x)
 {
     try
     {
         if (DistribucionContinua != null)
         {
             return(DistribucionContinua.QuantileDensityFunction(x));
         }
         else
         {
             return(DistribucionDiscreta.QuantileDensityFunction(x));
         }
     }
     catch (Exception)
     {
         return(-1);
     }
 }
 public double CalcularDesvio(Dictionary <string, double> eventos)
 {
     try
     {
         if (DistribucionContinua != null)
         {
             Desvio = eventos.Sum(x => Math.Pow(DistribucionContinua.ProbabilityDensityFunction(Convert.ToDouble(x.Key)) - x.Value, 2));
         }
         else
         {
             Desvio = eventos.Sum(x => Math.Pow(DistribucionDiscreta.ProbabilityMassFunction(Convert.ToInt32(x.Key)) - x.Value, 2));
         }
         return(Desvio);
     }
     catch (Exception)
     {
         return(double.MaxValue);
     }
 }