Algoritmos para el cálculo de raíces cuadradas: Método de Newton-Raphson

En cálculo diferencial, se conoce como el método de Newton-Raphson a la función iterativa desarrollada por Isaac Newton para aproximar los ceros de una función cualquiera, valiéndose solamente de la función misma y su derivada. El proceso iterativo es bastante útil para encontrar, por ejemplo, las raíces de una función cúbica con ceros no necesariamente enteros o racionales (irracionales, no complejos) los cuales serían difíciles de encontrar con los métodos tradicionales como la factorización.

El método basicamente trabaja de esta manera: Dado un valor inicial x, que idealmente podría ser un valor cercano a la raíz, evaluamos la función en dicho valor, luego encontramos la ecuación de la recta tangente a la función en ese punto, encontramos luego su respectivo intercepto con el eje x. Ese numero se toma como valor siguiente y se vuelve a hacer el proceso. Eventualmente llegaremos a la raíz con una buena aproximación decimal, mientras más iteraciones se hacen, más preciso es el resultado. Geométricamente se ve así:

NewtonIteration_Ani

Así es como trabaja el método y su fórmula es la siguiente:

02b0a84e7054711b104161fc09c9ac83

Ahora bien, supongamos que queremos escribir un algoritmo que calcule la raíz cuadrada de un número cualquiera. Opciones existen muchas, pues podemos basar nuestro algoritmo en el método de fracciones continuas, el babilónico, con series de Taylor o con cualquier otro método, pero, ¿por qué no usar el de Newton-Raphson? Para poder hacer esto solo se necesita una función de la forma f(x) =x²-r, donde r es el número cuya raíz cuadrada deseamos aproximar. Su respectiva derivada f'(x) seria, entonces, 2x. Como resultado obtenemos un algoritmo muy sencillo para calcular raíces cuadradas. En lenguaje de programación Java, el algoritmo se escribiría más o menos así:

double radicando = 2;
double resultado = 1;
int i = 0;
while(i<25){
resultado=resultado-((resultado*resultado-radicando)/(2*resultado));
i++;
}
System.out.print("La raíz cuadrada de"+radicando+" es:"+resultado);

Lo he escrito de manera que se hagan 24 iteraciones de la función de Newton-Raphson, esto es suficiente para conseguir una aproximación bastante buena de nuestras raíces. Ahora bien, si de raíces cúbicas se tratase la función sería f(x)= x³-r, y su derivada f'(x)= 3x². Nótese que los cambios que habría que hacer al algoritmo son mínimos. Nótese también que el algoritmo le calcula la raíz al valor de la variable “radicando”.

Captura de pantalla - 200514 - 20:56:47

Captura de pantalla del código compilado en Ideone.com. La imagen contiene un enlace al algoritmo.

Esta es la primera entrada de una serie de publicaciones relacionadas a algoritmos básicos necesarios para programar una calculadora científica. Por ahora, solo me resta darle todo el mérito a Sir. Isaac Newton por tan potente método.

GodfreyKneller-IsaacNewton-1689

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s