Está en la página 1de 7

Proyecto final:Series de Taylor

Diego Vidal
2008-11-24

Abstract
En este documento se relata el procedimiento que se siguió para poder usar series de Taylor en una
computadora. El lenguaje usado fue Python1

1 Introducción
En verdad no vamos a usar una serie de Taylor como tal, dado que la serie de Taylor es la siguiente
n
X f i (x) · xi
T :=
i=0
i!

Lo que se va a usar es un caso especı́fico de la serie de Taylor, este caso especı́fico se le denomina serie de
Maclaurin, la cual es
n
X f i (0) · xi
f (x) =
i=0
i!
Serie que es convenientemente útil dado que podemos conocer el valor de la función en un punto sólo con
saber las derivadas de dicha función y cuánto vale la función y sus derivadas en 0. Un ejemplo de esto, es el
caso del coseno.
cos(0) · x0 sen(0) · x1 cos(0) · x2 sen(0) · x3 cos(0) · x4 sen(0) · x5 cos(0) · x6
cos(x) = − − + + − − + ···
0! 1! 2! 3! 4! 5! 6!
x2 x4 x6
cos(x) = 1 − + − + ···
2! 4! 6!
Veamos unos ejemplos
cos(0) = 1
3 4 6
π π π π
cos( ) ≈ 1 − + − ≈ 1 − .574190 + .050107 − .001831 ≈ .474086
3 54 81 · 24 729 · 720
cos(π) ≈ 1 − 4.934802 + 4.058712 − 1.335262 ≈ −1.211235
La exactitud de los resultados depende en gran parte de a que término lleguemos en la serie
1 http://python.org

1
1.1 La fórmula de Euler
Una de las fórmulas mas bellas de las matemáticas, la fórmula de Euler es una ecuación que relaciona a
los números transcendentales (e), los imaginarios (i), los irracionales (π), los reales, negativos y la unidad
(−1) y el cero, la fórmula es la siguiente
eiπ + 1 = 0
Deducir dicha ecuación es algo muy sencillo con series de Taylor-Maclaurin
Demostración
Se tiene que

ei0 · x0 iei0 · x1 i2 ei0 · x2 i3 ei0 · x3 i4 ei0 · x4 i5 ei0 · x5


eix = + + + + + + ···
0! 1! 2! 3! 4! 5!
Lo cual simplificando nos queda

x2 ix3 x4 ix5
eix = 1 + ix − − + + + ··· (1)
2! 3! 4! 5!
Si se es lo suficientemente suspicaz, ya se habrá identificado que parte de la fórmula parece la serie de
Taylor-Maclaurin del coseno. Ası́ que veamos el desarrollo de las series para seno y coseno.

x2 x4 x6 x8 x10
cos(x) = 1 − + − + − + ··· (2)
2! 4! 6! 8! 10!
x3 x5 x7 x9
sen(x) = x −
+ − + + ··· (3)
3! 5! 7! 9!
Como podemos ver, las partes reales de (1), son la serie del coseno (2), y las partes imaginarias son la serie
del seno (3) multiplicadas por i. Etonces podemos llegar al resultado

eix = cos(x) + isen(x)

Por lo tanto
eiπ = cos(π) + isen(π) = −1
QED

2 Programa
2.1 Derivada
El programa como se indica anteriormente fue hecho en Python, se le enseñó a derivar a la computadora
directamente de la definición de derivada, la cual es

df f (x + ∆x) − f (x)
= lim
dx ∆x→0 ∆x
Sin embargo se tuvo que hacer un pequeño ajuste el cual fue inspirado por Spivak2 el cual consiste en alterar
un poco la definición de derivada del modo que se muestra a continuación

df f (x + ∆x) − f (x − ∆x)
= lim
dx ∆x→0 2∆x
2 Michael Spivak, Calculus, Editorial Reverté,Reimpresión de octubre del 2007, ISBN:978-968-6708-18-9, página 225

2
Este ajuste fue hecho para buscar más exactitud en los cálculos, lo que hice en la parte del código donde
enseño a derivar a python fue tomar ∆x = ∆x
2 , por lo que, queda lo siguiente

∆x ∆x
df f (x + − f (x −
2 ) 2 )
= lim
dx ∆x→0 ∆x
Dado que la computadora no tiene noción de lı́mites (y para este ejercicio no tiene caso enseñarle un concepto
tan general), le damos un ∆x muy pequeño, con una millonésima basta; a continuación se muestra la parte
del programa donde se define la derivada3

def derivada(f):
def drf(x,dx=1e-6):
return (f(x+dx/2)-f(x-dx/2))/dx
return drf

Entonces, si se usa

