Series de Fourier (Grupo CCE)

De MateWiki
Saltar a: navegación, buscar
Trabajo realizado por estudiantes
Título Series de Fourier. Grupo CCE
Asignatura EDP
Curso 2025-26
Autores Coloma de Lara, Carlos de Miguel y Elena Rodríguez
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura


1 Introducción

Este trabajo tiene como objetivo principal profundizar en la aproximación de funciones por series de Fourier, herramienta fundamental en el estudio de las Ecuaciones en Derivadas Parciales. En este artículo vamos a primero visualizar la base trigonométrica y segundo obtener una aproximación mediante Series de Fourier de una función continua.

1.1 La Base Trigonométrica en [-T, T]

Para una función definida en un intervalo [math][-T, T][/math], utilizamos un conjunto de funciones que actúan como generadores del espacio. Esta familia de funciones es la denominada base trigonométrica y usamos la normalizada:

[math] \mathcal{B} = \left\{ \frac{1}{\sqrt{2T}}, \frac{1}{\sqrt{T}}\cos\left(\frac{n\pi x}{T}\right), \frac{1}{\sqrt{T}}\sin\left(\frac{n\pi x}{T}\right) \right\}_{n \in \mathbb{N}} [/math]

Estas funciones son las piezas fundamentales para construir cualquier función periódica con la regularidad suficiente.

1.2 Definición de la Serie de Fourier

Dada una función [math]f(x)[/math] integrable en el intervalo [math][-T, T][/math], su desarrollo en Serie de Fourier se define como:

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

Donde los coeficientes de Fourier se calculan mediante las siguientes proyecciones (integrales):

  • Coeficiente constante: [math] d_0 = \int_{-T}^{T} f(x) \cdot \frac{1}{\sqrt{2T}} dx [/math]
  • Coeficientes de cosenos: [math] d_n = \frac{1}{\sqrt{T}} \int_{-T}^{T} f(x) \cdot \cos\left(\frac{n\pi x}{T}\right) dx [/math]
  • Coeficientes de senos: [math] c_n = \frac{1}{\sqrt{T}} \int_{-T}^{T} f(x) \cdot \sin\left(\frac{n\pi x}{T}\right) dx [/math]

2 Visualizar la base trigométrica

Vamos a dibujar en una gráfica, con Matlab, los 7 primeros términos de la serie trigonométrica en [math] x\in [-1,1] [/math], para que sea más fácil visualizarla.

Implementación en MATLAB Resultado Gráfico
% definimos intervalo [-T, T]
T = 1;                  
x = linspace(-T, T, 1000); 
n_max = 7;    %numero de terminos          

% normalizamos
phi_0_factor = 1/sqrt(2*T);
phi_n_factor = 1/sqrt(T);

figure('Color', 'w');

%  d0 y dn (Cosenos - Pares)
subplot(2,1,1); hold on;
plot(x, ones(size(x)) * phi_0_factor, 'k', 'LineWidth', 2.5, 'DisplayName', 'd_0');
colors_d = lines(n_max);
for n = 1:n_max
    y_cos = phi_n_factor * cos(n * pi * x / T);
    plot(x, y_cos, 'Color', [colors_d(n,:), 0.5]);
end
title('Funciones de la base para d_0 y d_n (Pares)');
grid on; ylabel('Amplitud');

%  cn (Senos - Impares)
subplot(2,1,2); hold on;
colors_c = jet(n_max);
for n = 1:n_max
    y_sin = phi_n_factor * sin(n * pi * x / T);
    plot(x, y_sin, 'Color', [colors_c(n,:), 0.5]);
end
title('Funciones de la base para c_n (Impares)');
grid on; xlabel('x'); ylabel('Amplitud');
Visualización de la base ortonormal en [-1, 1].

3 Aproximación de una función continua

En este apartado, aproximamos la función continua [math]f(x) = 1 - 2|1/2 - x|[/math] en el intervalo [math][0, 1][/math].

3.1 Extensión Impar y Base de Senos

Para trabajar en el intervalo [math][-1, 1][/math], extendemos la función de forma impar. Definimos la extensión [math]g(x)[/math] como:

[math] g(x) = \begin{cases} f(x), & x \in [0, 1] \\ -f(-x), & x \in [-1, 0) \end{cases} [/math]

Sustituyendo la expresión de [math]f(x)[/math], obtenemos la función definida a trozos que es continua en todo el intervalo [math][-1, 1][/math]:

[math] g(x) = \begin{cases} -2 - 2x, & -1 \le x \lt -\frac{1}{2} \\ 2x, & -\frac{1}{2} \le x \lt \frac{1}{2} \\ 2 - 2x, & \frac{1}{2} \le x \le 1 \end{cases} [/math]

