Exemple #1
0
        public Solución Calcular(float izq, float der, int iter, float tole)
        {
            Solución s = new Solución();

            if (f(izq) * f(der) > 0)
            {
                s.Error = "Error al calcular la raíz"; //poner todos los campos en 0 del formulario
            }
            else
            {
                if (f(izq) * f(der) == 0) //la raíz es izq o der
                {
                    if (f(izq) == 0)
                    {
                        s.sol = izq;
                    }
                    else
                    {
                        s.sol = der;
                    }
                }
                else //menor a 0, buscar raíz
                {
                    cont = 0;
                    xant = 0;

                    xr    = (izq + der) / 2;
                    cont  = cont + 1;
                    error = Math.Abs((xr - xant) / xr);

                    while ((Math.Abs(f(xr)) >= tole) && (cont <= iter) && (error >= tole))
                    {
                        if (f(izq) * f(der) < 0)
                        {
                            der = xr;
                        }
                        else
                        {
                            izq = xr;
                        }
                        xant = xr;

                        xr    = (izq + der) / 2;
                        cont  = cont + 1;
                        error = Math.Abs((xr - xant) / xr);
                    }
                    s.sol   = xr;
                    s.iteru = cont;
                    s.erel  = error;
                }
            }
            return(s);
        }
        public Solución Calcular()
        {
            cont = 0;
            Solución s = new Solución();

            if (f(xini) == 0)
            {
                xr    = xini;
                error = 1;
            }
            else
            {
                xant = 0;
                cont = cont + 1;
                Deri = (f(xini + 0.0001) - f(xini)) / 0.0001;
                xr   = xini - f(xini) / Deri;
                if (xr == 0)
                {
                    s.Error = "La recta tangente es horizontal, no se puede seguir con el procedimiento";
                }
                else
                {
                    error = Math.Abs(xr - xant) / xr;

                    while (Math.Abs(f(xr)) > tole && cont < iter && error > tole) //Mientras f(xr) sea mayor a la tolerancia, el contador sea menor a las
                                                                                  //iteraciones y el error sea mayor a la tolerancia, se sigue buscando xr
                    {
                        xini  = xr;
                        xant  = xr;
                        cont  = cont + 1;
                        error = Math.Abs(xr - xant) / xr;
                    }
                    // Si sale del while es porque una de las condiciones se cumplió, entonces encontró la raíz

                    s.sol   = Convert.ToSingle(xr);
                    s.iteru = cont;
                    s.erel  = Convert.ToSingle(error);
                }
            }
            return(s);
        }