Diferencia entre revisiones de «Series de Fourier (Grupo PPAD)»

De MateWiki
Saltar a: navegación, buscar
Línea 99: Línea 99:
 
</math></center>
 
</math></center>
  
De esta forma, se puede aproximar la función f mediante los primeros 5, 10 y 20 términos de su desarrollo en la serie de Fourier, empleando el siguiente código de python
+
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:
  
 
[[Archivo:Fourier.gif|600px|thumb|Aproximación de Fourier de la función extendida <math> xe^{-x} </math>]]
 
[[Archivo:Fourier.gif|600px|thumb|Aproximación de Fourier de la función extendida <math> xe^{-x} </math>]]

Revisión del 17:38 12 feb 2025

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:

[math] L^2(a,b) = \left\{ f(x)| \int_{a}^{b} |f(x)|^{2} dx \lt \infty \right\} [/math],

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:

[math] \left\langle f,g \right\rangle_{L^{2}}=\int_{a}^{b} f(x)g(x) dx, \forall f,g \in L^{2} [/math],

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:

[math] \beta = \left\{ \frac{1}{\sqrt{2\pi}}, \frac{1}{\sqrt{\pi}}cos(nx), \frac{1}{\sqrt{\pi}}sen(nx) \right\}_{n \in \mathbb{N}} [/math],

que se conoce como referencia de Fourier trigonométrica.

3 . Aproximación de una función por la base trigonométrica

Sea
[math] f(x) = xe^{-x} [/math],

definida 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 referencia de Fourier trigonométrica:

[math] \beta = \left\{ \frac{1}{\sqrt{2\pi}}, \frac{1}{\sqrt{\pi}}cos(nx), \frac{1}{\sqrt{\pi}}sen(nx) \right\}_{n \in \mathbb{N}} [/math],

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:


[math] h(x) = \frac{2\pi}{b-a} (x - a) - \pi, \quad x \in [a, b] [/math],


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:

[math] f(x) = \frac{d_0}{\sqrt{b-a}} + \sum_{n=0}^{\infty} d_n \cos(n R(x)) + \sum_{n=0}^{\infty} c_n \sin(n R(x)) [/math]

donde el coeficiente \( d_0 \) es:

[math] d_0 = \frac{1}{\sqrt{b-a}} [/math]

para que su norma sea 1, pues:

[math] \left\langle \frac{1}{\sqrt{b-a}}, \frac{1}{\sqrt{b-a}} \right\rangle = \int_a^b \frac{1}{b-a} \, dx = 1. [/math]

De esta forma, obtenemos la base de Fourier de \( L^2(a,b) \):

[math] \mathcal{F} = \left\{ \frac{1}{\sqrt{5}}, \frac{\sqrt{2}}{\sqrt{5}} \cos\left( n \left( \frac{2\pi (x+2)}{5} - \pi \right) \right), \frac{\sqrt{2}}{\sqrt{5}} \sin\left( n \left( \frac{2\pi (x+2)}{5} - \pi \right) \right) \right\}. [/math]

Para preservar la ortonormalidad en \( L^2(a,b) \), los senos y cosenos han sido normalizados con el factor:

[math] \frac{\sqrt{2}}{\sqrt{b-a}} [/math]

para los términos trigonométricos.

Esto se puede reescribir como:

[math] \mathcal{F} = \left\{ \frac{1}{\sqrt{5}}, \frac{\sqrt{2}}{\sqrt{5}} \cos\left( n \left( \frac{2\pi x - \pi}{5} \right) \right), \frac{\sqrt{2}}{\sqrt{5}} \sin\left( n \left( \frac{2\pi x - \pi}{5} \right) \right) \right\}. [/math]

Sea la función \( f(x) = x e^{-x} \). Se verifica que \( f(x) \in L^2(-2,3) \), pues:

[math] \int_{-2}^{3} x^2 e^{-2x} \, dx = \frac{5(e^{10}-5)}{4 e^6}. [/math]

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:

[math] f \sim \frac{d_0}{\sqrt{5}} + \sum_{n=1}^{\infty} d_n \frac{\sqrt{2}}{\sqrt{5}} \cos\left(n \frac{2\pi x - \pi}{5} \right) + \sum_{n=1}^{\infty} d_m \frac{\sqrt{2}}{\sqrt{5}} \sin\left(n \frac{2\pi x - \pi}{5} \right). [/math]

Calculemos ahora los coeficientes de la serie de Fourier

El coeficiente \( d_0 \) se obtiene como:

[math] d_0 = \left\langle f,\frac{1}{\sqrt{5}} \right\rangle_{L^{2}} = \int_{-2}^{3} x e^{-x} \, dx = \frac{-4 + e^5}{\sqrt{5} e^3}. [/math]

Para los coeficientes \( d_n \):

[math] d_n = \left\langle f, \frac{\sqrt{2}}{\sqrt{5}} \cos\left(n \frac{2\pi x - \pi}{5} \right) \right\rangle _{L^{2}}= \int_{-2}^{3} \frac{\sqrt{2}}{\sqrt{5}} x e^{-x} \cos\left(n \frac{2\pi x - \pi}{5} \right) \, dx. [/math]

Para los coeficientes \( d_m \):

[math] d_m = \left\langle f, \frac{\sqrt{2}}{\sqrt{5}} \sin\left(n \frac{2\pi x - \pi}{5} \right) \right\rangle _{L^{2}} = \int_{-2}^{3} \frac{\sqrt{2}}{\sqrt{5}} x e^{-x} \sin\left(n \frac{2\pi x - \pi}{5} \right) \, dx. [/math]

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:

Aproximación de Fourier de la función extendida [math] xe^{-x} [/math]
Error absoluto entre la función [math] xe^{-x} [/math] y su aproximación de Fourier


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