<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rodrigo.gallardo</id>
		<title>MateWiki - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rodrigo.gallardo"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/Rodrigo.gallardo"/>
		<updated>2026-04-23T12:18:40Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_RAJ&amp;diff=104157</id>
		<title>Series de Fourier RAJ</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_RAJ&amp;diff=104157"/>
				<updated>2026-02-18T19:20:58Z</updated>
		
		<summary type="html">&lt;p&gt;Rodrigo.gallardo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo RAJ| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Rodrigo Gallardo García&lt;br /&gt;
&lt;br /&gt;
Alejandro Cogollor Torres&lt;br /&gt;
&lt;br /&gt;
Javier Martín Pérez }}&lt;br /&gt;
&lt;br /&gt;
Se adjunta a continuación el código utilizado para la visualización de las gráficas expuestas durante la presentación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import scipy.integrate&lt;br /&gt;
&lt;br /&gt;
def construir_coeficientes_par(funcion, n_terminos, dx=1e-3):&lt;br /&gt;
&lt;br /&gt;
    x = np.arange(0, 1 + dx/2, dx)&lt;br /&gt;
    y = funcion(x)&lt;br /&gt;
    coeficientes = []&lt;br /&gt;
&lt;br /&gt;
    for k in range(n_terminos):&lt;br /&gt;
        termino_base = np.cos(k * np.pi * x)&lt;br /&gt;
        integrando = 2 * y * termino_base&lt;br /&gt;
        a_k = scipy.integrate.trapezoid(integrando, dx=dx)&lt;br /&gt;
        coeficientes.append(a_k)&lt;br /&gt;
&lt;br /&gt;
    return coeficientes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def reconstruir_serie_par(coeficientes, x_eval):&lt;br /&gt;
&lt;br /&gt;
    a0 = coeficientes[0]&lt;br /&gt;
    y_approx = (a0 / 2) * np.ones_like(x_eval)&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, len(coeficientes)):&lt;br /&gt;
        a_k = coeficientes[k]&lt;br /&gt;
        y_approx += a_k * np.cos(k * np.pi * x_eval)&lt;br /&gt;
&lt;br /&gt;
    return y_approx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def f_par_extendida(x):&lt;br /&gt;
&lt;br /&gt;
    return np.where(np.abs(x) &amp;lt;= 0.25, 1.0, 0.0)&lt;br /&gt;
&lt;br /&gt;
def calcular_errores_completo(y_real, y_aprox, dx):&lt;br /&gt;
&lt;br /&gt;
    diff = np.abs(y_real - y_aprox)&lt;br /&gt;
    err_l2 = np.sqrt(scipy.integrate.trapezoid(diff**2, dx=dx))&lt;br /&gt;
    err_unif = np.max(diff)&lt;br /&gt;
    return err_l2, err_unif&lt;br /&gt;
&lt;br /&gt;
def reconstruir_cesaro_par(coeficientes, x_eval):&lt;br /&gt;
&lt;br /&gt;
    N = len(coeficientes) - 1&lt;br /&gt;
    y_approx = np.zeros_like(x_eval)&lt;br /&gt;
&lt;br /&gt;
    denominador = N + 1&lt;br /&gt;
&lt;br /&gt;
    a0 = coeficientes[0]&lt;br /&gt;
    y_approx += (a0 / 2) * np.ones_like(x_eval)&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, len(coeficientes)):&lt;br /&gt;
        a_k = coeficientes[k]&lt;br /&gt;
&lt;br /&gt;
        peso = (N - k + 1) / denominador&lt;br /&gt;
&lt;br /&gt;
        y_approx += peso * a_k * np.cos(k * np.pi * x_eval)&lt;br /&gt;
&lt;br /&gt;
    return y_approx&lt;br /&gt;
&lt;br /&gt;
def reconstruir_lanczos_par(coeficientes, x_eval):&lt;br /&gt;
&lt;br /&gt;
    N = len(coeficientes) - 1&lt;br /&gt;
    y_approx = np.zeros_like(x_eval)&lt;br /&gt;
&lt;br /&gt;
    y_approx += (coeficientes[0] / 2)&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, len(coeficientes)):&lt;br /&gt;
        sigma = np.sinc(k / N)&lt;br /&gt;
        y_approx += sigma * coeficientes[k] * np.cos(k * np.pi * x_eval)&lt;br /&gt;
&lt;br /&gt;
    return y_approx&lt;br /&gt;
&lt;br /&gt;
def reconstruir_abel_r_variable(coeficientes, x_eval, r):&lt;br /&gt;
&lt;br /&gt;
    y_approx = np.zeros_like(x_eval)&lt;br /&gt;
&lt;br /&gt;
    y_approx += (coeficientes[0] / 2)&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, len(coeficientes)):&lt;br /&gt;
        peso = r**k&lt;br /&gt;
        y_approx += peso * coeficientes[k] * np.cos(k * np.pi * x_eval)&lt;br /&gt;
