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