예제 #1
0
        private void button_Calcular_Click(object sender, EventArgs e)
        {
            var    paramtros = new ParametrosRegresion();
            double valorX    = Convert.ToDouble(textBox_valX.Text);

            //recorre filas
            var  cont = 0;
            bool uno  = true;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                cont++;
                if (cont <= int.Parse(textBox_cantPares.Text))
                {//recorre las celdas de la columnas
                    foreach (DataGridViewCell cel in row.Cells)
                    {
                        if (uno == true)
                        {
                            paramtros.X.Add(Convert.ToDouble(cel.Value));
                            uno = false;
                        }
                        else
                        {
                            paramtros.Y.Add(Convert.ToDouble(cel.Value));
                            uno = true;
                        }
                    }
                }
            }
            paramtros.NumPares = int.Parse(textBox_cantPares.Text);

            var resul = metodoLagranje.PolinomioLagranje(paramtros, valorX);

            textBox_Interpolacion.Text = resul.Interpolacion.ToString();
        }
예제 #2
0
        public ResultadoLagranje PolinomioLagranje(ParametrosRegresion parametros, double valorX)
        {
            var resultado = new ResultadoLagranje();

            double x     = valorX;
            double sumaY = 0;

            for (int i = 0; i < parametros.X.Count; i++)
            {
                double numerador   = 1;
                double denominador = 1;

                for (int j = 0; j < parametros.X.Count; j++)
                {
                    if (i != j)
                    {
                        numerador   = (x - parametros.X[j]) * numerador;
                        denominador = (parametros.X[i] - parametros.X[j]) * denominador;
                    }
                }

                sumaY = (numerador / denominador) * parametros.Y[i] + sumaY;
            }

            resultado.Interpolacion = sumaY;

            return(resultado);
        }
예제 #3
0
        public ResultadoRegresion MinimosCuadrados(ParametrosRegresion parametros)
        {
            var resultado = new ResultadoRegresion();

            var numeroDePares = parametros.NumPares;

            double sumatoriaX = parametros.X.Sum();
            double sumatoriaY = parametros.Y.Sum();

            double sumatoriaXCuadrado = 0;

            double promedioX = parametros.X.Sum() / parametros.NumPares;
            double promedioY = parametros.Y.Sum() / parametros.NumPares;

            foreach (var item in parametros.X)
            {
                sumatoriaXCuadrado = (sumatoriaXCuadrado + (item * item));
            }

            double sumatoriaXporY = 0;

            for (int i = 0; i < numeroDePares; i++)
            {
                sumatoriaXporY = sumatoriaXporY + (parametros.X[i] * parametros.Y[i]);
            }

            double deltaA1 = (numeroDePares * sumatoriaXporY) - (sumatoriaX * sumatoriaY);

            double delta = (numeroDePares * sumatoriaXCuadrado) - (sumatoriaX * sumatoriaX);

            resultado.Pendiente      = deltaA1 / delta;
            resultado.OrdenadaOrigen = promedioY - (resultado.Pendiente * promedioX);

            return(resultado);
        }
예제 #4
0
        private void button_Calcular_Click(object sender, EventArgs e)
        {
            var paramtros = new ParametrosRegresion();

            //recorre filas
            var  cont = 0;
            bool uno  = true;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                cont++;
                if (cont <= int.Parse(textBox_cantPares.Text))
                {//recorre las celdas de la columnas
                    foreach (DataGridViewCell cel in row.Cells)
                    {
                        if (uno == true)
                        {
                            paramtros.X.Add(Convert.ToDouble(cel.Value));
                            uno = false;
                        }
                        else
                        {
                            paramtros.Y.Add(Convert.ToDouble(cel.Value));
                            uno = true;
                        }
                    }
                }
            }
            paramtros.NumPares = int.Parse(textBox_cantPares.Text);

            var resul = metodosRegresion.MinimosCuadrados(paramtros);

            textBox_Recta.Text = string.Format("  " + resul.Pendiente.ToString("N2") + "x + " + resul.OrdenadaOrigen.ToString("N2"));
        }