def g(x): return 3*x*x*x


dg = derivada(g)
print dg(3)

el comando print dg(3) nos dá como resultado 80.9999999944 ≈ 81, siendo

d 3
3x |x=3 = 81
dx

2.2 Factorial
Otra parte fundamenteal de las series de Taylor-Maclaurin, es el factorial, al igualq ue la derivada, la
computadora no sabe lo que es, por lo cual hay que enseñárselo. Aprovechando la definición recursiva de
factorial, la cual es
n! = n · (n − 1)!
No se necesita modificar la definición para enseñársela a la computadora, el código queda del siguiente modo

def fac(n):
if n == 0:
return 1
else:
return n * fac(n-1)

Como se puede apreciar en el codigo, fue una simple traducción de la definición matemática al lenguaje
Python.

2.3 Problemas con Python


2.3.1 Caracteres
Python es un lenguaje muy versátil, pero por más que lo sea, no se puede esperar ningún grado de reflexión
por parte del mismo. Un problema con el cual me encontré al hacer el programa es que, cuando el usuario
escribe su función, Python la trata como texto, esto implica que no se vea como parte del código del programa,
lo cual hace que nustra función no pueda ser valuada. La solución al problema fué usar una función que
trae Ptyhon por defecto, dicha función es eval(), por lo cual ahora si trata lo que escribió el usuario como
función, ilustremos esto con un ejemplo.
3 Ver la sección 2.3.3 para ver una aclaración en cuanto al tamaño de la ∆x

3
a=raw_input("Escribe tu funcion: ")
def f(x): a return
print f(4)

Digamos que la función que escribió el usuario fue f (x) = x2 , por lo cual f (4) = 16, y entonces esperariamos
que print f(4), imprimiera un 16 en pantalla, el problema es que no lo hace, mas bien imprime un x*x, que
es x2 , la función que escribió el usuario. Para resolver esto, se usa eval(), veámos como

a=raw_input("Escribe tu funcion: ")


def f(x): eval(a) return
print f(4)

En este caso, ahora print f(4) si imprime en la pantalla un 16.

2.3.2 Exponentes
Otro problema que vale la pena mencionar dado que fue el que más tiempo tomó detectar, es que según
Python 00 = 1, esto dió bastantes problemas, por lo cual cuando se programa en python hay que tener esto
en cuenta y poner un ciclo if para solucionar esto.

2.3.3 Tamaño de ∆x
Sabemos que ∆x tiene que ser pequeña, pero el problema es determinar que tanto. Su valor inicial el cual
era 1 × 10−6 = 1000000
1
, no resultó muy bueno, dado que si se iteraba a mas de 5 pasos la serie de seno y mas
de 3 la serie de coseno se obtenı́an resultados absurdos; por esto se tuvo que hacer el ajuste y se encontró
que el ajuste óptimo de ∆x = 1 × 102.5 , en general funciona bastante bien. También hay un modo para que
el usuario modifique el valor de ∆x, el cual es

def t(x): x**2


a=derivada(t)
print a(3) #esto haria que se valuara la derivada en 3
print a(3,1e-4) #esto haria que se valuara a en 3 con un dx=1x10^(-4)

3 Resultados
Ahora veamos los resultados obtenidos por el programa, usar una función polinómica serı́a algo realmente
trivial, por lo cual usemos dos funciones trigonométricas que conocemos muy bien, el seno y el coseno

3.1 Seno
He aquı́ una tabla de valores obtenidos de la función seno. Nota: A partir de 0, se hizo con los primeros 10
1
términos de la serie; 90, se hizo con los primeros 9 términos; a partir de 180, se tuvo que ajustar ∆x = 10 y
hacer los primeros 15 términos; a partir de 300 se ajusto a 14 términos

4
Función Valor Valor obtenido Diferencia
sen(0) 0 0 0
sen(30) 0.5 0.49999916159 8.3841 × 10−7
sen(60) 0.866025403784439 0.866564711227 −5.3930 × 10−4
sen(90) 1 1.02084265991 −2.0842 × 10−2
sen(120) 0.866025403784439 0.863831617308 2.1937 × 10−3
sen(150) .5 0.484351280621 1.5648 × 10−2
sen(180) 0 −0.0776703736148 7.7670 × 10−2
sen(210) −.5 −0.498935268698 −1.0647 × 10−3
sen(240) −0.866025403784438 −0.866297902296 2.7249 × 10−4
sen(270) −1 −1.00363683506 3.6368 × 10−3
sen(300) −0.866025403784439 −0.874273918033 8.2485 × 10−3
sen(330) −.5 −0.500303242676 3.0324 × 10−4
sen(360) 0 0.0895497498962 −8.9549 × 10−2
Suponiendo que podamos arreglar el problema del ajuste de los términos y ∆x, veamos el promedio de la
diferencia, definido como P12
|Di |
P = i=0
12
Donde Di son las diferencias obtenidas, se obtiene que P ≈ 1.8333 × 10−2 , es un valor bastante bajo, lo cual
indica que las mediciones son buenas.
La gráfica del comportamiento de las diferencias para el seno es la siguiente