&lt;br /&gt;
    return y_approx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Gráficas de Fourier&lt;br /&gt;
&lt;br /&gt;
dx_malla = 1e-4&lt;br /&gt;
N_max_calculo = 500&lt;br /&gt;
lista_N_dibujar = [1, 5, 20, 50, 100, 300]&lt;br /&gt;
&lt;br /&gt;
x_completo = np.arange(-1, 1 + dx_malla/10, dx_malla)&lt;br /&gt;
y_real = f_par_extendida(x_completo)&lt;br /&gt;
&lt;br /&gt;
coefs_totales = construir_coeficientes_par(f_par_extendida, N_max_calculo + 1, dx_malla)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(12, 6))&lt;br /&gt;
&lt;br /&gt;
plt.plot(x_completo, y_real, 'k-', linewidth=2, label='Función Original', alpha=0.3)&lt;br /&gt;
&lt;br /&gt;
colores = plt.cm.magma(np.linspace(0, 0.85, len(lista_N_dibujar)))&lt;br /&gt;
for i, n in enumerate(lista_N_dibujar):&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
    y_aprox = reconstruir_serie_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    plt.plot(x_completo, y_aprox, label=f'N={n}', color=colores[i], linewidth=1.5)&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Gráfica de Fourier en [-1, 1]')&lt;br /&gt;
