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

De MateWiki
Saltar a: navegación, buscar

Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/mat/public_html/w/includes/diff/DairikiDiff.php on line 434
(Base trigonométrica)
(Introducción)
 
Línea 8: Línea 8:
 
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:
 
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:
  
<center> <math> f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] </math> </center>
+
<center> <math> f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\pi n x\right) + c_n \sin\left(\pi n x\right) \right] </math> </center>
  
 
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.
 
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.

Revisión actual del 09:30 20 feb 2025

Trabajo realizado por estudiantes
Título Series de Fourier (Grupo ACIRV).
Asignatura EDP
Curso 2024-25
Autores Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura


1 Introducción

Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.

La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:

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

donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.

2 Base trigonométrica

La base trigonométrica [math] \left\{ \frac{1}{2}, \cos(n\pi x), \sin(n\pi x) \right\}_{n \in \mathbb{N}} [/math] es una base del espacio [math]L^2([-\pi,\pi])[/math], por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama series de Fourier.

Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración:

[math]d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . [/math]

Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:

% Definimos la malla para pintar funciones del [-1,1]
x = linspace(-1, 1, 1000);  
n_max = 5;                  % Número de funciones a pintar para seno y coseno

% Pintamos la gráfica de f = 1/2
figure;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');
hold on;

% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max
for n = 1:n_max
    % Definimos las funciones
    f_cos = cos(n * pi * x);
    f_sin = sin(n * pi * x);
    
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));
    
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));
end

% Ponemos leyenda en la gráfica
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));
xlabel('x');
ylabel('Valor de la función');
legend('show', 'Location', 'BestOutside'); 
grid on;
axis([-1 1 -1.5 1.5]);

hold off;


   Seno
   Coseno
   Coseno

3 Aproximación de una función continua

Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \).

Primeramente, extendemos de forma impar la función al intervalo simétrico \([-1,1]\), obteniendo \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right). \) Es decir,

[math] f_{\text{ext}}(x) = \begin{cases} -(1 - 2 | \frac{1}{2} - |x| |), & \text{si } x \in [-1,0) \\ 1 - 2 \left| \frac{1}{2} - x \right|, & \text{si } x \in [0,1]. \end{cases} [/math]

La función es continua en \([-1,1]\), pues la extensión mantiene la continuidad en \(x=0\) y es continua en \( [-1,0) \cup (0,1] \).


Ahora, calcularemos los coeficientes de Fourier con las fórmulas indicadas anteriormente numéricamente usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \). Como nuestra función es impar, su serie de Fourier también lo es; es decir, será una combinación lineal de los elementos [math]\{ \sin(n\pi x) \}_{n \in \mathbb{N}}[/math]. Verificamos que los coeficientes \( d_0 \) y \( d_n \) se anulan, pues son el resultado de integrales de una función impar sobre un intervalo simétrico.

[math] f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). [/math]

Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:

[math] f_{n}(x) = \sum_{k=1}^{n} c_k \sin(k\pi x), \hspace{2mm} \text{con} \hspace{2mm} c_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . [/math]

A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).


right
%Escribimos la función original definida en el intervalo [0,1]:
f=@(x)1-2*abs(1/2-x);
%Modificamos la función para que sea impar en el intervalo [-1,1]
f_ext=@(x)sign(x).*(1-2*abs(1/2-abs(x)));

%Graficamos la función estendida de forma impar
hold on
xx=linspace(-1,1,10000);
plot(xx,f_ext(xx))
%Modificamos los colores de las gráficas para que se vean mejor
newcolors = [0.83 0.14 0.14
             1.00 0.54 0.00
             0.47 0.25 0.80
             0.25 0.80 0.54];         
colororder(newcolors)

%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. 
n=[1 5 10];
N=1000;                       %Número de puntos
a=0; b=1;                     %Extremos de los intervalos
h=(b-a)/N;                    %Tamaño de los intervalos
u=a:h:b;                      %Puntos de la partición
for i=1:length(n) 
    SF=0
    for k=1:n(i)
        c_n=zeros(1,n(i));
        c=(2.*f(u).*sin(k.*pi.*u))';  %Función a integrar
        w=ones(N+1,1);                %Vector de pesos 
        w(1)=1/2; w(N+1)=1/2;
        c_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier
        SF=SF+c_n(k)*sin(k*pi*xx);    %Vamos calculando la propia serie
    end
    plot(xx,SF)                      %Graficamos la serie de Fourier para un n determinado
end
hold off


Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original.

Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \) con normas \( L^2 \) y del supremo o uniforme.

right
a=0; b=1;                    
u_1=a:10^(-3):b; 
N=length(u_1)-1;
h=(b-a)/N;

