public FuncionWeibull3(double[] eventos) : base(eventos) { try { DistribucionContinua = new WeibullDistribution(shape, scale); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionExponencial(double[] eventos) : base(eventos) { try { DistribucionContinua = new ExponentialDistribution(); DistribucionContinua.Fit(eventos); this.L = ((ExponentialDistribution)DistribucionContinua).Rate.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionPoisson(double[] eventos) : base(eventos) { try { DistribucionDiscreta = new PoissonDistribution(); DistribucionDiscreta.Fit(eventos); lambda = ((PoissonDistribution)DistribucionDiscreta).Lambda.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionDiscreta.StandardDeviation, DistribucionDiscreta.Mean, DistribucionDiscreta.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionUniforme(double[] eventos) : base(eventos) { try { DistribucionContinua = new UniformContinuousDistribution(); DistribucionContinua.Fit(eventos); A = ((UniformContinuousDistribution)DistribucionContinua).Minimum.ToString("0.0000"); B = ((UniformContinuousDistribution)DistribucionContinua).Maximum.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionNormal(double[] eventos) : base(eventos) { try { DistribucionContinua = new NormalDistribution(); DistribucionContinua.Fit(eventos); media = ((NormalDistribution)DistribucionContinua).Mean.ToString("0.0000"); sigma = ((NormalDistribution)DistribucionContinua).StandardDeviation.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionBinomial(double[] eventos) : base(eventos) { try { DistribucionDiscreta = new BinomialDistribution(); DistribucionDiscreta.Fit(eventos); n = ((BinomialDistribution)DistribucionDiscreta).NumberOfTrials.ToString("0.0000"); p = ((BinomialDistribution)DistribucionDiscreta).ProbabilityOfSuccess.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionDiscreta.StandardDeviation, DistribucionDiscreta.Mean, DistribucionDiscreta.Variance, this); } catch (Exception) { Resultado = null; } }
public FuncionLogistica(double[] eventos) : base(eventos) { try { double media = eventos.Average(); int n = eventos.Count(); double sigma = eventos.Sum(x => Math.Pow(x - media, 2)) / n; DistribucionContinua = new LogisticDistribution(media, sigma); this.MU = ((LogisticDistribution)DistribucionContinua).Location.ToString("0.0000"); this.S = ((LogisticDistribution)DistribucionContinua).Scale.ToString("0.0000"); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
private void SetupPantallaSegunFDP(object boton, string nombreFuncion, ResultadoAjuste funcion) { BotonSeleccionado((Control)boton); CambiarLblGraficoFuncion(nombreFuncion); CambiarRepresentacionFuncionEInversa(funcion); GraficarLineaFDP(funcion.FDP); GraficarLineaInversa(funcion.FDP); resultadoSeleccionado = funcion; lbxGenerados.Items.Clear(); if (nombreFuncion.Contains("Poisson") || nombreFuncion.Contains("Binomial")) { lblGraficoFuncionInversa.Text = "Función Acumulada"; } else { lblGraficoFuncionInversa.Text = "Función Inversa"; } }
public FuncionLogLogistica(double[] eventos) : base(eventos) { try { double[] eventosOrdenados = eventos.OrderBy(x => x).ToArray(); double alfa = eventos.Count() % 2 == 0 ? (eventosOrdenados.ElementAt(eventos.Count() / 2) + eventosOrdenados.ElementAt((eventos.Count() / 2) + 1)) / 2 : eventos.OrderBy(x => x).ElementAt((eventos.Count() / 2) + 1); this.A = alfa.ToString("0.0000"); double media = eventos.Average(); int n = eventos.Count(); double sigma = eventos.Sum(x => Math.Pow(x - media, 2)) / n; double k = Math.Sqrt(Math.Pow(sigma, 2) / (Math.Pow(sigma, 2) + Math.Pow(media, 2))); Func <double, double> function = x => Math.Sqrt(1 - (x / Math.Tan(x))) - k; BrentSearch search = new BrentSearch(function, (Math.PI / 2) * k, Math.Sqrt(3) * k); search.FindRoot(); double beta = Math.PI / search.Solution; this.B = beta.ToString("0.0000"); DistribucionContinua = new LogLogisticDistribution(alfa, beta); Resultado = new ResultadoAjuste(StringFDP, StringInversa, DistribucionContinua.StandardDeviation, DistribucionContinua.Mean, DistribucionContinua.Variance, this); } catch (Exception) { Resultado = null; } }
private void CambiarRepresentacionFuncionEInversa(ResultadoAjuste fdp) { lblFuncion.Text = fdp.Funcion; lblFuncionInversa.Text = fdp.Inversa; }
private void CalcularYOrdenarFunciones() { try { double[] arrEventos = eventosParaAjuste.ToArray(); resultadoFuncionWeibull0_5 = FactoryFuncionDensidad.Instancia(FuncionDensidad.WEIBULL05, arrEventos).Resultado; if (resultadoFuncionWeibull0_5 != null) { lResultadosOrdenados.Add(FuncionDensidad.WEIBULL05, resultadoFuncionWeibull0_5); } resultadoFuncionBinomial = FactoryFuncionDensidad.Instancia(FuncionDensidad.BINOMIAL, arrEventos).Resultado; if (resultadoFuncionBinomial != null) { lResultadosOrdenados.Add(FuncionDensidad.BINOMIAL, resultadoFuncionBinomial); } resultadoFuncionExponencial = FactoryFuncionDensidad.Instancia(FuncionDensidad.EXPONENCIAL, arrEventos).Resultado; if (resultadoFuncionExponencial != null) { lResultadosOrdenados.Add(FuncionDensidad.EXPONENCIAL, resultadoFuncionExponencial); } resultadoFuncionLogistica = FactoryFuncionDensidad.Instancia(FuncionDensidad.LOGISTICA, arrEventos).Resultado; if (resultadoFuncionLogistica != null) { lResultadosOrdenados.Add(FuncionDensidad.LOGISTICA, resultadoFuncionLogistica); } resultadoFuncionLogNormal = FactoryFuncionDensidad.Instancia(FuncionDensidad.LOG_NORMAL, arrEventos).Resultado; if (resultadoFuncionLogNormal != null) { lResultadosOrdenados.Add(FuncionDensidad.LOG_NORMAL, resultadoFuncionLogNormal); } resultadoFuncionLogLogistica = FactoryFuncionDensidad.Instancia(FuncionDensidad.LOG_LOGISTICA, arrEventos).Resultado; if (resultadoFuncionLogLogistica != null) { lResultadosOrdenados.Add(FuncionDensidad.LOG_LOGISTICA, resultadoFuncionLogLogistica); } resultadoFuncionNormal = FactoryFuncionDensidad.Instancia(FuncionDensidad.NORMAL, arrEventos).Resultado; if (resultadoFuncionNormal != null) { lResultadosOrdenados.Add(FuncionDensidad.NORMAL, resultadoFuncionNormal); } resultadoFuncionWeibull1_5 = FactoryFuncionDensidad.Instancia(FuncionDensidad.WEIBULL15, arrEventos).Resultado; if (resultadoFuncionWeibull1_5 != null) { lResultadosOrdenados.Add(FuncionDensidad.WEIBULL15, resultadoFuncionWeibull1_5); } resultadoFuncionWeibull3 = FactoryFuncionDensidad.Instancia(FuncionDensidad.WEIBULL3, arrEventos).Resultado; if (resultadoFuncionWeibull3 != null) { lResultadosOrdenados.Add(FuncionDensidad.WEIBULL3, resultadoFuncionWeibull3); } resultadoFuncionPoisson = FactoryFuncionDensidad.Instancia(FuncionDensidad.POISSON, arrEventos).Resultado; if (resultadoFuncionPoisson != null) { lResultadosOrdenados.Add(FuncionDensidad.POISSON, resultadoFuncionPoisson); } resultadoFuncionUniforme = FactoryFuncionDensidad.Instancia(FuncionDensidad.UNIFORME, arrEventos).Resultado; if (resultadoFuncionUniforme != null) { lResultadosOrdenados.Add(FuncionDensidad.UNIFORME, resultadoFuncionUniforme); } resultadoFuncionWeibull5 = FactoryFuncionDensidad.Instancia(FuncionDensidad.WEIBULL5, arrEventos).Resultado; if (resultadoFuncionWeibull5 != null) { lResultadosOrdenados.Add(FuncionDensidad.WEIBULL5, resultadoFuncionWeibull5); } lResultadosOrdenados = lResultadosOrdenados.OrderBy(x => x.Value.FDP.CalcularDesvio(eventosSimplificados)).ToDictionary(x => x.Key, y => y.Value); } catch { mostrarMensaje("Error al calcular y ordenar las funciones", Color.FromArgb(255, 89, 89)); } }