Al haber extendido la función de forma impar podemos observar que los coeficientes de los términos asociados a loss términos pares de la base trigonométrica son nulos:

[math]d_n = \int_{-1}^{1} g(x) \cos(n\pi x) dx = 0[/math]
[math]d_0 = \frac{1}{\sqrt{2}} \int_{-1}^{1} g(x) dx = 0[/math]

Por tanto, la serie de Fourier se reduce a una suma de senos:

[math]f_n(x) = \sum_{k=1}^{n} a_k \sin(k\pi x), \quad a_k = 2 \int_{0}^{1} f(x) \sin(k\pi x) dx[/math]
.

3.2 Estudio de Convergencia según el número de términos

Calculamos los coeficientes [math]a_k[/math] mediante la fórmula del trapecio con una división de [math]10^{-3}[/math]. Evaluamos el error en las normas [math]L^2[/math] y uniforme ([math]L^\infty[/math]) para observar la calidad de la aproximación en función del número de términos de la serie. Luego hemos dibujado en una gráfica el error en ambas normas en función de n, donde podemos ver que las gráficas obtenidas son del tipo exponencial negativa.

Implementación en MATLAB
% Parámetros iniciales
dx = 1e-3; % división sugerida
x = 0:dx:1;
f = 1 - 2*abs(0.5 - x);
% Configuración de términos para visualización 
valores_n = [1, 5, 10]; 
figure(1);
plot(x, f, 'k--', 'LineWidth', 2); hold on;
% Bucle para calcular aproximaciones y errores 
N_max = 50; 
err_L2 = zeros(1, N_max);
err_inf = zeros(1, N_max);

for n = 1:N_max
    fn = zeros(size(x));
    for k = 1:n
        % Cálculo de ak mediante trapecio
        integrando = 2 * f .* sin(k * pi * x);
        ak = trapz(x, integrando);
        
        % suma de los términos impares
        fn = fn + ak * sin(k * pi * x);
    end
    % guardar errores en normas L2 y uniforme 
    err_L2(n) = sqrt(trapz(x, (f - fn).^2));
    err_inf(n) = max(abs(f - fn));
    
    if ismember(n, valores_n)
        plot(x, fn, 'DisplayName', ['n = ' num2str(n)]);
    end
end

title('Aproximación de f(x) por Serie de Fourier (Senos)');
xlabel('x'); ylabel('f(x)');
legend('Original', 'n=1', 'n=5', 'n=10');
grid on;

% gráfica de Errores 
figure(2);
subplot(2,1,1);
plot(1:N_max, err_L2, 'bo-', 'LineWidth', 1.5);
title('Evolución del Error en Norma L^2');
xlabel('n (términos)'); ylabel('Error'); grid on;

subplot(2,1,2);
plot(1:N_max, err_inf, 'ro-', 'LineWidth', 1.5);
title('Evolución del Error en Norma Uniforme');
xlabel('n (términos)'); ylabel('Error'); grid on;
Resultado de la Aproximación Estudio de Convergencia
Visualización de aproximación de f(x) en [0,1].
Errores graficados en norma L2 y uniforme.

Con esto podemos estudiar la convergencia a partir del número de términos de la serie de Fourier. A medida que aumentamos n, la suma parcial [math]f_n(x)[/math] se ajusta con mayor precisión a la forma de la función original.

3.3 Estudio de la Convergencia según la regularidad

Un objetivo fundamental de este trabajo es entender cómo la regularidad de una función afecta a la velocidad de convergencia de su serie de Fourier. Según la teoría, si una función tiene [math]k[/math] derivadas continuas, sus coeficientes de Fourier [math]a_n, b_n[/math] decaen más rápido. Para ello vamos a comparar la función del apartado anterior [math]f(x)[/math] en el intervalo [math][0,1][/math] ,que es una función continua con derivada continua salvo en el pico [math]x= \frac{1}{2}[/math], con otras dos [math] h(x)= x^2-x[/math] , función de clase [math]C^\infty[/math], y con [math]t(x)[/math] la función salto definida como

[math] g(x) = \begin{cases} 1, & x \in [0, 0.5) \\ 0, & x \in [0.5, 1] \end{cases} [/math]

Implementamos un código de Matlab que las representa junto con sus desarrollos de Fourier.

Implementación en MATLAB: Comparativa de Regularidad
% Parámetros iniciales
dx = 1e-3;
x = 0:dx:1;
N = 20; % Número de armónicos para la comparativa

% Definición de las tres funciones
f1 = double(x < 0.5);          % 1. Función Salto (C^-1)
f2 = 1 - 2*abs(0.5 - x);       % 2. Función Triangular (C^0)
f3 = x.^2 - x;                 % 3. Parábola (C^inf)

