public void ObtenerParametros(ParametrosIntegracionNumerica parametros)
 {
     this.Funcion       = new Function(parametros.Funcion);
     this.xa            = new Argument("x", parametros.ValorExtremo1);
     this.xb            = new Argument("x", parametros.ValorExtremo2);
     this.Nombre        = parametros.Funcion.Split('=')[0].Trim();
     this.Subintervalos = parametros.CantidadSubintervalos;
 }
        public ResultadoIntegracionNumerica ResolverTrapecioSimple(ParametrosIntegracionNumerica parametros)
        {
            this.ObtenerParametros(parametros);

            double Area = (((this.EvaluarFuncion(Nombre, Funcion, xa) + this.EvaluarFuncion(Nombre, Funcion, xb)) * (parametros.ValorExtremo2 - parametros.ValorExtremo1)) / 2);

            ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

            resultado.ValorIntegral = Convert.ToDecimal(Area);

            return(resultado);
        }
        public ResultadoIntegracionNumerica ResolverSimpson13Multiple(ParametrosIntegracionNumerica parametros)
        {
            this.ObtenerParametros(parametros);

            double h         = ((parametros.ValorExtremo2 - parametros.ValorExtremo1) / parametros.CantidadSubintervalos);
            double Simpson38 = 0;


            if (parametros.CantidadSubintervalos % 2 != 0)
            {
                this.Subintervalos = Subintervalos - 3;

                double x0 = parametros.ValorExtremo1;
                for (int i = 1; i <= Subintervalos; i++)
                {
                    x0 += h;
                }

                Simpson38 = this.ResolverSimpson38(parametros, x0);
            }

            double pares     = 0;
            double impares   = 0;
            double intervalo = parametros.ValorExtremo1;

            for (int i = 0; i <= Subintervalos - 1; i++)
            {
                if (i != 0 && i != Subintervalos - 1)
                {
                    if ((i % 2) == 0)
                    {
                        Argument xi = new Argument("x", intervalo);
                        pares += this.EvaluarFuncion(Nombre, Funcion, xi);
                    }
                    else
                    {
                        Argument xi = new Argument("x", intervalo);
                        impares += this.EvaluarFuncion(Nombre, Funcion, xi);
                    }
                }
                intervalo = intervalo + h;
            }

            double Simpson13 = ((h / 3) * (this.EvaluarFuncion(Nombre, Funcion, xa) + 4 * pares + 2 * impares + (this.EvaluarFuncion(Nombre, Funcion, xb))));

            ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

            resultado.ValorIntegral = Convert.ToDecimal(Simpson13 + Convert.ToDouble(Simpson38));
            resultado.Simpson13     = Convert.ToDecimal(Simpson13);
            resultado.Simpson38     = Convert.ToDecimal(Simpson38);

            return(resultado);
        }
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();
            ResultadoIntegracionNumerica  resultado  = new ResultadoIntegracionNumerica();

            switch (comboMetodo.SelectedIndex)
            {
            case 0:     //Trapecio Simple
                parametros.Funcion       = txtboxFuncion.Text;
                parametros.ValorExtremo1 = Convert.ToDouble(txtBoxExtremo1.Text);
                parametros.ValorExtremo2 = Convert.ToDouble(txtBoxExtremo2.Text);
                resultado = integracionnumerica.ResolverTrapecioSimple(parametros);
                break;

            case 1:     //Trapecio Multiple
                parametros.Funcion = txtboxFuncion.Text;
                parametros.CantidadSubintervalos = Convert.ToInt32(txtboxCantidadIntervalos.Text);
                parametros.ValorExtremo1         = Convert.ToDouble(txtBoxExtremo1.Text);
                parametros.ValorExtremo2         = Convert.ToDouble(txtBoxExtremo2.Text);
                resultado = integracionnumerica.ResolverTrapecioMultiple(parametros);
                break;

            case 2:     //Simpson 1/3 simple
                parametros.Funcion       = txtboxFuncion.Text;
                parametros.ValorExtremo1 = Convert.ToDouble(txtBoxExtremo1.Text);
                parametros.ValorExtremo2 = Convert.ToDouble(txtBoxExtremo2.Text);
                resultado = integracionnumerica.ResolverSimpson13Simple(parametros);
                break;

            case 3:     //Simpson 1/3 Multiple
                parametros.Funcion = txtboxFuncion.Text;
                parametros.CantidadSubintervalos = Convert.ToInt32(txtboxCantidadIntervalos.Text);
                parametros.ValorExtremo1         = Convert.ToDouble(txtBoxExtremo1.Text);
                parametros.ValorExtremo2         = Convert.ToDouble(txtBoxExtremo2.Text);
                resultado = integracionnumerica.ResolverSimpson13Multiple(parametros);
                break;
            }

            labelValorIntegral.Visible  = true;
            txtboxValorIntegral.Visible = true;
            txtboxValorIntegral.Text    = Convert.ToString(Math.Abs(Math.Round(resultado.ValorIntegral, 4)));
            if (parametros.CantidadSubintervalos % 2 != 0)
            {
                lblSimpson13.Visible = true;
                txtSimpson13.Visible = true;
                lblSimpson38.Visible = true;
                txtSimpson38.Visible = true;

                txtSimpson13.Text = Convert.ToString(Math.Abs(Math.Round(resultado.Simpson13, 4)));
                txtSimpson38.Text = Convert.ToString(Math.Abs(Math.Round(resultado.Simpson38, 4)));
            }
        }
