Namaru

Bisection

Sep 30th, 2025
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.63 KB | Source Code | 0 0
  1. import numpy as np
  2. import math as mt
  3.  
  4. def bisection(func, a, b, tolerance=1e-7, max_iterations=100):
  5.     """
  6.    Encuentra una raíz de la función 'func' en el intervalo [a, b] usando el método de bisección.
  7.  
  8.    Parametros:      
  9.        tolerance (float, opcional): La tolerancia para la raíz encontrada. Defaults to 1e-7.
  10.        max_iterations (int, opcional): El número máximo de iteraciones. Defaults to 100.
  11.  
  12.    Retorna:
  13.        Una aproximación de la raíz si se encuentra dentro de la tolerancia
  14.        y el número máximo de iteraciones, de lo contrario devuelve None.
  15.    """
  16.     if np.sign(func(a)) == np.sign(func(b)):
  17.         raise ValueError("La función debe tener signos opuestos en los extremos del intervalo.")
  18.    
  19.     itr = 0
  20.     for i in range(max_iterations):
  21.         c = (a + b) / 2
  22.         itr = i + 1
  23.         if np.abs(func(c)) < tolerance:
  24.             return c, itr
  25.         elif np.sign(func(c)) == np.sign(func(a)):
  26.             a = c
  27.         else:
  28.             b = c        
  29.  
  30.     print(f"Advertencia: Número máximo de iteraciones alcanzado sin la tolerancia deseada. Última aproximación: {c}")
  31.     return c, itr
  32.  
  33. # Ejemplo de uso: encontrar una raíz de la función f(x) = x^2 - 4
  34. def f(x):
  35.     return x**3 - 2*x - 5
  36.  
  37. # Definimos el intervalo inicial donde sabemos que hay una raíz (por ejemplo, entre 1 y 3)
  38. intervalo_a = 1
  39. intervalo_b = 3
  40.  
  41. # Llamamos a la función bisection
  42. raiz, itr = bisection(f, intervalo_a, intervalo_b)
  43.  
  44. if raiz is not None:
  45.     print(f"Se encontró una raíz aproximada en: {itr} iteraciones")
  46.     print(f"El valor de la función en la raíz es: {raiz:.6f}")
Advertisement
Add Comment
Please, Sign In to add comment