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

De MateWiki
Saltar a: navegación, buscar
 
(No se muestra una edición intermedia del mismo usuario)
Línea 12: Línea 12:
 
Es fácil comprobar que la función extendida pertenece al grupo de funciones <math> L^2 </math>, además la función verifica la condición de Dirichlet, por tanto, la serie de Fourier de la función converge puntalmente al propio punto en los puntos de continuidad y al promedio en los puntos de discontinuidad. A continuación se muestra el desarrollo de Fourier de la función extendida <math> f(x) = 1_{x \leq 1/4}(x) </math> para diferentes valores de <math> n </math>.
 
Es fácil comprobar que la función extendida pertenece al grupo de funciones <math> L^2 </math>, además la función verifica la condición de Dirichlet, por tanto, la serie de Fourier de la función converge puntalmente al propio punto en los puntos de continuidad y al promedio en los puntos de discontinuidad. A continuación se muestra el desarrollo de Fourier de la función extendida <math> f(x) = 1_{x \leq 1/4}(x) </math> para diferentes valores de <math> n </math>.
  
[[Archivo:Aprox_fourier_MECA.gif|600px|thumb|right|Aproximación de Fourier de la función extendida <math> 1_{x \leq 1/4}(x) </math>]]
+
[[Archivo:Aprox_fourier_MECA.gif|600px|thumb|right|Aproximación de Fourier de la función extendida <math> 1_{x \leq 1/4}(x) </math>. Observamos como en los puntos de discontinuidad la serie de Fourier sobrepasa superior e inferiormente a la función original. En el resto de puntos tenemos convergencia puntual.]]
 
{{matlab|codigo=
 
{{matlab|codigo=
 
def f(x):
 
def f(x):
     # Definimos la función a trozos extendida
+
     # Función a trozos extendida: devuelve 1 en [-0.25, 0.25], 0 en otro caso
 
     return np.where((x >= -0.25) & (x <= 0.25), 1, 0)
 
     return np.where((x >= -0.25) & (x <= 0.25), 1, 0)
  
def coef_fourier(f,a,b,n):
+
def coef_fourier(f, a, b, n):
 
+
    # Calcula los coeficientes de Fourier para una función f en [a, b]
     T = b-a # Periodo
+
     T = b - a # Periodo
     x = np.linspace(a,b,400)
+
     x = np.linspace(a, b, 400) # Puntos de evaluación
 
     val_f = f(x)
 
     val_f = f(x)
  
     a_coef = [] # Lista de coeficientes
+
     a_coef = [] # Lista para almacenar los coeficientes
   
+
 
 
     for j in range(n+1):
 
     for j in range(n+1):
        aux = 0
+
         val_cos = np.cos(2 * np.pi * j * x / T) # Base coseno
         val_cos = np.cos(2*np.pi*j*x/T)
+
         aux = np.trapz(val_f * val_cos, x) * (2 / T)   
         aux = np.trapz(val_f*val_cos,x)
+
        aux = aux*(2/T)  # La otra parte de la integral       
+
 
         a_coef.append(aux)
 
         a_coef.append(aux)
         
 
    return a_coef
 
 
      
 
      
def aprox_fourier_par(a_coef,T,x,n):
+
    return a_coef
     aux = 0
+
 
     aux += a_coef[0]/2
+
def aprox_fourier_par(a_coef, T, x, n):
     for i in range(1,n+1):
+
     # Aproxima la función usando la serie de Fourier hasta el término n
         aux += a_coef[i]*np.cos(2*np.pi*i*x/T)
+
     aux = a_coef[0] / 2 # Término constante
 +
     for i in range(1, n+1):
 +
         aux += a_coef[i] * np.cos(2 * np.pi * i * x / T)
 
     return aux
 
     return aux
 
}}
 
}}
<br/>
 
