Diferencia entre revisiones de «Bases de Fourier»

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
(Aproximación de funciones discontinuas)
(Teorema)
 
(No se muestran 7 ediciones intermedias del mismo usuario)
Línea 181: Línea 181:
  
 
== Aproximación de funciones discontinuas ==
 
== Aproximación de funciones discontinuas ==
Como se ha mencionado anteriormente las series de Fourier convergen a una función continua. Sin embargo, ¿cómo hacemos para aproximar funciones no estrictamente continuas?. Esta cuestión se resuelve teniendo en cuenta la condición de Dirichlet. Esta indica el intervalo  <math>[-\pi,\pi]<\math> se puede dividir en un conjunto de subintervalos finitos en los cuales la función es monótona, si la función es continua salvo en un número finito de puntos con discontinuidad de salto finito.
+
Como se ha mencionado anteriormente las series de Fourier convergen a una función continua. Sin embargo, ¿cómo hacemos para aproximar funciones no estrictamente continuas?. Esta cuestión se resuelve teniendo en cuenta la condición de Dirichlet. Esta indica el intervalo  <math>[-\pi,\pi]</math> se puede dividir en un conjunto de subintervalos finitos en los cuales la función es monótona, si la función es continua salvo en un número finito de puntos con discontinuidad de salto finito.
  
 
Nos apoyaremos entonces en el siguiente teorema.
 
Nos apoyaremos entonces en el siguiente teorema.
Línea 192: Línea 192:
 
TAL VEZ PODEMOS ARGUMENTAR AQUÍ QUE PODEMOS APLICAR ESTE TEOREMA A NUESTRO CASO POR UN CAMBIO DE INTERVALO??
 
TAL VEZ PODEMOS ARGUMENTAR AQUÍ QUE PODEMOS APLICAR ESTE TEOREMA A NUESTRO CASO POR UN CAMBIO DE INTERVALO??
  
Consideremos la función discontinua <math>f(x) = 1_{x\leq \frac{1}{2}}(x)</math> hagamos su extensión al intervalo <math> [-1,1]</math>. Primero observamos que esta función se extiende de forma par.  
+
Consideremos la función discontinua <math>f(x) = 1_{x\leq \frac{1}{2}}(x)</math> hagamos su extensión al intervalo <math> [-1,1]</math>. Primero observamos ejecutando las siguientes líneas de código que esta función se extiende de forma par.  
 
   
 
   
 
CÓDIGO CON LOS COEFICIENTES IMPARES 0.
 
CÓDIGO CON LOS COEFICIENTES IMPARES 0.
  
El coeficiente impar <math>b_n</math> es nulo. Si dibujamos <math>f(x)</math> y <math>f_n(x)</math> podemos apreciar en las discontinuidades de salto oscilaciones las cuales se conoces como el fenómeno de Gibbs.  
+
Entonces la función <math>f_n</math> que aproximará a <math>f</math> tiene la forma
 +
<center><math> f_n(x) = \frac{a_0}{2}+ \sum_{k=1}^n a_k \cos(k \pi x)) </math></center>
 +
 
 +
 
 +
Si dibujamos <math>f</math> y <math>f_n</math> aparecen en las discontinuidades de salto oscilaciones las cuales se conocen como el fenómeno de Gibbs. Aún que se aumente mucho el valor de n estas oscilaciones no desaparecen y pueden producir errores significativos a la hora de aproximar la función original. Para mitigar este efecto se pueden introducir las sumas de Cesàro,
 +
 
 +
<center><math> S_N(x) = \frac{1}{N+1} + \sum_{n=1}^N f_n(x) </math></center>
 +
 
 +
Veamos que, en efecto, el error disminuye según aumenta la N.
 +
 
 +
CÓDIGO + FOTO DE LA GRÁFICA
 +
 
 +
Gráficamente, vemos como según aumenta N, la serie de Fourier ayudada por la sumas de Cesàro se aproximan cada vez mejor a <math>f</math>
  
 
CÓDIGO + FOTO DE LA GRÁFICA
 
