Пример #1
0
        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);
            }
        }
Пример #2
0
        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());
        }
Пример #4
0
        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]);
            }
        }
Пример #5
0
        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]);
            }
        }
Пример #6
0
        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]);
            }
        }
Пример #7
0
        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]);
            }
        }
Пример #8
0
        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;
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }