from sympy import *
init_printing()

"""
Explanation: Transformada de Fourier con Sympy
En este notebook usaremos el módulo de matemática simbólica Sympy, que incluye la función fourier_transform.
Primero cargamos el módulo y activamos la opción para que los resultados se despliegen en forma más amigable en el notebook:
End of explanation
"""


x, k, xi, t, omega = symbols('x, k, xi, t, omega', real=True)
a, k0, alpha = symbols('a, k_0, alpha', positive=True)

"""
Explanation: A continuación, definimos algunas variables que usaremos, algunas de ellas definidas como reales, y otras como reales positivos
End of explanation
"""


f1 = exp(-a*t**2)
f1

"""
Explanation: Gaussiana
Como primer ejemplo, definimos una gaussiana
End of explanation
"""


fourier_transform(f1,t,omega/(2*pi))

"""
Explanation: La implementación de la función fourier_transform requiere ingresar como argumento la función a transformar, la variable respecto a la cual se calcula la transformada, y el valor de la frecuencia correspondiente. Esto significa que si queremos transformar la función $f(t)$ debemos ingresar $(f,t,\omega/2\pi)$ como argumento:
End of explanation
"""


f2 = exp(-a*x**2)*cos(k0*x)
f2

fourier_transform(f2,x,k/(2*pi))

"""
Explanation: Sinusoidal amorgtiuada con función gaussiana
End of explanation
"""


f3 = Heaviside(x+a)*Heaviside(a-x)
f3

Tf3 = fourier_transform(f3,x,k/(2*pi))
Tf3

"""
Explanation: Función escalonada
End of explanation
"""


simplify(Tf3.as_real_imag())[0]

"""
Explanation: Esta forma debería ser equivalente a la calculada en clases. Podemos simplificarla un poco:
End of explanation
"""


f4 = DiracDelta(x-xi)
f4

fourier_transform(f4,x,k/(2*pi))

"""
Explanation: Delta de Dirac
End of explanation
"""


