Método de Steffensen

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

El método de Steffensen (por Johan Frederik Steffensen) es un algoritmo para obtener los ceros de una función. El método de Steffensen se puede considerar como una combinación del método de punto fijo y del método de Aitken. Como el método de Aitken esencialmente acelera la convergencia de otro método, se puede definir este método como el método de punto fijo acelerado.

Ventajas[editar]

El método de Steffensen presenta una convergencia rápida y no requiere, como en el caso del método de Newton, la evaluación de derivada alguna. Presenta además, la ventaja adicional de que el proceso de iteración sólo necesita un punto inicial.

Otra ventaja del método de Steffensen es que -al igual que el de Newton- tiene convergencia cuadrática. Es decir, ambos métodos permiten encontrar las raíces de una función f "rápidamente" - en este caso rápidamente significa que en cada iteración, el número de dígitos correctos en la respuesta se duplica. Pero la fórmula para el método de Newton requiere la evaluación de la derivada de la función, el método de Steffensen no, por lo que este último puede ser programado para una función genérica, mientras que la función cumpla la restricción mencionada anteriormente.

El precio de la convergencia rápida es una doble evaluación de la función: tanto f(x_n) como f(x_n + h) deben ser calculadas, lo que podría llevar un tiempo considerable dependiendo de la función f. Por comparación, el método de la secante sólo necesita una evaluación de la función por cada paso, así que con dos evaluaciones de la función del método de la secante se pueden hacer dos pasos, y esos dos pasos aumentan el número de dígitos correctos en un factor de 1,6. En un solo paso de tiempo el método de Steffensen (o de Newton) aumenta los dígitos correctos en un factor de 2, lo que es sólo un poco mejor.

Al igual que el método de Newton y otros métodos cuadráticamente convergentes, la debilidad fundamental en el método de Steffensen es la elección del valor inicial x_0. Si el valor de x_0 no está "lo suficientemente cerca" de la solución, el método puede fallar y la secuencia de valores x_0, x_1, x_2, x_3,\dots o bien puede oscilar entre dos valores, o bien diverger hacia infinito (ambas alternativas pueden suceder).

Se calcula el siguiente punto de iteración a partir de la expresión:

x_{n+1} = x_n - {[f(x_n)]^2 \over {f(x_n + f(x_n)) - f(x_n)} }

Algoritmo[editar]

Para una sucesión {xn}, obtenida por el método del punto fijo xn+1 = f(xn), partimos de tres puntos:[cita requerida]

y0= f(x0)
z0= f(y0)

donde x0 es el punto inicial. Obteniendo así:

x1 = x0 – (y0 –x0)1/2
z0 – 2*y0 – x0

En forma general:

Xn+1 = xn – (yn – xn)1/2
zn – 2* yn – xn

Donde si |xn+1 – xn| = error < Tol entonces se satisface la tolerancia.

Código Matlab[editar]

function [x,i,tolf]=steffensen(x0,f,tolx,nmax) 
       err=tolx+1; 
	x=x0; 
	phi=0; 
	while(i<nmax & err>tolx) 
		xx=x; 
		fxk=feval(f,x); 
		tolf=tolx*abs(phi); 
		if abs(fxk)<=tolf 
			break 
		end 	
		fxk2=feval(f,x+fxk);
		phi=(fxk2-fxk)/fxk; 
		x=xx-fxk/phi; 
		err=abs(x-xx);
		i=i+1; 
	end

[cita requerida]

Enlaces externos[editar]