%Definir la función f(x)
f = @(x) 1 - 2*abs(1/2 - x);

% Pesos para la integración con la regla del trapecio
w=ones(N+1,1);              
w(1)=1/2; w(N+1)=1/2;

% Inicialización de los errores
error1 = zeros(1,300);
error2 = zeros(1,300);

for n=1:300
    f_n=zeros(1,N+1); % Aproximación con n términos
    for k=1:n
        g=(f(u_1).*sin(k*pi*u_1))'; 
        a_k=2*h*w'*g; % Coeficiente de Fourier
        f_n=f_n+a_k*sin(k*pi*u_1); % Suma de términos
    end

    % Cálculo de errores
    g1=abs(f(u_1)-f_n).^2;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema
end

% Graficar errores con escala logarítmica en el eje y
nn=1:300;
hold on
plot(nn,error1,'b',LineWidth=1.5)
plot(nn,error2,'r',LineWidth=1.5)
xlabel('Valor de n')
ylabel('Error en escala logarítmica')
title('Errores en las normas L^2 y uniforme')
legend('Error en la norma $L^2$', 'Error en la norma uniforme')
grid on
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y
ylim([1e-6 1]) % Límites del eje y


4 Aproximación de una función discontinua

Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).

A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:

[math] f_{\text{ext}}(x) = \begin{cases} 1, & \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, & \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} [/math]

Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.

Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:

[math] f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) [/math]

Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=\{1,...,10 \}\), observamos que aparecen unas oscilaciones conocidas como el fenómeno de Gibbs.

right
clear all
close all
F=@(x) 1.*(x<=1/4);
g=@(x) F(-x);
xx=linspace(-1,1,10000);
fplot(F,[0 1],'b','linewidth',1.5)
hold on
fplot(g,[-1 0],'b','linewidth',1.5)
%Modificamos los colores de las gráficas para que se vean mejor
newcolors = [0.83 0.14 0.14
             1.00 0.54 0.00
             0.47 0.25 0.80
             0.25 0.80 0.54];         
colororder(newcolors)

%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. 
n=1:1:10;
N=1000;                       %Número de puntos
a=0; b=1;                     %Extremos de los intervalos
h=(b-a)/N;                    %Tamaño de los intervalos
u=a:h:b;                      %Puntos de la partición
w=ones(N+1,1);                %Vector de pesos 
w(1)=1/2; w(N+1)=1/2;
d_0=0; d0=(2.*F(u).*(1/2))';
d_0=h*w'*d0;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;
for i=1:length(n) 
    for k=1:n(i)
        d_n=zeros(1,n(i));
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF
    end
    plot(xx,SF(i,:))                  %Graficamos la serie de Fourier para un n determinado
end
hold off


Para suavizar dichas oscilaciones utilizamos las sumas de Cesàro:

[math] S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). [/math]

Podemos representarlas gráficamente para un n dado:

right
clear all
close all
F=@(x) 1.*(x<=1/4);
g=@(x) F(-x);
xx=linspace(-1,1,10000);
fplot(F,[0 1],'b','linewidth',1.5)
hold on
fplot(g,[-1 0],'b','linewidth',1.5)
%Modificamos los colores de las gráficas para que se vean mejor
newcolors = [0.83 0.14 0.14
             1.00 0.54 0.00
             0.47 0.25 0.80
             0.25 0.80 0.54];         
colororder(newcolors)

%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. 
n=1:1:100;
N=1000;                       %Número de puntos
a=0; b=1;                     %Extremos de los intervalos
h=(b-a)/N;                    %Tamaño de los intervalos
u=a:h:b;                      %Puntos de la partición
w=ones(N+1,1);                %Vector de pesos 
w(1)=1/2; w(N+1)=1/2;
d_0=0; d0=(2.*F(u).*(1/2))';
d_0=h*w'*d0;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;
for i=1:length(n) 
    for k=1:n(i)
        d_n=zeros(1,n(i));
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF
    end
end
SNs=zeros(1,length(xx));              %Calculamos las sumas de Cesàro
for i=1:length(n)
    SNs=SNs+SF(i,:);
end
SN=1/(length(n)+1)*SNs;
plot(xx,SN)                           %Graficamos la aproximación obtenida.
hold off



Vamos a comparar el error de aproximación respecto valores de N. Lo vemos inicialmente para la aproximación por serie de Fourier y luego visualizamos el que resulta de usar las sumas de Cesàro

right
a=0; b=1;                    
u_1=a:10^(-3):b;
N=length(u_1)-1;
h=(b-a)/N;

