private void richTextBox_Lote_Datos_Y_KeyPress(object sender, KeyPressEventArgs e) { Validar.SoloParentesisComasNumeros(e); }
private void Button_HallarPolinomio_Click(object sender, EventArgs e) { richTextBox_Pasos_Calculo.Text = ""; string X = richTextBox_Lote_Datos_X.Text; string Y = richTextBox_Lote_Datos_Y.Text; //validacion de datos antes de hallar polinomio string[] listaDeValoresX = X.Split(','); string[] listaDeValoresY = Y.Split(','); //Validar Formato datos X e Y if (!Validar.SoloFormatoDatos(X, "X") || !Validar.SoloFormatoDatos(Y, "Y")) { } else if (listaDeValoresX.Length != listaDeValoresY.Length) { //Validar misma cantidad de numeros entre X e Y MessageBox.Show("No hay la misma cantidad de valores entre X y f(x)"); } else if (radioButton_Lagrange.Checked.Equals(true)) //Comprobar Tipo de resolucion a hallar { //Lagrange //carga de datos vector vX y vY int cantidadValoresXeY = X.Split(',').Length; double[] vX = new double[cantidadValoresXeY]; double[] vY = new double[cantidadValoresXeY]; vXAnt = vX; richTextBox_Pasos_Calculo.Text = CargarVectoresXeY(X, Y, vX, vY) + "\n"; VerfificaEquidistancia(vX); //carga de vector vL string[] vPL = new string[cantidadValoresXeY]; double[] vL = new double[cantidadValoresXeY]; polinomio = ""; /*Matriz de polinomios en modo de vectores de los coeficientes * Por Ej: * { * { {1/2} , {-2,1}, {-5,1} }, * { {5/6} , {-1,1}, {-5,1} }, * { {-8/3}, {-1,1}, {-2,1} } * } * Donde {-2,1} significa (x-2), {-5,1} significa (x-5), {1/2} significa simplemente 1/2 o 0.5, etcétera. * Es decir que en el ejemplo estaría representando el polinomio: * P(x) = 1/2*(x-2)*(x-5) + 5/6*(x-1)*(x-5) - 8/3*(x-1)*(x-2) */ double[][][] polinomioFactorizado = new double[cantidadValoresXeY][][]; for (int i = 0; i < cantidadValoresXeY; i++) { polinomioFactorizado[i] = new double[vX.Length][]; int yi_Sobre_LiXi_index = 0; double yi_Sobre_LiXi = 1.0; vPL[i] = ""; for (int j = 0; j < cantidadValoresXeY; j++) { if (j != i) { polinomioFactorizado[i][j] = new double[] { -vX[j], 1 }; yi_Sobre_LiXi = yi_Sobre_LiXi * (polinomioFactorizado[i][j][0] + polinomioFactorizado[i][j][1] * vX[i]); if (vPL[i] == "") { vPL[i] += "(x-" + vX[j].ToString() + ")"; } else { vPL[i] += "*(x-" + vX[j].ToString() + ")"; } vL[i] = vL[i] * (vX[i] - vX[j]); } else { yi_Sobre_LiXi_index = j; } } polinomioFactorizado[i][yi_Sobre_LiXi_index] = new double[] { (double)vY[i] / yi_Sobre_LiXi, 0 }; richTextBox_Pasos_Calculo.Text += "L" + i + "(x) = " + vPL[i] + " "; richTextBox_Pasos_Calculo.Text += "L" + i + "(" + vX[i] + ") = " + CalcularExpresion(vPL[i], vX[i], false); richTextBox_Pasos_Calculo.Text += "\n\n"; if (CalcularExpresion(vPL[i], vX[i], false) == 0) { } else if (polinomio == "") { polinomio += " (" + vY[i] + "/" + CalcularExpresion(vPL[i], vX[i], false) + ")*" + vPL[i]; } else { polinomio += " + (" + vY[i] + "/" + CalcularExpresion(vPL[i], vX[i], false) + ")*" + vPL[i]; } } //Validacion de si hay polinomiodistinto if (richTextBox_PolinomioPdeX.Text != "L(x) = " + polinomio) { richTextBoxPolinomioDistinto.Text = "SI"; } else { richTextBoxPolinomioDistinto.Text = "NO"; } //Comparamos polinomio anterior con el nuevo String polinomioAnterior = richTextBox_PolinomioPdeX.Text.Replace("P(x) = ", "").Replace("L(x) = ", ""); richTextBoxPolinomioDistinto.Text = SeAlteroPolinomio(polinomioAnterior, polinomio, vXAnt, vX); richTextBox_PolinomioPdeX.Text = "L(x) = "; richTextBox_PolinomioPdeX.Text += polinomio.Replace("+-", "-"); //Preguntar como sacar grado de polinomio de lagrange //richTextBoxGdeX.Text += "G(L(x)) = "; //richTextBoxGdeX.Text += G_de_Px.ToString(); int grado = CalcularGradoLagrange(polinomioFactorizado); richTextBoxGdeX.Text = grado.ToString(); } else if (radioButton_NG_Progresivo.Checked.Equals(true)) { //NG_progresivo //carga de datos vector vX y vY int cantidadValoresXeY = X.Split(',').Length; double[] vX = new double[cantidadValoresXeY]; double[] vY = new double[cantidadValoresXeY]; richTextBox_Pasos_Calculo.Text = CargarVectoresXeY(X, Y, vX, vY); VerfificaEquidistancia(vX); //carga de vector vO metodo general son los o1 o2 o3 etc //se crea y se genere tabla de vectores con su tamaño correspondiente a cada uno double[][] vO = new double[cantidadValoresXeY - 1][]; for (int i = 0; i < cantidadValoresXeY - 1; i++) { vO[i] = new double[cantidadValoresXeY - 1 - i]; for (int j = 0; j < vO[i].Length; j++) { if (i == 0) { if ((vX[j + 1] - vX[j]) != 0) { vO[i][j] = (vY[j + 1] - vY[j]) / (vX[j + 1] - vX[j]); } else { MessageBox.Show("vO[" + i + "][" + j + "] Es = 0 ya que divicion por 0"); vO[i][j] = 0; } } else { if ((vX[j + (vX.Length - vO[i].Length)] - vX[j]) != 0) { vO[i][j] = (vO[i - 1][j + 1] - vO[i - 1][j]) / (vX[j + (vX.Length - vO[i].Length)] - vX[j]); } else { MessageBox.Show("vO[" + i + "][" + j + "] Es = 0 ya que divicion por 0"); vO[i][j] = 0; } } } } string polinomio = ""; polinomio += vY[0].ToString(); for (int i = 0; i < vO.Length; i++) { if (vO[i][0] != 0) { polinomio += "+" + vO[i][0].ToString(); for (int x = 0; x <= i; x++) { polinomio += "*(x-" + vX[x].ToString() + ")"; } } } //mostrar vectores O richTextBox_Pasos_Calculo.Text += "\n Vectores O: "; for (int i = 0; i < vO.Length; i++) { richTextBox_Pasos_Calculo.Text += "\n | o" + i.ToString() + " | "; for (int j = 0; j < vO[i].Length; j++) { richTextBox_Pasos_Calculo.Text += vO[i][j].ToString() + " | "; } } //Comparamos polinomio anterior con el nuevo String polinomioAnterior = richTextBox_PolinomioPdeX.Text.Replace("P(x) = ", "").Replace("L(x) = ", ""); richTextBoxPolinomioDistinto.Text = SeAlteroPolinomio(polinomioAnterior, polinomio, vXAnt, vX); //Validacion de si hay polinomiodistinto richTextBox_PolinomioPdeX.Text = "P(x) = "; richTextBox_PolinomioPdeX.Text += polinomio.Replace("+-", "-"); //Calculo e impresion de grado de polinomio int G_de_Px = 0; for (int i = 0; i < vO.Length; i++) { double sumadorColumna = 0; for (int j = 0; j < vO[i].Length; j++) { sumadorColumna += vO[i][j]; } if (sumadorColumna == 0) { i = vO.Length; } else { G_de_Px++; } } richTextBoxGdeX.Text = "G(P(x)) = "; richTextBoxGdeX.Text += G_de_Px.ToString(); } else if (radioButton_NG_Regresivo.Checked.Equals(true)) { //NG_Regresivo //carga de datos vector vX y vY int cantidadValoresXeY = X.Split(',').Length; double[] vX = new double[cantidadValoresXeY]; double[] vY = new double[cantidadValoresXeY]; richTextBox_Pasos_Calculo.Text = CargarVectoresXeY(X, Y, vX, vY); VerfificaEquidistancia(vX); //carga de vector vO metodo general son los o1 o2 o3 etc //se crea y se genere tabla de vectores con su tamaño correspondiente a cada uno double[][] vO = new double[cantidadValoresXeY - 1][]; for (int i = 0; i < cantidadValoresXeY - 1; i++) { vO[i] = new double[cantidadValoresXeY - 1 - i]; for (int j = 0; j < vO[i].Length; j++) { if (i == 0) { if ((vX[j + 1] - vX[j]) != 0) { vO[i][j] = (vY[j + 1] - vY[j]) / (vX[j + 1] - vX[j]); } else { MessageBox.Show("vO[" + i + "][" + j + "] Es = 0 ya que divicion por 0"); vO[i][j] = 0; } } else { if ((vX[j + (vX.Length - vO[i].Length)] - vX[j]) != 0) { vO[i][j] = (vO[i - 1][j + 1] - vO[i - 1][j]) / (vX[j + (vX.Length - vO[i].Length)] - vX[j]); } else { MessageBox.Show("vO[" + i + "][" + j + "] Es = 0 ya que divicion por 0"); vO[i][j] = 0; } } } } string polinomio = ""; polinomio += vY[vY.Length - 1].ToString(); for (int i = 0; i < vO.Length; i++) { if (vO[i][vO[i].Length - 1] != 0) { polinomio += "+" + vO[i][vO[i].Length - 1].ToString(); for (int x = 0; x <= i; x++) { polinomio += "*(x-" + vX[vX.Length - 1 - x].ToString() + ")"; } } } //mostrar vectores O richTextBox_Pasos_Calculo.Text += "\n Vectores O: "; for (int i = 0; i < vO.Length; i++) { richTextBox_Pasos_Calculo.Text += "\n | o" + i.ToString() + " | "; for (int j = 0; j < vO[i].Length; j++) { richTextBox_Pasos_Calculo.Text += vO[i][j].ToString() + " | "; } } //Comparamos polinomio anterior con el nuevo String polinomioAnterior = richTextBox_PolinomioPdeX.Text.Replace("P(x) = ", "").Replace("L(x) = ", ""); richTextBoxPolinomioDistinto.Text = SeAlteroPolinomio(polinomioAnterior, polinomio, vXAnt, vX); richTextBox_PolinomioPdeX.Text = "P(x) = "; richTextBox_PolinomioPdeX.Text += polinomio.Replace("+-", "-"); //Calculo e impresion de grado de polinomio int G_de_Px = 0; for (int i = 0; i < vO.Length; i++) { double sumadorColumna = 0; for (int j = 0; j < vO[i].Length; j++) { sumadorColumna += vO[i][j]; } if (sumadorColumna == 0) { i = vO.Length; } else { G_de_Px++; } } richTextBoxGdeX.Text = "G(P(x)) = "; richTextBoxGdeX.Text += G_de_Px.ToString(); } else { MessageBox.Show("No selecciono metodo de resolucion"); } }
private void TextBox_Valor_K_KeyPress(object sender, KeyPressEventArgs e) { Validar.SoloNumeros(e); }