private ResultadoIntegracionNumerica SimpsonTresOctavos(ParametroSimpsonUnTercioMultiple parametro)
        {
            double h           = (parametro.ValorB - parametro.ValorA) / parametro.CantIntervalos;
            double ValorAPrima = parametro.ValorB - (h * 3);

            var resultadoUnTercio = SimpsonUnTercioMultiple(new ParametroSimpsonUnTercioMultiple
            {
                ValorA         = parametro.ValorA,
                ValorB         = ValorAPrima,
                CantIntervalos = parametro.CantIntervalos - 3,
                Funcion        = parametro.Funcion
            });
            double ValorX1 = ValorAPrima + h;
            double valorX2 = ValorX1 + h;
            double Suma    = 0;

            Suma += Utilidad.EvaluarFuncion(parametro.Funcion, ValorAPrima);
            Suma += 3 * Utilidad.EvaluarFuncion(parametro.Funcion, ValorX1);
            Suma += 3 * Utilidad.EvaluarFuncion(parametro.Funcion, valorX2);
            Suma += Utilidad.EvaluarFuncion(parametro.Funcion, parametro.ValorB);
            double area = Suma * (h * 3 / 8);

            if (double.IsNaN(resultadoUnTercio.Valor))
            {
                resultadoUnTercio.Valor = 0;
            }

            return(new ResultadoIntegracionNumerica
            {
                Valor = area + resultadoUnTercio.Valor
            });
        }
        public ResultadoIntegracionNumerica SimpsonUnTercioMultiple(ParametroSimpsonUnTercioMultiple parametro)
        {
            if (Math.Pow(-1, parametro.CantIntervalos) < 0)
            {
                return(SimpsonTresOctavos(parametro));
            }

            if (parametro.CantIntervalos == 0)
            {
                return(new ResultadoIntegracionNumerica {
                    Valor = 0
                });
            }

            decimal h           = Convert.ToDecimal(parametro.ValorB - parametro.ValorA) / parametro.CantIntervalos;
            double  sumatoriaX1 = 0;
            double  sumatoriaX2 = 0;
            decimal valorXprima = Convert.ToDecimal(parametro.ValorA) + h;


            while (valorXprima <= Convert.ToDecimal(parametro.ValorB) - h)
            {
                sumatoriaX1 += Utilidad.EvaluarFuncion(parametro.Funcion, Convert.ToDouble(valorXprima));
                valorXprima += (h * 2);
            }

            valorXprima = Convert.ToDecimal(parametro.ValorA) + (h * 2);

            while (valorXprima <= Convert.ToDecimal(parametro.ValorB) - (h * 2))
            {
                sumatoriaX2 += Utilidad.EvaluarFuncion(parametro.Funcion, Convert.ToDouble(valorXprima));
                valorXprima += (h * 2);
            }

            double SUMA = 0;

            SUMA = Utilidad.EvaluarFuncion(parametro.Funcion, parametro.ValorA)
                   + (4 * sumatoriaX1)
                   + (sumatoriaX2 * 2)
                   + Utilidad.EvaluarFuncion(parametro.Funcion, parametro.ValorB);

            var area = SUMA * Convert.ToDouble(h / 3);

            return(new ResultadoIntegracionNumerica
            {
                Valor = area
            });
        }
예제 #3
0
 private void btn_SimpsonUnTercioMultiple_Click(object sender, EventArgs e)
 {
     try
     {
         ParametroSimpsonUnTercioMultiple parametro = new ParametroSimpsonUnTercioMultiple
         {
             Funcion        = txt_Funcion.Text,
             CantIntervalos = Convert.ToInt32(txt_CantIntervalos.Text),
             ValorA         = Convert.ToDouble(txt_ValorA.Text),
             ValorB         = Convert.ToDouble(txt_ValorB.Text)
         };
         var resultado = integracionNumerica.SimpsonUnTercioMultiple(parametro);
         txt_Resultado.Text = resultado.Valor.ToString("0.000000");
         lbl_NomMetodo.Text = btn_SimpsonUnTercioMultiple.Text;
     }
     catch (Exception exception)
     {
         MessageBox.Show(exception.Message);
     }
 }