コード例 #1
0
 public void ObtenerFrecuenciaEsperada(TablaDeFrecuencia tabla)
 {
     for (int i = 0; i < tabla.Intervalos.Length; i++)
     {
         tabla.Intervalos[i].FrecuenciaEsperada = (Exponential.CDF(lambda, tabla.Intervalos[i].Maximo) -
                                                   Exponential.CDF(lambda, tabla.Intervalos[i].Minimo)) * tabla.Cantidad;
     }
 }
コード例 #2
0
        //public static double ChiDist(double x, double freedom)
        //{
        //    return Chi.PDF(x, freedom);//Is Error
        //}

        public static double ExponDist(double x, double rate, bool state)
        {
            if (state)
            {
                return(Exponential.CDF(rate, x));
            }
            return(Exponential.PDF(rate, x));
        }
コード例 #3
0
        public void ValidateCumulativeDistribution(double lambda, double x)
        {
            var n = new Exponential(lambda);

            if (x >= 0.0)
            {
                Assert.AreEqual(1.0 - Math.Exp(-lambda * x), n.CumulativeDistribution(x));
                Assert.AreEqual(1.0 - Math.Exp(-lambda * x), Exponential.CDF(lambda, x));
            }
            else
            {
                Assert.AreEqual(0.0, n.CumulativeDistribution(x));
                Assert.AreEqual(0.0, Exponential.CDF(lambda, x));
            }
        }
コード例 #4
0
        private double PhiHelper(double t, int j, int k, int l)
        {
            //object helper_result = null;
            double result = 0;

            PiParams piParams = CDFParams[j, k, l];

            if (piParams.ExpLambda > 0)
            {
                double denominator = 1;
                for (int i = 0; i < M; i++)
                {
                    PiParams piParamsI = CDFParams[i, k, l];
                    if (piParamsI.ExpLambda > 0)
                    {
                        denominator += Exponential.CDF(piParamsI.ExpLambda, t) * piParamsI.Norm;    //!!!!!!!!!!!!!!! + -> -
                    }
                }

                result = Exponential.PDF(piParams.ExpLambda, t) * piParams.Norm / denominator;
            }
            return(result);
        }
コード例 #5
0
        public void graficar(double[] numeros, int cantValores, int intervalos, double media, double desviacion, string distribucion)
        {
            tipoDistr             = distribucion;
            esperada              = new double[intervalos];
            backupNumeros         = numeros;
            med                   = media;
            des                   = desviacion;
            lbl_Distrib_Hist.Text = "";
            lbl_Distrib_Hist.Text = "Distribucion: " + distribucion;
            double max = Math.Round((Generador.obtenerMaximo(numeros) + 0.01), 5);
            double min = Math.Round((Generador.obtenerMinimo(numeros) - 0.01), 5);



            double paso = Math.Round(((max - min) / intervalos), 3);

            paso = Math.Round(paso, 4);


            switch (distribucion)
            {
            case "Uniforme":
                double aux = numeros.Length / intervalos;
                for (int i = 0; i < esperada.Length; i++)
                {
                    esperada[i] = aux;
                }
                break;

            case "Normal":
                for (int i = 0; i < esperada.Length; i++)
                {
                    double frecEsp = Normal.CDF(med, des, min + paso * (i + 1)) - Normal.CDF(med, des, min + paso * i);
                    esperada[i] = frecEsp * cantValores;
                }

                break;

            case "Exponencial":
                for (int i = 0; i < esperada.Length; i++)
                {
                    double frecEsp = Exponential.CDF(1 / media, min + paso * (i + 1)) - Exponential.CDF(1 / media, min + paso * i);
                    esperada[i] = frecEsp * cantValores;
                }
                break;     //media falta esto!!
            }
            //creamos el vector que va a tener la frecuencia de cada intervalo
            int[] acumulados = new int[intervalos];
            mediaCalc = numeros[0]; chiSq = 0.0;


            for (int j = 0; j < numeros.Length; j++) //recorremos array de numeros aleatorios
            {
                double dato = numeros[j];            // double.Parse(.ToString());
                if (j > 0)
                {
                    mediaCalc = ((mediaCalc * j) + dato) / (j + 1); //calculamos la media a cada iteracion
                }
                listValores.Items.Add(dato);                        //ponemos los numeros obtenidos de la distribucion solicitada en la lista
                for (int l = 0; l < acumulados.Length; l++)         //for que recorre array y acumula frecuencias
                {
                    double tope = min + paso * (l + 1);

                    if (dato < tope)
                    {
                        acumulados[l] = acumulados[l] + 1;
                        break;
                    }
                }
            }

            listIntervalos.Items.Add("Numero mayor generado: " + max);
            listIntervalos.Items.Add("Numero menor generado: " + min);
            listIntervalos.Items.Add("Ancho de intervalos: " + paso);
            listIntervalos.Items.Add("");

            double comienzo  = min;
            double totalacum = 0;

            for (int t = 0; t < acumulados.Length; t++)   // for que recorre la el arreglo de intervalos terminado y que aprovechamos para ir calculando chi cuadrado
            {
                double tope = comienzo + paso;
                listIntervalos.Items.Add("Intervalo " + (t + 1) + " (de " + comienzo + " hasta " + tope + "):" + acumulados[t]);
                chiSq      = chiSq + (Math.Pow(esperada[t] - acumulados[t], 2) / esperada[t]);
                comienzo   = tope;
                totalacum += acumulados[t];
            }

            listIntervalos.Items.Add("");
            listIntervalos.Items.Add("");
            listIntervalos.Items.Add("Cantidad de Valores:  " + totalacum);
            double inicio = 0;

            //ahora graficamos frecuencias
            for (int u = 0; u < acumulados.Length; u++)
            {
                inicio = min + (paso * u);
                double tope  = inicio + paso;
                double mitad = Math.Round((tope - (paso / 2)), 2);
                string label = mitad.ToString();

                chart_hist.Series["Frecuencia Observada"].Points.AddXY(label, acumulados[u]);
                chart_hist.Series["Frecuencia Esperada"].Points.AddXY(label, esperada[u]);
            }
            pruebaBondad(intervalos);
        }
コード例 #6
0
 private void button2_Click_1(object sender, EventArgs e)
 {
     textBoxRSM_lb.Text = Exponential.PDF(1 / double.Parse(textBoxPC_b.Text), 5).ToString();
     textBoxRSM_ub.Text = Exponential.CDF(1 / double.Parse(textBoxPC_b.Text), 5).ToString();
 }