Descarga la aplicación para disfrutar aún más
Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
import numpy as np import matplotlib.pyplot as plt def secant(f, x0, x1, tol, max_iter): """ Implementa el método de la secante para encontrar la raíz de una función. Argumentos: - f: función para la cual se desea encontrar la raíz - x0: primer punto inicial - x1: segundo punto inicial - tol: tolerancia para la convergencia - max_iter: número máximo de iteraciones permitidas Retorna: - El valor de la raíz encontrada - Un array numpy con el procedimiento paso a paso (iteraciones, x, f(x)) """ procedure = [] # Lista para almacenar el procedimiento paso a paso iteration = 1 fx0 = f(x0) fx1 = f(x1) while np.abs(fx1) > tol and iteration <= max_iter: x = x1 - (fx1 * (x1 - x0)) / (fx1 - fx0) fx = f(x) procedure.append([iteration, x, fx]) x0 = x1 fx0 = fx1 x1 = x fx1 = fx iteration += 1 return x, np.array(procedure) # Ejemplo de función: f(x) = x^3 - x - 2 def f(x): return x**3 - x - 2 # Parámetros de la simulación x0 = 1 # Primer punto inicial x1 = 2 # Segundo punto inicial tol = 1e-6 # Tolerancia para la convergencia max_iter = 100 # Número máximo de iteraciones permitidas # Aplica el método de la secante root, procedure = secant(f, x0, x1, tol, max_iter) # Calcular el error relativo porcentual errors = [abs(f(x)) / abs(f(procedure[0])) * 100 for x in procedure] # Imprime el procedimiento paso a paso print("Procedimiento de la Secante:") print("Iteración\t x\t\t f(x)") for step in procedure: iteration, x, fx = step print(f"{iteration}\t\t{x:.3f}\t\t{fx:.3f}") # Grafica la función y el resultado x = np.linspace(0, 3, 100) y = f(x) plt.figure() plt.plot(x, y, label='f(x)') plt.axhline(0, color='r', linestyle='--', label='Eje x') plt.plot(root, f(root), 'ro', label='Raíz') plt.xlabel('x') plt.ylabel('f(x)') plt.title('Método de la Secante') plt.legend() plt.grid(True) plt.show() # Imprime la raíz encontrada print("\nRaíz encontrada:", root) # Imprimir el error relativo porcentual print("Error relativo porcentual:") for i, error in enumerate(errors): print(f"Iteración {i+1}: {error[1]}%")
Compartir