Series de Fourier (CGomJRod)

De MateWiki
Revisión del 23:24 12 feb 2024 de Carlos Gómez (Discusión | contribuciones) (Aproximación de una función continua)

Saltar a: navegación, buscar
Trabajo realizado por estudiantes
Título Series de Fourier. Grupo 6-A
Asignatura EDP
Curso 2023-24
Autores Carlos Gómez Redondo Javier Rodríguez Carrasquilla
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura

1 Introducción

A lo largo de la Historia los matemáticos se han encontrado con problemas que \textit{a priori} son imposibles de manejar, por ejemplo debido a su generalidad. Sin embargo, esta es sin duda un arma de doble filo. Por un lado, el planteamiento de problemas tan generales pueden parecer inabarcables debido a la infinidad de posibles casos, pero por otro, su solución nos proporciona una poderosa herramienta que nos permite simplificar multitud de problemas que nos parecían en un principio intratables. Un ejemplo claro son las series de Fourier, que nos permiten aproximar de forma sencilla y muy precisa infinitud de funciones mediante una serie infinita.

1.1 Definición

Sean el espacio de Hilbert [math]L^2([-\pi,\pi])[/math] y una base de Hilbert de dicho espacio [math]\{ \frac{1}{2},\cos(nx),\sin(nx)\}_{n \in \mathbb{N}}[/math]. Sea [math] f \in L^2 ([-\pi,\pi]) [/math] entonces se llama serie de Fourier a la serie convergente tal que:

[math] f(x) = \frac{a_0}{2}+ \sum_{n=1}^\infty[ a_n \sin(n \pi x) +b_n \cos(n\pi x)] [/math]

Los términos [math] a_0,a_n, b_n \in \mathbb{R} [/math] reciben el nombre de coeficientes de Fourier y se calculan como sigue:

[math]a_0 =\frac{1}{\pi}\int_{-\pi}^{\pi} f(x) dx, \hspace{30px} a_n =\frac{1}{\pi}\int_{-\pi}^{\pi} f(x) \sin(n \pi x) dx, \hspace{30px} b_n =\frac{1}{\pi}\int_{-\pi}^{\pi} f(x) \cos(n \pi x) dx [/math]

Nótese que la familia [math]\{ \frac{1}{2},\cos(n\pi x),\sin(n \pi x)\}_{n \in \mathbb{N}}[/math] es una base de Hilbert salvo reescalamiento; no están normalizadas. Pese a esto, la teoría sigue siendo válida pues simplemente hay que dividir los coeficientes de Fourier por sus respectivas normas.

Otra cosa importante a recalcar es que la definición anterior se ha hecho para funciones definidas sobre el compacto [math][-\pi,\pi][/math]. Sin embargo, esto se puede definir para cualquier otro intervalo de la forma [math][-T,T][/math] mediante el cambio de variable [math]y=x\frac{T}{\pi}[/math], obteniendo la base:

[math]\lbrace \frac{1}{2},\cos(\frac{n\pi}{T} y),\sin(\frac{n\pi}{T} y)\rbrace_{n \in \mathbb{N}}[/math]

A partir de esto también es posible generalizarlo a intervalos de la forma [math] [a,b] [/math]

Explicar lo de extender por simetría (Javi)

De igual forma podemos trabajar con intervalos abiertos en los dos o en alguno de los extremos, pues un punto es un conjunto de medida nula y al trabajar con integrales esto afecta de ninguna forma al resultado final.

2 Base trigonométrica

PONER QUE LOS CÓDIGOS SON EN MATLAB Para entender el significado de la definición anterior, veamos cómo se comportan los elementos de la base en el compacto [-1,1]. Por lo que hemos dicho, esta base resulta:

[math] \lbrace \frac{1}{2},\cos(n\pi x),\sin(n\pi x)\rbrace_{n \in \mathbb{N}}[/math]

A continuación se muestra una gráfica de los diez primeros elementos de la base de la forma [math]\cos(n\pi x)[/math].

Término de la base [math] \cos(n\pi x)[/math]
close all
clear all
N=10;
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for n=[1:N]
    e=@(x) (cos(pi*n*x));
    for i=1:length(xx)
        yy(i)=e(xx(i));
    end
    subplot(2,5,n);
    xline(0);
    hold on
    yline(0);
    plot(xx,yy,'b')
    axis equal
    xlim([-1,1])
    ylim([-1,1])
    title("n="+n,'Interpreter','latex')
    hold off
end



En la figura anterior se aprecia cómo según aumenta el valor de [math] n [/math] el periodo de la función va disminuyendo. Esto también se puede ver fácilmente a partir de la expresión analítica:


