Diferencia entre revisiones de «Series de Fourier (GRwM)»
(→Aproximación de funciones impares) |
(→Referencias) |
||
| (No se muestran 57 ediciones intermedias de 3 usuarios) | |||
| Línea 138: | Línea 138: | ||
| − | Como podemos observar en la gráfica del error, al emplear ambas normas, el error de la aproximación se reduce cuando aumentamos el número de términos de la serie de Fourier. De hecho, | + | Como podemos observar en la gráfica del error, al emplear ambas normas, el error de la aproximación se reduce cuando aumentamos el número de términos de la serie de Fourier. De hecho, disminuye con una pendiente muy pronunciada al aumentar la <math>n </math> de <math>1 </math> a <math>10 </math>. Sin embargo, el decrecimiento de este se va suavizando para valores mayores de <math>n </math>. Aún así, el error con <math>n=1000 </math> es menor a <math>10^{-8} </math>, lo cual indica lo potente que es esta técnica de aproximación con funciones continuas y que comienzan y acaban en el mismo valor. |
| − | Es importante destacar que en la gráfica hemos empleado la escala logarítmica. Al ser los valores del error muy reducidos, si no considerábamos esta escala, a penas se podía distinguir la diferencia entre una norma y otra. Gracias a ello se observa | + | Es importante destacar que en la gráfica hemos empleado la escala logarítmica. Al ser los valores del error muy reducidos, si no considerábamos esta escala, a penas se podía distinguir la diferencia entre una norma y otra. Gracias a ello, se observa cómo el error es menos notorio con la norma de <math>L^2</math>. |
==Código de MatLab== | ==Código de MatLab== | ||
| Línea 196: | Línea 196: | ||
=Aproximación de funciones discontinuas y pares= | =Aproximación de funciones discontinuas y pares= | ||
| − | |||
| − | |||
A continuación vamos a estudiar la aproximación de una función discontinua, concretamente con una discontinuidad de salto finito. | A continuación vamos a estudiar la aproximación de una función discontinua, concretamente con una discontinuidad de salto finito. | ||
| Línea 205: | Línea 203: | ||
Para visualizar este fenómeno, vamos a considerar la función discontinua <math>f(x) =1_{x \leq 1/2}(x)</math>. Lo primero que observamos es que esta función se puede extender a <math>[-1,1]</math> de forma par. Por un razonamiento similar al de la extensión impar, la serie de Fourier en este caso tiene únicamente los términos de la base trigonométrica que son funciones pares, es decir, <math>1/2</math> y <math>\cos{(n \pi x)}</math>. | Para visualizar este fenómeno, vamos a considerar la función discontinua <math>f(x) =1_{x \leq 1/2}(x)</math>. Lo primero que observamos es que esta función se puede extender a <math>[-1,1]</math> de forma par. Por un razonamiento similar al de la extensión impar, la serie de Fourier en este caso tiene únicamente los términos de la base trigonométrica que son funciones pares, es decir, <math>1/2</math> y <math>\cos{(n \pi x)}</math>. | ||
| − | + | A continuación, vamos a representar la aproximación de la función <math>f</math> por sumas parciales de la serie de Fourier para distintos valores de <math>n</math>. Además, para poder hacer un estudio más exhaustivo vamos a obtener los errores. Para ello, vamos a utilizar las dos normas empleadas en la sección '''Aproximación de funciones impares''' (<math>L^2</math> y supremo). | |
| − | [[Archivo: | + | [[Archivo:aproximaciones 1.jpg|900px|thumb|center|Aproximaciones por sumas parciales de la serie de Fourier de la función <math>f</math> y gráfica de errores de las aproximaciones por las sumas parciales de la serie de Fourier de la función <math>f</math> con la norma <math>L^2</math> y la del supremo respecto de <math>n</math>.]] |
| − | Al contrario que en la anterior sección, se puede observar cómo las funciones <math>f_{n}</math> no aproximan <math>f</math> tan bien desde un inicio. Esto se debe como ya hemos mencionado a la discontinuidad de salto. | + | Al contrario que en la anterior sección, en la primera imagen se puede observar cómo las funciones <math>f_{n}</math> no aproximan <math>f</math> tan bien desde un inicio. Esto se debe como ya hemos mencionado a la discontinuidad de salto. |
Además, vemos cómo, en un entorno de los puntos de discontinuidad, aparecen oscilaciones más pronunciadas. De hecho, la frecuencia de estas oscilaciones aumenta a medida que nos acercamos a la discontinuidad, al igual que también lo hace conforme crece el valor de <math>n</math>. | Además, vemos cómo, en un entorno de los puntos de discontinuidad, aparecen oscilaciones más pronunciadas. De hecho, la frecuencia de estas oscilaciones aumenta a medida que nos acercamos a la discontinuidad, al igual que también lo hace conforme crece el valor de <math>n</math>. | ||
| − | + | Por otro lado, en la segunda imagen, se puede apreciar cómo la diferencia del error obtenido al considerar la norma <math>L^2</math> y la del supremo es mucho mayor que al aproximar la función continua de la sección anterior. Esto se debe a que la discontinuidad de salto genera un mayor error en la norma del supremo, pues esta es susceptible a las diferencias puntuales. Como las aproximaciones tienden al punto medio de los valores de la función en las discontinuidades, siempre va a haber un error mínimo respecto a esa norma, en este caso <math>0.5</math>. Esto, por el contrario, no ocurre con la norma <math>L^2</math> ya que la integral no tiene en cuenta los conjuntos de medida nula. | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
Para poder suavizar el fenómeno de Gibbs, podemos emplear las sumas de Cesàro, que vienen dadas por la siguiente expresión: | Para poder suavizar el fenómeno de Gibbs, podemos emplear las sumas de Cesàro, que vienen dadas por la siguiente expresión: | ||
| Línea 230: | Línea 219: | ||
Al tomar promedios de las sumas parciales, se atenúan las oscilaciones cerca de los puntos de discontinuidad. Esto se debe a que el promedio tiende a suavizar la transición entre los valores de la función en estos puntos. | Al tomar promedios de las sumas parciales, se atenúan las oscilaciones cerca de los puntos de discontinuidad. Esto se debe a que el promedio tiende a suavizar la transición entre los valores de la función en estos puntos. | ||
| + | Para observar esta mejora en la aproximación, representamos las sumas de Cesàro de la función <math>f</math>. También vamos a graficar la evolución del error al aumentar el valor de <math>n</math>. | ||
| + | [[Archivo:Foto Cesaro.jpg|900px|thumb|center|Representación gráfica de las sumas de Cesàro de la función <math>f</math> y errores de las sumas de Cesàro frente a <math>f</math> mediante las normas <math>L^2</math> y del supremo respecto de <math>n</math>.]] | ||
| − | + | Observamos cómo efectivamente al representar las sumas de Cesàro, se reduce casi al completo la oscilación en torno a los puntos de discontinuidad. Sin embargo, emplear este método presenta un inconveniente, el error aumenta. La razón de esto es que hay una única combinación lineal a partir de la cual se obtiene la función, pues recordemos que estamos considerando una base del espacio <math>L^2</math>. Por tanto, si tomamos las sumas de Cesàro, que no son más que otra combinación lineal de los elementos de la base, esperaremos un error mayor, al menos en la norma <math>L^2</math>. Este hecho se aprecia en la segunda imagen. | |
| − | + | Un aspecto a destacar también es que, en las dos gráficas del error, el comportamiento de este es similar con ambas normas. | |
| + | Se observa que, con la norma <math>L^2</math>, la función que representa la evolución del error decrece con una pendiente muy pronunciada en un inicio, que se va suavizando conforme aumenta el valor de <math>n</math>. Por otro lado, se puede observar cómo el error con la norma del supremo parece mantenerse constante en <math>0.5</math>. Sin embargo, es apreciable que el valor disminuye al final de la gráfica. | ||
| + | Esto es debido a un fallo en MatLab, que no deja de ser un programa de cálculo numérico. En MatLab, las integrales se ven condicionadas a una malla de valores tal que cuanto más densa sea, mejores serán las aproximaciones. Esto deriva en el aparente descenso del error con la norma del supremo. Si en el programa (escrito más abajo) aumentamos la variable <math>div</math>, dando lugar a una malla más gruesa, el fallo se agrava. En ese caso, se puede observar que el error con la norma del supremo converge a 0, lo cual por lo mencionado anteriormente no es posible. | ||
| + | [[Archivo:Errores base trigonometrica malla.png|450px|thumb|center|Resultado erróneo debido al aumneto del grosor de la malla (poner en el código <math>div=10^{-3}</math>).]] | ||
| − | |||
| + | Para visualizar fácilmente cómo aproximan las series de Fourier a funciones discontinuas en función de <math>n</math> véase el siguiente video. | ||
| − | |||
| − | + | [[Archivo:Aproximación-por-Fourier.gif|600px|thumb|center|Video de convergencia de la serie de Fourier]] | |
| − | + | ||
==Código de MatLab== | ==Código de MatLab== | ||
| + | |||
| + | '''Nota:''' Los datos del programa son altos, por lo que tardará más de lo normal. Si quieres que tarde menos, cambia los valores de div y N2. | ||
| + | |||
| + | En primer lugar, se presenta el código para obtener las cuatro primeras gráficas. | ||
| + | |||
{{matlab|codigo= | {{matlab|codigo= | ||
f=@(x)(x<=1/2); %Definimos la función escalón en el 1/2 | f=@(x)(x<=1/2); %Definimos la función escalón en el 1/2 | ||
inicio=0; fin=1; %límites del intervalo | inicio=0; fin=1; %límites del intervalo | ||
| − | + | ||
%Extensión par | %Extensión par | ||
| − | g=@(x)(f(-x).*(x<0) + f(x).*(x>=0)); %Extensión par de f | + | g=@(x)(f(-x).*(x<0) + f(x).*(x>=0)); %Extensión par de f |
inicio_par=-fin; %límite a la izquierda | inicio_par=-fin; %límite a la izquierda | ||
div=10^-5; | div=10^-5; | ||
| − | + | ||
%Coeficientes de Fourier | %Coeficientes de Fourier | ||
N2=1000; N=[1;5;10;N2]; longitud = (fin-inicio_par); | N2=1000; N=[1;5;10;N2]; longitud = (fin-inicio_par); | ||
| Línea 267: | Línea 264: | ||
F=a_0*ones(max(N),length(X)); | F=a_0*ones(max(N),length(X)); | ||
S=a_0*transpose(2:max(N)+1)*ones(1,length(X)); | S=a_0*transpose(2:max(N)+1)*ones(1,length(X)); | ||
| − | NL2=zeros(N2,1); | + | NL2=zeros(N2,1); |
| − | Nsup=zeros(N2,1); | + | Nsup=zeros(N2,1); |
| − | NL2S=zeros(N2,1); | + | NL2S=zeros(N2,1); |
NsupS=zeros(N2,1); | NsupS=zeros(N2,1); | ||
| − | + | ||
for i=1:max(N) | for i=1:max(N) | ||
cc=cos(i*2*pi*X/longitud); | cc=cos(i*2*pi*X/longitud); | ||
| Línea 291: | Línea 288: | ||
NsupS(i) = max( abs( G-S(i,:) ) ); | NsupS(i) = max( abs( G-S(i,:) ) ); | ||
end | end | ||
| − | + | ||
figure(1) | figure(1) | ||
colors=["g","b","m"]; | colors=["g","b","m"]; | ||
| + | subplot(1,2,1) | ||
plot(X,G,"k","LineWidth",1.5) | plot(X,G,"k","LineWidth",1.5) | ||
name=["Extensión par de f"]; | name=["Extensión par de f"]; | ||
| Línea 303: | Línea 301: | ||
legend(name); xlabel("eje x"); ylabel("eje y") | legend(name); xlabel("eje x"); ylabel("eje y") | ||
title("Aproximaciones con la Base Trigonométrica") | title("Aproximaciones con la Base Trigonométrica") | ||
| − | + | ||
| − | %Representamos | + | %Representamos el error |
| − | + | subplot(1,2,2) | |
plot(1:N2,NL2,"Color","g","LineWidth",1.5) | plot(1:N2,NL2,"Color","g","LineWidth",1.5) | ||
| − | hold on | + | hold on |
plot(1:N2,Nsup,"Color","m","LineWidth",1.5) | plot(1:N2,Nsup,"Color","m","LineWidth",1.5) | ||
title("Errores de la base trigonométrica") | title("Errores de la base trigonométrica") | ||
| − | legend("Norma de L^2","Norma del supremo"); | + | legend("Norma de L^2","Norma del supremo"); |
xlabel("N"); ylabel("Error") | xlabel("N"); ylabel("Error") | ||
| − | + | ||
%%Sumas de Cesàro | %%Sumas de Cesàro | ||
| − | figure( | + | figure(2) |
| + | subplot(1,2,1) | ||
title("Sumas de Cesàro") | title("Sumas de Cesàro") | ||
colors=["g","b","m"]; | colors=["g","b","m"]; | ||
| Línea 326: | Línea 325: | ||
legend(name); xlabel("eje x"); ylabel("eje y") | legend(name); xlabel("eje x"); ylabel("eje y") | ||
| − | + | %Representamos el error | |
| − | plot(1:N2,NL2S,"Color"," | + | subplot(1,2,2) |
| − | hold on | + | plot(1:N2,NL2S,"Color","g","LineWidth",1.5) |
| − | plot(1:N2,NsupS,"Color"," | + | hold on |
| + | plot(1:N2,NsupS,"Color","m","LineWidth",1.5) | ||
title("Errores de las sumas de Cesàro") | title("Errores de las sumas de Cesàro") | ||
| − | legend("Norma de L^2","Norma del supremo"); | + | legend("Norma de L^2","Norma del supremo"); |
xlabel("N"); ylabel("Error")}} | xlabel("N"); ylabel("Error")}} | ||
| − | + | ||
| + | A continuación se muestra el código para reproducir el vídeo: | ||
| + | |||
| + | {{matlab|codigo= f=@(x)(x<=1/2); %Definimos la función escalón en el 1/2 | ||
| + | |||
| + | inicio=0; fin=1; %límites del intervalo | ||
| + | |||
| + | %Extensión par | ||
| + | |||
| + | g=@(x)(f(-x).*(x<0) + f(x).*(x>=0)); %Extensión par de f | ||
| + | |||
| + | inicio_par=-fin; %límite a la izq | ||
| + | |||
| + | div=10^-3; | ||
| + | |||
| + | %Coeficientes de Fourier | ||
| + | |||
| + | N2=200; N=[1;5;10;N2]; longitud = (fin-inicio_par); | ||
| + | |||
| + | a=zeros(max(N),1); b=zeros(max(N),1); | ||
| + | |||
| + | X=inicio_par:div:fin; | ||
| + | G=g(X); | ||
| + | |||
| + | a_0=trapz(X,G/2); | ||
| + | F=a_0*ones(max(N),length(X)); | ||
| + | |||
| + | for i=1:max(N) | ||
| + | cc=cos(i*2*pi*X/longitud); | ||
| + | ss=sin(i*2*pi*X/longitud); | ||
| + | %Coefs | ||
| + | a(i)=trapz(X,G.*cc); | ||
| + | b(i)=trapz(X,G.*ss); | ||
| + | %f_n | ||
| + | F(i:max(N),:)=F(i:max(N),:)+a(i)*ones(max(N)-i+1,1)*cc + b(i)*ones(max(N)-i+1,1)*ss; | ||
| + | end | ||
| + | |||
| + | pelicula=VideoWriter('Aproximación por Fourier'); %creo el video | ||
| + | pelicula.FrameRate=10; | ||
| + | open(pelicula); %lo abro | ||
| + | for j=1:max(N) | ||
| + | figura = figure(1); | ||
| + | plot(X,G,"k","LineWidth",1.5) | ||
| + | hold on | ||
| + | plot(X,real(F(j,:)),"Color","r","LineWidth",1.5) | ||
| + | xlabel("eje x") | ||
| + | ylabel("eje y") | ||
| + | title("Aproximaciones con la Base Trigonométrica") | ||
| + | subtitle("n="+num2str(j)) | ||
| + | hold off | ||
| + | imagen=getframe(figura); | ||
| + | writeVideo(pelicula,imagen); %inserto la imagen | ||
| + | end | ||
| + | close(pelicula);}} | ||
=Cambio de intervalo= | =Cambio de intervalo= | ||
| Línea 390: | Línea 443: | ||
=Base trigonométrica compleja= | =Base trigonométrica compleja= | ||
| − | Por último, vamos a considerar la base trigonométrica compleja | + | Por último, vamos a considerar la base trigonométrica compleja. |
| − | + | En el espacio de funciones <math> L^2 ([a,b]) </math> que toman valores complejos, el producto escalar viene determinado por <math> \langle f,g \rangle_{L^2}= \int_{a} ^{b} f(x) \overline{g(x)} \, dx \in \mathbb{C} </math> . | |
| + | |||
| + | Se define entonces la base trigonométrica compleja como <math> \left\{ e^{\frac{2\pi inx}{b-a}}\right\} _{n \in \mathbb{Z} }</math> en <math>[a, b] </math>. De modo que, dada <math> f \in L^2([a,b])</math>, podemos aproximarla mediante la serie de Fourier como | ||
| + | <math> f(x) = \sum_{k=- \infty}^{\infty} c_{k} e^{\frac{2\pi inx}{b-a}}</math>, con | ||
| + | <center><math> c_k= \left \{ \begin{array}{ll} | ||
| + | |||
| + | \frac{a_0}{2} & \quad k=0, \\ | ||
| + | |||
| + | \frac{1}{2}(a_k-ib_k), & \quad k>0, \\ | ||
| + | |||
| + | \frac{1}{2}(a_{-k}+ib_{-k}), & \quad k<0. | ||
| + | |||
| + | \end{array} \right. | ||
| + | |||
| + | </math></center> | ||
| + | |||
| + | En este caso los coeficientes de Fourier son números complejos, incluso aunque la función tome valores reales. | ||
| + | Nótese que esta definición de base extiende la dada en los reales, pues podemos escribir todos los elementos de la base real como combinación de los elementos de la compleja: | ||
<math> \sin{(n \pi x)} = \frac{e^{i n x}- e^{-i n x}}{2i} </math> , | <math> \sin{(n \pi x)} = \frac{e^{i n x}- e^{-i n x}}{2i} </math> , | ||
| Línea 398: | Línea 468: | ||
<math> cos{(n \pi x)} = \frac{e^{i n x}+ e^{-i n x}}{2} </math>, | <math> cos{(n \pi x)} = \frac{e^{i n x}+ e^{-i n x}}{2} </math>, | ||
| − | <math> \frac{1}{2}=\frac{1}{2}e^{0i} </math>. | + | <math> \frac{1}{2}=\frac{1}{2}e^{0i} </math>. |
| − | + | Al igual que ocurría en el caso real, es una base ortonormal si el intervalo sobre el que está definida tiene longitud 1. | |
| − | Veamos ahora un ejemplo al emplear esta base. Para ello, vamos a considerar la función <math> f(x) = 4x(1/2-x)^2</math> y aproximarla. Comenzamos calculando la base trigonométrica adaptada al intervalo <math> [0,1] </math>, que será <math> \{ e^{i 2\pi nx}\} _{n \in \mathbb{Z} }</math>. | + | Veamos ahora un ejemplo al emplear esta base. Para ello, vamos a considerar la función <math> f(x) = 4x(1/2-x)^2</math> y aproximarla. |
| + | |||
| + | Comenzamos calculando la base trigonométrica adaptada al intervalo <math> [0,1] </math>, que será <math> \{ e^{i 2\pi nx}\} _{n \in \mathbb{Z} }</math>. | ||
| + | |||
| + | A continuación, representamos la aproximación considerando los primeros 5, 10 y 20 términos de la serie. | ||
| − | |||
[[Archivo:Ej5.foto2.png|450px|thumb|center|Aproximaciones por sumas parciales de la serie de Fourier de la función f con la base trigonométrica compleja.]] | [[Archivo:Ej5.foto2.png|450px|thumb|center|Aproximaciones por sumas parciales de la serie de Fourier de la función f con la base trigonométrica compleja.]] | ||
| + | |||
| + | |||
| + | Los resultados son similares a los obtenidos en la sección anterior. Hay una mejora en la aproximación conforme aumentamos el valor de <math> n </math>, pero también hay un empeoramiento en los extremos del intervalo. | ||
==Código de MatLab== | ==Código de MatLab== | ||
| Línea 447: | Línea 523: | ||
=Conclusión= | =Conclusión= | ||
| − | Como hemos visto a lo largo del documento, las series de Fourier son una gran herramienta para aproximar funciones | + | Como hemos visto a lo largo del documento, las series de Fourier son una gran herramienta para aproximar funciones. La bondad de estas aproximaciones depende de numerosos factores, como son el número de términos de la serie de Fourier que consideremos, la continuidad de la función que queramos aproximar o los valores que toma esta función en los extremos del intervalo que se considere. |
| − | = | + | =Referencias= |
* [https://www.dmae.upct.es/~paredes/am_ti/apuntes/Tema%202.%20Series%20y%20transformadas%20de%20Fourier.pdf Series y transformadas de Fourier. Domingo Alcaraz Candela.] | * [https://www.dmae.upct.es/~paredes/am_ti/apuntes/Tema%202.%20Series%20y%20transformadas%20de%20Fourier.pdf Series y transformadas de Fourier. Domingo Alcaraz Candela.] | ||
| − | * [http://www.sc.ehu.es/sbweb/fisica3/oscilaciones/fourier/fourier.html | + | * [http://www.sc.ehu.es/sbweb/fisica3/oscilaciones/fourier/fourier.html Series de Fourier Ángel Franco García] |
| + | * [https://espanol.libretexts.org/Ingenieria/Ingenier%C3%ADa_El%C3%A9ctrica_(Johnson)/04%3A_Dominio_de_frecuencia/4.02%3A_Serie_compleja_de_Fourier Serie compleja de Fourier] | ||
[[Categoría:EDP]] | [[Categoría:EDP]] | ||
[[Categoría:EDP23/24]] | [[Categoría:EDP23/24]] | ||
Revisión actual del 22:04 15 feb 2024
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Series de Fourier. Grupo GRwM |
| Asignatura | EDP |
| Curso | 2023-24 |
| Autores | Guillermo Gómez Tejedor, Marina Jiménez Barrantes y Rocío Tajuelo Díaz |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
1 Introducción
En el trabajo que se presenta a continuación vamos a explicar la aproximación de funciones por series trigonométricas. Para ello, vamos a comenzar asentando la base teórica necesaria para entender el funcionamiento de estas aproximaciones. A continuación, vamos a proporcionar algunos ejemplos con el fin de ilustrar lo anterior. Los cálculos y visualizaciones han sido programados con MatLab.
2 Preliminares
En el siglo XIX, Jean-Baptiste Joseph Fourier introdujo una herramienta fundamental en el análisis matemático, las series de Fourier.
Sin embargo, antes de dar una definición formal de las series de Fourier, debemos introducir algunos conceptos previos como son los espacios de Hilbert y las bases hilbertianas.
2.1 Espacio de Hilbert y [math]L^2[/math]
Un espacio de Hilbert es un espacio vectorial separable, dotado de un producto escalar, que define una norma, y que es completo con respecto a esa norma. En este trabajo trataremos espacios de Hilbert de dimensión infinita, concretamente el espacio de funciones [math] L^2 [/math].
El espacio de funciones [math] L^2 [/math] sobre un un conjunto [math] \Omega [/math] se define como [math] L^2= \{ f: \Omega \longrightarrow \mathbb{R} [/math] tal que [math]\int_{\Omega}|f(x)|^2 \, dx \lt \infty \}[/math] . Además, se define el producto escalar de [math] f, g \in L^2(\Omega) [/math] como [math]\langle f,g\rangle_{L^2(\Omega)}= \int_{\Omega} f(x) \cdot g(x) \, dx [/math] y gracias a este podemos definir la norma en [math] L^2 [/math] como [math] \| \cdot \| _ {L^2 (\Omega)} = \sqrt{\langle\cdot , \cdot \rangle_{L^2(\Omega)}} [/math].
El espacio [math] L^2 (\Omega)[/math] con esta norma es un espacio de Hilbert y será sobre el cual trabajaremos a lo largo del documento.
NOTA: Es importante tener en cuenta que esto solo se cumple si consideramos que en [math]L^2[/math] dos funciones son iguales si y solo si son iguales en casi todo punto.
2.2 Bases de Hilbert
La importancia de los espacios de Hilbert reside en que poseen propiedades análogas a los espacios vectoriales de dimensión finita, pero en dimensión infinita. Esto permite que estos espacios, que a priori se desvinculan de algunas de las propiedades esenciales de los espacios vectoriales de dimensión finita, sean manipulados con mayor facilidad.
La propiedad esencial de los espacios de Hilbert es que mantienen el concepto de base. Se define así la base Hilbertiana como una familia ortonormal y numerable de elementos de un espacio de Hilbert, cuyo espacio lineal generado es denso en dicho espacio.
Estas bases son la infraestructura de estos espacios, ya que cada elemento podrá expresarse como una combinación lineal infinita y única de elementos de la base. Estas combinaciones lineales infinitas se denominan series de Fourier. En el contexto que trabajaremos, las series de Fourier van a converger puntualmente a funciones periódicas y continuas, permitiendo aproximar funciones periódicas mediante una combinación lineal de funciones sinusoidales (senos y cosenos). Serán la herramienta fundamental en nuestro trabajo.
La gran ventaja reside en que el cálculo de los coeficientes de Fourier se obtiene mediante el producto escalar, al igual que en dimensión finita.
2.3 Convergencia puntual de las series de Fourier
Sea [math]f \in L^2([- \pi, \pi ])[/math], se dice que [math]f[/math] satisface la condición de Dirichlet si:
- La función es continua salvo en un número finito de puntos con discontinuidad de salto finito.
- Se puede dividir [math][- \pi, \pi ][/math] en un conjunto de subintervalos finitos en los cuales la función es monónotona.
Teniendo en cuenta esta definición, se tiene el siguiente teorema que caracteriza la convergencia puntual de las series de Fourier:
Si [math]f \in L^2([- \pi, \pi ])[/math] verifica la condición de Dirichlet, entonces la serie de Fourier converge puntualmente en los puntos de continuidad. Es decir, si [math]x_{0}[/math] es un punto de continuidad de [math]f[/math]: [math]f(x_{0})= \lim_{x \to \infty} \{ \frac{a_{0}}{2}+ \sum_{k=1}^{n} \ [a_{k} cos(k x_{0}) + b_{k}sin(k x_{0})][/math]. Si [math]x_{0}[/math] es un punto de discontinuidad la serie converge en [math]x_{0}[/math] a [math]\frac{f(x_{0}^-) + f(x_{0}^+)}{2}[/math].
3 Base trigonométrica
Si consideramos el espacio [math]L^2([- \pi, \pi ])[/math] de funciones [math]2 \pi [/math] periódicas , una base de este es la base trigonométrica [math]\{ 1/2, \cos{(n x)},\sin{(n x)} \}_{n \in \mathbb{N}} ,x\in [-\pi ,\pi][/math], de forma que, dada una función [math]f \in L^2([- \pi, \pi ])[/math], se tiene que [math] f \approx \frac{a_0}{2}+\sum^{\infty}_{n=1}(a_n\cos{(nx)}+b_n\sin{(nx)})[/math]. Como la base trigonométrica es ortogonal, podemos obtener los coeficientes de la serie de Fourier como
[math] a_0=\frac{1}{\pi} \int^{\pi}_{-\pi} f(x) dx [/math],
[math] a_n=\frac{1}{\pi} \int^{\pi}_{-\pi} f(x) \cos {(n x)}dx [/math],
[math] b_n=\frac{1}{\pi} \int^{\pi}_{-\pi} f(x) \sin {(n x)}dx [/math].
Si consideramos ahora el espacio de funciones [math]L^2([a,b])[/math], al variar el intervalo de [math] [- \pi, \pi ][/math] a [math] [a, b][/math], debemos hacer un cambio de variable de forma que las nuevas funciones de la base tengan periodo igual a la longitud del nuevo intervalo. De este modo, la base trigonométrica pasa a ser [math]\left \{ 1/2, \cos{\left(\frac{2n\pi}{b-a} x\right)},\sin{\left(\frac{2n\pi}{b-a} x \right)} \right\}_{n \in \mathbb{N}} ,x\in [a,b][/math]. Esta base no tiene por qué estar normalizada, sin embargo, que no lo esté solo altera cómo se obtienen los coeficientes de Fourier.
Al igual que antes, sea [math] f \in L^2([a,b])[/math], podemos aproximar la función mediante la serie de Fourier como
donde:
[math] a_0=\frac{1}{\|1/2\|_{L^2([a,b])}}\int^b_a \frac{f(x)}{2}dx[/math],
[math] a_n=\frac{1}{\left\|\cos{\left(\frac{2n\pi}{b-a} x\right)}\right\|_{L^2([a,b])}}\int^b_a f(x) \cos{\left(\frac{2n\pi}{b-a} x\right)}dx[/math],
[math] b_n=\frac{1}{\left\|\sin{\left(\frac{2n\pi}{b-a} x\right)}\right\|_{L^2([a,b])}}\int^b_a f(x) \sin{\left(\frac{2n\pi}{b-a} x\right)}dx [/math].
En la siguiente gráfica se representa esta base para los 10 primeros términos con [math][a,b]=[-1,1][/math], correspondiendo la recta negra a la función [math]1/2[/math] , y representados en línea continua y punteada [math]\cos{\left(n\pi x\right)}[/math] y [math]\sin{\left(n\pi x\right)}[/math], respectivamente.
Como podemos observar, el periodo de las funciones [math]\sin[/math] y [math]\cos[/math] se reduce a medida que aumenta el valor de [math]n[/math]. Este aspecto, como veremos más adelante, permitirá mejorar la aproximación de funciones.
3.1 Código de MatLab
f1=@(x,n) cos(n*pi.*x);
f2=@(x,n) sin(n*pi.*x);
xx=linspace(-1,1,1000);
n = 10;
colores=["#FF0000"; "#00FF00";"#0000FF"; "#F08080"; "#FFFF00" ; "#A901DB "; "#04B404"; "#FF8000"; "#FF0080"; "c"];
for i=1:n
subplot(5,2,i)
hold on
yline(1/2,"Color","k",LineWidth=1.3)
plot(xx,f1(xx,i),"Color",colores(i),LineWidth=1.3)
plot(xx,f2(xx,i), ":","Color",colores(i),LineWidth=1.3)
subtitle("Base trigonométrica para n="+num2str(i))
legend('y=1/2',"cos("+num2str(i)+"*pi*x)","sin("+num2str(i)+"*pi*x)");
end
4 Aproximación de funciones impares
Siguiendo con nuestro objetivo de ilustrar la aproximación de funciones por series trigonométricas, vamos a considerar la función [math]f(x)=x(1-x)[/math] en el intervalo [math][0,1][/math].
En primer lugar obtenemos la extensión impar de [math]f[/math] a [math][-1,1][/math]:
[math] g(x)= \left \{ \begin{array}{ll} f(x), & \quad x\in (0,1], \\ 0, & \quad x=0, \\ -f(-x), & \quad x \in [-1,0). \end{array} \right. [/math]
Calculamos ahora la serie de Fourier para [math]g[/math] en [math][-1,1][/math]. Debemos tener en cuenta que la función [math]f[/math] es continua y cumple que el intervalo [math][0,1][/math] se puede dividir en un conjunto de subintervalos finitos en los cuales la función es monónotona, es decir, [math]f[/math] cumple la condición de Dirichlet. Gracias a esto, podemos asegurar que [math]\forall x_{0} \in [0,1][/math] la serie de Fourier va a converger puntualmente a [math]f(x_{0})[/math].
Observamos que
[math] a_0=\frac{1}{\|1/2\|_{L^2([a,b])}}\int^b_a \frac{f(x)}{2}\, dx=0,[/math]
[math] a_k=\frac{1}{\left\|\cos{\left(\frac{2n\pi}{b-a} x\right)}\right\|_{L^2([a,b])}} \int_{1}^{-1} \cos{(k\pi x)} f(x) \, dx [/math].
Esto se debe a que la integral de funciones impares sobre intervalos de la forma [math][-T,T][/math] es nula. Con ello como la multiplicación de una función par con una impar resulta en otra función impar, al calcular los coeficientes de [math]\cos{(k\pi x)}[/math] y [math]\frac{1}{2}[/math] obtenemos valores nulos. Por tanto, se tiene que [math]g(x)= \sum_{k=1}^{\infty} b_k \sin{(k\pi x)}[/math].
Teniendo esto en cuenta, vamos a emplear las funciones impares de la base trigonométrica en [math][-1,1][/math], es decir, [math]\{ \sin{(k\pi x)} \}_{k\in \mathbb{N}}[/math].
Definimos [math] f_n (x)[/math] como la suma de los primeros [math]n [/math] términos de la serie de Fourier, es decir, [math]f_n(x)= \sum_{k=1}^{n} b_k \sin{(k\pi x)}[/math], con [math]b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx [/math].
A continuación, se representa gráficamente [math] f(x)[/math] y [math]f_n (x)[/math] para [math]n=1,5,10[/math]. Cabe destacar que, aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original, ya que estamos añadiendo funciones sinusoidales que permiten capturar mejor algunos detalles en la función original.
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina [math](10^{-3})[/math] con la función [math]trapz[/math] que proporciona MatLab.
Desde un principio se puede observar que independientemente del valor de [math]n[/math], las [math]f_{n} [/math] aproximan de forma precisa [math]f(x)[/math]. Esto se debe a que la extensión impar es continua en el intervalo [math][-1,1][/math] y comienza y acaba en el mismo valor (0).
Para hacer un estudio más exhaustivo de las aproximaciones,vamos a representar el error de [math]f_{n} [/math] respecto a [math]f [/math] en función de [math]n[/math]. Para calcular este error, vamos a emplear tanto la norma [math]L^2 [/math] [math]\left(\left( \int_{0}^{1} |f(x)-f_{n}(x)|^2\right)^{\frac{1}{2}}\right)[/math] como la del supremo o uniforme [math]\left(sup_{x \in [0,1]} |f(x)-f_{n}(x)|\right)[/math].
Como podemos observar en la gráfica del error, al emplear ambas normas, el error de la aproximación se reduce cuando aumentamos el número de términos de la serie de Fourier. De hecho, disminuye con una pendiente muy pronunciada al aumentar la [math]n [/math] de [math]1 [/math] a [math]10 [/math]. Sin embargo, el decrecimiento de este se va suavizando para valores mayores de [math]n [/math]. Aún así, el error con [math]n=1000 [/math] es menor a [math]10^{-8} [/math], lo cual indica lo potente que es esta técnica de aproximación con funciones continuas y que comienzan y acaban en el mismo valor.
Es importante destacar que en la gráfica hemos empleado la escala logarítmica. Al ser los valores del error muy reducidos, si no considerábamos esta escala, a penas se podía distinguir la diferencia entre una norma y otra. Gracias a ello, se observa cómo el error es menos notorio con la norma de [math]L^2[/math].
4.1 Código de MatLab
f=@(x)(x.*(1-x)); %Definimos la función
inicio=0; fin=1; %límites del intervalo
g=@(x)(f(-x).*(sign(x)-1)/2+f(x).*(sign(x)+1)/2); %Extensión impar de f
inicio_impar=-fin; %límite a la izq
div=10^-4; %División del intervalo
%Coeficientes de Fourier
N2=1000; N=[1;5;10;N2]; %N2: registro de n para el error.
longitud = (fin-inicio_impar);
a=zeros(max(N),1);
b=zeros(max(N),1);
X=inicio_impar:div:fin;
G=g(X);
a_0=trapz(X,G/2); %Coeficiente a_0
F=a_0*ones(max(N),length(X));
NL2=zeros(N2,1);
Nsup=zeros(N2,1);
for i=1:max(N)
cc=cos(i*2*pi*X/longitud);
ss=sin(i*2*pi*X/longitud);
%Coeficientes a_k y b_k
a(i)=trapz(X,G.*cc);
b(i)=trapz(X,G.*ss);
F(i:max(N),:)=F(i:max(N),:)+a(i)*ones(max(N)-i+1,1)*cc + b(i)*ones(max(N)-i+1,1)*ss; %valores de f_n
NL2(i) = sqrt(trapz(X,abs(G-F(i,:)).^2)/2); %Error norma L^2
Nsup(i) = max(abs(G-F(i,:))); %Error norma supremo
end
figure(1)
name="Extensión impar de f";
for j=1:length(N)-1
subplot(1,length(N)-1,j)
plot(X,G,"k","LineWidth",2)
subtitle("f_{"+num2str(N(j))+"}")
hold on
plot(X,real(F(N(j),:)),"Color","r","LineWidth",1)
legend(name,"f_{"+num2str(N(j))+"}");
xlabel("eje x"); ylabel("eje y");
end
%Función error respecto de n
figure(2)
semilogy(1:N2,NL2,"Color","g","LineWidth",1.5)
hold on
semilogy(1:N2,Nsup,"Color","m","LineWidth",1.5)
title("Errores de la base trigonométrica escala logarítmica");
legend("Norma de L^2","Norma del supremo"); xlabel("N"); ylabel("Error")
Nota: Los datos del programa son grandes para obtener más información, por lo que tardará más de lo normal. Si prefieres que vaya más rápido cambia div y N2.
5 Aproximación de funciones discontinuas y pares
A continuación vamos a estudiar la aproximación de una función discontinua, concretamente con una discontinuidad de salto finito.
Como ya hemos visto en el teorema de convergencia puntual, la serie de Fourier en un punto de discontinuidad [math]x_{0} [/math] va a converger a[math]\frac{f(x_{0}^-) + f(x_{0}^+)}{2 }[/math]. Al intentar aproximar de forma continua una discontinuidad de salto, se obtienen pendientes muy pronunciadas, que resultan en grandes oscilaciones en torno a esos puntos de discontinuidad. A este comportamiento oscilatorio de la serie de Fourier se le conoce como fenómeno de Gibbs.
Para visualizar este fenómeno, vamos a considerar la función discontinua [math]f(x) =1_{x \leq 1/2}(x)[/math]. Lo primero que observamos es que esta función se puede extender a [math][-1,1][/math] de forma par. Por un razonamiento similar al de la extensión impar, la serie de Fourier en este caso tiene únicamente los términos de la base trigonométrica que son funciones pares, es decir, [math]1/2[/math] y [math]\cos{(n \pi x)}[/math].
A continuación, vamos a representar la aproximación de la función [math]f[/math] por sumas parciales de la serie de Fourier para distintos valores de [math]n[/math]. Además, para poder hacer un estudio más exhaustivo vamos a obtener los errores. Para ello, vamos a utilizar las dos normas empleadas en la sección Aproximación de funciones impares ([math]L^2[/math] y supremo).
Al contrario que en la anterior sección, en la primera imagen se puede observar cómo las funciones [math]f_{n}[/math] no aproximan [math]f[/math] tan bien desde un inicio. Esto se debe como ya hemos mencionado a la discontinuidad de salto.
Además, vemos cómo, en un entorno de los puntos de discontinuidad, aparecen oscilaciones más pronunciadas. De hecho, la frecuencia de estas oscilaciones aumenta a medida que nos acercamos a la discontinuidad, al igual que también lo hace conforme crece el valor de [math]n[/math].
Por otro lado, en la segunda imagen, se puede apreciar cómo la diferencia del error obtenido al considerar la norma [math]L^2[/math] y la del supremo es mucho mayor que al aproximar la función continua de la sección anterior. Esto se debe a que la discontinuidad de salto genera un mayor error en la norma del supremo, pues esta es susceptible a las diferencias puntuales. Como las aproximaciones tienden al punto medio de los valores de la función en las discontinuidades, siempre va a haber un error mínimo respecto a esa norma, en este caso [math]0.5[/math]. Esto, por el contrario, no ocurre con la norma [math]L^2[/math] ya que la integral no tiene en cuenta los conjuntos de medida nula.
Para poder suavizar el fenómeno de Gibbs, podemos emplear las sumas de Cesàro, que vienen dadas por la siguiente expresión:
Al tomar promedios de las sumas parciales, se atenúan las oscilaciones cerca de los puntos de discontinuidad. Esto se debe a que el promedio tiende a suavizar la transición entre los valores de la función en estos puntos.
Para observar esta mejora en la aproximación, representamos las sumas de Cesàro de la función [math]f[/math]. También vamos a graficar la evolución del error al aumentar el valor de [math]n[/math].
Observamos cómo efectivamente al representar las sumas de Cesàro, se reduce casi al completo la oscilación en torno a los puntos de discontinuidad. Sin embargo, emplear este método presenta un inconveniente, el error aumenta. La razón de esto es que hay una única combinación lineal a partir de la cual se obtiene la función, pues recordemos que estamos considerando una base del espacio [math]L^2[/math]. Por tanto, si tomamos las sumas de Cesàro, que no son más que otra combinación lineal de los elementos de la base, esperaremos un error mayor, al menos en la norma [math]L^2[/math]. Este hecho se aprecia en la segunda imagen.
Un aspecto a destacar también es que, en las dos gráficas del error, el comportamiento de este es similar con ambas normas.
Se observa que, con la norma [math]L^2[/math], la función que representa la evolución del error decrece con una pendiente muy pronunciada en un inicio, que se va suavizando conforme aumenta el valor de [math]n[/math]. Por otro lado, se puede observar cómo el error con la norma del supremo parece mantenerse constante en [math]0.5[/math]. Sin embargo, es apreciable que el valor disminuye al final de la gráfica.
Esto es debido a un fallo en MatLab, que no deja de ser un programa de cálculo numérico. En MatLab, las integrales se ven condicionadas a una malla de valores tal que cuanto más densa sea, mejores serán las aproximaciones. Esto deriva en el aparente descenso del error con la norma del supremo. Si en el programa (escrito más abajo) aumentamos la variable [math]div[/math], dando lugar a una malla más gruesa, el fallo se agrava. En ese caso, se puede observar que el error con la norma del supremo converge a 0, lo cual por lo mencionado anteriormente no es posible.
Para visualizar fácilmente cómo aproximan las series de Fourier a funciones discontinuas en función de [math]n[/math] véase el siguiente video.
5.1 Código de MatLab
Nota: Los datos del programa son altos, por lo que tardará más de lo normal. Si quieres que tarde menos, cambia los valores de div y N2.
En primer lugar, se presenta el código para obtener las cuatro primeras gráficas.
f=@(x)(x<=1/2); %Definimos la función escalón en el 1/2
inicio=0; fin=1; %límites del intervalo
%Extensión par
g=@(x)(f(-x).*(x<0) + f(x).*(x>=0)); %Extensión par de f
inicio_par=-fin; %límite a la izquierda
div=10^-5;
%Coeficientes de Fourier
N2=1000; N=[1;5;10;N2]; longitud = (fin-inicio_par);
a=zeros(max(N),1); b=zeros(max(N),1);
X=inicio_par:div:fin;
G=g(X);
a_0=trapz(X,G/2);
F=a_0*ones(max(N),length(X));
S=a_0*transpose(2:max(N)+1)*ones(1,length(X));
NL2=zeros(N2,1);
Nsup=zeros(N2,1);
NL2S=zeros(N2,1);
NsupS=zeros(N2,1);
for i=1:max(N)
cc=cos(i*2*pi*X/longitud);
ss=sin(i*2*pi*X/longitud);
%Coefs
a(i)=trapz(X,G.*cc);
b(i)=trapz(X,G.*ss);
%f_n
F(i:max(N),:)=F(i:max(N),:)+a(i)*ones(max(N)-i+1,1)*cc + b(i)*ones(max(N)-i+1,1)*ss;
%Errores de f_n
NL2(i) = sqrt( trapz(X, abs( G-F(i,:) ).^2)/2 );
Nsup(i) = max( abs( G-F(i,:) ) );
%S_n
sat=transpose(1:max(N)-i+1);
S(i:max(N),:)=S(i:max(N),:)+a(i)*sat*cc + b(i)*sat*ss;
S(i,:)=S(i,:)/(i+1);
%Errores de S_n
NL2S(i) = sqrt( trapz(X, abs( G-S(i,:) ).^2)/2 );
NsupS(i) = max( abs( G-S(i,:) ) );
end
figure(1)
colors=["g","b","m"];
subplot(1,2,1)
plot(X,G,"k","LineWidth",1.5)
name=["Extensión par de f"];
hold on
for j=1:length(N)-1
plot(X,real(F(N(j),:)),"Color",colors(j),"LineWidth",1.5)
name(j+1)="f_{"+num2str(N(j))+"}";
end
legend(name); xlabel("eje x"); ylabel("eje y")
title("Aproximaciones con la Base Trigonométrica")
%Representamos el error
subplot(1,2,2)
plot(1:N2,NL2,"Color","g","LineWidth",1.5)
hold on
plot(1:N2,Nsup,"Color","m","LineWidth",1.5)
title("Errores de la base trigonométrica")
legend("Norma de L^2","Norma del supremo");
xlabel("N"); ylabel("Error")
%%Sumas de Cesàro
figure(2)
subplot(1,2,1)
title("Sumas de Cesàro")
colors=["g","b","m"];
plot(X,G,"k","LineWidth",1.5)
name=["Extensión par de f"];
hold on
for j=1:length(N)-1
plot(X,real(S(N(j),:)),"Color",colors(j),"LineWidth",1.5)
name(j+1)="S_{"+num2str(N(j))+"}";
end
legend(name); xlabel("eje x"); ylabel("eje y")
%Representamos el error
subplot(1,2,2)
plot(1:N2,NL2S,"Color","g","LineWidth",1.5)
hold on
plot(1:N2,NsupS,"Color","m","LineWidth",1.5)
title("Errores de las sumas de Cesàro")
legend("Norma de L^2","Norma del supremo");
xlabel("N"); ylabel("Error")
A continuación se muestra el código para reproducir el vídeo:
f=@(x)(x<=1/2); %Definimos la función escalón en el 1/2
inicio=0; fin=1; %límites del intervalo
%Extensión par
g=@(x)(f(-x).*(x<0) + f(x).*(x>=0)); %Extensión par de f
inicio_par=-fin; %límite a la izq
div=10^-3;
%Coeficientes de Fourier
N2=200; N=[1;5;10;N2]; longitud = (fin-inicio_par);
a=zeros(max(N),1); b=zeros(max(N),1);
X=inicio_par:div:fin;
G=g(X);
a_0=trapz(X,G/2);
F=a_0*ones(max(N),length(X));
for i=1:max(N)
cc=cos(i*2*pi*X/longitud);
ss=sin(i*2*pi*X/longitud);
%Coefs
a(i)=trapz(X,G.*cc);
b(i)=trapz(X,G.*ss);
%f_n
F(i:max(N),:)=F(i:max(N),:)+a(i)*ones(max(N)-i+1,1)*cc + b(i)*ones(max(N)-i+1,1)*ss;
end
pelicula=VideoWriter('Aproximación por Fourier'); %creo el video
pelicula.FrameRate=10;
open(pelicula); %lo abro
for j=1:max(N)
figura = figure(1);
plot(X,G,"k","LineWidth",1.5)
hold on
plot(X,real(F(j,:)),"Color","r","LineWidth",1.5)
xlabel("eje x")
ylabel("eje y")
title("Aproximaciones con la Base Trigonométrica")
subtitle("n="+num2str(j))
hold off
imagen=getframe(figura);
writeVideo(pelicula,imagen); %inserto la imagen
end
close(pelicula);
6 Cambio de intervalo
Otro caso para analizar es realizar un cambio de intervalo. A lo largo del trabajo, ya hemos trabajado con diferentes intervalos. Veamos un último ejemplo. Para ello vamos a considerar el intervalo [math][1,3][/math]. Dado que la longitud del intervalo es 2, la base trigonométrica asociada es [math]\left\{ 1/2, \cos{(n\pi x)},\sin{(n\pi x)}\right\}_{n \in \mathbb{N}} [/math] .
Sea [math]f(x)=x \cdot e^{-x}[/math]. Aproximamos la función de la misma forma que en los casos anteriores, tomando [math]n=5,10,20[/math].
Al igual que en las anteriores secciones, vemos que las aproximaciones mejoran a medida que tomamos más términos de la serie de Fourier.
También se observa cómo, en los puntos interiores del intervalo, las funciones [math]f_{n}[/math] aproximan de forma más precisa a [math]f[/math] que en los extremos. Esto se debe a la diferencia del valor de [math]f[/math] en [math]1[/math] y [math]3[/math]. Por la convergencia puntual de las series de Fourier, se tiene que [math]f_{n}(0)[/math] debe coincidir con [math]f_{n}(1)[/math], y debe ser igual al punto medio entre [math]f(0)[/math] y [math]f(1)[/math], que no coincide con ninguno de estos dos valores.
6.1 Código de MatLab
f=@(x)(x.*(exp(-x))); %Definimos la función
inicio=1; fin=3; %límites del intervalo
div=10^-3;
%Coeficientes de Fourier
N2=0; N=[5;10;20;N2]; longitud = (fin-inicio);
a=zeros(max(N),1); b=zeros(max(N),1);
X=inicio:div:fin;
G=f(X);
a_0=trapz(X,G/2);
F=a_0*ones(max(N),length(X));
for i=1:max(N)
cc=cos(i*2*pi*X/longitud);
ss=sin(i*2*pi*X/longitud);
%Coefs
a(i)=trapz(X,G.*cc);
b(i)=trapz(X,G.*ss);
%f_n
F(i:max(N),:)=F(i:max(N),:)+a(i)*ones(max(N)-i+1,1)*cc + b(i)*ones(max(N)-i+1,1)*ss;
end
figure(1)
colors=["g","b","m"];
plot(X,G,"k","LineWidth",1.5)
name=["Extensión impar de f"];
hold on
for j=1:length(N)-1
plot(X,real(F(N(j),:)),"Color",colors(j),"LineWidth",1.5)
name(j+1)="f_{"+num2str(N(j))+"}";
end
legend(name); xlabel("eje x"); ylabel("eje y")
title("Aproximaciones con la Base Trigonométrica")
7 Base trigonométrica compleja
Por último, vamos a considerar la base trigonométrica compleja.
En el espacio de funciones [math] L^2 ([a,b]) [/math] que toman valores complejos, el producto escalar viene determinado por [math] \langle f,g \rangle_{L^2}= \int_{a} ^{b} f(x) \overline{g(x)} \, dx \in \mathbb{C} [/math] .
Se define entonces la base trigonométrica compleja como [math] \left\{ e^{\frac{2\pi inx}{b-a}}\right\} _{n \in \mathbb{Z} }[/math] en [math][a, b] [/math]. De modo que, dada [math] f \in L^2([a,b])[/math], podemos aproximarla mediante la serie de Fourier como [math] f(x) = \sum_{k=- \infty}^{\infty} c_{k} e^{\frac{2\pi inx}{b-a}}[/math], con
En este caso los coeficientes de Fourier son números complejos, incluso aunque la función tome valores reales. Nótese que esta definición de base extiende la dada en los reales, pues podemos escribir todos los elementos de la base real como combinación de los elementos de la compleja:
[math] \sin{(n \pi x)} = \frac{e^{i n x}- e^{-i n x}}{2i} [/math] ,
[math] cos{(n \pi x)} = \frac{e^{i n x}+ e^{-i n x}}{2} [/math],
[math] \frac{1}{2}=\frac{1}{2}e^{0i} [/math].
Al igual que ocurría en el caso real, es una base ortonormal si el intervalo sobre el que está definida tiene longitud 1.
Veamos ahora un ejemplo al emplear esta base. Para ello, vamos a considerar la función [math] f(x) = 4x(1/2-x)^2[/math] y aproximarla.
Comenzamos calculando la base trigonométrica adaptada al intervalo [math] [0,1] [/math], que será [math] \{ e^{i 2\pi nx}\} _{n \in \mathbb{Z} }[/math].
A continuación, representamos la aproximación considerando los primeros 5, 10 y 20 términos de la serie.
Los resultados son similares a los obtenidos en la sección anterior. Hay una mejora en la aproximación conforme aumentamos el valor de [math] n [/math], pero también hay un empeoramiento en los extremos del intervalo.
7.1 Código de MatLab
f=@(x)4*x.*(1/2-x).^2; %Definimos la función
inicio=0; fin=1; %límites del intervalo
div=10^-3;
%Coeficientes de Fourier
N2=100; N=[5;10;20;N2]; longitud = (fin-inicio);
a=zeros(max(N),1); b=zeros(max(N),1);
X=inicio:div:fin;
G=f(X);
a_0=trapz(X,G.*exp(2i*0*X/longitud));
F=a_0*ones(max(N),length(X));
for j=1:max(N)
eplus=exp(j*2i*pi*X/longitud);
emin=exp(-j*2i*pi*X/longitud);
%Coefs
a(j)=trapz(X,G.*eplus);
b(j)=trapz(X,G.*emin);
%f_n
F(j:max(N),:)=F(j:max(N),:)+a(j)*ones(max(N)-j+1,1)*eplus + b(j)*ones(max(N)-j+1,1)*emin;
end
figure(1)
colors=["g","b","m"];
plot(X,G,"k","LineWidth",1.5)
name=["f"];
hold on
for j=1:length(N)-1
plot(X,flip(F(N(j),:)),"Color",colors(j),"LineWidth",1.5)
name(j+1)="f_{"+num2str(N(j))+"}";
end
legend(name); xlabel("eje x"); ylabel("eje y")
title("Aproximaciones con la Base Trigonométrica Compleja")
8 Conclusión
Como hemos visto a lo largo del documento, las series de Fourier son una gran herramienta para aproximar funciones. La bondad de estas aproximaciones depende de numerosos factores, como son el número de términos de la serie de Fourier que consideremos, la continuidad de la función que queramos aproximar o los valores que toma esta función en los extremos del intervalo que se considere.