public static double f(double x)
return Math.Pow(x, 2) + Math.Sin(x);
public static double f_deriv(double x)
return 2 * x + Math.Cos(x);
public static Tuple<double, int> MetodoBiseccion(double x1, double x2, double error)
while (Math.Abs(x1 - x2) >= error)
return Tuple.Create(z, n);
public static Tuple<double, int> MetodoSecante(double x1, double x2, double error)
while (Math.Abs(x1 - x2) >= error)
z = (x2 - x1) / (f(x2) - f(x1)) * (-1 * f(x1)) + x1;
return Tuple.Create(z, n);
public static Tuple<double, int> MetodoNewtonRaphson(double x, double error)
while (Math.Abs(f(x)) >= error)
z = x - f(x) / f_deriv(x);
return Tuple.Create(z, n);
public static void Main()
var resultadoBiseccion = MetodoBiseccion(x1, x2, error);
Console.WriteLine("Método de Bisección: La solución aproximada es " + resultadoBiseccion.Item1 + " con un error de " + error + ", obtenida en " + resultadoBiseccion.Item2 + " iteraciones.");
var resultadoSecante = MetodoSecante(x1, x2, error);
Console.WriteLine("Método de la Secante: La solución aproximada es " + resultadoSecante.Item1 + " con un error de " + error + ", obtenida en " + resultadoSecante.Item2 + " iteraciones.");
var resultadoNewtonRaphson = MetodoNewtonRaphson(x, error);
Console.WriteLine("Método de Newton-Raphson: La solución aproximada es " + resultadoNewtonRaphson.Item1 + " con un error de " + error + ", obtenida en " + resultadoNewtonRaphson.Item2 + " iteraciones.");