<br/>
 
  
En la figura anterior se puede observar lo que se conoce como el fenómeno de Gibbs. Este fenómeno establece que en el punto de discontinuidad la serie de Fourier que aproxima la función presenta una oscilación que sobrepasa superior o inferiormente a la función original. Este fenómeno se da cuando tratamos de aproximar por Fourier funciones discontinuas. Además, también se sabe que el error de aproximación tiende al <math> 9\% </math> del salto dado. A continuación se muestra una gráfica del error cometido por nuestra aproximación de Fourier usando dos normas diferentes, la norma del espacio <math> L^2 </math> y la norma del supremo. 
 
  
[[Archivo:Error_aprox_MECA.png|600px|thumb|right| Error cometido por la aproximación de Fourier para distintos valores de <math> n </math>. Es importante observar que el error tiende asintóticamente a <math>\approx 0.09 </math>, precisamente el <math> 9\% </math> de <math> 1 </math>, en el caso de la norma de <math> L^2 </math>]]
 
{{matlab|codigo=
 
z = 300  # Número de aproximaciones que queremos hacer
 
error_L2 = []
 
error_sup = []
 
  
a_coef = coef_fourier(f,a,b,z)  # Obtenemos los z primeros coeficientes de la serie de fourier (hay z+1 en total)
+
En la figura anterior se puede observar lo que se conoce como el fenómeno de Gibbs. Este fenómeno establece que en el punto de discontinuidad la serie de Fourier que aproxima la función presenta una oscilación que sobrepasa superior o inferiormente a la función original (aproximadamente el <math> 9\% </math> del salto dado). Este fenómeno se da cuando tratamos de aproximar por Fourier funciones discontinuas. A continuación se muestra una gráfica del error cometido por nuestra aproximación de Fourier usando dos normas diferentes, la norma del espacio <math> L^2 </math> y la norma del supremo. 
  
intervalo = np.linspace(0,1,200) #El intervalo donde queremos integrar, [0,1]
+
[[Archivo:Error_aprox_MECA.png|600px|thumb|right| Error cometido por la aproximación de Fourier en función del número de términos \( n \) considerados en la suma.]]
y_real = f(np.array(intervalo))
+
{{matlab|codigo=
 +
z = 300  # Número de aproximaciones a calcular
 +
error_L2, error_sup = [], [] # Listas para almacenar los errores
  
for k in range(1,z+1):
+
# Obtenemos los primeros z coeficientes de Fourier
 +
a_coef = coef_fourier(f, a, b, z)
  
    y_aprox = []
+
# Definimos el intervalo de integración [0,1]
   
+
intervalo = np.linspace(0, 1, 200) 
    for j in intervalo:
+
y_real = f(np.array(intervalo))  # Valores reales de la función
        y_aprox.append(aprox_fourier_par(a_coef[:k+1],T,j,k))
+
 
 +
# Calculamos errores para cada aproximación
 +
for k in range(1, z + 1):
 +
    y_aprox = [aprox_fourier_par(a_coef[:k+1], T, j, k) for j in intervalo]
 
      
 
      
     error_L2.append(np.sqrt( np.trapz( abs(y_real-y_aprox)**2,x) ))
+
    # Cálculo del error en norma L² y norma supremo
     error_sup.append(max(abs(y_real-y_aprox)))
+
     error_L2.append(np.sqrt(np.trapz(abs(y_real - y_aprox)**2, x)))
 +
     error_sup.append(max(abs(y_real - y_aprox)))
  
valor_n = [i for i in range(1,z+1)]
+
# Eje x: número de términos en la aproximación
 +
valor_n = list(range(1, z + 1))
  
plt.plot(valor_n,error_sup, color = "#d62728", label="Error norma supremo")
+
# Graficamos los errores
plt.plot(valor_n,error_L2, color = "#000080", label="Error norma $L^2$")
+
plt.plot(valor_n, error_sup, color="#d62728", label="Error norma supremo")
plt.xlabel('número de términos')
+
plt.plot(valor_n, error_L2, color="#000080", label="Error norma $L^2$")
plt.ylabel('error')
+
plt.xlabel('Número de términos')
 +
plt.ylabel('Error')
 
plt.legend(loc="upper right")
 
plt.legend(loc="upper right")
plt.title("Error aproximación")
+
plt.title("Error de aproximación")
 
plt.savefig("Error_aprox")
 
plt.savefig("Error_aprox")
 
}}
 
}}
Línea 101: Línea 100:
 
</math>
 
</math>
 
</center>
 
