¿Cómo se calcula numéricamente sen(x) o ln(x)?

¿Nunca se han preguntado cómo es que la calculadora puede darles el valor de sen(x) o arctan(x) para todos los valores que le metan? ¿Acaso tiene una tabla de todos los valores? (Obviamente no). En este post voy a presentarles herramienta matemática interesante y reveladora, que ilustra cómo se aproximan funciones que no se pueden calcular con operaciones elementales (suma, multiplicación, división, resta).

Esta herramienta es bastante antigua, creada en los albores del siglo XVIII, y se llama Series de Taylor. Va a servir para aproximar una función a sus valores numéricos, con tanta precisión como queramos.

Primero necesitamos una función f(x), como sen(x), y necesitamos buscarle un valor conocido a esa función, una a tal que sepamos cuánto vale f(a), en este caso sabemos que sen(0) = 0. Esta función además debe tener con una propiedad interesante: tiene que ser infinitamente diferenciable en a; esto quiere decir que

f'(a),f^{(2)}(a),f^{(3)}(a),\ldots,f^{(n)}(a),\ldots

siempre son números reales. O sea, en términos coloquiales, que se puede derivar tantas veces como se quiera.

En el caso de la función sen(x), sabemos que todas sus derivadas se van alternando entre sen(x) y cos(x). Así tenemos que

sen(0)=0
sen'(0)=cos(0)=1
sen^{(2)}(0)=-sen(0)=0
sen^{(3)}(0)=-cos(0)=-1
sen^{(4)}(0)=sen(0)=0

Observése que se vuelven a repetir los valores para la quinta derivada, así sucesivamente, esto forma un ciclo de 4.

Ya que tenemos todo lo anterior, podemos definir un polinomio de grado n de esta forma

P_{n,a,f}(x)=f(a) + \dfrac{f'(a) (x-a)}{1!} + \dfrac{f^{(2)}(a) (x-a)^2}{2!} + \cdots
+ \dfrac{f^{(n)}(a) (x-a)^n}{n!}

Este se polinomio se llama polinomio de Taylor de grado n para f en a. No hay que espantarse, es simplemente sustituir cuánto valen todas las derivadas y dividirlas entre un factorial. No es tan complicado.

En el caso de sen(x), tenemos que la derivadas “pares” siempre van a dar cero, mientras que las impares alternan entre 1 y -1, por lo que para simplificar las cosas podemos calcular su polinomio de Taylor de grado impar. Recordando que los números impares son de la forma 2n+1, con n un número natural.

El polinomio de grado impar para f(x)=sen(x) en 0, sería

P_{2n+1,0,f}(x)=\dfrac{x}{1!} - \dfrac{x^3}{3!} + \dfrac{x^5}{5!} - \dfrac{x^7}{7!} + \cdots
+ (-1)^n\dfrac{x^{2n+1}}{(2n+1)!}

Este polinomio también se puede ver como una vulgar suma (serie de Taylor)

P_{2n+1,0,f}(x)=\displaystyle\sum_{k=0}^{n} (-1)^k\dfrac{x^{2k+1}}{(2k+1)!}

¿Cómo se usa esa serie para aproximarse a un valor numérico de la función?

Lo que más nos interesa para una aproximación numérica, es saber qué tan grande es la diferencia

\vert sen(x)  - P_{2n+1,0,f}(x) \vert

porque entre más pequeña sea la diferencia mayor precisión tendremos.

Usando ciertos resultados de Lagrange, Cauchy y Taylor, se puede llegar a demostrar que

\vert sen(x)  - P_{2n+1,0,f}(x) \vert \leqslant \dfrac{\vert x \vert^{2n+2}}{(2n+2)!}

Pero además se sabe que \displaystyle\lim_{n\rightarrow\infty} \dfrac{\vert x \vert^{2n+2}}{(2n+2)!} = 0, para cualquier x.

Esto implica que la serie de Taylor se puede acercar tanto como queramos a la función sen(x); nada más hay que buscar una n lo suficientemente grande.

Un ejemplo

Quisieramos calcular cuanto vale sen(3), con una precisión de 12 dígitos decimales. La pregunta obligada sería ¿hasta qué n tengo que sumar la serie de Taylor para obtener esa precisión?

La pregunta se puede reformular como sigue: encontrar una n tal que

\vert sen(3)  - P_{2n+1,0,f}(3) \vert \leqslant 10^{-12}

Usando el resultado del apartado anterior sabemos que

\vert sen(3)  - P_{2n+1,0,f}(3) \vert \leqslant \dfrac{3^{2n+2}}{(2n+2)!}

Por lo que basta encontrar una n, tal que

\dfrac{3^{2n+2}}{(2n+2)!} \leqslant 10^{-12}

En este caso con que tomemos n=11 bastará. Así que sólo hay que hacer la suma

\displaystyle\sum_{k=0}^{11} (-1)^k\dfrac{3^{2k+1}}{(2k+1)!}

para obtener sen(3) con una precisión de 12 dígitos decimales.

Hay que observar que esa n=11 sirve para todos los valores de x en el intervalo [-3,3].

¿Serviría en la práctica?

Obsérvese que en este caso, entre más alejado del cero esté x, más grande va a ser la n que vamos a requerir para tener alguna precisión decente. Pero no hay que preocuparse demasiado, esto se puede arreglar.

Dado que la función sen(x) es periódica y tiene un periodo igual a 2\pi, para cualquier x tenemos que sen(x) = sen (x + k(2\pi) ), con k cualquier entero. Además siempre podemos encontrar una k tal que
-2\pi \leqslant x + k(2\pi) \leqslant 2\pi.

Así reducimos el problema, sólo tendremos que hacer cálculos en un intervalo pequeño. Como se sabe que 2\pi \leqslant 6.5, con que tomemos n=15 tendremos una bonita estimación de la función seno con 9 dígitos decimales de precisión. Suficiente para armar nuestra propia calculadora científica.

En un próximo post les hablaré de polinomios de Taylor para otras funciones. Si les pareció interesante o no me expliqué bien en algún punto dejen sus comentarios.

Un commentario
  1. OT

    18 junio 2009

    Gracias por la información

Deja un comentario