Series de Fourier
Contents
Series de Fourier#
import time
print(' Última ejecución ', time.asctime() )
Última ejecución Tue Apr 11 18:07:20 2023
Objectivos#
Concepto de función par, impar y periódica.
Concepto de base completa de funciones.
Descomposición de una función periódica en series de Fourier.
Relación entre las series de Fourier y las series numéricas.
Mostrar algunos ejemplos sencillos.
# general imports
%matplotlib inline
%reload_ext autoreload
%autoreload 2
# numpy and matplotlib
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
matplotlib.style.use('ggplot')
import graph_utils as gf
figsize = 6, 3.8
cmap = 'hot'
Introducción#
Fourier fue un gran matemático Francés de la época Napoleónica que se dio cuenta que una función periódica podía descomponerse en una serie de sumas de senos y cosenos…
N, T = 2, np.pi
xrange = (-N*T, N*T, 100)
fx = lambda x: np.mod(x, T)
gf.fun1d(fx, xrange);
Series de Fourier#
Funciones pares, impares y periódicas.#
Decimos que una función \(f(x)\) es periódica con periodo \(T\) si: \(f(x + T) = f(x)\).
Por ejemplo, \(f(x) = sin(x)\) es una función periódica de periodo \(T = 2\pi\), \(\sin(2\pi + x) = \sin(x)\)
Una función es par si \(f(- x) = f(x)\) e impar si \(f(-x) = - f(x)\)
Por ejemplo, \(f(x) = \cos(x)\) es par, y \(f(x) = \sin(x)\) es impar.
Ejercicio: Verifica que dado \(n\) natural, \(n>0\), \(\cos (n x)\) es par y \(\sin(nx)\) impar, y ambos son periódicas con periodo \(2 \pi\)
n, m, N = 1, 1, 1
xrange = (-N*np.pi, N*np.pi, 100)
sx = lambda x : np.sin(n*x)
cx = lambda x : np.cos(m*x)
gf.fun1d(sx, xrange, label ='$\sin '+str(n)+'x$')
gf.fun1d(cx, xrange, newfig = False, label = '$\cos '+str(m)+'x$');
Teorema: Sea \(f(x)\) una función par y \(g(x), \, h(x)\) impar, cumplen:
\(g(0) = 0\)
\(\int_{-a}^{a} f(x) \, \mathrm{d}x = 2 \int_0^a f(x) \, \mathrm{d}x\)
\(\int_{-a}^a g(x) = 0\)
\(f(x) \, g(x)\) es impar
\(g(x) \, h(x)\) es par
También se cumple:
\(\int_{-\pi}^{\pi} g(x) \, \cos(nx) \, \mathrm{d}x = 0\),
\(\int_{-\pi}^{\pi} f(x) \, \sin(nx) \, \mathrm{d}x = 0\),
para \(n=1, 2, \dots \in \mathcal{N}\)
Ejercicio: Toda función \(f(x)\) se puede expresar como la suma de una función par y otra impar.
Definimos:
donde \(h(x)\) es par, \(g(x)\) es impar y \(f(x) = h(x) + g(x)\)
Ejercicio: Convertir \(f(x) = 0\) si \(x \le 0\) y 1 si \(x \gt 0\) en una suma de función par e impar.
Funciones ortogonales#
Las siguiente funciones, \(\sin(nx), \, \cos(mx)\) con \(n, m = 1, 2, \dots \in \mathcal{N}\) son «ortogonales».
Teorema: Se cumple:
\(\int_{-\pi}^{\pi} \sin(nx) \cos (mx) \mathrm{d}x = 0\)
\(\int_{-\pi}^{\pi} \cos(nx) \cos (mx) \mathrm{d}x = \pi \delta_{nm}\)
\(\int_{-\pi}^{\pi} \sin(nx) \sin (mx) \mathrm{d}x = \pi \delta_{nm}\)
donde:
\( \delta_{nm} = 1\) si \(n = m\) y 0 si \(n \ne m\)
Ejercicio: Comprueba que las funciones, \(\sin n x, \, \cos m x \), con \(n, m = 1, 2, \dots \in \mathcal{N}\) son ortogonales en \([-\pi, \pi]\)
n, m, N = 1, 2, 1
xrange = (-N*np.pi, N*np.pi, 100)
scx = lambda x : np.sin(n*x) * np.cos(m*x)
ssx = lambda x : np.sin(n*x) * np.sin(m*x)
ccx = lambda x : np.cos(n*x) * np.cos(m*x)
#gf.fun1d(scx, xrange, label = '$\sin('+str(n)+'x) \cos('+str(m)+'x)$')
#gf.fun1d(ssx, xrange, newfig = False, label = '$\sin('+str(n)+'x) \sin('+str(m)+'x)$');
gf.fun1d(ccx, xrange, newfig = False, label = '$\cos('+str(n)+'x) \cos('+str(m)+'x)$');
La integral
es nula por ser el integrando una función impar.
La integral
que vale 0 si \( n \ne m\) y para \(n=m\)
y finalmente, la integral
que vale 0 si \( n \ne m\) y para \(n=m\)
Diremos que dos funciones son ortogonales, \(f(x), \, g(x)\), en un intervalo \([a, b]\) si:
y ortonormales si su norma es unidad, siendo su norma:
Decimos que un conjunto numerable \(\{\Psi_n(x)\}\) con \(n \in \mathcal{N}\) es completo en un intervalo \([a, b]\), si son funciones ortonormales que permiten que «toda» función \(f(x)\) pueda expresarse como:
donde \(a_n\) son los coeficientes:
esto es, podemos dar una función como una serie de funciones.
Series de Fourier#
El siguiente conjunto de funciones definidas es completo en \([-\pi, \pi]\):
con \(n=1, 2, \dots \in \mathrm{N}\)
Toda función periódica continua, acotada, \(f(x)\), con periodo \(T= 2 \pi\) puede darse como una serie de Fourier:
donde:
Cuestión: Si \(f(x)\) es continua con periodo \(2\pi\) y par, ¿tendra coeficientes \(b_n\)? ¿Y si es impar tendrá \(a_n\)?
Ejemplo: Obtener la serie de Fourier de la función \(f(x) = x\) si \(x \ge 0\) y \(f(x) = - x\) si \(x \le 0\).
xrange = (-np.pi, np.pi, 100)
def fx(x):
sign = x/abs(x)
return sign*x
gf.fun1d(fx, xrange);
Es una función par, por lo tanto \(b_n = 0\).
Si \(n\) es par, \(a_n = 0\). Podemos dar
Asi:
N = 100
def sx(x):
ss = np.pi/2
for k in range(0, N):
ss = ss + -4*np.cos((2*k+1)*x)/(np.pi*(2*k+1)*(2*k+1))
return ss
gf.fun1d(fx, xrange, label = 'f(x)');
gf.fun1d(sx, xrange, newfig = False, label = 'S(x)');
A veces las series de Fourier pueden ayudarnos a calcular series numéricas
**Ejercicio*¨: Calcula, usando el desarrollo de Fourier anterior, el valor de:
Solución: Si valoramos la serie en \(x=0\) obtenemos:
Esto es:
Teorema de Dirichlet Toda función periódica en \([-\pi, \pi]\) (continua en un número finito de trozos y con un número finito de máximos y mínimos) admite desarrollo en serie de Fourier.
La función puede ser discontinua en un número finito de puntos mientras que la serie de Fourier siempre es continua.
En los puntos de discontinuidad la serie nos da el valor medio entre su valor a la izquierda y la derecha de la función en ese punto.
Ejemplo: Sea la función definida en \([-\pi, \pi]\)
xrange = (-np.pi, np.pi, 100)
def fx(x):
sig = x/abs(x)
return 1/2 + sig/2.
gf.fun1d(fx, xrange);
los términos \(b_n\) para \(n\) par se anulan, así podemos dar:
con \(k=0, 1, 2 \dots \in \mathcal{N}\)
Por lo tanto la función se expresa con la siguiente serie de Fourier:
Experimenta: cambia en el siguiente código el número de términos de la serie de Fourier y observa su convergencia con la función original.
N = 1000
def sx(x):
ss = 1./2.
for k in range(0, N):
ss = ss + 2*np.sin((2*k+1)*x)/(np.pi*(2*k+1))
return ss
gf.fun1d(fx, xrange, label = 'f(x)');
gf.fun1d(sx, xrange, newfig = False, label = 'S(x)');
Cuestión: ¿Cuánto vale la serie de Fourier en \(x=0\)? ¿Y la función?
Series periódicas con periodo \(2L\)#
Sea ahora una función periódica con periodo \([-L, L]\), la podemos dar como una serie de Fourier a partir del siguiente conjunto de funciones ortonormales.
con:
Así:
Cuestión: ¿Qué funciones y desarrollo obtienes con \(L=\pi\)?
Desarrollo de Fourier para una función no periódica definida en un intervalo [0, L]#
¿Y si la función está definida solo en una región \([0, L]\)?
Podemos extender la función a \([-L, L]\) por ejemplo \(f(-x) = f(x)\) haciéndola par, y calculado su serie de Fourier, y declarándola válida solo en el intervalo \([0, L]\)
Ejercicio: Sea \(f(x) = x^2\) definida en \([0, 2]\) dar su desarrollo en serie de Fourier.
definimos \(g(x) = x^2\) en \([-2, 2]\)
e integrando por partes:
Luego:
N = 100
xrange = (-2., 2., 100)
fx = lambda x: x*x
def sx(x):
ss = 4./3.
for n in range(1, N):
ss = ss + 16 * (-1)**n * np.cos( n*np.pi*x/2) / (n*n*np.pi*np.pi)
return ss
gf.fun1d(fx, xrange, label ='f(x)');
gf.fun1d(sx, xrange, newfig = False, label = 'S(x)');
La belleza de los números complejos nos permite reescribir de forma compacta y elegante los desarrollos de Fourier, date cuenta:
Así:
Si definimos:
tenemos:
Pero ésta es otra historia y debe ser contada en otra ocasión
¡Aún hay más!#
Joseph Fourier fue un gran físico y matemático Francés que se dio cuenta que una función periódica podía descomponerse en una serie de sumas de senos y cosenos. Fourier participó en la famosa expedición «científica» de Napoleón a Egipto.
Aquí tienes su entrada en la Wikipedia.
Por cierto, Dirichlet fue alumno suyo.
En análisis en transformadas de Fourier es fundamental en Física cuántica, en Optica, y tiene aplicaciones fundamentales en propagación de señales y tratamiento de imágenes.
¡Algunos de tus filtros de instagram son algoritmos que modifican las transformadas de Fourier de las imágenes!