La órbita de Homero Simpson: Una divertida aplicación de la Transformada Discreta de Fourier
Introducción
En 2008 Santiago Ginnobili y Christián C. Carman publicaron un ejemplo de un
sistema de epiciclos trazando una órbita formando la figura del famoso personaje de caricaturas,
Homero Simpson. En ese mismo año Santiago Ginnobili publicó en su canal de
YouTube la animación de dicha órbita:
Desde entonces, esta animación ha causado admiración y revuelo en las redes
sociales, en particular en las comunidades interesadas en las matemáticas, e
incluso muchas personas han realizados sus propias versiones.
Aquí surgen varias preguntas. ¿Cómo se calculan los radios de cada uno de los
círculos? ¿Cómo se calculan las velocidades de rotación de cada epiciclo? En
general, ¿cómo Santiago Ginnobili y Christián C. Carman lograron hacer esta
animación? En realidad detrás de esta construcción se encuentra escondida la
Transformada Discreta de Fourier (TDF), lo cual he mencionado en una entrada
anterior (Dibujando curvas cerradas con epiciclos) pero no expliqué exactamente cómo. Básicamente se esta aplicando la TDF
para aproximar la órbita de Homero, porque esta es en realidad una curva
cerrada que podemos considerar como una función periódica (ver la
entrada Interpolación trigonométrica para más detalles). De esta manera, podemos utilizar la TDF para
obtener el sistema de epiciclos necesarios para crear órbitas como la de
Homero Simpson.
A continuación mostraré cómo se puede hacer esto con ayuda de la computadora
usando GeoGebra. Pero antes de calcular aproximaciones de curvas cerradas
tenemos que repasar una interpretación geométrica de las funciones
trigonométricas $\text{sen}$ y $\cos.$
Interpretación geométrica de $\text{sen}$ y $\cos.$
Las funciones trigonométricas $\text{sen}\,x$ y $\cos x$ están definidas en
todos los reales. Además son periódicas y su codominio es el intervalo
cerrado $[-1,1]$. Sus gráficas el intervalo $[0, 2\pi]$ tiene el siguiente
aspecto
Originalmente estas funciones fueron definidas geométricamente usando el
círculo unitario con el cual podemos apreciar mejor su naturaleza periódica.
En la siguiente animación se puede observar esto.
De la misma forma, podemos representar geométricamente la función $R
\,\text{sen}\, \omega \,x$. En el siguiente applet podemos apreciar que el
parámetro $R$ determina el radio del círculo y la amplitud del seno,
mientras que $\omega $ determina la frecuencia del seno, es decir la
velocidad a la que gira el punto sobre el círculo de radio $R$.
De forma general, usando esta interpretación geométrica, podemos representar
las funciones
$$R_1 \,\text{sen} \,\omega_1 \,x, R_2 \,\text{sen} \,\omega_2 \,x, R_3
\,\text{sen}\, \omega_3 \,x ,$$
donde $R_i$ son los radios (amplitudes) y $\omega_i$ las frecuencias. Esto
se aprecia de forma separada en la siguiente animación:
Ahora, ¿cuál sería la representación geométrica de la suma de estas tres
funciones?
$$R_1 \,\text{sen} \,\omega_1 \,x + R_2 \,\text{sen}\, \omega_2 \,x+ R_3
\,\text{sen} \,\omega_3 \,x.$$
Lo que sucede geométricamente con los círculos es que se combinan formando
un sistema de epiciclos como se puede apreciar en el siguiente applet:
De forma análoga se puede obtener una representación geométrica de la forma
más general
$$R_1 \,\text{sen} (\omega_1 \,x +\phi_1)+ R_2 \,\text{sen}( \omega_2 \,x
+\phi_2)+ R_3 \,\text{sen} (\omega_3 \,x +\phi_3).$$
donde $\phi_i$ representa a la fase, también llamado desplazamiento.
Relación con la Transformada Discreta de Fourier
Aunque no lo parezca estamos aplicando aquí la Transformada Discreta de
Fourier y su inversa. Es decir, cuando separamos las funciones sinusoidales estamos
aplicando la TDF y al juntarlas aplicamos su inversa.
Esto es realmente sorprendente y lo mejor de todo es que se puede aplicar a
funciones paramétricas de la forma:
\[ \left\{ \begin{array}{lcl} x (t)\\ y (t) \end{array} \right. \quad t\in[0,2\pi], \]
las cuales se pueden aproximar con sumas finitas de funciones
sinusoidales. Esto es porque si tenemos un conjunto de $n$ puntos sobre la
curva cerrada
$$\mathbf x=\left\{ (a_0, b_0) , (a_1,b_1), \cdots, (a_{n-1}, b_{n-1})
\right\},$$
los podemos considerar como números complejos
\begin{equation*} \begin{aligned} \mathbf x = & \,\left\{ a_0 + i\,b_0
, a_1+i\,b_1, \cdots, a_{n-1}+i\,b_{n-1}\right\}\\ = & \, \left\{ x_0,
x_1, x_2, \cdots,x_{n-1}\right\}. \end{aligned} \end{equation*}
Al aplicar la TDF calculamos los valores complejos
$$\mathbf X=\left\{ X_0, X_1, ,X_2, \cdots, X_{n-1} \right\}.$$
Una vez hecho esto, necesitamos calcular la longitud de cada uno de los
puntos de $\mathbf X$, es decir, el módulo
$$R_i = \left| \textbf{Re}(X_i) + i\, \textbf{Im}(X_i)\right|$$
y su fase, es decir, su argumento
$$\phi_i =\textbf{arg}(X_i).$$
Con los valores de $R_i$ y $ \phi_i$ entonces podemos determinar nuestro
sistema de epiciclos que trazarán la órbita o curva cerrada requerida.
Finalmente, se aplica la inversa de la TDF para calcular la
interpolación trigonométrica
\[ \left\{ \begin{array}{lcl} x & = & \displaystyle \sum_{i}^n
\big(\textbf{Re}(X_i) \, \cos(\omega_i t )
-\textbf{Im}(X_i) \, \sin(\omega_i t)\big) \\ y & = &
\displaystyle\sum_{i}^n \big( \textbf{Im}(X_i) \,\cos(\omega_i t )
+\textbf{Re}(X_i) \, \sin(\omega_i t) \big)\end{array} \right.
\quad t\in[0,2\pi], \]
la cual se aproximará a nuestra curva original.
La órbita del cuadrado
Veamos ahora un ejemplo sencillo para determinar el sistema de epiciclos y
aproximar una curva cerrada dada. Iniciaremos con el conjunto de datos
\begin{equation*} \begin{aligned} \mathbf x = {} & \left\{ \left(2, 2
\right), \left(2, 1 \right), \left(2, -\frac{3}{5} \right), \left(2, -2
\right), \left(\frac{1}{2}, -2 \right), \right.\\ & \left. \left(-1,
-2 \right), \left(-2, -2 \right), \left(-2, -\frac{1}{2} \right),
\left(-2, 1 \right), \right.\\ & \left. \left(-2, 2 \right), \left(-1,
2 \right), \left(\frac{1}{2}, 2 \right), \left(\frac{3}{2}, 2 \right)
\right\}. \end{aligned} \end{equation*}
Ahora, como en este caso $n=13$, usaremos la versión para valores impares
de $N=2m+1$ de la TDF para bajas frecuencias
\begin{equation*}
\begin{aligned}
X_k =& \frac{1}{N} {\large\sum_{ n=0}^{N-1} x_{n} \cdot e^{- i \,k \, \frac{2
\pi }{N} \, n} }, \quad k = -(N-1)/2, \ldots, (N-1)/2\\
=& \frac{1}{N} {\large\sum_{ n=0}^{N-1}} x_{n}
\left[ \cos \left( k\, \frac{2 \pi }{N} \, n\right) -i\, \sin \left( k\, \frac{2 \pi }{N} \, n \right) \right]
\end{aligned}
\end{equation*}
Dado que serán demasiados los cálculos que tenemos que hacer, usaremos
GeoGebra para ayudarnos en esta ardua labor (En adelante es necesario tener un conocimiento básico del programa. Si aún no lo conoces, te recomiendo el Tutorial GeoGebra donde puedes aprender los elementos básicos de GeoGebra clásico. Tampoco es necesario explicar aquí cada uno de los comandos que vamos a usar a continuación. Sin embargo, si deseas conocer los detalles de cada comando entonces consulta: Comandos GeoGebra).
Para comenzar definimos la
lista:
L_1 = {(2, 2), (2, 1), (2, -3 / 5), (2, -2), (1 / 2, -2), (-1, -2), (-2,
-2), (-2, -1 / 2), (-2, 1), (-2, 2), (-1, 2), (1 / 2, 2), (3 / 2, 2)}
Para calcular la parte real e imaginaria de cada término de $\mathbf X$
escribimos:
N = Longitud(L_1)
FReal = Secuencia( 1/N * Suma( Secuencia( x(Elemento(L_1, k)) * cos((2 * pi)/N * (k-1) * j) + y(Elemento(L_1, k)) * sen((2 * pi)/N * (k-1) * j), k, 1, N ) ), j, -(N-1)/2, (N-1)/2)
FImg = Secuencia( 1/N * Suma( Secuencia( y(Elemento(L_1, k)) * cos((2 * pi)/N * (k-1) * j) - x(Elemento(L_1, k)) * sen((2 * pi)/N * (k-1) * j), k, 1, N ) ), j, -(N-1)/2, (N-1)/2)
Ahora calculamos la longitud, la fase (ángulo) y la frecuencia:
Mod = Secuencia( sqrt(Elemento(FReal, j)^2 + Elemento(FImg, j)^2), j, 1,
N )
Pha = Secuencia( atan2(Elemento(FImg, j), Elemento(FReal, j) ) , j, 1, N
)
Freq = Secuencia( j, j, -(N-1)/2, (N-1)/2)
Con estos datos podemos construir nuestro sistema de epiciclos que se
pueden definir con las siguientes líneas:
t0 = Deslizador(0, 2 pi, 0.0099, 0.5, 150, false, true, false,
false)
m = Deslizador(1, N, 1, 1, 140, false, true, false, false)
Valor(m, 13)
C1 = (0, 0)
L_2 = Encadena({ {C1}, Secuencia( Suma(Secuencia( ( Elemento(Mod, j ) *
cos(Elemento(Pha, j ) + Elemento(Freq, j ) * t0), Elemento(Mod, j ) *
sen(Elemento(Pha, j) + Elemento(Freq, j) * t0) ), j, 1, k )), k, 1, m )
} )
s = Poligonal(L_2)
L_3 = Encadena({{Circunferencia((0, 0), Elemento(L_2, 2))},
Secuencia(Circunferencia(Elemento(L_2, i), Elemento(Mod, i)), i, 1, m
)})
Finalmente, para calcular la curva que aproxima a los datos de la lista
L_1 utilizamos la inversa de la TDF:
\begin{equation*} \begin{aligned}f(x) = & {\large\sum_{ k=-m}^{m} } X_{k} \cdot e^{ i \, k \, x},\quad m = (N-1)/2\end{aligned} \end{equation*}
Esto lo podemos calcular con las siguientes líneas:
fx(x) = Suma(Secuencia( Elemento(FReal, j) * cos(Elemento(Freq, j) * x) -
Elemento(FImg, j) * sen(Elemento(Freq, j) * x), j, 1, m))
Visibilidad(fx, 1, false)
fy(x) = Suma(Secuencia( Elemento(FImg, j) * cos(Elemento(Freq, j) * x) +
Elemento(FReal, j) * sen(Elemento(Freq, j) * x), j, 1, m))
Visibilidad(fy, 1, false)
orbita = Curva(fx(t), fy(t), t, 0, 2 pi)
Listo, el resultado final se puede apreciar en el siguiente applet.
Notemos que los epiciclos no están ordenados del más grande a más pequeño.
El lector interesado podrá buscar la manera de ordenar los epiciclos ya
sea usando GeoGebra o cualquier otro lenguaje de programación. Cabe
señalar también que existe un método más eficiente para realizar todos los
cálculos, esto se conoce como
Transformada Rápida de Fourier. Tema que no abordaremos en esta ocasión.
Comentarios finales
La Transformada Discreta de Fourier es una de las ideas más profundas
jamás hechas. Desafortunadamente, su significado se encuentra enterrado
dentro de ecuaciones un tanto intimidantes:
\begin{equation*}
\left\{
\begin{array}{ll}
X_k = \dfrac{1}{N} \large \displaystyle \sum_{n=0}^{N-1} x_n \cdot e^{- i \,k \, \frac{2 \pi}{N} \,n }, & k = 0, 1,\ldots, N-1 \\x_n=\large \displaystyle \sum_{ k=0}^{N-1} X_{k} \cdot e^{ i \,k \, \frac{2 \pi}{N} \,n }, & n = 0, 1,\ldots, N-1
\end{array}
\right.
\end{equation*}
A pesar de la complejidad de estas expresiones, podemos hacer analogías
para poder comprender lo que la Transformada Discreta de Fourier hace. La
siguiente es una excelente metáfora hecha por
Kalid Azad:
¿Qué hace la Transformada Discreta de Fourier? Dado un licuado,
encuentra la receta para hacerlo.
¿Cómo? Pasa el licuado a través de filtros para extraer cada
ingrediente.
¿Por qué? Las recetas son más fáciles de analizar, comparar y
modificar que el licuado en sí.
¿Cómo recuperamos el licuado? Licúa todos los ingredientes y listo.
Aquí está la versión "matemática" de lo anterior:
La Transformada Discreta de Fourier toma un patrón basado en el tiempo,
mide cada ciclo posible y devuelve la "receta del ciclo" general (la
amplitud, el desplazamiento y la velocidad de rotación para cada ciclo
que se encontró).
Es por eso que con la Transformada Discreta de Fourier podemos construir
funciones o curvas cerradas periódicas tales como la de Homero Simpson. De
hecho, las posibilidades son infinitas.
Applet en ventana completa:
The orbit of Homer Simpson.
Hemos llegado al final, ha sido un camino largo, pero valió la pena.
Espero el contenido de esta entrada te ayude a comprender el significado
de la Transformada de Fourier y que puedas usar el código de GeoGebra
para crear tus propias curvas cerradas trazadas por epiciclos (o con
cualquier otro lenguaje de programación). Hasta la próxima.
Referencias
- Ginnobili, S. y Carman, C. (2008). Deferentes, Epiciclos y Adaptaciones. Filosofia e história da ciência no Cone Sul. Seleção de trabalhos do 5º Encontro.Publisher: Associação de Filosofia e História da Ciência do Cone Sul (AFHIC)Editors: Martins, Roberto de Andrade; Silva, Cibelle Celestino; Ferreira, Juliana Mesquita Hidalgo; Martins, Lilian Al-Chueyr Pereira.
- Ponce Campuzano, J. C. (2023). Tracing closed curves with epicycles: A fun application of the Discrete Fourier Transform. North American GeoGebra Journal. Vol 11. No. 1. pp. 1-14.
- Ponce Campuzano, J. C. (2022). Trigonometric intepolation using the Discrete Fourier Transform. North American GeoGebra Journal. Vol. 10. No. 1. pp. 1-13.
- Stein, E. M y Shakarchi, R. (2003). Fourier Analysis: An Introduction. Princeton University Press. Oxford.
- Sundararajan, D. (2018). Fourier Analysis - A Signal Processing Approach. Springer. Singapur.
Lecturas recomendadas de este mismo blog
Otras lecturas sugeridas
Otros sitios donde puedes encontrar magníficas explicaciones acerca de
la Transformada de Fourier:
- An Interactive Guide To The Fourier Transform por Kalid Azad
- An Interactive Introduction to Fourier Transforms por Jez Swanson
Tutoriales en línea
Daniel Shiffman tiene bastantes tutoriales acerca de este tema en su
canal de
The Coding Train
Nota: Todos los applets de GeoGebra se pueden consultar en el
libro en línea
Discrete Fourier Transform.
Gracias por llegar al final de este artículo. Si deseas puedes apoyarme en Patreon usando el siguiente enlace:
Become a Patron!Con tu apoyo podré seguir escribiendo y compartiendo artículos y applets de matemáticas.
Este blog ha sido eliminado por un administrador de blog.
ResponderBorrarHola, gracias por tu comentario. ¿Es solo la explicación de las fórmulas en conjunto con el código lo que es regular? ¿O el artículo en general?
BorrarEl código de GeoGebra que aquí presento funciona tal y como está, pero obviamente se puede mejorar. Si gustas puedes compartir tu código para mejorarlo.
Saludos.
es muy bueno el articulo y espectacular poder tocar cada radio y velocidad!!! excelente. Muchas gracias por el trabajo divulgativo
ResponderBorrarHola, gracias por tu comentario. Me alegra saber que te ha sido de utilidad. Saludos. :)
Borrar