Está en la página 1de 7

Prctica IV: Mtodos de Newton-Raphson y de la secante,

para encontrar las races de una funcin.


Se suele llamar mtodo de Newton-Raphson al mtodo de Newton cuando se utiliza para calcular
los ceros de una funcin real de variable real. Aunque no sea siempre el mejor mtodo para un problema
dado, su simplicidad formal y su rapidez de convergencia hacen que, con frecuencia, sea el primer
algoritmo que se usa para la resolucin de un problema no lineal.
Puede justicarse este algoritmo mediante un enfoque intuitivo basado en el desarrollo de Taylor.
Consideremos la ecuacin f(x) = 0, y supongamos que posee una y slo una solucin [a, b].
Partiendo de un punto x
0
sucientemente cercano a dicha raz, podemos escribir:
= x
0
+ h
El desarrollo de Taylor de la funcin f (x) en un entorno de x
0
(con |x x
0
| < h) es entonces de la
forma:
f (x) = f(x
0
) + (x x
0
) f

(x
0
) +
(x x
0
)
2
2
f

(x
0
+ h)
con 0 < < 1.
Suponiendo que f

(x) no se anula en [a, b], y que la diferencia x x


0
es muy pequea, el
mtodo de Newton-Raphson consiste en despreciar el sumando en (x x
0
)
2
del desarrollo anterior,
quedndonos con la aproximacin:
f (x)

= f(x
0
) + (x x
0
) f

(x
0
)
Por tanto la solucin de la ecuacin f (x) = 0 (que es ) estar prxima a la solucin de f(x
0
) +
(x x
0
) f

(x
0
) = 0. Si llamamos x
1
a dicha solucin, entonces x
1
es una mejor aproximacin de que
x
0
. La solucin x
1
cumple que f(x
0
) + (x
1
x
0
) f

(x
0
) = 0 y por tanto:
x
1
= x
0

f(x
0
)
f

(x
0
)
1
De esta manera podemos generar la sucesin {x
i
}
n
i=1
con la frmula recurrente:
x
i+1
= x
i

f(x
i
)
f

(x
i
)
La obtencin del mtodo de Newton mediante una serie de Taylor resalta la importancia de una
buena aproximacin inicial. Si x
0
no est sucientemente prximo a , el mtodo de Newton puede
no ser convergente (ya que la solucin de f(x
0
) + (x x
0
) f

(x
0
) = 0 podra estar alejada de ).
Un posible inconveniente de este mtodo es la evaluacin de f

(x
i
) en cada iteracin, pero en caso
necesario, esto puede subsanarse con una modicacin que veremos ms adelante.
Convergencia del mtodo.
Teorema. Supongamos que [a, b] es solucin de f(x) = 0 y que f

() = 0 . Entonces, si
f C
2
([a, b]) y el valor inicial x
0
es sucientemente prximo a ( x
0
[ , + ] para algn
> 0), la sucesin x
n+1
= g(x
n
) denida por el mtodo de Newton, converge a .
Este teorema indica que, bajo suposiciones razonables, el mtodo de Newton converge siempre
que la condicin inicial est sucientemente prxima a la raz. No obstante, es un teorema poco til en
la prctica ya que normalmente no se sabe si el valor inicial est o no prximo a . La construccin de
una grca de f (x) puede ser de ayuda para localizar aproximaciones iniciales a la raiz. El siguiente
teorema nos da condiciones sucientes para la convergencia del algoritmo:
Teorema. (Condicin suciente), Supongamos que f C
2
([a, b]) tal que:
(i) f(a)f(b) < 0 (la funcin cambia de signo en los extremos del intervalo [a, b])
(ii) f

(x) = 0 x [a, b]
(iii) f

(x) = 0 x [a, b]
Entonces existe una nica raz de f en [a, b], y la sucesin {x
n
} generada por el mtodo de
Newton converge hacia , para cualquier valor inicial x
0
[a, b] que cumpla que:
f(x
0
)f

(x
0
) 0.
Implementacin del mtodo de Newton-Raphson en Matlab-Octave.
La implementacin en Matlab/Octave el algoritmo de Newton-Raphson es muy simple. El programa
que implemente dicho algoritmo debe recibir como argumentos:
(a) La funcin f (x) cuya raz se va a calcular.
(b) Una aproximacin inicial x
0
de dicha raiz.
(c) La derivada f

(x) de la funcin.
(d) La tolerancia o error mximo .
Sugerencia: Para denir la funcin f (x) y su derivada f

(x) podemos utilizar el comando inline que,


como ya hemos visto con el algoritmo de biseccin, permite pasar una funcin como argumento de
otra. Por ejemplo, si se desea hallar una raz de la funcin f (x) = x
6
x 1 podemos denir f (x) y
su derivada mediante:
f=inline(x^6-x-1)
fp=inline(6*x^5-1)
Asimismo, recurdese que para hacer grcos de una funcin, se utiliza el comando fplot:
fplot(f,[-1,2])
grid
El desarrollo del algoritmo es entonces de la forma:
1. Inicializacin: Leer f (x), f

(x), x
0
y . Calcular f (x
0
) y f