CÓDIGO + FOTO DE LA GRÁFICA
NO PUEDO AVANZAR MÁS DE AQUÍ SIN LAS GRÁFICAS
 
  
 
== Cambio de intervalo ==
 
== Cambio de intervalo ==

Revisión actual del 19:38 14 feb 2024

1 Aproximación de funciones continuas

Tal y como se ha enunciado anteriormente, la gran importancia de las series de Fourier radica en su increíble eficacia para aproximar funciones periódicas. A su vez, se va a realizar un análisis de como extender funciones continuas en el intervalo [0, T] al intervalo [-T, T] y que estas continúen siendo continuas. De esta manera solo se utilizaría para su aproximación las funciones pares o impares de las bases.

En primer lugar se debe diferenciar que ocurre cuando la extensión es impar o par. En el primer caso, la aproximación simplemente se realiza utilizando los elementos de la base del seno, con sus respectivos coeficientes de Fourier, pues los del coseno y [math]\ \frac{1}{2}[/math] se anulan.

A continuación, veremos un ejemplo sobre ello. Consideremos la función a aproximar [math] f(x) = x(1-x) [/math] en el intervalo [0,1]. Esta función se aproxima por extensión impar, en efecto, ejecutando las siguientes líneas de código vemos como los coeficientes pares son nulos. Cabe mencionar que los coeficientes de Fourier no se han calculado por integración, sino que se han aproximado utilizando la fórmula del trapecio.

En el caso de que la extensión sea par la función se aproxima utilizando los elementos del coseno y el [math]\ \frac{1}{2}[/math] con sus respectivos coeficientes de Fourier, pues los del seno se anulan.


clear
close all
format long
% Límites de integración:
a=0;
b=1;
c=-1;
% División de los puntos del intervalo:
tolerancia= 1e-3;
% Intervalo
x=a:0.001:b;
xx=c:0.001:a;
% Valores de n almacenados en una lista:
n_valores=1:1:100;

% Funciones a integrar:
    % f:
f_cos_1=@(x,k)x.*(1-x).*cos(k*pi*x);
f_sin_1=@(x,k)x.*(1-x).*sin(k*pi*x);
f_medio_1=@(x,k)x.*(1-x).*1/2;
    % Extensión de f:
f_cos_2=@(x,k)x.*(1+x).*cos(k*pi*x);
f_sin_2=@(x,k)x.*(1+x).*sin(k*pi*x);
f_medio_2=@(x,k)x.*(1+x).*1/2;
% Función a aproximar:
g=@(x)x.*(1-x);
g_impar=@(x)x.*(1+x);
% Inicializamos una matriz de 0 para almacenar los valores de ak
% (coeficientes asociados al seno): 
ak=zeros(n_valores(end),length(n_valores));
aak=zeros(n_valores(end),length(n_valores));
% Inicializamos una matriz de 0 para almacenar los valores de bk
% (coeficientes asociados al coseno): 
bk=zeros(n_valores(end), length(n_valores));
% Inicializamos una matriz de 0 para almacenar los valores de ck
% (coeficientes asociados a 1/2): 
ck=zeros(n_valores(end), length(n_valores));

for n=1:length(n_valores)
    %Calculamos ak, bk y ck para cada uno de los valores de n:
    for k=1:n_valores(n)
            % Vector con los valores de f_sin:
            y_sin_1=f_sin_1(x,k);
            y_sin_2=f_sin_2(xx,k);
            
            % Vector con los valores de f_cos:
            y_cos_1=f_cos_1(x,k);
            y_cos_2=f_cos_2(xx,k);
            
            % Vector con los valores de f_sin:
            y_medio_1=f_medio_1(x);
            y_medio_2=f_medio_2(xx);

        ak(k,n)=trapz(x,y_sin_1)+trapz(xx,y_sin_2);
        aak(k,n)=2*trapz(x,y_sin_1);
        bk(k,n)=trapz(x,y_cos_1)+trapz(xx,y_cos_2);
        ck(k,n)=trapz(x,y_medio_1)+trapz(xx,y_medio_2);
    end
end

