Series de Fourier (Grupo PPAD)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Series de Fourier (Grupo PPAD). |
| Asignatura | EDP |
| Curso | 2024-25 |
| Autores | Pablo Vidal Nacle, Pablo Maestro Fernández, Alex Heredero Santamaría, Diego Moñino Vizmanos |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
1 . Introducción
Se define el espacio de Hilbert [math]L^2(a,b)[/math] como:
donde [math] a,b \in \mathbb{R} [/math] y [math] a \lt b [/math]. [math]L^2(a,b)[/math] es un espacio vecotrial con producto escalar asociado:
Esta construcción del espacio [math] L^{2} [/math] motiva plantear la posibilidad de definir una base numerable que permita expresar todos los elementos del espacio en función de los elementos de la base.
2 . Base trigonométrica
Tal y como se ha definido en la introducción, consideramos el espacio [math]L^2(-\pi,\pi)[/math]. En éste se define la base numerable [math] \beta [/math] dada por los siguientes elementos:
que se conoce como referencia de Fourier trigonométrica.
3 . Aproximación de una función por la base trigonométrica
Seadefinida en el intervalo [-2,3], se busca aproximar f mediante la base trigonométrica del espacio [math]L^2(-2,3)[/math].
Consideramos el espacio de Hilbert \( L^2(- \pi, \pi) \) con el producto interno \( \langle \cdot, \cdot \rangle_{L^2} \). En este espacio tomamos la base de Fourier trigonométrica:
Si consideramos ahora el espacio \( L^2(a, b) \), buscamos una base ortonormal (referencia de Fourier) en este espacio. Para ello, hacemos el cambio de variable:
De esta manera, \( h(x) \in [-\pi, \pi] \), lo que permite trasladar la base ortonormal del espacio \( L^2(- \pi, \pi) \) al nuevo intervalo \( [a, b] \).
Bajo este cambio de variable, una función \( f(x) \) en \( L^2(a,b) \) se puede expresar como:
donde el coeficiente \( d_0 \) es:
para que su norma sea 1, pues:
De esta forma, obtenemos la base de Fourier de \( L^2(a,b) \):
Para preservar la ortonormalidad en \( L^2(a,b) \), los senos y cosenos han sido normalizados con el factor:
para los términos trigonométricos.
En [math] L^2(-2,3) [/math], nos queda la base:
Sea la función \( f(x) = x e^{-x} \). Se verifica que \( f(x) \in L^2(-2,3) \), pues:
Dado que \( f(x) \) es continua y satisface la condición de Dirichlet, su desarrollo en serie de Fourier converge a la función en los puntos de continuidad y en los extremos. Así, se tiene:
Calculemos ahora los coeficientes de la serie de Fourier
El coeficiente \( d_0 \) se obtiene como:
Para los coeficientes \( d_n \):
Para los coeficientes \( d_m \):
De esta forma, se puede aproximar la función f mediante los primeros 5, 10 y 20 términos de su desarrollo en serie de Fourier, empleando el siguiente código de python:
from tqdm import tqdm
import sympy as sp
import math
import numpy as np
import matplotlib.pyplot as plt
e=0
n=5
l=0
for i in tqdm(range(1,n)):
# Definir la variable x
x = sp.symbols('x')
# Definir la función a integrar
integrand =(math.sqrt(2)/math.sqrt(5))* x * sp.exp(-x)*sp.cos(i * ((2*sp.pi*x-sp.pi)/5))
# Calcular la integral de la función en el intervalo [-2, 3]
integral_result = sp.integrate(integrand, (x, -2, 3))
integrand2 = (math.sqrt(2)/math.sqrt(5))* x * sp.exp(-x)*sp.sin(i * ((2*sp.pi*x-sp.pi)/5))
# Calcular la integral de la función en el intervalo [-2, 3]
integral_result2 = sp.integrate(integrand2, (x, -2, 3))
e=e+integral_result*(math.sqrt(2)/math.sqrt(5))*sp.cos(i * ((2*sp.pi*x-sp.pi)/5))
l=l+integral_result2*(math.sqrt(2)/math.sqrt(5))*sp.sin(i * ((2*sp.pi*x-sp.pi)/5))
d0=-(4+sp.exp(5))/(math.sqrt(5)*sp.exp(3))
f=d0/math.sqrt(5)+e+l
f_numeric = sp.lambdify(x, f, "numpy")
# Definir la función f(x) = x * exp(-x)
def f(x):
return x * np.exp(-x)
# Generar valores de x en el rango [-2, 3]
x_vals = np.linspace(-2, 3, 1000)
y_vals = f(x_vals)
# Aproximación de Fourier (f_numeric debe estar definida previamente)
y_fourier = f_numeric(x_vals)
# Calcular el error
error_vals = np.abs(y_vals - y_fourier)
# Crear el gráfico de la función y su aproximación
plt.figure(figsize=(6,4))
plt.plot(x_vals, y_vals, label=r'$f(x) = x e^{-x}$',linestyle='dashed', color='b')
plt.plot(x_vals, y_fourier, label=f"Aproximación n={n}", color='r')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.title("Comparación entre f(x) y su Aproximación de Fourier")
plt.legend()
plt.grid()
plt.show()
# Gráfico del error
plt.figure(figsize=(6,4))
plt.plot(x_vals, error_vals, label="Error Absoluto", color='g')
plt.xlabel("x")
plt.ylabel("Error")
plt.title("Error entre f(x) y su aproximación de Fourier")
plt.legend()
plt.grid()
plt.show
