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.
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 \]
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
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.
📌 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.