Logo Studenta

metodo_secante

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]}%")

Continuar navegando

Contenido elegido para ti