% Visualización de resultados: 
    % (Nota: las columnas guardan los valores para n= 1, 5, 10
    % respectivamente y las filas los coeficientes ak, bk, ck siendo k la
    % fila.)
% disp('ak (coeficientes asociados al seno)')
% disp(ak)
% disp('aak (coeficientes asociados al seno (simetría))')
% disp(aak)
% disp('bk (coeficientes asociados al coseno)')
% disp(bk)
% disp('ck (coeficientes asociados a 1/2)')
% disp(ck)


Luego, la función que aproximará f(x) tiene la forma,

[math] f(x) = \sum_{k=1}^n[ a_k \sin(k \pi x)[/math] donde [math] a_k = 2 \int_{0}^{1} f(x)sin(k \pi x) [/math]

En las siguientes gráficas apreciamos como según crece n, [math] f_n(x)[/math] se va acercando más a la función original f(x). En concreto se muestran los casos para n = 1, 5 y 10.

ADJUNTAR GRÁFICAS

% Definimos la función fn 

    % Nota: como hemos comprobado previamente, tenemos que fn se puede
    % aproximar con los coeficientes de Fourier asociados a las funciones
    % impares de la base trigonométrica, además aplicando simetrías.

for i = 1:length(n_valores)
    % Definir función anónima con el nombre adecuado
    suma=@(x) 0;
    for j=1:i
        suma=@(x) suma(x) + ak(j,i)*sin(j*pi*x);
    end
    eval(['fn_' num2str(i) '=@(x) suma(x);']);
end

% Representación gráfica de fn:
figure
subplot(3,1,1)
hold on
plot(x,g(x),'b')
plot(x,fn_1(x),'r--')
plot(xx,g_impar(xx),'b')
plot(xx,fn_1(xx),'r--')
legend('f(x)','fn(x)')
title('n = 1')
hold off
% Para n=5:
ak_5=zeros(5,1);
for i=1:5
    ak_5(i)=aak(i,2);
end
subplot(3,1,2)
hold on
plot(x,g(x),'b')
plot(x,fn_5(x),'r--')
plot(xx,g_impar(xx),'b')
plot(xx,fn_5(xx),'r--')
legend('f(x)','fn(x)')
title('n = 5')
hold off
% Para n=10:
subplot(3,1,3)
hold on
plot(x,g(x),'b')
plot(x,fn_10(x),'r--')
plot(xx,g_impar(xx),'b')
plot(xx,fn_10(xx),'r--')
legend('f(x)','fn(x)')
title('n = 10')
hold off


Esto también se puede ver claramente si calculamos el error que se comete entre f(x) y [math] f_n(x)[/math] para cada n. Se muestran dos gráficas donde se representan los errores para n = 1, 5 y 10 con las normas L^2 y uniforme.

ADJUNTAR GRÁFICAS

% Cálculo de Errores:
    % Error en la norma L2 
     error_L2=zeros(1,length(n_valores));

    for n=1:length(n_valores)
        % Crear la función de diferencia f_n(x)
        eval(['f_dif_' num2str(n) ' = @(x) abs(g(x) - fn_' num2str(n) '(x));']);
        
        % Calcular y_dif_n
        eval(['y_dif_' num2str(n) ' = sqrt(f_dif_' num2str(n) '(x));']);
        
        % Calcular el error L2 y almacenarlo en el arreglo error_L2
        eval(['error_L2(' num2str(n) ') = sqrt(trapz(x, y_dif_' num2str(n) '));']);
    end
    % Error en la norma uniforme
    error_uniforme=zeros(1,length(n_valores));
     for i=1:length(n_valores)
        eval(['yy_dif_' num2str(i) ' = f_dif_' num2str(i) '(x);']);
        eval(['error_uniforme(' num2str(i) ')= max( yy_dif_' num2str(i) ');']);
     end
        
% Graficamos los errores:
figure
subplot(2,1,1)
plot(n_valores,error_L2,'b-')
xlabel('n')
ylabel('Error')
title('Error en la norma L^2')
subplot(2,1,2)
plot(n_valores,error_uniforme,'r-')
xlabel('n')
ylabel('Error')
title('Error en la norma uniforme')


2 Aproximación de funciones discontinuas

Como se ha mencionado anteriormente las series de Fourier convergen a una función continua. Sin embargo, ¿cómo hacemos para aproximar funciones no estrictamente continuas?. Esta cuestión se resuelve teniendo en cuenta la condición de Dirichlet. Esta indica el intervalo [math][-\pi,\pi][/math] se puede dividir en un conjunto de subintervalos finitos en los cuales la función es monótona, si la función es continua salvo en un número finito de puntos con discontinuidad de salto finito.

Nos apoyaremos entonces en el siguiente teorema.

2.1 Teorema

Si [math] f \in L^2 ([-\pi,\pi]) [/math] y 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 entonces, [math] f(x_0)=lim_{n\to\infty}\{\frac{a_0}{2}+ \sum_{n=1}^\infty[ a_n \sin(n \pi x) +b_n \cos(n\pi x)]\} [/math] .
  • Si [math] x_0 [/math] es un punto de discontinuidad entonces la serie converge en [math] x_0 [/math] a [math] \frac{f(x_0^-) + f(x_0^+)}{2} [/math]

En [math]-\pi[/math] y [math]\pi[/math] la serie converge a [math] \frac{f(\pi) + f(-\pi)}{2} [/math]. TAL VEZ PODEMOS ARGUMENTAR AQUÍ QUE PODEMOS APLICAR ESTE TEOREMA A NUESTRO CASO POR UN CAMBIO DE INTERVALO??

Consideremos la función discontinua [math]f(x) = 1_{x\leq \frac{1}{2}}(x)[/math] hagamos su extensión al intervalo [math] [-1,1][/math]. Primero observamos ejecutando las siguientes líneas de código que esta función se extiende de forma par.

CÓDIGO CON LOS COEFICIENTES IMPARES 0.

Entonces la función [math]f_n[/math] que aproximará a [math]f[/math] tiene la forma

[math] f_n(x) = \frac{a_0}{2}+ \sum_{k=1}^n a_k \cos(k \pi x)) [/math]


