EATRYL
Programación / Lección y práctica

Bisección: aproximar una raíz conservando un intervalo

Usar bisección en una función continua y distinguir error en x de residuo en f(x).

Universidad20 min

Comprende la idea

Antes de empezar: Funciones, continuidad, condicionales, ciclos y excepciones en Python.

Si f es continua en [a,b] y sus valores extremos tienen signos opuestos, existe al menos una raíz entre ellos. Bisección divide el intervalo a la mitad y conserva una mitad que mantiene el cambio de signo. No necesita que la función sea creciente, pero la continuidad es esencial.

Una implementación acotada

def bisecar(f, a, b, tol=1e-6, max_iter=100):
    if not a < b or tol <= 0 or max_iter < 1:
        raise ValueError("Intervalo o límites inválidos")
    fa, fb = f(a), f(b)
    if fa == 0:
        return a
    if fb == 0:
        return b
    if (fa > 0) == (fb > 0):
        raise ValueError("Falta cambio de signo")
    for _ in range(max_iter):
        m = a + (b - a) / 2
        fm = f(m)
        if fm == 0 or (b - a) / 2 <= tol:
            return m
        if (fa > 0) != (fm > 0):
            b = m
        else:
            a, fa = m, fm
    raise RuntimeError("No se alcanzó la tolerancia")

Suponemos entradas y evaluaciones finitas, una función continua, una escala numérica moderada, tolerancia positiva y max_iter entero positivo. El código no certifica esos supuestos ni es una biblioteca numérica general. El límite de iteraciones evita un ciclo indefinido.

Qué significa la tolerancia

Si queda una raíz dentro del intervalo, la distancia entre el punto medio y esa raíz es como máximo la mitad del ancho. Esta implementación usa esa cota sobre x. Un valor pequeño de |f(m)| es otra medida y no siempre equivale a pequeño error en x.

¿Puede haber raíz sin cambio de signo?

Sí: f(x)=x2 tiene raíz en 0 y es positiva a ambos lados. La condición garantiza una raíz con continuidad, pero no detecta todas las raíces posibles.

Error del punto medio≤b−a2con una raíz conservada en [a,b]

Vamos con un ejemplo

Resuelto paso a paso

Para f(x)=x2 − 2 en [1,2], los extremos valen −1 y 2. El primer punto medio es 1.5 y f(1.5) = 0.25: conservamos [1,1.5]. Después m=1.25 y f(m) = −0.4375: conservamos [1.25,1.5]. Repetir aproxima 2. Con tol = 0.001, el resultado está a lo sumo a 0.001 de una raíz cuando se cumple la condición de parada por ancho.

Conecta y aplica

Prueba el algoritmo con una raíz exacta en un extremo, otra interior, un intervalo sin cambio de signo y un límite de iteraciones insuficiente. Esas pruebas revisan resultados y rechazos del contrato.

Un detalle que importa: Un cambio de signo en 1x entre −1 y 1 no garantiza una raíz: falta continuidad y la función ni siquiera está definida en cero. Revisar solo los extremos no valida el modelo.

Ponlo a prueba

Si el intervalo final mide 0.02 y conserva una raíz, ¿cuál es la cota del error de su punto medio?

Elige una respuesta para ver la explicación.

Clases en línea · Atención personalizada

¿Necesitas ayuda con este tema?

Trabájalo paso a paso con un profesor de EATRYL. Consulta disponibilidad y costo para reforzar Bisección: aproximar una raíz conservando un intervalo.

Consultar una clase sobre este tema
Python para un cálculo comprobable / 4 de 4Ver la ruta completa
Practicar con la ficha de cierre