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 newton(f, df, x0, tol, max_iter): """ Implementa el método de Newton para encontrar la raíz de una función. Argumentos: - f: función para la cual se desea encontrar la raíz - df: derivada de la función f - x0: valor 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 x = x0 fx = f(x) while np.abs(fx) > tol and iteration <= max_iter: dfx = df(x) if dfx == 0: raise ValueError("La derivada de la función es cero en el punto dado.") x = x - fx / dfx fx = f(x) procedure.append([iteration, x, 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 # Derivada de la función: f'(x) = 3x^2 - 1 def df(x): return 3*x**2 - 1 # Parámetros de la simulación x0 = 1 # Valor inicial tol = 1e-6 # Tolerancia para la convergencia max_iter = 100 # Número máximo de iteraciones permitidas # Aplica el método de Newton root, procedure = newton(f, df, x0, 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 Newton:") print("Iteración\t x\t\t f(x)") for step in procedure: iteration, x, fx = step print(f"{iteration}\t\t{x:.6f}\t\t{fx:.6f}") # 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 Newton') 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[2]}%")
Compartir