예제 #5
0
            public void EjercicioAc()
            {
                IntegracionNumerica integracion = new IntegracionNumerica(minimos);

                ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();

                parametros.Funcion       = "f(x)=((1/(x+0.5))+((1/4)*(x^(2))))";
                parametros.ValorExtremo1 = 0;
                parametros.ValorExtremo2 = 3;

                ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

                resultado = integracion.ResolverSimpson13Simple(parametros);

                Assert.AreEqual(Math.Round(resultado.ValorIntegral, 4), 4.3929);
            }
예제 #6
0
            public void EjercicioCc()
            {
                IntegracionNumerica integracion = new IntegracionNumerica(minimos);

                ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();

                parametros.Funcion       = "f(x) = e^(x)*(1-(0.5*x^(2)))";
                parametros.ValorExtremo1 = -1.4142;
                parametros.ValorExtremo2 = 1.4142;

                ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

                resultado = integracion.ResolverSimpson13Simple(parametros);

                Assert.AreEqual(Math.Round(resultado.ValorIntegral, 4), 1.8856);
            }
예제 #7
0
            public void EjercicioBc()
            {
                IntegracionNumerica integracion = new IntegracionNumerica(minimos);

                ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();

                parametros.Funcion       = "f(x) = ln(1+x^(2))";
                parametros.ValorExtremo1 = -2;
                parametros.ValorExtremo2 = 2;

                ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

                resultado = integracion.ResolverSimpson13Simple(parametros);

                Assert.AreEqual(Math.Round(resultado.ValorIntegral, 4), 2.1459);
            }
예제 #8
0
            public void EjercicioAb()
            {
                IntegracionNumerica integracion = new IntegracionNumerica(minimos);

                ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();

                parametros.Funcion               = "f(x)=((1/(x+0.5))+((1/4)*(x^(2))))";
                parametros.ValorExtremo1         = 0;
                parametros.ValorExtremo2         = 3;
                parametros.CantidadSubintervalos = 20;

                ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

                resultado = integracion.ResolverTrapecioMultiple(parametros);

                Assert.AreEqual(Math.Round(resultado.ValorIntegral, 4), 4.9996);
            }