</center>
Las cantidades \( A(r) \) se llaman la media de Abel de la sucesión. Se puede probar que si la serie converge a \( f \) entonces la sucesión es sumable de Abel a \( f \). Además, la condición de ser Abel sumable es más fuerte que la condición de convergencia en las sumas de Cesàro. Veamos con el ejemplo inicial como estos dos métodos ayudan a mitigar el fenómeno de Gibbs.  
+
Las cantidades \( A(r) \) se llaman la media de Abel de la sucesión. Cuando aplicamos las sumas de Abel a las series de Fourier el térimino <math>r^i</math> actúa como suavizador de las oscilaciones en los puntos de discontinuidad. Se puede probar que si la serie converge a \( f \) entonces la sucesión es sumable de Abel a \( f \). Además, la condición de ser Abel sumable es más fuerte que la condición de convergencia en las sumas de Cesàro. Veamos con el ejemplo inicial como estos dos métodos ayudan a mitigar el fenómeno de Gibbs.  
 +
 
 +
<div style="float:right; text-align:center; width:320px;">
 +
    [[Archivo:Sumas_cesaro_MECA.gif|300px|thumb|Sumas de Cesàro aplicadas a la función \( 1_{x \leq 1/4}(x) \). En la imagen se va aumentando el número de términos usados en la suma de Cesàro.]] 
 +
    [[Archivo:Error_aprox_Cesaro_MECA.png|300px|thumb|Error cometido por la aproximación usando sumas de Cesàro. Observamos que el error con la norma del supremo tiene menos oscilaciones que en la aproximación de Fourier, lo cual indica que efectivamente se está mitigando el fenómeno de Gibbs.]] 
 +
</div>
 +
 
 +
<div style="float:right; text-align:center; width:320px;">
 +
    [[Archivo:Abel_MECA.gif|300px|thumb|Sumas de Abel aplicadas a la función \( 1_{x \leq 1/4}(x) \). En la imagen el número de términos usados en la suma es fijo, \( 300 \), y varía el parámetro suavizador \( r \).]] 
 +
    [[Archivo:Error_aprox_Abel_MECA.png|300px|thumb|Error cometido por la aproximación usando sumas de Abel con \(r=0.98\). En este caso también se cumple que el error con la norma del supremo tiene menos oscilaciones.]] 
 +
</div>
 +
 
  
[[Archivo:Sumas_cesaro_MECA.gif|600px|thumb|right| Sumas de Cesàro aplicadas a la función <math> 1_{x \leq 1/4}(x) </math>]]
 
 
{{matlab|codigo=
 
{{matlab|codigo=
 +
def cesaro(f, a, b, n, x):
 +
    """
 +
    Calcula la aproximación de Fourier utilizando las sumas de Cesàro.
 +
    """
  
def cesaro(f,a,b,n,x):
+
    a_coef = coef_fourier(f, a, b, n)
 +
    T = b - a  # Período de la función
  
    a_coef = coef_fourier(f,a,b,n) 
 
    T = b-a   
 
 
     aux = 0
 
     aux = 0
 +
    # Sumamos las aproximaciones parciales de Fourier hasta el orden n+1
 +
    for i in range(n + 2):
 +
        aux += aprox_fourier_par(a_coef[:i], T, x, i)
  
     for i in range(n+1):
+
     aux = aux/(n + 1) # Calculamos el promedio para la suma de Cesàro
        aux += aprox_fourier_par(a_coef[:i+1],T,x,i)
+
    return aux  
     end
+
 
     aux = aux/(n+1)
+
 
 +
 
 +
def Abel(a_coef, T, x, n, r):
 +
     """
 +
    Calcula la aproximación de Fourier utilizando las sumas de Abel.
 +
    """
 +
 
 +
     aux = a_coef[0] /
 +
 
 +
    # Se suman los términos de la serie ponderados por el factor r^i
 +
    for i in range(1, n + 1):
 +
        aux += (a_coef[i] * np.cos(2 * np.pi * i * x / T)) * (r ** i)
 +
 
 +
    return aux 
  
    return aux
 
 
}}
 
}}
<br/>
+
 
<br/>
+
== Bibliografía ==
 +
 
 +
* '''Stein, Elias M. & Shakarchi, R.''' (2003). ''Fourier Analysis: An Introduction''. Princeton University Press. 
 +
 
 +
* '''Wikipedia, la enciclopedia libre'''. ''Fenómeno de Gibbs''.
  
 
[[Categoría:EDP]]
 
