Esempio n. 1
0
        private void Procesar_Click(object sender, EventArgs e)
        {
            if (dgvPuntos.Rows.Count < 2)
            {
                MessageBox.Show("Debe ingresar valores para procesar", "Coordenadas vacías", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            BloquearControles();

            //DEBEN ESTAR ORDENADOS LOS PUNTOS, SEGUN LAS Xi, PARA PODER SABER SI SON EQUIESPACIADAS
            dgvPuntos.Sort(dgvPuntos.Columns[0], ListSortDirection.Ascending);

            _valores = new List <KeyValuePair <double, double> >();
            foreach (DataGridViewRow row in dgvPuntos.Rows)
            {
                _valores.Add(
                    new KeyValuePair <double, double>(
                        double.Parse(row.Cells["X"].Value.ToString()),
                        double.Parse(row.Cells["Y"].Value.ToString())
                        ));
            }

            if (opLagrange.Checked)
            {
                _lagrange         = new Lagrange(_valores);
                txtPolinomio.Text = _lagrange.ObtenerPx();
            }
            else if (opNGProgre.Checked || opNGRegresiva.Checked)
            {
                _ng = new Ng(_valores);
                txtPolinomio.Text = _ng.ObtenerPx(opNGProgre.Checked, opNGRegresiva.Checked);
            }
        }
Esempio n. 2
0
        private void btCalcular_Click(object sender, EventArgs e)
        {
            // Validaciones
            if (Global.puntos.Count == 0)
            {
                MessageBox.Show("No se ingresaron datos");
            }
            else if (Global.polinomio.Count > 0 &&
                     !Global.puntos.SequenceEqual(Global.ultimosPuntosUtilizadosParaCalcularPolinomio) && // Hubo cambios en los puntos
                     Util.AlteracionValoresInicialesNoModificaPolinomio(Global.polinomio, Global.puntos))
            {
                MessageBox.Show("La alteracion en los valores iniciales no modifica al polinomio ya generado");
            }
            else if (cbTipoPol.SelectedItem == null)
            {
                MessageBox.Show("Debe seleccionar un tipo de polinomio");
            }
            else if (tbValorK.Text == "")
            {
                MessageBox.Show("Debe ingresar un valor para K");
            }
            else
            {
                // Limpiar Valores
                tbPolinomio.Text  = "";
                tbPolinomioK.Text = "";
                Global.polinomio.Clear();
                Global.pasos.Clear();
                Global.valorPol = 0;

                //Inicializacion
                double k = Convert.ToDouble(tbValorK.Text.Replace(".", ","));
                String polString;

                // Habilitar cuadro para mostrar pasos
                if (chMostrarPasos.Checked)
                {
                    lblPasos.Visible = true;
                    tbPasos.Visible  = true;
                }
                else
                {
                    lblPasos.Visible = false;
                    tbPasos.Visible  = false;
                }

                // Tipo de Polinomio
                Global.tipoPol = cbTipoPol.SelectedIndex;

                switch (Global.tipoPol)
                {
                // Lagrange
                case 0:

                    // Armado del polinomio
                    Lagrange.CalcPolLagrange(Global.puntos, Global.polinomio, Global.pasos);

                    // Mostrar Polinomio Formateado
                    polString        = Util.PolToString(Global.polinomio, "P", "X");
                    tbPolinomio.Text = polString;

                    // Especializar Polinomio
                    Global.valorPol   = Util.EspecializarPol(Global.polinomio, k);
                    tbPolinomioK.Text = Global.valorPol.ToString();

                    // Mostrar pasos
                    tbPasos.Text = string.Join(Environment.NewLine, Global.pasos);

                    break;

                // Newton-Gregory Progresivo
                case 1:
                    List <Double> xs = new List <double>();
                    List <Double> ys = new List <double>();
                    foreach (Global.Punto p in Global.puntos)
                    {
                        xs.Add(p.x);
                        ys.Add(p.y);
                    }
                    int    orden  = Global.puntos.Count() - 1;
                    Newton newton = new Newton(orden, true, xs, ys);
                    newton.CalcElements(ys, orden, 1);

                    // Armado del polinomio
                    newton.CalcPolNewton(Global.polinomio, Global.pasos);

                    // Mostrar Polinomio Formateado
                    polString        = Util.PolToString(Global.polinomio, "P", "x");
                    tbPolinomio.Text = polString;

                    // Especializar Polinomio
                    Global.valorPol   = newton.Interpolate(k);
                    tbPolinomioK.Text = Global.valorPol.ToString();

                    // Mostrar pasos
                    tbPasos.Text = string.Join(Environment.NewLine, Global.pasos);

                    break;

                // Newton-Gregory Regresivo
                case 2:
                    List <Double> x = new List <double>();
                    List <Double> y = new List <double>();
                    foreach (Global.Punto p in Global.puntos)
                    {
                        x.Add(p.x);
                        y.Add(p.y);
                    }
                    int    order = Global.puntos.Count() - 1;
                    Newton newt  = new Newton(order, false, x, y);
                    newt.CalcElements(y, order, 1);

                    // Armado del polinomio
                    newt.CalcPolNewton(Global.polinomio, Global.pasos);

                    // Mostrar Polinomio Formateado
                    polString        = Util.PolToString(Global.polinomio, "P", "x");
                    tbPolinomio.Text = polString;

                    // Especializar Polinomio
                    Global.valorPol   = newt.Interpolate(k);
                    tbPolinomioK.Text = Global.valorPol.ToString();

                    // Mostrar pasos
                    tbPasos.Text = string.Join(Environment.NewLine, Global.pasos);

                    break;
                }

                // Me guardo los puntos utilizados para despues analizar si me agregaron o quitaron puntos
                Global.ultimosPuntosUtilizadosParaCalcularPolinomio = Global.puntos.ToList();
            }
        }