예제 #5
0
        private void button_Calcular_Click(object sender, EventArgs e)
        {
            var paramtros = new ParametrosRegresion();

            paramtros.Error = int.Parse(textBox_Error.Text);

            //recorre filas
            var  cont = 0;
            bool uno  = true;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                cont++;
                if (cont <= int.Parse(textBox_CantidadPares.Text))
                {//recorre las celdas de la columnas
                    foreach (DataGridViewCell cel in row.Cells)
                    {
                        if (uno == true)
                        {
                            paramtros.X.Add(Convert.ToDouble(cel.Value));
                            uno = false;
                        }
                        else
                        {
                            paramtros.Y.Add(Convert.ToDouble(cel.Value));
                            uno = true;
                        }
                    }
                }
            }
            paramtros.NumPares = int.Parse(textBox_CantidadPares.Text);
            paramtros.Grado    = int.Parse(textBox_Grado.Text);

            var m = metodosRegresion.MinimosCuadradosPolinomioGradoN(paramtros);


            foreach (var item in m.Resul)
            {
                dataGridView2.Rows.Add(item);
            }

            textBoxEfectividad.Text = m.Efectividad.ToString("N2");

            textBox_Gradfinal.Text = m.GradoFinal.ToString();
        }
예제 #6
0
        public ResultadoRegresion MinimosCuadradosPolinomioGradoN(ParametrosRegresion parametros)
        {
            var resul = new ResultadoRegresion();

            double sumatoriaX = parametros.X.Sum();
            double sumatoriaY = parametros.Y.Sum();
            double r          = 0;

            while (parametros.Grado <= 10 && r <= parametros.Error)
            {
                double[,] matriz = new double[parametros.Grado + 1, parametros.Grado + 2];

                resul = null;
                resul = new ResultadoRegresion();

                var pot = 0;
                for (int columna = 0; columna < parametros.Grado + 1; columna++)
                {
                    if (columna > 0)
                    {
                        pot = columna;
                        for (int i = 0; i < parametros.Grado + 1; i++)
                        {
                            matriz[i, columna] = RetornarSumXpotencia(parametros.X, pot);
                            pot++;
                        }
                    }
                    else if (columna == 0)
                    {
                        pot          = 1;
                        matriz[0, 0] = parametros.NumPares;
                        for (int i = 1; i < parametros.Grado + 1; i++)
                        {
                            matriz[i, columna] = RetornarSumXpotencia(parametros.X, pot);
                            pot++;
                        }
                    }
                }

                for (int i = 0; i < parametros.Grado + 1; i++)
                {
                    if (i != 0)
                    {
                        pot = 1;
                        matriz[i, parametros.Grado + 1] = RetornarXPorY(i, parametros.X, parametros.Y);
                        pot++;
                    }
                    else
                    {
                        matriz[i, parametros.Grado + 1] = parametros.Y.Sum();
                    }
                }

                //var SistemaDeEcucuaciones = new SistemaDeEcuaciones();

                var param = new ParametrosEcuaciones();
                param.NumIncognitas = parametros.Grado + 1;

                for (int i = 0; i < parametros.Grado + 1; i++)
                {
                    for (int c = 0; c < parametros.Grado + 2; c++)
                    {
                        param.Coeficientes.Add(matriz[i, c]);
                    }
                }



                var resultadoGauss = metodosSistemaEcuaciones.GaussJordan(param);

                r = CalcularR(parametros.X, parametros.Y, resultadoGauss.Resultados);

                parametros.Grado++;

                resul.Efectividad = r;
                resul.Resul       = resultadoGauss.Resultados;
                resul.GradoFinal  = parametros.Grado - 1;
            }

            return(resul);
        }