Diferencia entre revisiones de «Series de Fourier (Grupo CCE)»
| Línea 292: | Línea 292: | ||
|} | |} | ||
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>. | 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>. | ||
| + | [[Categoría:EDP]] | ||
| + | [[Categoría:EDP25/26]] | ||
Revisión del 00:32 19 feb 2026
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Series de Fourier. Grupo CCE |
| Asignatura | EDP |
| Curso | 2025-26 |
| Autores | Coloma de Lara
Carlos de Miguel 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'); |
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:
Por tanto, la serie de Fourier se reduce a una suma de senos:
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 |
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) |
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; |
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:
| 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].