Es un método iterativo para resolver sistemas de ecuaciones no necesariamente lineales, especialmente para encontrar raíces de funciones f(x), siempre que se cumplan criterios de convergencia.
Se transforma la ecuación f(x) = 0 en la forma x = g(x). Si se cumple que x = g(x), entonces x es un punto fijo de g.
¿Para qué sirve?
Sirve para aproximar soluciones de ecuaciones cuando no es posible (o práctico) encontrar soluciones exactas algebraicamente. Es ampliamente usado en:
- Ingeniería: resolución de ecuaciones no lineales en estructuras, electricidad, fluidos, etc.
- Economía: modelos de equilibrio, tasas de interés, optimización.
- Ciencias físicas: problemas de transferencia de calor, dinámica, etc.
- Computación: algoritmos de optimización, inteligencia artificial, machine learning.
¿Cómo se usa en la vida real?
Ejemplo:
Imaginemos que se está diseñando un sistema de calefacción y necesitas saber la temperatura de equilibrio en una tubería donde entra agua caliente. La temperatura depende de una fórmula complicada, y no puedes resolverla fácilmente de forma directa.
Entonces, conviertes esa ecuación a la forma x = g(x), y eliges un valor inicial x0. Luego aplicas el método iterativo hasta que la temperatura se estabilice dentro de una tolerancia aceptable.
Algoritmo:
- Sumar x a ambos términos de la ecuación.
- Despejar la x del término del primer grado de la ecuación.
- Evaluar la convergencia:
- Derivar la función g(x).
- Verificar que el valor inicial cumpla con el criterio de convergencia: |g'(x)| < 1.
- Obtener una nueva aproximación usando la fórmula:
xn+1 = g(xn) - Evaluar la aproximación relativa:
Ecuación del error relativo:
Ea = |xn+1 − xn| × 100
xn+1 - Si el error es mayor que la tolerancia, repetir el proceso. Si no, finalizar.
- El valor xn se considera la raíz aproximada.
f(x) = cos(x) - x
Esta función su primer punto es: 0.5.
f(x) = x³ - x - 2
Esta función su primer punto es: 0.5.
f(x) = e^(−x) −x
Esta función su primer punto es: 0.5.
Método de Punto Fijo en Python
import sympy as sp
# Definir el símbolo
x = sp.Symbol('x')
# Paso 1: Definir la función f(x)
def f(x):
return sp.exp(-x) - x
# Paso 2: Reescribir f(x) = 0 en la forma x = g(x)
def g(x):
return sp.exp(-x)
# Paso 3: Derivar g(x) para evaluar la convergencia
g_expr = g(x)
g_prime = sp.diff(g_expr, x)
# Paso 4: Evaluar la derivada en el valor inicial
Xi = 0.5 # Valor inicial
g_prime_val = abs(g_prime.subs(x, Xi))
# Paso 5: Verificar el criterio de convergencia
if g_prime_val >= 1:
print(f"El método puede no converger ya que |g'(x)| = {g_prime_val} ≥ 1 en x = {Xi}")
else:
print(f"El método puede converger ya que |g'(x)| = {g_prime_val} < 1 en x = {Xi}")
# Paso 6: Configurar la tolerancia y el número máximo de iteraciones
Es = 0.05 # Tolerancia del 5%
max_iter = 20
print("\nIteración\tXi\t\tg(Xi)\t\tEa (%)")
for i in range(1, max_iter + 1):
Xr = g(Xi)
Ea = abs((Xr - Xi) / Xr) * 100
print(f"{i}\t\t{Xi:.8f}\t{Xr:.8f}\t{Ea:.8f}")
if Ea < Es:
print(f"\nRaíz aproximada encontrada: {Xr:.8f}")
print(f"Error aproximado: {Ea:.8f}%")
break
Xi = Xr
else:
print("\nNo se alcanzó la tolerancia deseada en el número máximo de iteraciones.")