El método de Steffensen es un algoritmo para encontrar las raíces de una función propuesto por el matemático danés Johan Frederik Steffensen en 1924. Siendo un método que suele converger rápidamente a la solución. Además, a diferencia del método de Newton, no es necesario disponer de la función deriva, por lo que su implementación es más sencilla.
Al igual que el método de las aproximaciones sucesivas y el método de Newton, el método de Steffensen obtiene las raíces de las funciones de forma iterativa. Aproximándose en cada iteración más al resultado. Para obtener la serie de valores simplemente se debe partir de un punto inicial x_0 y utilizar la siguiente expresión para obtener una mejor aproximación a la raíz
x_{n+1} = x_n - \frac{(f(x_n))^2}{f(x_n+ f(x_n)) - f(x_n)}En donde x_n es la aproximación en la iteración n y f(x) es la función a la que se le desea encontrar la raíz. Como se puede apreciar en esta expresión, solamente es necesario conocer la función y el punto de la iteración anterior. No es necesario conocer la derivada de la función como en el caso de Newton. Algo que se traduce en una serie de ventajas respecto a otros métodos como el método de la bisección o el método de Newton:
La implementación del método de Steffensen en Python es algo relativamente sencillo. Solamente se tiene que incluir la función anterior en un bucle do while hasta que la diferencia entre x_n y x_{n+1} sea inferior a un criterio de convergencia o se alcance el máximo número de iteraciones. Lo que se puede resolver con el siguiente código.
def steffensen(fun, x_n, epsilon=1e-6, max_iter=50):
n_iter = 0
while n_iter == 0 or (abs(x_p - x_n) > epsilon and n_iter <= max_iter):
x_p = x_n
den = (fun(x_n + fun(x_n)) - fun(x_n))
if den == 0:
return x_n
else:
x_n = x_n - fun(x_n)**2 / den
n_iter += 1
if n_iter > max_iter:
print("El método de Steffensen no converge en las iteraciones máximas permitidas.")
return x_n En ese caso, como no existe la estructura do while para que entre en el bucle en la primera iteración se usa la condición adicional n_iter == 0. Además, se calcula el denominado de la función para evitar divisiones por cero, lo que sucede cuando se ha encontrado la raíz del problema. Por lo demás, el método es transcribir la función descrita en la sección anterior.
La implementación del método de Steffensen presentada en la sección anterior se puede validar fácilmente con las mismas funciones que se usaron para validar otros métodos como el de la secante y el de Newton. Simplemente se puede comprobar como para la función f(x) = x^2 + 2x -8 puede encontrar las dos soluciones (-4 y 2) en función del punto de inicio.
fun = lambda x: x**2 + 2*x - 8 steffensen(f, 4) # 2.000000000000036 steffensen(f, 0) # -4
En esta publicación se ha visto un método para la obtención de las raíces de una función que es más eficiente y fácil de implementar que otros. Ya que solamente necesita la función y no su deriva, como en el caso de método de Newton, ni una función aproximada, como puede ser el método de las aproximaciones sucesivas. Lo que hace del método de Steffensen una opción a tener en cuenta para resolver estos problemas.
Image by Gerd Altmann from Pixabay
Llevas un rato analizando datos y tienes cuatro gráficos abiertos en ventanas separadas: ventas, usuarios,…
Hace poco publiqué una entrada en la que trataba de un sesgo bien documentado: aferrarse…
En un entrada previa explicamos qué son el WOE y el IV y por qué…
Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…
“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…
Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…
This website uses cookies.