private void btnCalcular_Click(object sender, EventArgs e) { if (comboMetodo.Text == "GAUSS-SEIDEL" && !(txtboxIteraciones.Text != "" && txtboxTolerancia.Text != "")) { MessageBox.Show("No se colocaron correctamente los parametros", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.btnCalcular.Enabled = false; List <List <decimal> > Sistema = new List <List <decimal> >(); List <decimal> Ecuacion = new List <decimal>(); Sistema = new List <List <decimal> >(); int ecuaciones = Convert.ToInt32(txtboxNumeroEcuaciones.Text); int incognitas = Convert.ToInt32(txtboxNumeroIncognitas.Text); for (int i = 0; i <= ecuaciones - 1; i++) { Ecuacion = new List <decimal>(); for (int z = 0; z <= incognitas; z++) { Ecuacion.Add(Convert.ToDecimal(Grilla.Rows[i].Cells[z].Value)); } Sistema.Add(Ecuacion); } ResultadoEcuaciones resultado = new ResultadoEcuaciones(); if (comboMetodo.Text == "GAUSS-JORDAN") { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); parametros.ValoresIniciales = Sistema; resultado = MetodosEcuaciones.ResolverEcuacionGaussJordan(parametros); } else { ParametrosGaussSeidel parametros = new ParametrosGaussSeidel(); parametros.ValoresIniciales = Sistema; parametros.Iteraciones = Convert.ToInt32(txtboxIteraciones.Text); parametros.Tolerancia = Convert.ToDecimal(txtboxTolerancia.Text); resultado = MetodosEcuaciones.ResolverEcuacionGaussSeidel(parametros); } switch (resultado.TipoResultado) { case TipoResultado.Ecuacion: this.Resultado.Visible = true; this.Resultado.Height = 40; this.Resultado.Text = "SE ENCONTRARON LOS VALORES DE LAS INCOGNITAS CORRECTAMENTE"; this.DibujarGrillaResultado(incognitas, resultado.ResultadosEcuaciones); break; case TipoResultado.NoDD: this.Resultado.Visible = true; this.Resultado.Height = 80; this.Resultado.Text = "EL SISTEMA INGRESADO NO ES DIAGONALMENTE DOMINANTE. INGRESE NUEVAMENTE"; break; case TipoResultado.DD: this.Resultado.Visible = true; this.Resultado.Height = 100; this.Resultado.Text = "EL SISTEMA INGRESADO NO ES DIAGONALMENTE DOMINANTE. SE REACOMODARON LAS FILAS Y SE ENCONTRARON LOS VALORES DE LAS INCOGNITAS."; this.DibujarGrillaResultado(incognitas, resultado.ResultadosEcuaciones); break; default: break; } }
public ResultadoMinimosCuadrados ResolverCurvaPolinomial(ParametrosMinimosCuadrados parametros) { this.InicializarSistemaGrado10(); List <List <decimal> > SistemaResolver = this.AveriguarMatrizGrado(parametros); ResultadoEcuaciones Incognitas = MetodoEcuaciones.ResolverEcuacionGaussJordan(new ParametrosEcuaciones { ValoresIniciales = SistemaResolver }); List <int> ListaIndices = new List <int>(); for (int i = 0; i <= parametros.Grado; i++) { ListaIndices.Add(i); } string Recta = "Y = "; decimal ValorY = 0; for (int i = parametros.Grado; i >= 0; i--) { Recta += "(" + (Convert.ToString(Math.Round(Incognitas.ResultadosEcuaciones[i], 4))) + "x^(" + ListaIndices[i] + "))"; ValorY += (Incognitas.ResultadosEcuaciones[i] * Convert.ToDecimal(Math.Pow(Convert.ToDouble(parametros.ValorX), (Convert.ToDouble(ListaIndices[i]))))); if (i != 0) { Recta += "+"; } } decimal Sr = 0; for (int i = 0; i <= parametros.ValoresX.Count - 1; i++) { decimal Error = 0; int grado = parametros.Grado; for (int j = Incognitas.ResultadosEcuaciones.Count - 1; j >= 0; j--) { Error += Incognitas.ResultadosEcuaciones[j] * (Convert.ToDecimal(Math.Pow(Convert.ToDouble(parametros.ValoresX[i]), grado))); grado -= 1; } Error -= parametros.ValoresY[i]; Sr += Convert.ToDecimal(Math.Pow(Convert.ToDouble(Error), 2)); } decimal St = 0; decimal yPrima = parametros.ValoresY.Average(); foreach (var y in parametros.ValoresY) { St += Convert.ToDecimal(Math.Pow(Convert.ToDouble((y - yPrima)), parametros.Grado)); } decimal CoeficienteCorrelacion = Convert.ToDecimal(Math.Sqrt(Math.Abs((Convert.ToDouble(St) - Convert.ToDouble(Sr))) / Convert.ToDouble(St))); decimal Porcentaje = CoeficienteCorrelacion * 100; ResultadoMinimosCuadrados resultado = new ResultadoMinimosCuadrados(); resultado.RectaMejorAjuste = Recta; resultado.Imagen = ValorY; if (Porcentaje >= 80) { resultado.Ajuste = "ACEPTABLE"; } else { resultado.Ajuste = "NO ACEPTABLE"; } resultado.CoeficientedeCorrelacion = Math.Round(Porcentaje, 4); return(resultado); }