📌 Introducción

El método de bisección es una técnica numérica utilizada para encontrar raíces de funciones continuas en un intervalo \([a, b]\) donde \(f(a) \cdot f(b) < 0\). Se basa en el Teorema del Valor Intermedio, que establece que si una función es continua en un intervalo y cambia de signo en los extremos, entonces existe al menos una raíz en dicho intervalo.


🧮 Soporte Matemático

Algoritmo del Método de Bisección

1️⃣ Seleccionar un intervalo \([a, b]\) tal que \(f(a) \cdot f(b) < 0\).

2️⃣ Calcular el punto medio: \[ c = \frac{a + b}{2} \]

3️⃣ Evaluar \(f(c)\): - ✅ Si \(f(c) = 0\), entonces \(c\) es la raíz exacta. - 🔄 Si \(f(a) \cdot f(c) < 0\), la raíz está en \([a, c]\), entonces redefinir \(b = c\). - 🔄 Si \(f(c) \cdot f(b) < 0\), la raíz está en \([c, b]\), entonces redefinir \(a = c\).

4️⃣ Repetir hasta que la diferencia \(|b - a|\) sea menor que un valor de tolerancia \(\varepsilon\).

📌 Número máximo de iteraciones: \[ N = \left\lceil \frac{\log{(b-a)} - \log{\varepsilon}}{\log{2}} \right\rceil \]


🖥️ Implementación en R

A continuación, se presenta una implementación del método de bisección en R para encontrar la raíz de la función \(f(x) = x^3 - 4x - 9\):

biseccion <- function(f, a, b, tol = 1e-6, max_iter = 100) {
  if (f(a) * f(b) >= 0) {
    stop("El intervalo no es válido: f(a) y f(b) deben tener signos opuestos")
  }
  
  iter <- 0
  while ((b - a) / 2 > tol && iter < max_iter) {
    c <- (a + b) / 2
    if (f(c) == 0) {
      return(c)
    } else if (f(a) * f(c) < 0) {
      b <- c
    } else {
      a <- c
    }
    iter <- iter + 1
  }
  
  return((a + b) / 2)
}

# Definir la función
g <- function(x) x^3 - 4*x - 9

# Encontrar la raíz en el intervalo [2, 3]
raiz <- biseccion(g, 2, 3)
cat("La raíz aproximada es:", raiz)
## La raíz aproximada es: 2.706529

📊 Visualización Gráfica

Para ilustrar el método de bisección, graficamos la función y mostramos el proceso iterativo:

plot_biseccion <- function(f, a, b, tol = 1e-6) {
  x_vals <- seq(a - 1, b + 1, length.out = 1000)
  y_vals <- sapply(x_vals, f)
  df <- data.frame(x = x_vals, y = y_vals)
  
  ggplot(df, aes(x, y)) +
    geom_line(color = "blue") +
    geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
    geom_point(aes(x = a, y = f(a)), color = "green", size = 3) +
    geom_point(aes(x = b, y = f(b)), color = "green", size = 3) +
    theme_minimal() +
    ggtitle("Método de Bisección")
}

plot_biseccion(g, 2, 3)
## Warning in geom_point(aes(x = a, y = f(a)), color = "green", size = 3): All aesthetics have length 1, but the data has 1000 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
##   a single row.
## Warning in geom_point(aes(x = b, y = f(b)), color = "green", size = 3): All aesthetics have length 1, but the data has 1000 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
##   a single row.


✅ Conclusión

📌 El método de bisección es una técnica segura y confiable para encontrar raíces de funciones continuas cuando se tiene un intervalo adecuado. Aunque puede ser más lento que otros métodos como Newton-Raphson, es fácil de implementar y garantiza convergencia si se cumplen las condiciones iniciales.