% Definir la función f(x)
f = @(x) 1.*(x<=1/4);
f_ext = @(x) 1.*(x <= 1/4).*(x >= -1/4);

% Pesos para la integración con la regla del trapecio
w=ones(N+1,1);              
w(1)=1/2; w(N+1)=1/2;

% Inicialización de los errores
error1 = zeros(1,300);
error2 = zeros(1,300);

d_0=0;d0=(2.*f(u_1).*(1/2))';
d_0=h*w'*d0;
for n=1:300
    f_n=zeros(1,N+1); % Aproximación con n términos
    for k=1:n
        g=(f(u_1).*cos(k*pi*u_1))';
        d_k=2*h*w'*g; % Coeficiente de Fourier
        f_n=f_n+d_k*cos(k*pi*u_1); %Suma de términos
    end
f_n=f_n+d_0; %Función extendida

    % Cálculo de errores
    g1=abs(f_ext(u_1)-f_n).^2;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2
    error2(n)=max(abs(f_ext(u_1)-f_n)); % Norma suprema
end

% Graficar errores con escala logarítmica en el eje y
nn=1:300;
hold on
plot(nn,error1,'b',LineWidth=1.5)
plot(nn,error2,'r',LineWidth=1.5)
xlabel('Valor de n')
ylabel('Error en escala logarítmica')
title('Errores en las normas L^2 y uniforme')
legend('Error en la norma $L^2$', 'Error en la norma uniforme')
grid on
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y
ylim([1e-6 1]) % Límites del eje y
right
clear all
close all

% Definimos la función F y su extensión impar g
F = @(x) 1.*(x <= 1/4);
g = @(x) F(-x);
f_ext = @(x) 1.(x <= 1/4).(x >= -1/4);

% Puntos para la evaluación
xx = linspace(-1,1, 10000);

% Graficamos la función original
fplot(F, [0 1], 'b', 'linewidth', 1.5)
hold on
fplot(g, [-1 0], 'b', 'linewidth', 1.5)

% Modificamos los colores de las gráficas para mejorar la visibilidad
newcolors = [0.83 0.14 0.14;
             1.00 0.54 0.00;
             0.47 0.25 0.80;
             0.25 0.80 0.54];         
colororder(newcolors)

% Parámetros para la serie de Fourier
n = 1:1:300;    % Número de términos considerados
N = 1000;       % Número de puntos en la integración
a = 0; b = 1;   % Extremos del intervalo
h = (b-a)/N;    % Tamaño de los subintervalos
u = a:h:b;      % Puntos de la partición
w = ones(N+1,1); 
w(1) = 1/2; 
w(N+1) = 1/2;   % Pesos del método del trapecio

% Cálculo de los coeficientes de Fourier
d_0 = 0; 
d0 = (2.F(u).(1/2))';
d_0 = h*w'*d0;  % Coeficiente a_0
SF = zeros(length(n), length(xx)) + d_0;

for i = 1:length(n)
    for k = 1:n(i)
        c = (2.*F(u).*cos(k.*pi.*u))';  % Función a integrar
        d_n(k) = h*w'*c;  % Coeficientes de la serie de Fourier
        SF(i,:) = SF(i,:) + d_n(k) * cos(k*pi*xx);
    end
end

% Aplicamos las sumas de Cesàro y guardamos en una matriz su valor para
% cada n
SN =  zeros(length(n), length(xx));
SNs = zeros(length(n), length(xx));
for j =1:length(n)
    for i = 1:j
        SNs(j,:) = SNs(j,:) + SF(i,:);
    end
    SN(j,:) = 1/(j+1) * SNs(j,:); % Suma de Cesàro
end

% Cálculo del error con normas L^∞ y L^2
error_uniforme = zeros(1, length(n));
error_L2 = zeros(1, length(n));

w1 = ones(length(xx),1); 
w1(1) = 1/2; 
w1(length(xx)) = 1/2;   % Pesos del método del trapecio
h1=1/5000;
for i = 1:length(n)
    % Norma uniforme (máximo error absoluto)
    error_uniforme(i) = max(abs(f_ext(xx) - SN(i,:)));

    % Norma L^2 usando la regla del trapecio
    integrando =2.*((f_ext(xx) - SN(i,:)).^2);
    error_L2(i) = sqrt(h1.*w1'*integrando');
end

% Graficamos los errores
figure
plot(n, error_uniforme, 'r', 'linewidth', 1.5)
hold on
plot(n, error_L2, 'b', 'linewidth', 1.5)
xlabel('Número de términos N')
ylabel('Error')
legend('Norma uniforme', 'Norma L^2')
title('Error de la Aproximación de Fourier')
grid on