[[Categoría:EDP]]
 
[[Categoría:EDP24/25]]
 
[[Categoría:EDP24/25]]

Revisión actual del 11:50 15 feb 2025

Trabajo realizado por estudiantes
Título Series de Fourier (Grupo MECA)
Asignatura EDP
Curso 2024-25
Autores Ángel De Lucas Miranda
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura


1 Introducción

Las series de Fourier son una herramienta matemática fundamental en ingeniería y diversas disciplinas, utilizada, entre otras aplicaciones, en la resonancia magnética (RM). En ocasiones, las imágenes obtenidas en RM presentan artefactos: falsas estructuras o manchas que pueden confundirse con quistes u otras patologías. Uno de los fenómenos que contribuye a la aparición de estos artefactos es el fenómeno de Gibbs, el cual se genera en presencia de discontinuidades en las señales. En este trabajo estudiaremos el fenómeno de Gibbs.

2 Aproximación por series de Fourier

Empezaremos este trabajo aproximando la función característica [math] f(x) = 1_{x \leq 1/4}(x) [/math] por su serie de Fourier. Observamos que se trata de una función discontinua no periódica. Empecemos por extender de forma par la función al intervalo [math] [-1,1] [/math].

Es fácil comprobar que la función extendida pertenece al grupo de funciones [math] L^2 [/math], además la función verifica la condición de Dirichlet, por tanto, la serie de Fourier de la función converge puntalmente al propio punto en los puntos de continuidad y al promedio en los puntos de discontinuidad. A continuación se muestra el desarrollo de Fourier de la función extendida [math] f(x) = 1_{x \leq 1/4}(x) [/math] para diferentes valores de [math] n [/math].

Aproximación de Fourier de la función extendida [math] 1_{x \leq 1/4}(x) [/math]. Observamos como en los puntos de discontinuidad la serie de Fourier sobrepasa superior e inferiormente a la función original. En el resto de puntos tenemos convergencia puntual.
def f(x):
    # Función a trozos extendida: devuelve 1 en [-0.25, 0.25], 0 en otro caso
    return np.where((x >= -0.25) & (x <= 0.25), 1, 0)

def coef_fourier(f, a, b, n):
    # Calcula los coeficientes de Fourier para una función f en [a, b]
    T = b - a  # Periodo
    x = np.linspace(a, b, 400)  # Puntos de evaluación
    val_f = f(x)

    a_coef = []  # Lista para almacenar los coeficientes

    for j in range(n+1):
        val_cos = np.cos(2 * np.pi * j * x / T)  # Base coseno
        aux = np.trapz(val_f * val_cos, x) * (2 / T)  
        a_coef.append(aux)
    
    return a_coef

def aprox_fourier_par(a_coef, T, x, n):
    # Aproxima la función usando la serie de Fourier hasta el término n
    aux = a_coef[0] / 2  # Término constante
    for i in range(1, n+1):
        aux += a_coef[i] * np.cos(2 * np.pi * i * x / T)  
    return aux



En la figura anterior se puede observar lo que se conoce como el fenómeno de Gibbs. Este fenómeno establece que en el punto de discontinuidad la serie de Fourier que aproxima la función presenta una oscilación que sobrepasa superior o inferiormente a la función original (aproximadamente el [math] 9\% [/math] del salto dado). Este fenómeno se da cuando tratamos de aproximar por Fourier funciones discontinuas. A continuación se muestra una gráfica del error cometido por nuestra aproximación de Fourier usando dos normas diferentes, la norma del espacio [math] L^2 [/math] y la norma del supremo.

Error cometido por la aproximación de Fourier en función del número de términos \( n \) considerados en la suma.
z = 300  # Número de aproximaciones a calcular
error_L2, error_sup = [], []  # Listas para almacenar los errores

# Obtenemos los primeros z coeficientes de Fourier
a_coef = coef_fourier(f, a, b, z)  

# Definimos el intervalo de integración [0,1]
intervalo = np.linspace(0, 1, 200)  
y_real = f(np.array(intervalo))  # Valores reales de la función

# Calculamos errores para cada aproximación
for k in range(1, z + 1):
    y_aprox = [aprox_fourier_par(a_coef[:k+1], T, j, k) for j in intervalo]
    
    # Cálculo del error en norma L² y norma supremo
    error_L2.append(np.sqrt(np.trapz(abs(y_real - y_aprox)**2, x)))
    error_sup.append(max(abs(y_real - y_aprox)))