Si dibujamos [math]f[/math] y [math]f_n[/math] aparecen en las discontinuidades de salto oscilaciones las cuales se conocen como el fenómeno de Gibbs. Aún que se aumente mucho el valor de n estas oscilaciones no desaparecen y pueden producir errores significativos a la hora de aproximar la función original. Para mitigar este efecto se pueden introducir las sumas de Cesàro,

[math] S_N(x) = \frac{1}{N+1} + \sum_{n=1}^N f_n(x) [/math]

Veamos que, en efecto, el error disminuye según aumenta la N.

CÓDIGO + FOTO DE LA GRÁFICA

Gráficamente, vemos como según aumenta N, la serie de Fourier ayudada por la sumas de Cesàro se aproximan cada vez mejor a [math]f[/math]

CÓDIGO + FOTO DE LA GRÁFICA

3 Cambio de intervalo

Tal y como se ha expresado a lo largo del documento, podemos aproximar funciones en el intervalo compacto [math][-T,T][/math] pero, ¿qué ocurre con aquellos intervalos de la forma [math][a,b][/math]?. Debido a la periodicidad de las funciones que queremos aproximar, la serie de Fourier también se puede aproximar para intervalos de la forma [a, b] con la base [math]\{ \frac{1}{2},\cos(\frac{n \pi x}{T}),\sin(\frac{n \pi x}{T})\}_{n \in \mathbb{N}}[/math], donde tomamos como [math] T = b - \frac{a}{2}[/math].

Para comprender mejor dicho concepto, se propone aproximar la funicon [math]f(x)=x e^{-x}[/math] en el intervalo compacto [math][1,3][/math]. De esta manera obtenemos [math]T = 1[/math] y sustituimos en la base anterior generando la siguiente. A continuación se presentan tres bases con [math] n = 5, 10 [/math] y [math]20[/math] que aproximen dicha función. Como se observa, de nuevo se tiene que, cuanto mayor sea la [math]n[/math] mejor es la aproximación,

GRÁFICO + CÓDIGO

IGUAL NECESITAMOS COMENTAR MÁS COSAS AQUÍ