[math]\cos(n\pi x) =\cos(n\pi(x+T)) \iff n\pi x+2\pi=n\pi x+ n\pi x T \iff T=\frac{2}{n} [/math]

El razonamiento con los elementos de la forma [math]\sin(n\pi x)[/math] es análogo. A continuación se muestran las gráficas de dichos elementos con [math]n=1,...,10 [/math].

Término de la base [math] \sin(n\pi x)[/math]
close all
clear all
N=10;
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for n=[1:N]
    e=@(x) (sin(pi*n*x));
    for i=1:length(xx)
        yy(i)=e(xx(i));
    end
    subplot(2,5,n);
    xline(0);
    hold on
    yline(0);
    plot(xx,yy,'b')
    axis equal
    xlim([-1,1])
    ylim([-1,1])
    title("n="+n,'Interpreter','latex')
    hold off
end



Por último, tenemos el elemento constante de la base [math] f(x)=\frac{1}{2}[/math], cuya gráfica es la que sigue.

Término de la base [math] 1/2[/math]
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
e=@(x) (1/2);
for i=1:length(xx)
    yy(i)=e(xx(i));
end
xline(0);
hold on
yline(0);
plot(xx,yy,'b','LineWidth',1.5)
axis equal
xlim([-1,1])
ylim([-1,1])
hold off



Habíamos visto en el apartado anterior que la serie de Fourier se define como una combinación lineal infinita de unas cierta funciones. Por otro lado acabamos de ver como éstas son funciones periódicas cuya frecuencia aumenta según lo hace [math]n[/math], junto a una constante. Es decir, que en el fondo lo que estamos haciendo es descomponer una función dada como una suma de ondas de diferentes frecuencias, como se verá más adelante.

3 Aproximación de una función continua

Veamos ahora cómo utilizar la serie de Fourier para aproximar funciones continuas.

Sean [math]g(x)[/math] una función continua en el intervalo [math][0,b][/math] y [math]f[/math] su extensión impar:

[math] f(x)\begin{cases} g(x), & \text{si } -b \leq x \lt 0 \\ -g(-x), & \text{si } 0 \leq x \leq b \end{cases}[/math]

Por construcción esta función es continua en [math][-b, b] \setminus \{0\}[/math]. Por otro lado, es fácil verificar la continuidad en [math]0[/math] mediante límites laterales. Por tanto, la extensión de [math]g[/math] que hemos definido es continua en [math][-b,b][/math] y su aproximación mediante la serie de Fourier converge puntualmente en [math](-b,b)[/math]. En cuanto a los extremos sabemos que debe converger al punto medio de las imágenes de los extremos, es decir, a [math]0[/math]:

[math]/frac{f(-b)+f(b)}{2}=/frac{-g(b)+g(b)}{2}=0[/math]

Una vez hecho esto sólo queda calcular los coeficientes de Fourier para la base correspondiente a este intervalo, que siguiendo lo explicado en el apartado [math]1[/math] quedaría

Gráfico de la función [math] f(x)=x\cdot (1-x), D(f)=[0,1][/math]
close all
clear all
xx=0:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=f(xx(i));
end
plot(xx,yy,'r','LineWidth',1.5)
hold on
xline(0);
yline(0);
axis equal
xlim([-1,1])
ylim([-1,1])
hold off



Extensión impar de la función [math] f(x)=x\cdot (1-x), D(f)=[0,1][/math]
clear all
xx=0:10^(-3):1;
zz=-1:10^(-3):0;
yy=zeros(1,length(xx));
ww=zeros(1,length(zz));
for i=1:length(xx)
    yy(i)=f(xx(i));
end
for i=1:length(xx)
    ww(i)=f(zz(i));
end
plot(xx,yy,'r','LineWidth',1.5)
hold on
plot(zz,ww,'y','LineWidth',1.5)
xline(0);
yline(0);
axis equal
xlim([-1,1])
ylim([-1,1])
hold off



Gráficas de las funciones [math]f(x)[/math] y [math]f_{n}(x)[/math] para distintos [math]n[/math]
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=f(xx(i));
end
l=1;
puntos=[1,5,10];
for n=puntos
    subplot(1,length(puntos),l)
    plot(xx,yy,'r','LineWidth',1.5)
    hold on
    axis equal
    a=zeros(1,n);
    fn=zeros(1,length(xx));
    for k=1:n
        a(k)=trapz(xx,yy.*sin(k.*pi.*xx));
        fn=fn+a(k).*sin(k.*pi.*xx);
    end
    plot(xx,fn,'b')
    xline(0);
    yline(0);
    axis equal
    xlim([-1,1])
    ylim([-1,1])
    legend({'$f(x)$','$f_{n}(x)$'},'Interpreter','latex','Location','southeast')
    title('n= '+string(n),'Interpreter','latex')
    hold off
    l=l+1;
