Andrés Canavesi | Blog

Jul/10

8

Método de Newton-Raphson para la resolución de ecuaciones no lineales


Si bien puede que este método no sea utilizado como se presenta a continuación, sirvió de base para su implementación en algoritmos para la resolución de ecuaciones no lineales (hallar aproximaciones a las raíces). Por supuesto que se puede generalizar para sistemas de ecuaciones no lineales, pero como todo, hay que empezar por algo más simple y más cerca de la tierra.

Como al momento de escribir este post estoy estudiando para salvar el examen de cálculo numérico, la idea es darle justamente un enfoque algorítmico además del analítico.

Gráfica del método de Newton Raphson

A continuación se describe cómo es que este método funciona, el orden de convergencia (qué tan rápido encuentra la raíz) y algunas ventajas y desventajas.

Como ya adelantamos, el método sirve para hallar aproximaciones de los ceros de una función. Pero, ¿ porqué una aproximación y no la raíz exacta?. Dado que no existen fórmulas generales para hallar raíces de cualquier función, como sucede con los polinomios de grado 2 o las típicas funciones de pizarrón, es que surge la necesidad de utilizar métodos iterativos con los cuales poder aproximar la raíz de nuestra función. Si bien no obtendremos la solución exacta a nuestro problema, vamos a obtener una solución bastante parecida y desde el punto de vista analítico, tan parecida como nosotros queramos.

Al ser un método iterativo, necesita de una estimación inicial de la raíz , esto va a depender de nuestro problema en concreto, ¿de algún lugar salió nuestra función no?. Dadas las características del método esta estimación debe ser muy buena (para que converja), si no es el caso podemos comenzar a iterar con otro método que no exija tanto desde este punto de vista, luego al estar cerca de la raíz podemos cambiar a Newton, ¿por qué?, veremos mas adelante que tiene un orden de convergencia igual a 2, en general, el método con el cual empecemos a iterar (si es que estamos lejos de la raíz) va a ser de orden igual a 1.

Como se ve en la gráfica de mas arriba la idea del método es linealizar la función a través de su tangente en el punto de iteración. El siguiente punto de iteración será el corte de la tangente con el eje x, evalúo la función en este punto, trazo la tangente y obtengo el siguiente punto, asi sucesivamente. Pero, ¿cuándo parar?, pues hay varias condiciones de parada, puede ser por cantidad de iteraciones, por tiempo (¿por qué no?)… Seguramente la condición de parada que busquemos es el error cometido, o sea qué tan cerca estamos de la raíz. Cabe destacar que nuestra condición de parada podría llegar a no cumplirse nunca (demasiada precisión exigida) dado que vamos a utilizar una computadora la cual utiliza la representación en punto flotante (capítulo aparte).

Pasemos a ver una representación numérica de la solución.

La ecuación de la tangente en el punto de iteración sería:



f^{'}(x_{i} ) =f(x_{i} )/(x_{i}- x_{i+1})

Lo que queremos es poder obtener la solución aproximada en función del paso anterior de iteración.

Despejamos x_{i+1}

f^{'}(x_{i} ).(x_{i}- x_{i+1})  =f(x_{i} )


f^{'}(x_{i} ).(x_{i}- x_{i+1})/f^{'}(x_{i} ) =f(x_{i} )/f^{'}(x_{i} )


Se cancelan las f^{'}(x_{i} ) del lado izquierdo y nos queda


x_{i}- x_{i+1} =f(x_{i} )/f^{'}(x_{i} )


 x_{i+1} =x_{i}-f(x_{i} )/f^{'}(x_{i} )


Bien, ya tenemos la forma de iterar para hallar la raiz, ahora queremos saber qué tan rápido nos acercamos a ella (orden de convergencia), para eso consideramos:


e_{i} =\alpha  -x_{i}
e_{i+1} =\alpha-x_{i+1}


Por lo tanto es equivalente decir:
e_{i+1} =\alpha-(x_{i}-f(x_{i} )/f^{'}(x_{i} ))


e_{i+1} =\alpha-x_{i}+f(x_{i} )/f^{'}(x_{i} )
e_{i+1} =e_{i}+f(x_{i} )/f^{'}(x_{i} )


e_{i+1} =(e_{i}.f^{'}(x_{i} )-f(x_{i} )) /f^{'}(x_{i} ) (1)


Por otro lado tenemos, Taylor mediante:


f(\alpha)=f(x_{i} )+f^{'}(x_{i} ).(\alpha-x_{i} )+f^{''}(x_{i} ).(\alpha-x_{i} )^{2} /2

0=f(x_{i} )+f^{'}(x_{i} ).e_{i}+f^{''}(x_{i} ).e_{i} ^{2} /2

Divido todo entre f^{'}(x_{i} )


0=(f(x_{i} )+f^{'}(x_{i} ).e_{i})/f^{'}(x_{i} ) +f^{''}(x_{i} ).e_{i}^{2} /2.f^{'}(x_{i} )
Sustituyo (1) en la expresión anterior


0=e_{i+1} +f^{''}(x_{i} ).e_{i}^{2} /2.f^{'}(x_{i} )


Llamo \beta f^{''}(x_{i} ) /2.f^{'}(x_{i} ) y nos queda


e_{i+1} =\beta.e_{i}^{2}


Vemos que el error en el paso i+1 es igual a una constante \beta por el error en el paso i al cuadrado por lo tanto podemos decir que el método es de orden 2, o sea que duplica la cantidad

de cifras exactas en cada iteración.

Observaciones

- Se requiere una estimación inicial muy buena, si esta no es buena, la iteración puede no converger.
- Se podría comenzar con un método de menor orden y luego, estando cerca de la raíz, se podría pasar a este método para llegar mas rápido a la solución.

– Requiere el cálculo de la derivada, que no siempre está disponible.
- No funciona para raíces múltiples (la derivada de la función en la raíz vale 0)

Espero que no haya ningún error tanto de concepto como de análisis, en tal caso sería bueno saberlo, puedes dejar un comentario al final del post.

Referencia




RSS Feed

Aún no hay comentarios.

Leave a comment!

«

»

Find it!

Theme Design by devolux.org