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 }); }
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); } }