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