Logo Studenta

Metodo_posicion

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

Continuar navegando