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 false_position(f, a, b, tol, max_iter): """ Implementa el método de falsa posición para encontrar la raíz de una función. Argumentos: - f: función para la cual se desea encontrar la raíz - a: extremo izquierdo del intervalo inicial - b: extremo derecho del intervalo 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, a, b, c, f(c)) """ procedure = [] # Lista para almacenar el procedimiento paso a paso iteration = 1 fa = f(a) fb = f(b) if np.sign(fa) == np.sign(fb): raise ValueError("La función no cumple con el teorema de Bolzano en el intervalo dado.") while iteration <= max_iter: c = (a*f(b) - b*f(a)) / (f(b) - f(a)) fc = f(c) procedure.append([iteration, a, b, c, fc]) if np.abs(fc) < tol or np.abs(b - a) < tol: break if np.sign(fa) == np.sign(fc): a = c fa = fc else: b = c fb = fc iteration += 1 return c, 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 a = 1 # Extremo izquierdo del intervalo inicial b = 2 # Extremo derecho del intervalo inicial tol = 1e-6 # Tolerancia para la convergencia max_iter = 100 # Número máximo de iteraciones permitidas # Aplica el método de falsa posición root, procedure = false_position(f, a, b, 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 Falsa Posición:") print("Iteración\t a\t\t b\t\t c\t\t f(c)") for step in procedure: iteration, a, b, c, fc = step print(f"{iteration}\t\t{a:.1f}\t\t{b:.1f}\t\t{c:.3f}\t\t{fc:.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 Falsa Posición') 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[3]}%")
Compartir