funciones = {f1, f2, f3};
titulos = {'Aproximación Función Salto', 'Aproximación Función f(x)', 'Aproximación Parábola'};

for i = 1:3
    f_actual = funciones{i};
    figure(i);
    plot(x, f_actual, 'k--', 'LineWidth', 2); hold on;
    
    % Reconstrucción mediante Serie de Fourier (Base completa)
    L = 1;
    a0 = (2/L) * trapz(x, f_actual);
    fn = (a0/2) * ones(size(x));
    
    for k = 1:N
        ak = (2/L) * trapz(x, f_actual .* cos(2*pi*k*x/L));
        bk = (2/L) * trapz(x, f_actual .* sin(2*pi*k*x/L));
        fn = fn + ak*cos(2*pi*k*x/L) + bk*sin(2*pi*k*x/L);
    end
    
    plot(x, fn, 'r', 'LineWidth', 1.5);
    title(titulos{i});
    xlabel('x'); ylabel('f(x)');
    legend('Original', ['Serie Fourier (N=' num2str(N) ')']);
    grid on;
end
1. Función f(x) (Continua) 2. Parábola (Suave) 3. Función Salto (Discontinua)
Convergencia moderada sobre todo en el pico.
Convergencia rápida.
Salto grupoCCE.png

Podemos ver que en el caso de la parábola la Serie de Fourier la aproxima practicamente a la perfección, mientras que en nuestra función en el pico en [math]x=0.5[/math] (se aprecia mejor en la gráfica anterior que esta más ampliada) falla, y en cambio en la función salto hay oscilaciones persistentes en la discontinuidad, el llamado fenómeno de Gibbs. Para poder compararlo bien vamos a representar el error de cada función en norma [math]L^2[/math] y en escala logarítmica (ya que hemos visto antes que siguen una exponencial negativa).

Implementación en MATLAB Resultado Gráfico
dx = 1e-3;
x = 0:dx:1;
N_max = 50;
f1 = double(x < 0.5);         
f2 = 1 - 2*abs(0.5 - x);      
f3 = x.^2 - x;                
funciones = {f1, f2, f3};
colores = {'b', 'r', 'g'};
nombres = {'Salto', 'Triangular f(x)', 'Parábola'};

figure(1); 
hold on;

for i = 1:3
    f_target = funciones{i};
    err_L2 = zeros(1, N_max);
    for n = 1:N_max
        a0 = 2 * trapz(x, f_target);
        fn = (a0/2) * ones(size(x));
        for k = 1:n
            ak = 2 * trapz(x, f_target .* cos(2*pi*k*x));
            bk = 2 * trapz(x, f_target .* sin(2*pi*k*x));
            fn = fn + ak*cos(2*pi*k*x) + bk*sin(2*pi*k*x);
        end
        % cálculo del error 
        err_L2(n) = sqrt(trapz(x, (f_target - fn).^2));
    end
    
    plot(1:N_max, err_L2, 'Color', colores{i}, 'LineWidth', 2, 'DisplayName', nombres{i});
end

set(gca, 'YScale', 'log'); % escala logarítmica para ver mejor las diferencias
title('Evolución del Error Residual (Norma L^2)');
xlabel('Número de terminos (N)'); ylabel('Error (log)');
legend('show'); grid on;
Error de cada función.

Como podemos ver en el caso de la función salto añadir términos no hace que disminuya el error de forma significativa, ya que su error es el que menos pendiente tiene. En la triangular el error va decreciendo mucho más rápido, y en la parábola se consigue el menor error con la menor cantidad de términos, presentando la pendiente más inclinada lo que indica que el error disminuye más rápido.

Por último, ver que los coecientes de Fourier son un indicador de la regularidad. Cuanto más rápido caen a cero, más regular es la función. Si obtenemos los coeficientes de cada función anterior veremos que los de la parábola son los más cercanos a 0. Obteenemos los coeficientes de los términos impares mediante MatLab:

Coeficientes de Fourier bn
n Función Salto Función Triangular Parábola x^2-x
1 1.2732 0.8106 -0.2580
3 0.4244 -0.0901 -0.0096
5 0.2546 0.0324 -0.0021
7 0.1819 -0.0165 -0.0008
9 0.1415 0.0100 -0.0004
11 0.1157 -0.0067 -0.0002
13 0.0979 0.0048 -0.0001
15 0.0849 -0.0036 -0.0001
Decaimiento 1/n 1/n² 1/n³

Y observamos que los coeficientes de la función salto decaen de manera [math]\frac{1}{n}[/math] , más lentos que los de la triangular que lo hacen de manera [math]\frac{1}{n^2}[/math] y los de la parábola lo hacen al menos a [math]\frac{1}{n^3}[/math].