end



Gráficos de errores
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=f(xx(i));
end
puntos=[1:50];
errl2=zeros(1,length(puntos));
erruniforme=zeros(1,length(puntos));
for n=puntos
    a=zeros(1,n);
    fn=zeros(1,length(xx));
    for k=1:n
        a(k)=trapz(xx,yy.*sin(k.*pi.*xx));
        fn=fn+a(k).*sin(k.*pi.*xx);
    end
    errl2(n)=trapz(xx,(yy-fn).^2).^(1/2);
    erruniforme(n)=max(abs(yy-fn));
end
subplot(2,1,1)
plot(puntos,errl2,'LineWidth',1.5)
xlabel('$n$','Interpreter','latex')
title('Error en norma $L^{2}$: $\left(\int_{-1}^{1}\left

$','Interpreter','latex') subplot(2,1,2) plot(puntos,erruniforme,'LineWidth',1.5) xlabel('$n$','Interpreter','latex') title('Error uniforme: $\sup_{x\in[-1,1]}\left|f(x)-f_{n}(x)\right|$','Interpreter','latex') }}

4 Aproximación de una función discontinua

Gráfico de la función [math] f(x)=1_{x\leq 1/2}(x), D(f)=[0,1][/math]
close all
clear all
xx=0:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=g(xx(i));
end
plot(xx,yy,'r','LineWidth',1.5)
hold on
xline(0);
yline(0);
axis equal
xlim([-1,1])
ylim([0,1.5])
hold off



Extensión par de la función [math] f(x)=1_{x\leq 1/2}(x), D(f)=[0,1][/math]
close all
clear all
xx=0:10^(-3):1;
zz=-1:10^(-3):0;
yy=zeros(1,length(xx));
ww=zeros(1,length(zz));
for i=1:length(xx)
    yy(i)=g(xx(i));
end
for i=1:length(xx)
    ww(i)=g(zz(i));
end
plot(xx,yy,'r','LineWidth',1.5)
hold on
plot(zz,ww,'y','LineWidth',1.5)
xline(0);
yline(0);
axis equal
xlim([-1,1])
ylim([0,1.5])
hold off



Gráficas de las funciones [math]f(x)[/math] y [math]f_{n}(x)[/math] para distintos [math]n[/math]
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=g(xx(i));
end
l=1;
puntos=[1,5,10];
for n=puntos
    subplot(1,length(puntos),l)
    plot(xx,yy,'r','LineWidth',1.5)
    hold on
    axis equal
    b=zeros(1,n);
    fn=1/2*ones(1,length(xx));
    for k=1:n
        b(k)=trapz(xx,yy.*cos(k.*pi.*xx));
        fn=fn+b(k).*cos(k.*pi.*xx);
    end
    plot(xx,fn,'b')
    xline(0);
    yline(0);
    axis equal
    xlim([-1,1])
    ylim([0,1.5])
    legend({'$f(x)$','$f_{n}(x)$'},'Interpreter','latex','Location','south')
    title('n= '+string(n),'Interpreter','latex')
    hold off
    l=l+1;
end



Gráficas de las funciones [math]f(x)[/math] y [math]S_{N}(x)[/math] para distintos [math]N[/math]
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=g(xx(i));
end
l=1;
puntos=[1,5,10];
for n=puntos
    fN=zeros(n,length(xx));
    subplot(1,length(puntos),l)
    plot(xx,yy,'r','LineWidth',1.5)
    hold on
    axis equal
    b=zeros(1,n);
    fn=1/2*ones(1,length(xx));
    for k=1:n
        b(k)=trapz(xx,yy.*cos(k.*pi.*xx));
        fn=fn+b(k).*cos(k.*pi.*xx);
        fN(k,:)=fn;
    end
    SN=zeros(n,length(xx));
    for i=[1:n]
        SN(i,:)=ones(1,i)*fN(1:i,:)/(i+1);
    end
    plot(xx,SN(n,:),'b')
    xline(0);
    yline(0);
    axis equal
    xlim([-1,1])
    ylim([0,1.5])
    legend({'$f(x)$','$S_{N}(x)$'},'Interpreter','latex','Location','south')
    title('N= '+string(n),'Interpreter','latex')
    hold off
    l=l+1;
end



Gráficos de errores
close all
clear all
xx=-1:10^(-3):1;
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=g(xx(i));
end
plot(xx,yy)
hold on
puntos=[1:200];
errl2=zeros(1,length(puntos));
erruniforme=zeros(1,length(puntos));
fN=zeros(length(puntos),length(xx));
for n=puntos
    b=zeros(1,n);
    fn=1/2*ones(1,length(xx)); 
    for k=1:n
        b(k)=trapz(xx,yy.*cos(k.*pi.*xx));
        fn=fn+b(k).*cos(k.*pi.*xx);
    end
    errl2(n)=trapz(xx,(yy-fn).^2).^(1/2);
    erruniforme(n)=max(abs(yy-fn));
    fN(n,:)=fn;
end
SN=zeros(length(puntos),length(xx));
errl2SN=zeros(1,length(puntos));
erruniformeSN=zeros(1,length(puntos));
for i=puntos
    SN(i,:)=ones(1,i)*fN(1:i,:)/(i+1);
    errl2SN(i)=trapz(xx,(yy-SN(i,:)).^2).^(1/2);
    erruniformeSN(i)=max(abs(yy-SN(i,:)));
end
subplot(2,1,1)
plot(puntos,errl2,'LineWidth',1.5)
xlabel('$n$','Interpreter','latex')
title('Error en norma $L^{2}$: $\left(\int_{-1}^{1}\left

$','Interpreter','latex') subplot(2,1,2) plot(puntos,erruniforme,'LineWidth',1.5) xlabel('$n$','Interpreter','latex') title('Error uniforme: $\sup_{x\in[-1,1]}\left|f(x)-f_{n}(x)\right|$','Interpreter','latex') }}

5 Cambio de intervalo

Gráficas de las funciones [math]f(x)[/math] y [math]f_{n}(x)[/math] para distintos [math]n[/math]
close all
clear all
xx=-1:10^(-3):1;
haux=@(x)(x.*exp(-x));
h=@(x)((x+2).*exp(-x-2));
yy=zeros(1,length(xx));
for i=1:length(xx)
    yy(i)=h(xx(i));
end
puntos=[5,10,20];
i=1;
for n=puntos
    a=zeros(1,n);
    b=zeros(1,n);
    fn=trapz(xx,yy)*ones(1,length(xx))/(2);
    for k=1:n
        a(k)=trapz(xx,yy.*sin(k.*pi.*xx));
        b(k)=trapz(xx,yy.*cos(k.*pi.*xx));
        fn=fn+a(k).*sin(k.*pi.*xx)+b(k).*cos(k.*pi.*xx);
    end
    subplot(1,3,i)
    fplot(haux,'r','LineWidth',1.5)
    hold on
    plot(xx+2*ones(1,length(xx)),fn,'b')
    xline(0);
    yline(0);
    axis equal
    xlim([1,3])
    ylim([-1,1])
    legend({'$f(x)$','$f_{n}(x)$'},'Interpreter','latex','Location','southeast')
    title('n= '+string(n),'Interpreter','latex')
    hold off
    hold off
    i=i+1;
end



6 Base trigonométrica compleja

Gráficas de las funciones [math]f(x)[/math] y [math]f_{n}(x)[/math] para distintos [math]n[/math]
close all
clear all
xx=-1/2:10^(-3):1/2;
haux=@(x) (4*x.*(1/2-x).^2);
h=@(x)(4*(x+1/2).*(1/2-x-1/2).^2);
yy=zeros(1,length(xx));
for n=1:length(xx)
    yy(n)=h(xx(n));
end
l=1;
puntos=[5,10,20];
for n=puntos
    a=zeros(1,n);
    b=zeros(1,n);
    fn=trapz(xx,yy).*ones(1,length(xx));
    for k=1:n
        a(k)=trapz(xx,yy.*conj(exp(1i.*2*k.*pi.*xx)));
        b(k)=trapz(xx,yy.*conj(exp(1i.*2*(-k).*pi.*xx)));

        fn=fn+a(k).*exp(1i.*2*k.*pi.*xx)+b(k).*exp(1i.*2*(-k).*pi.*xx);
    end
    subplot(1,3,l)
    plot(xx+ones(1,length(xx))/2,haux(xx+ones(1,length(xx))/2),'r','LineWidth',1.5)
    hold on
    plot(xx+ones(1,length(xx))/2,fn,'b')
    xline(0);
    yline(0);
    axis equal
    xlim([0,1])
    ylim([-0.25,1.25])
    legend({'$f(x)$','$f_{n}(x)$'},'Interpreter','latex','Location','northwest')
    title('n= '+string(n),'Interpreter','latex')
    hold off
    l=l+1;
end



6.1 Referencias