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; } }
//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)); }
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)); } }
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); }
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); }
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(); }