예제 #9
0
            public void EjercicioCb()
            {
                IntegracionNumerica integracion = new IntegracionNumerica(minimos);

                ParametrosIntegracionNumerica parametros = new ParametrosIntegracionNumerica();

                parametros.Funcion               = "f(x) = e^(x)*(1-(0.5*x^(2)))";
                parametros.ValorExtremo1         = -1.4142;
                parametros.ValorExtremo2         = 1.4142;
                parametros.CantidadSubintervalos = 20;

                ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

                resultado = integracion.ResolverTrapecioMultiple(parametros);

                Assert.AreEqual(Math.Round(resultado.ValorIntegral, 4), 2.2805);
            }
        public ResultadoIntegracionNumerica ResolverSimpson13Simple(ParametrosIntegracionNumerica parametros)
        {
            this.ObtenerParametros(parametros);

            double   xi  = (parametros.ValorExtremo1 + parametros.ValorExtremo2) / 2;
            Argument xii = new Argument("x", xi);

            ParametrosMinimosCuadrados parametroslagrange = new ParametrosMinimosCuadrados();

            List <Decimal> ValoresX = new List <decimal>();

            ValoresX.Add(Convert.ToDecimal(parametros.ValorExtremo1));
            ValoresX.Add(Convert.ToDecimal(xi));
            ValoresX.Add(Convert.ToDecimal(parametros.ValorExtremo2));

            List <Decimal> ValoresY = new List <decimal>();

            ValoresY.Add(Convert.ToDecimal(this.EvaluarFuncion(Nombre, Funcion, xa)));
            ValoresY.Add(Convert.ToDecimal(this.EvaluarFuncion(Nombre, Funcion, xii)));
            ValoresY.Add(Convert.ToDecimal(this.EvaluarFuncion(Nombre, Funcion, xb)));

            parametroslagrange.ValoresX = ValoresX;
            parametroslagrange.ValoresY = ValoresY;

            parametroslagrange.ValorX = Convert.ToDecimal(parametros.ValorExtremo1);
            var Rfxa = MinimosCuadrados.ResolverPolinomioLagrange(parametroslagrange);

            parametroslagrange.ValorX = Convert.ToDecimal(xi);
            var Rfxi = MinimosCuadrados.ResolverPolinomioLagrange(parametroslagrange);

            parametroslagrange.ValorX = Convert.ToDecimal(parametros.ValorExtremo2);
            var Rfxb = MinimosCuadrados.ResolverPolinomioLagrange(parametroslagrange);

            var h = (parametros.ValorExtremo2 - parametros.ValorExtremo1) / 2;

            double Area = Convert.ToDouble((h / 3) * (Convert.ToDouble(Rfxa.Imagen) + (4 * Convert.ToDouble(Rfxi.Imagen)) + Convert.ToDouble(Rfxb.Imagen)));

            ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

            resultado.ValorIntegral = Convert.ToDecimal(Area);

            return(resultado);
        }
        public double ResolverSimpson38(ParametrosIntegracionNumerica parametros, double x0)
        {
            double h = ((parametros.ValorExtremo2 - x0) / 3);

            Argument xi0 = new Argument("x", x0);
            var      x1  = x0 + h;
            Argument xi1 = new Argument("x", x1);
            var      x2  = x1 + h;
            Argument xi2 = new Argument("x", x2);
            var      x3  = parametros.ValorExtremo2;
            Argument xi3 = new Argument("x", x3);

            double fx0 = this.EvaluarFuncion(Nombre, Funcion, xi0);
            double fx1 = this.EvaluarFuncion(Nombre, Funcion, xi1);
            double fx2 = this.EvaluarFuncion(Nombre, Funcion, xi2);
            double fx3 = this.EvaluarFuncion(Nombre, Funcion, xi3);

            double Area = ((h * 3) / 8) * (fx0 + 3 * fx1 + 3 * fx2 + fx3);

            return(Area);
        }
        public ResultadoIntegracionNumerica ResolverTrapecioMultiple(ParametrosIntegracionNumerica parametros)
        {
            this.ObtenerParametros(parametros);

            double h   = ((parametros.ValorExtremo2 - parametros.ValorExtremo1) / parametros.CantidadSubintervalos);
            double fxi = 0;

            var contador = parametros.ValorExtremo1;

            while (contador < parametros.ValorExtremo2)
            {
                contador = contador + h;
                Argument xi = new Argument("x", contador);
                fxi += this.EvaluarFuncion(Nombre, Funcion, xi);
            }
            double Area = ((h / 2) * (this.EvaluarFuncion(Nombre, Funcion, xa) + 2 * fxi + (this.EvaluarFuncion(Nombre, Funcion, xb))));

            ResultadoIntegracionNumerica resultado = new ResultadoIntegracionNumerica();

            resultado.ValorIntegral = Convert.ToDecimal(Area);

            return(resultado);
        }