private void button1_Click(object sender, EventArgs e) { var prueba = new ParametrosEcuaciones { NumIncognitas = int.Parse(textBox_NumIncognitas.Text) }; var coef = new List <double>(); //coef.Add(5); coef.Add(2); coef.Add(0); coef.Add(2); //coef.Add(2); coef.Add(1); coef.Add(-1); coef.Add(0); //coef.Add(2); coef.Add(3); coef.Add(-1); coef.Add(3); //recorre filas var cont = 0; foreach (DataGridViewRow row in dataGridView1.Rows) { cont++; //recorre las celdas de la columnas if (cont <= int.Parse(textBox_NumIncognitas.Text)) { foreach (DataGridViewCell cel in row.Cells) { coef.Add(Convert.ToDouble(cel.Value)); } } } prueba.Coeficientes = coef; var resul = metodosSistemaEcuaciones.GaussJordan(prueba); foreach (var item in resul.Resultados) { dataGridView2.Rows.Add(item); } }
private void button_Calcular_Click(object sender, EventArgs e) { var prueba = new ParametrosEcuaciones { NumIncognitas = int.Parse(textBox_Numincorgnitas.Text), Tolerancia = double.Parse(textBox_Tolerancia.Text) }; var coef = new List <double>(); //recorre filas var cont = 0; foreach (DataGridViewRow row in dataGridView1.Rows) { cont++; //recorre las celdas de la columnas if (cont <= int.Parse(textBox_Numincorgnitas.Text)) { foreach (DataGridViewCell cel in row.Cells) { coef.Add(Convert.ToDouble(cel.Value)); } } } prueba.Coeficientes = coef; var resul = metodosSistemaEcuaciones.GaussSeidel(prueba); foreach (var item in resul.Resultados) { dataGridView2.Rows.Add(item).ToString("N6"); } }
//GAUSS-JORDAN public ResultadoEcuaciones ResolverEcuacionGaussJordan(ParametrosEcuaciones parametros) { this.ListaOriginal = parametros.ValoresIniciales; for (int i = 0; i <= parametros.ValoresIniciales.Count - 1; i++) { this.Contador += 1; this.Ordenar(); this.Normalizar(); this.Bloque(i); } return(AveriguarIncognitas()); }
public void Ejercicio5() { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); List <decimal> Ecuacion1 = new List <decimal>() { 0M, 1M, -1M, 0M, 4M, 0M }; List <decimal> Ecuacion2 = new List <decimal>() { 1M, 1M, 5M, 0M, 0M, 0M }; List <decimal> Ecuacion3 = new List <decimal>() { 2M, -0.5M, 0M, -1M, 0M, 20M }; List <decimal> Ecuacion4 = new List <decimal>() { 0M, -1M, 0.25M, -0.2M, -0.2M, 17M }; List <decimal> Ecuacion5 = new List <decimal>() { 0.5M, 0M, 0.25M, -1M, 0M, 0M }; List <List <decimal> > Sistema = new List <List <decimal> >() { Ecuacion1, Ecuacion2, Ecuacion3, Ecuacion4, Ecuacion5 }; parametros.ValoresIniciales = Sistema; MetodosEcuaciones metodos = new MetodosEcuaciones(); List <decimal> solucion = new List <decimal>(metodos.ResolverEcuacionGaussJordan(parametros).ResultadosEcuaciones); List <decimal> resultados = new List <decimal>() { 7.5753M, -18.3518M, 2.1553M, 4.3265M, 5.1268M }; for (int i = 0; i <= resultados.Count - 1; i++) { Assert.AreEqual(resultados[i], solucion[i]); } }
public void Ejercicio1Maximos() { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); List <decimal> Ecuacion1 = new List <decimal>() { 0.02M, 0.06M, 0.05M, 0.01M, 24.5M }; List <decimal> Ecuacion2 = new List <decimal>() { 0.05M, 0.02M, 0M, 0M, 12.1M }; List <decimal> Ecuacion3 = new List <decimal>() { 0M, 0.02M, 0.01M, 0.06M, 25M }; List <decimal> Ecuacion4 = new List <decimal>() { 0.04M, 0.03M, 0.02M, 0.03M, 26.1M }; List <List <decimal> > Sistema = new List <List <decimal> >() { Ecuacion1, Ecuacion2, Ecuacion3, Ecuacion4 }; parametros.ValoresIniciales = Sistema; MetodosEcuaciones metodos = new MetodosEcuaciones(); List <decimal> solucion = new List <decimal>(metodos.ResolverEcuacionGaussJordan(parametros).ResultadosEcuaciones); List <decimal> resultados = new List <decimal>() { 210.0000M, 80.0000M, 240.0000M, 350.0000M }; for (int i = 0; i <= resultados.Count - 1; i++) { Assert.AreEqual(resultados[i], solucion[i]); } }
public void Ejercicio4() { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); List <decimal> Ecuacion1 = new List <decimal>() { 1M, 1M, 1M, 1M, 96M }; List <decimal> Ecuacion2 = new List <decimal>() { 0.25M, 0.3333M, 0.5M, 0.5M, 31M }; List <decimal> Ecuacion3 = new List <decimal>() { -1M, -1M, 10M, 0M, 0M, }; List <decimal> Ecuacion4 = new List <decimal>() { -1M, -1M, -1M, 15M, 0M }; List <List <decimal> > Sistema = new List <List <decimal> >() { Ecuacion1, Ecuacion2, Ecuacion3, Ecuacion4 }; parametros.ValoresIniciales = Sistema; MetodosEcuaciones metodos = new MetodosEcuaciones(); List <decimal> solucion = new List <decimal>(metodos.ResolverEcuacionGaussJordan(parametros).ResultadosEcuaciones); List <decimal> resultados = new List <decimal>() { 40.3470M, 41.4711M, 8.1818M, 6 }; for (int i = 0; i <= resultados.Count - 1; i++) { Assert.AreEqual(resultados[i], solucion[i]); } }
public void Ejercicio2() { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); List <decimal> Ecuacion1 = new List <decimal>() { 1M, -6M, 1.5M, -3M }; List <decimal> Ecuacion2 = new List <decimal>() { 2.85M, -16.95M, 4.23M, -8.31M }; List <decimal> Ecuacion3 = new List <decimal>() { -1.3M, 8M, -2.1M, 4.4M }; List <List <decimal> > Sistema = new List <List <decimal> >() { Ecuacion1, Ecuacion2, Ecuacion3 }; parametros.ValoresIniciales = Sistema; MetodosEcuaciones metodos = new MetodosEcuaciones(); List <decimal> solucion = new List <decimal>(metodos.ResolverEcuacionGaussJordan(parametros).ResultadosEcuaciones); List <decimal> resultados = new List <decimal>() { 6.0M, 1.0M, -2M }; for (int i = 0; i <= resultados.Count - 1; i++) { Assert.AreEqual(resultados[i], solucion[i]); } }
public void Ejercicio3() { ParametrosEcuaciones parametros = new ParametrosEcuaciones(); List <decimal> Ecuacion1 = new List <decimal>() { 5M, 1M, -12.01015M, 8M }; List <decimal> Ecuacion2 = new List <decimal>() { -8.301525M, -0.25M, 1.010075M, 20.225M }; List <decimal> Ecuacion3 = new List <decimal>() { 3.751125M, -10.801216M, -3.002028M, 10.75M }; List <List <decimal> > Sistema = new List <List <decimal> >() { Ecuacion1, Ecuacion2, Ecuacion3 }; parametros.ValoresIniciales = Sistema; MetodosEcuaciones metodos = new MetodosEcuaciones(); List <decimal> solucion = new List <decimal>(metodos.ResolverEcuacionGaussJordan(parametros).ResultadosEcuaciones); List <decimal> resultados = new List <decimal>() { -2.6225M, -1.3854M, -1.8732M }; for (int i = 0; i <= resultados.Count - 1; i++) { Assert.AreEqual(resultados[i], solucion[i]); } }
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 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); }
public ResultadoEcuaciones GaussSeidel(ParametrosEcuaciones parametros) { var resultado = new ResultadoEcuaciones(); var listaResultados = new List <double>(); var listaResultadosAnterior = new List <double>(); double tolerancia = parametros.Tolerancia; // Cargo matriz pero no se si es necesario double[,] matriz = new double[parametros.NumIncognitas, parametros.NumIncognitas + 1]; var columna = 0; var fila = 0; foreach (var item in parametros.Coeficientes) { matriz[fila, columna] = item; if (columna < parametros.NumIncognitas) { columna++; } else { fila++; columna = 0; listaResultados.Add(0); } } // for (int i = 0; i < parametros.NumIncognitas; i++) { listaResultadosAnterior.Add(0); } double errorRelativo = 0.1; bool corte = false; while (errorRelativo > tolerancia && !corte) { var cont = 0; foreach (var item in listaResultados) { listaResultadosAnterior[cont] = item; cont++; } // listaResultadosAnterior = listaResultados; for (int f = 0; f < parametros.NumIncognitas; f++) { double valorAcumulado = 0; for (int c = 0; c < parametros.NumIncognitas + 1; c++) { if (c == f) { listaResultados[f] = matriz[f, c]; } else { if (c != parametros.NumIncognitas) { valorAcumulado = listaResultados[c] * matriz[f, c] + valorAcumulado; } else { listaResultados[f] = (matriz[f, c] - valorAcumulado) / listaResultados[f]; } } } } double validacion = 0; int contador = 0; foreach (var item in listaResultados) { validacion = (item - listaResultadosAnterior[contador]) / item; corte = true; contador++; if (validacion > tolerancia) { corte = false; break; } } } resultado.Resultados = listaResultados; return(resultado); }
public ResultadoEcuaciones GaussJordan(ParametrosEcuaciones parametros) { var resultado = new ResultadoEcuaciones(); double[,] matriz = new double[parametros.NumIncognitas, parametros.NumIncognitas + 1]; var columna = 0; var fila = 0; //Cargo la matriz foreach (var item in parametros.Coeficientes) { matriz[fila, columna] = item; if (columna < parametros.NumIncognitas) { columna++; } else { fila++; columna = 0; } } fila = 0; columna = 0; ControlarPivotEsDistintoDe0(matriz, parametros.NumIncognitas); //Si el pivot no es 1 cambia las columna. for (int f = 0; f < parametros.NumIncognitas; f++) { for (int c = 0; c < parametros.NumIncognitas + 1; c++) { if (f == c) { if ((matriz[f, c] != 0) && (f + 1 < parametros.NumIncognitas)) { VerificarSiElPivotEs1(matriz, parametros.NumIncognitas, f, c); //Si el pivot es != de 1 lo hace 1. PrimerBloque(matriz, parametros.NumIncognitas, f + 1, c); //Primer columna los hace todos 0 menos el pivot } else if (parametros.NumIncognitas - 1 > f) { CambiarFilaSiElPivotEs0(matriz, parametros.NumIncognitas + 1, f); //Si el pivot es 0 y es una fila del medio la cambia por una de abajo //ver } else { VerificarSiElPivotEs1(matriz, parametros.NumIncognitas, f, c); //Si el pivot es != de 1 lo hace 1. } } } } for (int f = 0; f < parametros.NumIncognitas; f++) { for (int c = 0; c < parametros.NumIncognitas + 1; c++) { if (c > f && c < parametros.NumIncognitas) { SegundoBloque(matriz, parametros.NumIncognitas, f, c); } } } resultado.Resultados = null; resultado.Resultados = new List <double>(); for (int f = 0; f < parametros.NumIncognitas; f++) { for (int c = 0; c < parametros.NumIncognitas + 1; c++) { if (c == parametros.NumIncognitas) { var x = matriz[f, c]; resultado.Resultados.Add(x); } } } return(resultado); }