示例#1
0
        private void Button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                double    x1        = Convert.ToDouble(textBox1.Text);
                double    x2        = Convert.ToDouble(textBox2.Text);
                Biseccion biseccion = new Biseccion();
                Salida    salida    = new Salida();
                salida = biseccion.MBiseccion(x1, x2);

                if (salida.Raiz.ToString() == "NaN" || salida.ErrorRelativo.ToString() == "NaN")
                {
                    salida.ErrorMsje = "Mal elegidos los extremos";
                }
                else
                {
                    textBox8.Text = salida.Raiz.ToString();
                    textBox7.Text = salida.NroIteraciones.ToString();
                    textBox6.Text = Convert.ToDecimal(salida.ErrorRelativo).ToString();
                }
                textBox5.Visible = true;
                textBox5.Text    = salida.ErrorMsje;

                if (salida.ErrorMsje != null)
                {
                    textBox8.Text = 0.ToString();
                    textBox7.Text = 0.ToString();
                    textBox6.Text = 0.ToString();
                }
            }
        }
示例#2
0
        //Paso 3
        public static Boolean Seguir_Terminar(Biseccion linea)
        {
            Boolean respuesta = true;

            if (linea.Abs_b_a < ErrorMinimo)
            {
                respuesta = false;
            }


            return(respuesta);
        }
示例#3
0
        public static void PrimeraCargarTabla(List <Biseccion> Tabla, double [] valores)
        {
            Biseccion lineaAUX = new Biseccion();

            lineaAUX.A           = valores[0];
            lineaAUX.B           = valores[1];
            lineaAUX.K           = 0;
            lineaAUX.Xk          = CalcularXK(lineaAUX);
            lineaAUX.Fxk1        = CalcularFXK(lineaAUX);
            lineaAUX.Fa_fk       = FA_FKX(lineaAUX);
            lineaAUX.Abs_b_a     = CalcularABS_B_A(lineaAUX);
            lineaAUX.ErrorMinimo = ErrorMinimo;
            Tabla.Add(lineaAUX);
        }
示例#4
0
        //Paso 7
        public static void PrimeraCargarTabla(List <Biseccion> Tabla, int i)
        {
            Biseccion lineaAUX = new Biseccion();
            var       val      = CalcularIntervalos.GetA_B(Ecuacion);

            lineaAUX.A           = val[0];
            lineaAUX.B           = val[1];
            lineaAUX.K           = i;
            lineaAUX.Xk          = CalcularXK(lineaAUX);
            lineaAUX.Fxk1        = CalcularFXK(lineaAUX);
            lineaAUX.Fa_fk       = FA_FKX(lineaAUX);
            lineaAUX.Abs_b_a     = CalcularABS_B_A(lineaAUX);
            lineaAUX.ErrorMinimo = ErrorMinimo;
            Tabla.Add(lineaAUX);
        }
示例#5
0
        //Usuario decide ingresar los intevalos
        public static void CargarTabla(List <Biseccion> Tabla, int i)
        {
            Biseccion lineaAUX = new Biseccion();
            var       val      = Verificar_Cambio(Tabla[i]);

            lineaAUX.A           = val[0];
            lineaAUX.B           = val[1];
            lineaAUX.K           = i + 1;
            lineaAUX.Xk          = CalcularXK(lineaAUX);
            lineaAUX.Fxk1        = CalcularFXK(lineaAUX);
            lineaAUX.Fa_fk       = FA_FKX(lineaAUX);
            lineaAUX.Abs_b_a     = CalcularABS_B_A(lineaAUX);
            lineaAUX.ErrorMinimo = ErrorMinimo;
            Tabla.Add(lineaAUX);
        }
示例#6
0
        //Paso 2
        public static double[] Verificar_Cambio(Biseccion linea)
        {
            double[] valores = new double[2];
            valores[0] = linea.A;
            valores[1] = linea.B;
            if (linea.Fa_fk.Contains('-'))
            {
                valores[1] = linea.Xk;
            }
            else if (!linea.Fa_fk.Contains('-') && linea.Fa_fk != "0")
            {
                valores[0] = linea.Xk;
            }

            return(valores);
        }
示例#7
0
        public void RootTest()
        {
            //Arrange
            Biseccion biseccion = new Biseccion()
            {
                Expresion = "sqrt(x)-cos(x)",
                ValStarta = 0,
                ValStartb = 1,
                Tolerance = 10e-4,
                Iteration = 10
            };

            //Act
            var resultado = biseccion.solucion();

            //Assert
            Assert.AreEqual(biseccion.Root, 0.6416015625);
        }
 public BiseccionController(string ecuacion, double x1, double x2)
 {
     this.biseccion = new Biseccion(ecuacion, x1, x2);
 }
 public BiseccionController()
 {
     this.biseccion = new Biseccion();
 }
示例#10
0
        public static List <Biseccion> biseccion(string expresion, double xl, double xu, double valorVerdadero, double errorTolerancia, bool hayValorVerdadero)
        {
            int              iteracion      = 0;
            double           intervalo      = 0;
            double           xr             = 0;
            double           xrAnt          = 0;
            double           fxl            = 0;
            double           fxu            = 0;
            double           fxr            = 0;
            double           fxlfxr         = 0;
            double           errorAprox     = 0;
            double           errorVerd      = 0;
            bool             ea_menor_es    = false;
            Biseccion        biseccion      = null;
            List <Biseccion> listaBiseccion = new List <Biseccion>();

            do
            {
                iteracion++;
                intervalo = xu - xl;
                xrAnt     = xr;
                xr        = (xl + xu) / 2;

                fxl = evaluarFuncion(expresion, xl);
                fxu = evaluarFuncion(expresion, xu);
                fxr = evaluarFuncion(expresion, xr);

                fxlfxr = fxl * fxr;

                if (hayValorVerdadero)
                {
                    errorVerd = calcularErrorVerdadero(valorVerdadero, xr);
                }

                if (iteracion > 1)
                {
                    errorAprox = calcularErrorAproximacion(xr, xrAnt);
                    if (errorAprox < errorTolerancia)
                    {
                        ea_menor_es = true;
                    }
                }

                if (hayValorVerdadero)
                {
                    biseccion = new Biseccion(iteracion, intervalo, xl, xu, xr, fxl, fxu, fxr, fxlfxr, errorVerd, errorAprox);
                }
                else
                {
                    biseccion = new Biseccion(iteracion, intervalo, xl, xu, xr, fxl, fxu, fxr, fxlfxr, 0, errorAprox);
                }
                listaBiseccion.Add(biseccion);

                if (fxlfxr < 0)
                {
                    xu = xr;
                }
                if (fxlfxr > 0)
                {
                    xl = xr;
                }
            } while (!ea_menor_es);

            return(listaBiseccion);
        }
示例#11
0
 //paso 6
 public static double CalcularABS_B_A(Biseccion linea)
 {
     return(Math.Abs(linea.B - linea.A));
 }
示例#12
0
        //Paso 5
        public static string FA_FKX(Biseccion linea)
        {
            Evaluador_De_Expresiones evaluador = new Evaluador_De_Expresiones(Ecuacion);

            return((evaluador.F(linea.A) * evaluador.F(linea.Xk)).ToString());
        }
示例#13
0
        //Paso 4
        public static double CalcularFXK(Biseccion linea)
        {
            Evaluador_De_Expresiones evaluador = new Evaluador_De_Expresiones(Ecuacion);

            return(evaluador.F(linea.Xk));
        }
示例#14
0
 //Paso 1
 public static double CalcularXK(Biseccion linea)
 {
     return((linea.A + linea.B) / 2);
 }