0.1


Variaciones de diferencias para el seno

0.08


0.06

Diferencia


0.04


0.02


0

0
 50
 100
 150
 200
 250
 300
 350
 400

‐0.02

Grados


Finalmente, vamos a ver que tan exacto fue nuestro programa, se define el error como
|V0 − V |
E=
V0
Donde V0 es el valor esperado y V es el valor obtenido, haciendo el cálculo, nos queda que el promedio de
E, es E ≈ 3.91 × 10−2 o en porcentaje E ≈ 3.91%

3.2 Coseno
Finalmente aquı́ está la tabla de los valores obtenidos de la función coseno Nota: A partir de 150 ∆x =
1 × 10−1 ; a partir de 330 ∆x = 1

5
Función Valor Valor obtenido Diferencia
cos(0) 1 1 0
cos(30) 0.866025403784439 0.866026351695 −9.4791 × 10−7
cos(60) .5 0.499968136978 3.1863 × 10−5
cos(90) 0 −0.000890322958366 8.9032 × 10−4
cos(120) −.5 −0.508754724135 8.7547 × 10−3
cos(150) −0.866025403784439 −0.865607657172 −4.1774 × 10−4
cos(180) −1 −1.00167335603 1.6733 × 10−3
cos(210) −0.866025403784439 −0.865513071157 −5.1233 × 10−4
cos(240) −0.5 −0.49396812212 −6.0318 × 10−3
cos(270) 0 0.0344747316528 −3.4474 × 10−2
cos(300) .5 0.64778274139 −1.4778 × 10−1
cos(330) 0.866025403784438 0.724440731698 1.4158 × 10−1
cos(360) 1 0.965251687094 3.4748 × 10−2
El promedio de la diferencia para el coseno es P ≈ 3.0658333 × 10−2 Y la grafica del comportamiento del
coseno es la siguiente


Variaciones de diferencias para el coseno


0.18

0.16

0.14

0.12

0.1

Diferencia


0.08

0.06

0.04

0.02

0

‐0.02
 0
 50
 100
 150
 200
 250
 300
 350
 400

Grados


El promedio de error para coseno es de E ≈ .0511 o en porcentaje E ≈ 5.11%

4 Conclusiones
Si se implementa un módulo en el programa el cual sea capaz de lidiar con el error como se lidió manualemnte
en esta ocasión, entonces ocurre algo bastante curioso, al parecer el error tiene un comportamiento periódico
como pudimos observar en la gráfica del seno. Esto se debe a que la corrección del error ocurre cuando
éste es intolerable, por tanto tiene un pequeño margen para crecer; si quisiéramos que siempre estuviera en
las mejores condiciones probablemente la computadora se sobrecargarı́a y serı́a demasiado tedioso usar el
programa.
Sin embargo creo que hay que pulir los márgenes de error, dado que aunque el mayor es de 5%, el cual
es un margen bastante aceptable, se puede mejorar.

5 Código fuente
from math import *

6
"""Este es el bloque de funciones del progrmama, en esta seccion se
encuentra la derivada, el factorial y la funcion definida por el usuario"""
#Defino la funcion derivada, simplemente es la definicion de derivacion
def derivada(f):
def drf(x,dx=1e-2):
return (f(x+dx/2)-f(x-dx/2))/dx
return drf
#defino como funcion la funcion que el usuario quiso aproximar
def f(x):
return eval(e)
#defino la funcion factorial
def fac(n):
if n == 0:
return 1
else:
return n * fac(n-1)

#estas son las variables que se van a usar en el programa


p=input("De cuantos pasos quieres la serie de Taylor-Maclaurin?: ")
e=raw_input("Cual es la funcion que deseas aproximar (Por favor dala en terminos de x)?: ")
F=0
f0=0
f1=0
a=input("En que punto la deseas valuar?: ")
t=derivada(f)
#esta es la serie de Taylor-Maclaurin
for y in range(p):
MTd=0
MTm=(a**y)/fac(y)
if y==0:
MTm=0
else:
MTd=t(0)
t=derivada(t)
F+=(MTd*MTm)

RF=f(0)+F
print "El resultado es"
print RF

También podría gustarte