# Eje x: número de términos en la aproximación
valor_n = list(range(1, z + 1))

# Graficamos los errores
plt.plot(valor_n, error_sup, color="#d62728", label="Error norma supremo")
plt.plot(valor_n, error_L2, color="#000080", label="Error norma $L^2$")
plt.xlabel('Número de términos')
plt.ylabel('Error')
plt.legend(loc="upper right")
plt.title("Error de aproximación")
plt.savefig("Error_aprox")



A continuación, mostraremos dos métodos diferentes para suavizar el fenómeno de Gibbs.

3 Sumas de Cesàro y Sumas de Abel

Las sumas de Cesàro ayudan a mitigar el fenómeno de Gibbs al suavizar la convergencia de las series de Fourier. En lugar de tomar directamente la serie de Fourier parcial de orden N, las sumas de Cesàro promedian las sumas parciales anteriores, reduciendo así las oscilaciones cerca de las discontinuidades. Expresado matemáticamente:

[math]\sigma_N(f) = \frac{1}{N+1} \sum_{n=0}^{N} S_n(f)[/math]

donde [math]S_n(f)[/math] es la suma parcial de Fourier de orden n. Otro método para suavizar el fenómeno de Gibbs se conoce como las sumas de Abel. Una sucesión \( \sigma_N = \sum_{n=0}^{N} S_n \) se dice que es sumable de Abel a \( f \) si para cada \( 0 \leq r < 1 \), la serie

[math] A(r) = \sum_{n=0}^{\infty} S_n r^n [/math]

converge, y

[math] \lim_{r \to 1} A(r) = f. [/math]

Las cantidades \( A(r) \) se llaman la media de Abel de la sucesión. Cuando aplicamos las sumas de Abel a las series de Fourier el térimino [math]r^i[/math] actúa como suavizador de las oscilaciones en los puntos de discontinuidad. Se puede probar que si la serie converge a \( f \) entonces la sucesión es sumable de Abel a \( f \). Además, la condición de ser Abel sumable es más fuerte que la condición de convergencia en las sumas de Cesàro. Veamos con el ejemplo inicial como estos dos métodos ayudan a mitigar el fenómeno de Gibbs.

Sumas de Cesàro aplicadas a la función \( 1_{x \leq 1/4}(x) \). En la imagen se va aumentando el número de términos usados en la suma de Cesàro.
Error cometido por la aproximación usando sumas de Cesàro. Observamos que el error con la norma del supremo tiene menos oscilaciones que en la aproximación de Fourier, lo cual indica que efectivamente se está mitigando el fenómeno de Gibbs.
Sumas de Abel aplicadas a la función \( 1_{x \leq 1/4}(x) \). En la imagen el número de términos usados en la suma es fijo, \( 300 \), y varía el parámetro suavizador \( r \).
Error cometido por la aproximación usando sumas de Abel con \(r=0.98\). En este caso también se cumple que el error con la norma del supremo tiene menos oscilaciones.


def cesaro(f, a, b, n, x):
    """
    Calcula la aproximación de Fourier utilizando las sumas de Cesàro.
    """

    a_coef = coef_fourier(f, a, b, n)  
    T = b - a  # Período de la función

    aux = 0
    # Sumamos las aproximaciones parciales de Fourier hasta el orden n+1
    for i in range(n + 2):
        aux += aprox_fourier_par(a_coef[:i], T, x, i)

    aux = aux/(n + 1)  # Calculamos el promedio para la suma de Cesàro
    return aux 



def Abel(a_coef, T, x, n, r):
    """
    Calcula la aproximación de Fourier utilizando las sumas de Abel.
    """

    aux = a_coef[0] / 2  

    # Se suman los términos de la serie ponderados por el factor r^i
    for i in range(1, n + 1):
        aux += (a_coef[i] * np.cos(2 * np.pi * i * x / T)) * (r ** i)

    return aux


4 Bibliografía

  • Stein, Elias M. & Shakarchi, R. (2003). Fourier Analysis: An Introduction. Princeton University Press.
  • Wikipedia, la enciclopedia libre. Fenómeno de Gibbs.