import numpy as np
import matplotlib.pyplot as plt
def biseccion(f, a, b, tol=1e-3, max_iter=100):
puntos = [] # para guardar los puntos medios
# Verificar si hay raíz en los extremos
fa = f(a)
fb = f(b)
if abs(fa) < tol:
print(f"La raíz está en el extremo izquierdo: x = {a}")
return a, puntos
if abs(fb) < tol:
print(f"La raíz está en el extremo derecho: x = {b}")
return b, puntos
if f(a)*f(b) > 0:
print("El intervalo no cumple el criterio de bisección")
return None
for i in range(max_iter):
c = (a + b)/2
fc = f(c)
puntos.append(c)
print(f"Iteración {i+1}: c = {c}, f(c) = {fc}")
if abs(fc) < tol or (b-a)/2 < tol:
return c, puntos
if f(a)*fc < 0:
b = c
else:
a = c
return (a+b)/2, puntos
# Definimos la función np.arctan(x) x*np.sin(x) ## x**3 - x - 2 ## (x-1)**3*(x-2)*(x-3)
def f(x):
return np.sin(x) - x/2
# Intervalo inicial
a = 1
b = 2
# Ejecutar el método
raiz, puntos = biseccion(f, a, b)
print("\nRaíz aproximada:", raiz)
# Número mínimo de iteraciones
tol=1e-3
M = int(np.ceil(np.log((b-a)/tol)/np.log(2)))
print("Número mínimo de iteraciones necesarias:", M)
# GRAFICA
x = np.linspace(a, b, 400)
y = f(x)
plt.figure(figsize=(8,5))
plt.axhline(0) # eje x
plt.plot(x, y)
# puntos del método
for c in puntos:
plt.scatter(c, f(c), color='red',s=20)
plt.scatter(raiz, f(raiz), color='green', s=20, label="Raíz")
plt.title("Método de la Bisección",fontsize=18)
plt.xlabel("$x$", fontsize=16)
plt.ylabel("$f(x)$",fontsize=16)
# tamaño de los números de los ejes
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend()
plt.grid()
plt.show()
To embed this project on your website, copy the following code and paste it into your website's HTML: