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

Lecturas recomendadas de este mismo blog

Otras lecturas sugeridas

Otros sitios donde puedes encontrar magníficas explicaciones acerca de la Transformada de Fourier:

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.

Comentarios

  1. Este blog ha sido eliminado por un administrador de blog.

    ResponderBorrar
    Respuestas
    1. Hola, 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?

      El 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.

      Borrar
  2. es muy bueno el articulo y espectacular poder tocar cada radio y velocidad!!! excelente. Muchas gracias por el trabajo divulgativo

    ResponderBorrar
    Respuestas
    1. Hola, gracias por tu comentario. Me alegra saber que te ha sido de utilidad. Saludos. :)

      Borrar

Publicar un comentario

Entradas populares

Galileo Galilei y su ley de caída libre

Breve historia del Cálculo

Una historia de la Teoría de Conjuntos