El método de Müller es un algoritmo numérico para encontrar raíces de funciones no lineales. Se basa en aproximar la función mediante un polinomio cuadrático interpolador que pasa por tres puntos consecutivos y calcular la raíz de ese polinomio. Esta aproximación permite obtener estimaciones cada vez más precisas de las raíces de la función.
¿Para qué sirve?
El método de Müller se utiliza para resolver ecuaciones donde encontrar raíces exactas puede ser complicado o imposible mediante métodos analíticos. Es especialmente útil cuando la función es complicada o no se tiene una forma explícita para resolverla fácilmente. Además, puede manejar raíces complejas y es más eficiente que otros métodos como la bisección o la secante en ciertos casos.
¿Cómo se usa en la vida real?
En aplicaciones prácticas, el método de Müller se emplea en ingeniería, física, finanzas y ciencias aplicadas donde se requiere resolver ecuaciones no lineales. Por ejemplo:
- Encontrar puntos de equilibrio en sistemas dinámicos complejos.
- Calcular raíces de polinomios en diseño y análisis estructural.
- Resolver ecuaciones en modelos financieros para valorar opciones o determinar tasas de interés.
- Simular fenómenos físicos donde la solución analítica no es directa, como en termodinámica o electromagnetismo.
Gracias a su capacidad para aproximar raíces complejas y su convergencia rápida, es una herramienta valiosa en software científico y de simulación numérica.
Algoritmo
X0
, X1
y X2
.
f(x)
en los puntos X0
, X1
y X2
.
h0 = X1 − X0
h1 = X2 − X1
h0
h1
-
A =
S1 − S0
h1 + h0 B = A × h1 + S1
C = f(X2)
D = √(B² − 4AC)
P1 = |B + D|
P2 = |B - D|
-
Si
P1 > P2
:
Xr = X2 −2C
B + D -
Si no:
Xr = X2 −2C
B − D
Xr
Ea
es menor que la tolerancia:
- Si
Ea < tolerancia
, se aceptaXr
como raíz y termina. - Si no, se actualizan los puntos:
X0 = X1
,X1 = X2
,X2 = Xr
y se vuelve al paso 3.
Este método solo permite buscar las raíces de cada función.
En este ejemplo tenemos tres raíces reales diferentes y dos imaginarias.
Este método solo permite buscar las raíces de cada función.
En este ejemplo tenemos tres raíces reales diferentes y dos imaginarias.
Este método solo permite buscar la de cada función.
Método de Müller en Python
import sympy as sp
x = sp.Symbol('x')
# Método de Müller
def f(x):
return x**3 - 13*x - 12
# Paso 1: Definir los puntos iniciales
X0 = 4.5
X1 = 5.5
X2 = 5
# Paso 2: Definir la tolerancia para el error relativo
tolerancia = 0.05
# Iteración (máximo 50)
for i in range(50):
# Paso 3: Evaluar f(x) en los puntos
fx0 = f(X0)
fx1 = f(X1)
fx2 = f(X2)
# Paso 4: Calcular los intervalos
h0 = X1 - X0
h1 = X2 - X1
# Paso 5: Calcular pendientes secantes
S0 = (fx1 - fx0) / h0
S1 = (fx2 - fx1) / h1
# Paso 6: Determinar coeficientes A, B, C
A = (S1 - S0) / (h1 + h0)
B = A * h1 + S1
C = fx2
# Paso 7: Calcular el discriminante
D = sp.sqrt(B**2 - 4*A*C)
# Paso 8: Elegir el mejor denominador para evitar división por cero
P1 = sp.Abs(B + D)
P2 = sp.Abs(B - D)
if P1 > P2:
Xr = X2 + (-2 * C) / (B + D)
print("Iteración #", i + 1)
print("Xr:", Xr)
print()
else:
Xr = X2 + (-2 * C) / (B - D)
# Paso 9: Calcular el error relativo aproximado
Ea = sp.Abs((Xr - X2) / Xr) * 100
# Paso 10: Verificar tolerancia
if Ea < tolerancia:
print("La raíz es:", Xr)
print("Error acumulado:", Ea)
break
else:
# Actualizar puntos
X0 = X1
X1 = X2
X2 = Xr