Diferencia entre revisiones de «Series de Fourier (CGomJRod)»
(→Aproximación de una función discontinua) |
(→Introducción) |
||
| Línea 1: | Línea 1: | ||
{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Carlos Gómez Redondo Javier Rodríguez Carrasquilla }} | {{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Carlos Gómez Redondo Javier Rodríguez Carrasquilla }} | ||
=Introducción= | =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. | + | A lo largo de la Historia los matemáticos se han encontrado con problemas que <math>\textit{a priori}</math> 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. |
==Definición== | ==Definición== | ||
Revisión del 17:44 13 feb 2024
| 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 | |
Contenido
1 Introducción
A lo largo de la Historia los matemáticos se han encontrado con problemas que [math]\textit{a priori}[/math] 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:
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:
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:
A partir de esto también es posible generalizarlo a intervalos de la forma [math] [a,b] [/math]. Bastaría utilizar la base del espacio [math]L^2([-\frac{b-a}{2},\frac{b-a}{2}])[/math], ya que estaría conformada por funciones periodicas de periodo [math]b-a[/math], que coincidiría con la longitud del intervalo de definición de la función que queremos aproximar.
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:
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].
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:
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].
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.
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:
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]:
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] ¿PONER HIPERLINK EN EL 1? quedaría [math]\lbrace \frac{1}{2},\cos(\frac{n\pi}{b} x),\sin(\frac{n\pi}{b} x)\rbrace_{n \in \mathbb{N}}[/math]. Así, los coeficientes a calcular son:
Es aquí donde podemos ver la ventaja de haber definido la extensión impar de la función dada, pues los coeficientes [math]a_0[/math] y [math]b_n[/math] al ser integrales de funciones impares. Con lo que concluimos que para calcular la serie de Fourier basta con hallar los coeficientes [math]a_n[/math] y así:
Apliquemos lo anterior a la función [math]f(x)=x\cdot (1-x)[/math] en el compacto [math][0,1][/math], cuya gráfica y su correspondiente extensión impar se muestran a continuación.
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
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
Para ver cómo converge la serie de Fourier se han calculado los [math]n[/math] primeros términos para [math]n=1,5,10 [/math]y se han dibujado en la misma gráfica junto a la función a aproximar.
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
En las gráficas anteriores no se aprecia cómo mejora la aproximación según aumenta el valor de [math]n[/math], sin embargo, esto se aprecia muy bien en las que se muestran a continuación. En la primera, se observa cómo disminuye rápidamente el error en la norma de [math]L^2(-1,1)[/math] según aumentamos el valor de [math]n[/math]. La segunda gráfica es representa la misma idea pero empleando la norma uniforme.
TENEMOS QUE ESTIMAR A QUÉ FUNCIÓN SE PARECE
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)
subplot(2,1,2)
plot(puntos,erruniforme,'LineWidth',1.5)
4 Aproximación de una función discontinua
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
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
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
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
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')
subplot(2,1,2)
plot(puntos,erruniforme,'LineWidth',1.5)
xlabel('$n$','Interpreter','latex')
5 Cambio de intervalo
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
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