(x
0
). Hacer k = 0.
2. Hacer k = k + 1. En cada etapa k 1 calcular la nueva aproximacin x
k
= x
k1

f(x
k1
)
f

(x
k1
)
3. Si |x
k
x
k1
| < terminar: la raz aproximada es = x
k
; en caso contrario volver al paso 2.
Mtodo de Newton-Raphson modicado.
Es anlogo al anterior con la diferencia de que el valor de la derivada slo se calcula en el punto
inicial; por tanto la frmula a utilizar en el paso 2 es x
k
= x
k1

f(x
k1
)
f

(x
0
)
. Esta modicacin converge
ms lentamente y en general slo se utiliza cuando hay problemas para calcular la derivada de f (x).
Mtodo de la secante.
Es otra variacin del mtodo de Newton-Raphson, en la que el clculo de la derivada se sustituye
por su aproximacin numrica:
f

(x
k
) =
f(x
k
) f(x
k1
)
x
k
x
k1
Por tanto, el paso 2 del algoritmo es:
x
k
= x
k1

f(x
k1
)
f(x
k1
)f(x
k2
)
x
k1
x
k2
= x
k1

(x
k1
x
k2
) f(x
k1
)
f(x
k1
) f(x
k2
)
=
x
k2
f(x
k1
) x
k1
f(x
k2
)
f(x
k1
) f(x
k2
)
Adems, para aplicar el mtodo de la secante es necesario partir de dos aproximaciones iniciales
x
0
y x
1
.
Ejercicios.
1. Implementar los tres algoritmos anteriores en MATLAB/OCTAVE en sendas funciones, que debe-
rn llamarse, respectivamente newtonRaphson, newtonRahsonMod y secante. Las dos primeras
funciones deben recibir como argumentos la funcin cuyo cero se quiere calcular, su derivada, la
solucin inicial y la tolerancia o error de aproximacin . La tercera funcin (secante) debe recibir
adems una segunda aproximacin x
1
. De esta forma, la funcin newtonRaphson debe poder
invocarse mediante:
newtonRaphson(f, fp, x0, tol)
donde las funciones f y fp se denirn previamente mediante comandos inline. Por ejemplo, para
hallar el cero de la funcin f(x) = 2x
2
10x+3 partiendo de la aproximacin inicial x
0
= 1, con
error inferior a una milsima, el algoritmo de biseccin deber invocarse mediante:
f=inline(2*x^2-10*x+3)
fp=inline(4*x-10)
newtonRaphson(f, fp, 1, 1e-8)
Solucin:
El cdigo para la implementacin del algoritmo de Newton-Raphson es: (Pinchar aqu para des-
cargar el archivo .m)
function raiz=newtonRaphson( f, fp, x0, tol)
if ( f(x0) ==0)
raiz=x0;
else
x1=x0f(x0) /fp(x0) ;
while ( ( f(x1) ~=0)&&abs( x1x0) >tol)
x0=x1;
x1=x0f(x0) /fp(x0) ;
end%while
raiz=x1;
end%if
raiz;
end%function
Lo aplicamos a la funcin denida en el ejemplo anterior, especicando previamente format long
para que Matlab/Octave nos muestre el resultado con mayor precisin:
>>> format long
>>> f=inline(2*x^2-10*x+3)
f =
f(x) = 2*x^2-10*x+3
>>> fp=inline(4*x-10)
fp =
f(x) = 4*x-10
>>> newtonRaphson(f, fp, 1, 1e-8)
ans = 0.320550528229663
Comprobamos que este valor es efectivamente raz de f (x) = 2x
2
10x + 3
>>> f( 0.320550528229663)
ans = 1.77635683940025e-15
Si representamos esta funcin entre -2 y 6, vemos que hay otra raz entre 4 y 5:
>>> fplot(f,[-2,6])
-10
0
10
20
30
40
-2 -1 0 1 2 3 4 5 6
2.*x.
2
-10.*x+3
Para hallar esta raz por el mtodo de Newton-Raphson simplemente tomamos como valor inicial
el x
0
= 4:
>>> newtonRaphson(f, fp, 4, 1e-8)
ans = 4.67944947177034
Comprobamos que efectivamente este valor es solucin de f (x) = 0:
>>> f(4.67944947177034)
ans = 2.84217094304040e-14
2. Aplicar los algoritmos anteriores a la bsqueda de soluciones de las siguientes ecuaciones. En
todos los casos hacer una grca de la funcin y explorar la convergencia a partir de distintos
valores iniciales.
a) x
6
x 1 = 0 (Sugerencia: hacer una grca de la funcin en el intervalo [-1,2]). Explorar
qu ocurre si se toma como valor inicial x
0
= 0,69 o x
0
= 0,7.
b) x
2
x 0,5 = 0.
c) sin(x + 1)

x = 0.
d) log(x) cos(x + 1) = 3/2.
e) xe
x/2
= 1
3. Matlab/Octave disponen de las funciones roots (para hallar las races de polinomios) y fzero
(para hallar races de una funcin no lineal). Utiliza la ayuda de Matlab/Octave (o los recursos
de internet) para investigar cmo operan estas funciones y utilizalas tambin para obtener las
soluciones de las ecuaciones del problema anterior. Compara los resultados.

También podría gustarte