plt.xlabel('x')&lt;br /&gt;
plt.ylabel('f(x)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
errores_l2 = []&lt;br /&gt;
errores_inf = []&lt;br /&gt;
rango_n = np.arange(1, N_max_calculo + 1)&lt;br /&gt;
&lt;br /&gt;
for n in rango_n:&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
    y_aprox = reconstruir_serie_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    l2, unif = calcular_errores_completo(y_real, y_aprox, dx_malla)&lt;br /&gt;
    errores_l2.append(l2)&lt;br /&gt;
    errores_inf.append(unif)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.loglog(rango_n, errores_l2, 'b-o', label='Error L2', markersize=4)&lt;br /&gt;
plt.loglog(rango_n, errores_inf, 'r-s', label='Error Uniforme', markersize=4)&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Errores de Fourier en [-1, 1]')&lt;br /&gt;
plt.xlabel('N (log)')&lt;br /&gt;
plt.ylabel('Error (log)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which=&amp;quot;both&amp;quot;, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
# Gráficas de Cesaro&lt;br /&gt;
&lt;br /&gt;
dx_malla = 1e-4&lt;br /&gt;
N_max_calculo = 500&lt;br /&gt;
lista_N_dibujar = [1, 5, 20, 50, 100, 300]&lt;br /&gt;
&lt;br /&gt;
x_completo = np.arange(-1, 1 + dx_malla/10, dx_malla)&lt;br /&gt;
y_real = f_par_extendida(x_completo)&lt;br /&gt;
&lt;br /&gt;
coefs_totales = construir_coeficientes_par(f_par_extendida, N_max_calculo + 1, dx_malla)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
plt.plot(x_completo, y_real, 'k-', linewidth=2, label='Función Original', alpha=0.6)&lt;br /&gt;
&lt;br /&gt;
colores = plt.cm.magma(np.linspace(0, 0.85, len(lista_N_dibujar)))&lt;br /&gt;
&lt;br /&gt;
for i, n in enumerate(lista_N_dibujar):&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
&lt;br /&gt;
    y_cesaro = reconstruir_cesaro_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    plt.plot(x_completo, y_cesaro, label=f'N={n}', color=colores[i], linewidth=2)&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Gráfica de Cesàro en [-1, 1]')&lt;br /&gt;
plt.xlabel('x')&lt;br /&gt;
plt.ylabel('S_N(x)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
errores_l2 = []&lt;br /&gt;
errores_inf = []&lt;br /&gt;
rango_n = np.arange(1, N_max_calculo + 1)&lt;br /&gt;
&lt;br /&gt;
for n in rango_n:&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
    y_cesaro = reconstruir_cesaro_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    l2, unif = calcular_errores_completo(y_real, y_cesaro, dx_malla)&lt;br /&gt;
    errores_l2.append(l2)&lt;br /&gt;
    errores_inf.append(unif)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.loglog(rango_n, errores_l2, 'b-o', label='Error L2', markersize=4)&lt;br /&gt;
plt.loglog(rango_n, errores_inf, 'r-s', label='Error Uniforme', markersize=4)&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Errores de Cesàro en [-1, 1]')&lt;br /&gt;
plt.xlabel('N (log)')&lt;br /&gt;
plt.ylabel('Error (log)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which=&amp;quot;both&amp;quot;, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
# Gráficas de Lanczos&lt;br /&gt;
&lt;br /&gt;
dx_malla = 1e-4&lt;br /&gt;
N_max_calculo = 500&lt;br /&gt;
lista_N_dibujar = [1, 5, 20, 50, 100, 300]&lt;br /&gt;
&lt;br /&gt;
x_completo = np.arange(-1, 1 + dx_malla/10, dx_malla)&lt;br /&gt;
y_real = f_par_extendida(x_completo)&lt;br /&gt;
&lt;br /&gt;
coefs_totales = construir_coeficientes_par(f_par_extendida, N_max_calculo + 1, dx_malla)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.plot(x_completo, y_real, 'k-', linewidth=2, label='Función Original', alpha=0.5)&lt;br /&gt;
&lt;br /&gt;
colores = plt.cm.viridis(np.linspace(0, 0.9, len(lista_N_dibujar)))&lt;br /&gt;
&lt;br /&gt;
for i, n in enumerate(lista_N_dibujar):&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
    y_lanczos = reconstruir_lanczos_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    plt.plot(x_completo, y_lanczos, label=f'N={n}', color=colores[i])&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Gráfica de Lanczos en [-1, 1]')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
errores_l2 = []&lt;br /&gt;
errores_inf = []&lt;br /&gt;
rango_n = np.arange(1, N_max_calculo + 1)&lt;br /&gt;
&lt;br /&gt;
for n in rango_n:&lt;br /&gt;
    coefs_n = coefs_totales[:n+1]&lt;br /&gt;
    y_lanczos = reconstruir_lanczos_par(coefs_n, x_completo)&lt;br /&gt;
&lt;br /&gt;
    l2, unif = calcular_errores_completo(y_real, y_lanczos, dx_malla)&lt;br /&gt;
    errores_l2.append(l2)&lt;br /&gt;
    errores_inf.append(unif)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.loglog(rango_n, errores_l2, 'b-o', label='Error L2', markersize=4)&lt;br /&gt;
plt.loglog(rango_n, errores_inf, 'r-s', label='Error Uniforme', markersize=4)&lt;br /&gt;
plt.title(f'Errores de Lanczos en [-1, 1]')&lt;br /&gt;
plt.xlabel('N (log)')&lt;br /&gt;
plt.ylabel('Error (log)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which=&amp;quot;both&amp;quot;, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
#Gráficas de Abel&lt;br /&gt;
&lt;br /&gt;
dx_malla = 1e-4&lt;br /&gt;
N_FIJO = 300&lt;br /&gt;
lista_r_dibujar = [0.6, 0.8, 0.9, 0.95, 0.99, 0.999]&lt;br /&gt;
&lt;br /&gt;
x_completo = np.arange(-1, 1 + dx_malla/10, dx_malla)&lt;br /&gt;
y_real = f_par_extendida(x_completo)&lt;br /&gt;
&lt;br /&gt;
coefs_fijos = construir_coeficientes_par(f_par_extendida, N_FIJO + 1, dx_malla)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.plot(x_completo, y_real, 'k-', linewidth=2, label='Función Original', alpha=0.3)&lt;br /&gt;
&lt;br /&gt;
colores = plt.cm.Blues(np.linspace(0.4, 1.0, len(lista_r_dibujar)))&lt;br /&gt;
&lt;br /&gt;
for i, r_val in enumerate(lista_r_dibujar):&lt;br /&gt;
    y_abel = reconstruir_abel_r_variable(coefs_fijos, x_completo, r_val)&lt;br /&gt;
&lt;br /&gt;
    plt.plot(x_completo, y_abel, label=f'r={r_val}', color=colores[i], linewidth=1.5)&lt;br /&gt;
&lt;br /&gt;
plt.title(f'Gráfica de Abel en [-1, 1]')&lt;br /&gt;
plt.xlabel('x')&lt;br /&gt;
plt.ylabel('A_r(x)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
r_range = np.linspace(0.5, 0.999, 100)&lt;br /&gt;
&lt;br /&gt;
errores_l2 = []&lt;br /&gt;
errores_inf = []&lt;br /&gt;
&lt;br /&gt;
for r_val in r_range:&lt;br /&gt;
    y_abel = reconstruir_abel_r_variable(coefs_fijos, x_completo, r_val)&lt;br /&gt;
&lt;br /&gt;
    l2, unif = calcular_errores_completo(y_real, y_abel, dx_malla)&lt;br /&gt;
    errores_l2.append(l2)&lt;br /&gt;
    errores_inf.append(unif)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.loglog(r_range, errores_l2, 'b-o', label='Error L2', markersize=4)&lt;br /&gt;
plt.loglog(r_range, errores_inf, 'r-s', label='Error Uniforme', markersize=4)&lt;br /&gt;
plt.title(f'Errores de Abel en [-1, 1]')&lt;br /&gt;
plt.xlabel('r (log)')&lt;br /&gt;
plt.ylabel('Error (log)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which=&amp;quot;both&amp;quot;, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Rodrigo.gallardo</name></author>	</entry>

	</feed>