<?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=Andrea+S%C3%A1nchez</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=Andrea+S%C3%A1nchez"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/Andrea_S%C3%A1nchez"/>
		<updated>2026-04-23T10:41:01Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104639</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104639"/>
				<updated>2026-04-13T09:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: foto MMA.jpeg||800px]]&lt;br /&gt;
&lt;br /&gt;
=== Dispersión de partículas ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Parámetros&lt;br /&gt;
np.random.seed(42)&lt;br /&gt;
n_particles = 400&lt;br /&gt;
times = [0.05, 0.4, 1.0]&lt;br /&gt;
&lt;br /&gt;
fig, axes = plt.subplots(1, 3, figsize=(12, 4))&lt;br /&gt;
&lt;br /&gt;
for ax, t in zip(axes, times):&lt;br /&gt;
    # Movimiento aleatorio (normal)&lt;br /&gt;
    x = np.random.normal(0, np.sqrt(t), n_particles)&lt;br /&gt;
    y = np.random.normal(0, np.sqrt(t), n_particles)&lt;br /&gt;
&lt;br /&gt;
    ax.scatter(x, y, s=10, alpha=0.7)&lt;br /&gt;
    ax.set_title(f&amp;quot;t = {t}&amp;quot;)&lt;br /&gt;
    ax.set_aspect(&amp;quot;equal&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Límites visuales&lt;br /&gt;
    ax.set_xlim(-4, 4)&lt;br /&gt;
    ax.set_ylim(-4, 4)&lt;br /&gt;
    ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
fig.suptitle(&amp;quot;Dispersión de partículas&amp;quot;)&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trayectorias de movimiento browniano ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Parámetros&lt;br /&gt;
np.random.seed(42)&lt;br /&gt;
T = 1&lt;br /&gt;
n_steps = 300&lt;br /&gt;
dt = T / n_steps&lt;br /&gt;
&lt;br /&gt;
t = np.linspace(0, T, n_steps + 1)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(8, 5))&lt;br /&gt;
&lt;br /&gt;
# Varias trayectorias&lt;br /&gt;
for _ in range(12):&lt;br /&gt;
    increments = np.random.normal(0, np.sqrt(dt), n_steps)&lt;br /&gt;
    B = np.concatenate([[0], np.cumsum(increments)])&lt;br /&gt;
    plt.plot(t, B)&lt;br /&gt;
&lt;br /&gt;
plt.title(&amp;quot;Trayectorias de movimiento browniano&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;tiempo&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;posición&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Evolución de la densidad ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Dominio&lt;br /&gt;
x = np.linspace(-6, 6, 1000)&lt;br /&gt;
&lt;br /&gt;
# Distintos tiempos&lt;br /&gt;
times = [0.2, 0.8, 1.6, 5,50]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(8, 5))&lt;br /&gt;
&lt;br /&gt;
for t in times:&lt;br /&gt;
    # Solución de la ecuación del calor (gaussiana)&lt;br /&gt;
    p = 1 / np.sqrt(2 * np.pi * t) * np.exp(-x**2 / (2 * t))&lt;br /&gt;
    plt.plot(x, p, label=f&amp;quot;t = {t}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plt.title(&amp;quot;Evolución de la densidad&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;x&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;densidad&amp;quot;)&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Evolución de la densidad con ruido blanco ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Dominio espacial&lt;br /&gt;
x = np.linspace(-6, 6, 500)&lt;br /&gt;
&lt;br /&gt;
# Parámetro de difusión&lt;br /&gt;
D = 1&lt;br /&gt;
&lt;br /&gt;
# Tiempos &lt;br /&gt;
times = [0.2, 0.8, 1.6]&lt;br /&gt;
&lt;br /&gt;
# Solución del calor&lt;br /&gt;
def u(x, t, D=1):&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * D * t)) * np.exp(-x**2 / (4 * D * t))&lt;br /&gt;
&lt;br /&gt;
# Semilla &lt;br /&gt;
np.random.seed(4)&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(8,5))&lt;br /&gt;
&lt;br /&gt;
for t in times:&lt;br /&gt;
    u_det = u(x, t, D)&lt;br /&gt;
    &lt;br /&gt;
    # Ruido proporcional &lt;br /&gt;
    noise = 0.02 * np.random.randn(len(x))&lt;br /&gt;
    u_noise = u_det + noise&lt;br /&gt;
    &lt;br /&gt;
    plt.plot(x, u_noise, label=f&amp;quot;t = {t}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plt.xlabel(&amp;quot;x&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;densidad&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Evolución de la densidad con ruido blanco&amp;quot;)&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104561</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104561"/>
				<updated>2026-04-12T19:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: foto MMA.jpeg||800px]]&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104560</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104560"/>
				<updated>2026-04-12T19:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: foto MMA.png||800px]]&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104559</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104559"/>
				<updated>2026-04-12T19:02:13Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: foto MMA.png||800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104558</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104558"/>
				<updated>2026-04-12T19:01:12Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: foto MMA.png||800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Foto_MMA.jpeg&amp;diff=104557</id>
		<title>Archivo:Foto MMA.jpeg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Foto_MMA.jpeg&amp;diff=104557"/>
				<updated>2026-04-12T18:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104556</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104556"/>
				<updated>2026-04-12T18:50:59Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: Ecuación_del_Calor_(6)-1.png||800px]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo: Foto ||800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Ecuaci%C3%B3n_del_Calor_(6)-1.png&amp;diff=104555</id>
		<title>Archivo:Ecuación del Calor (6)-1.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Ecuaci%C3%B3n_del_Calor_(6)-1.png&amp;diff=104555"/>
				<updated>2026-04-12T18:50:37Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104554</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104554"/>
				<updated>2026-04-12T18:43:20Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo: Foto Ecuacion del calor MMA||800px]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo: Foto ||800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104553</id>
		<title>Ecuación del calor MMA</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_MMA&amp;diff=104553"/>
				<updated>2026-04-12T18:39:41Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo MMA| [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Marta Tejedor &lt;br /&gt;
&lt;br /&gt;
María Romojaro&lt;br /&gt;
&lt;br /&gt;
Andrea Sánchez}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:.jpeg||800px]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo: Foto ||800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Exponencial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 2000);&lt;br /&gt;
&lt;br /&gt;
% Función original&lt;br /&gt;
f = exp(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de modos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
% ---- Coeficientes trigonométricos ----&lt;br /&gt;
a0 = (1/pi) * trapz(x, f);&lt;br /&gt;
&lt;br /&gt;
an = zeros(1, Nmax);&lt;br /&gt;
bn = zeros(1, Nmax);&lt;br /&gt;
&lt;br /&gt;
for n = 1:Nmax&lt;br /&gt;
    an(n) = (1/pi) * trapz(x, f .* cos(n*x));&lt;br /&gt;
    bn(n) = (1/pi) * trapz(x, f .* sin(n*x));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Valores de N que queremos visualizar&lt;br /&gt;
N_values = [5 10 15 50];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar función original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
&lt;br /&gt;
    % Suma parcial trigonométrica&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    plot(x, SN, 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('e^x', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de e^x');&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función&lt;br /&gt;
f = sign(t);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficientes&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
ylim([0 max(error_L2)])&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2 (e^x)'); grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=40: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serie de Fourier Función Signo ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Dominio&lt;br /&gt;
x = linspace(-pi, pi, 4000);&lt;br /&gt;
&lt;br /&gt;
% Función discontinua: signo (escalón)&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
% Fourier: máximo modo que necesitamos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes c_n = (1/2pi) int f(x) e^{-inx} dx&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando) / (2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% N a visualizar&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
% Original&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 1);&lt;br /&gt;
&lt;br /&gt;
% Colores automáticos&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 0.8);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}','S_{100}', 'Location', 'best');&lt;br /&gt;
title('Serie de Fourier de sign(x)');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo&lt;br /&gt;
a = -pi;&lt;br /&gt;
b = pi;&lt;br /&gt;
&lt;br /&gt;
% Mallado fino para integración&lt;br /&gt;
x = linspace(a,b,5000);&lt;br /&gt;
dx = x(2)-x(1);&lt;br /&gt;
&lt;br /&gt;
% Función signo&lt;br /&gt;
f = sign(x);&lt;br /&gt;
&lt;br /&gt;
% Número máximo de términos&lt;br /&gt;
Nmax = 100;&lt;br /&gt;
&lt;br /&gt;
error_L2 = zeros(1,Nmax);&lt;br /&gt;
&lt;br /&gt;
for N = 1:Nmax&lt;br /&gt;
    &lt;br /&gt;
    % Coeficiente a0&lt;br /&gt;
    a0 = (1/pi)*trapz(x,f);&lt;br /&gt;
    &lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (1/pi)*trapz(x, f.*cos(n*x));&lt;br /&gt;
        bn(n) = (1/pi)*trapz(x, f.*sin(n*x));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Suma parcial&lt;br /&gt;
    SN = a0/2*ones(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Error L2&lt;br /&gt;
    error_L2(N) = sqrt(trapz(x, (f-SN).^2));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica del error&lt;br /&gt;
figure;&lt;br /&gt;
plot(1:Nmax, error_L2,'LineWidth',2)&lt;br /&gt;
xlabel('N'); ylabel('Error L^2');&lt;br /&gt;
title('Error L^2');&lt;br /&gt;
grid on&lt;br /&gt;
&lt;br /&gt;
fprintf('Error L2 en N=100: %.16e\n', error_L2(100));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
x = linspace(-pi, pi, 5000);&lt;br /&gt;
&lt;br /&gt;
% Onda cuadrada&lt;br /&gt;
f = ones(size(x));&lt;br /&gt;
f(x &amp;lt; 0) = -1;&lt;br /&gt;
&lt;br /&gt;
Nmax = 100;   % más grande para que Gibbs sea muy claro&lt;br /&gt;
nvals = -Nmax:Nmax;&lt;br /&gt;
c = zeros(size(nvals));&lt;br /&gt;
&lt;br /&gt;
% Coeficientes de Fourier&lt;br /&gt;
for k = 1:length(nvals)&lt;br /&gt;
    n = nvals(k);&lt;br /&gt;
    integrando = f .* exp(-1i*n*x);&lt;br /&gt;
    c(k) = trapz(x, integrando)/(2*pi);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
N_values = [5 10 15 50 100];&lt;br /&gt;
&lt;br /&gt;
figure; hold on;&lt;br /&gt;
&lt;br /&gt;
plot(x, f, 'k', 'LineWidth', 2);&lt;br /&gt;
&lt;br /&gt;
colors = lines(length(N_values));&lt;br /&gt;
&lt;br /&gt;
for j = 1:length(N_values)&lt;br /&gt;
    N = N_values(j);&lt;br /&gt;
    SN = zeros(size(x));&lt;br /&gt;
    &lt;br /&gt;
    for k = 1:length(nvals)&lt;br /&gt;
        if abs(nvals(k)) &amp;lt;= N&lt;br /&gt;
            SN = SN + c(k)*exp(1i*nvals(k)*x);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, real(SN), 'Color', colors(j,:), 'LineWidth', 1.5);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
legend('sign(x)', 'S_5', 'S_{10}', 'S_{15}', 'S_{50}', 'S_{100}', 'Location', 'best');&lt;br /&gt;
title('Fenómeno de Gibbs');&lt;br /&gt;
xlabel('x'); ylabel('Valor');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
xlim([-1 1])&lt;br /&gt;
ylim([-1.5 1.5])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sumas de Cesàro y de Abel ===&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% Intervalo base [-pi, pi]&lt;br /&gt;
a = -pi; b = pi;&lt;br /&gt;
x = linspace(a,b,2000);&lt;br /&gt;
&lt;br /&gt;
% Parámetros de la animación&lt;br /&gt;
N_list = 1:2:80;            % N creciente&lt;br /&gt;
r_list = linspace(0.60,0.98, length(N_list));  % r creciente (mismo nº de frames)&lt;br /&gt;
&lt;br /&gt;
% Funciones a animar&lt;br /&gt;
cases = {&lt;br /&gt;
    @(t) sign(t), 'sign';&lt;br /&gt;
    @(t) exp(t),  'exp'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
for c = 1:size(cases,1)&lt;br /&gt;
    f = cases{c,1};&lt;br /&gt;
    name = cases{c,2};&lt;br /&gt;
&lt;br /&gt;
    outdir = fullfile(pwd, ['frames_' name]);&lt;br /&gt;
    if ~exist(outdir, 'dir'); mkdir(outdir); end&lt;br /&gt;
&lt;br /&gt;
    % Precomputo coeficientes hasta Nmax para eficiencia&lt;br /&gt;
    Nmax = max(N_list);&lt;br /&gt;
    [a0, an, bn] = fourier_coef(f, a, b, Nmax);&lt;br /&gt;
&lt;br /&gt;
    for k = 1:length(N_list)&lt;br /&gt;
        N = N_list(k);&lt;br /&gt;
        r = r_list(k);&lt;br /&gt;
&lt;br /&gt;
        % Aproximaciones&lt;br /&gt;
        SN    = fourier_partial(a0, an, bn, x, N);&lt;br /&gt;
        CesN  = fourier_cesaro(a0, an, bn, x, N); % Fejér&lt;br /&gt;
        AbelN = fourier_abel(a0, an, bn, x, N, r);&lt;br /&gt;
&lt;br /&gt;
        % Plot&lt;br /&gt;
        figure(1); clf;&lt;br /&gt;
        plot(x, f(x), 'LineWidth', 2); hold on;&lt;br /&gt;
        plot(x, SN,    'LineWidth', 1.2);&lt;br /&gt;
        plot(x, CesN,  'LineWidth', 1.2);&lt;br /&gt;
        plot(x, AbelN, 'LineWidth', 1.2);&lt;br /&gt;
        grid on;&lt;br /&gt;
&lt;br /&gt;
        xlabel('x'); ylabel('y');&lt;br /&gt;
        title(sprintf('%s: N=%d, r=%.2f', name, N, r));&lt;br /&gt;
        legend('f(x)', 'S_N', 'Cesàro (Fejér)', 'Abel', 'Location','best');&lt;br /&gt;
&lt;br /&gt;
        % Guardar frame&lt;br /&gt;
        fname = fullfile(outdir, sprintf('frame_%04d.png', k));&lt;br /&gt;
        exportgraphics(gcf, fname, 'Resolution', 200);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
disp('Frames generados.');&lt;br /&gt;
&lt;br /&gt;
%% ================== FUNCIONES ==================&lt;br /&gt;
&lt;br /&gt;
function [a0, an, bn] = fourier_coef(f, a, b, N)&lt;br /&gt;
% Coeficientes trigonométricos en [a,b], periodo T=b-a&lt;br /&gt;
    T = b - a;&lt;br /&gt;
    xx = linspace(a,b,12000);    % mallado fino para integrar&lt;br /&gt;
    fx = f(xx);&lt;br /&gt;
&lt;br /&gt;
    a0 = (2/T) * trapz(xx, fx);&lt;br /&gt;
&lt;br /&gt;
    an = zeros(1,N);&lt;br /&gt;
    bn = zeros(1,N);&lt;br /&gt;
&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        an(n) = (2/T) * trapz(xx, fx .* cos(2*pi*n*xx/T));&lt;br /&gt;
        bn(n) = (2/T) * trapz(xx, fx .* sin(2*pi*n*xx/T));&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SN = fourier_partial(a0, an, bn, x, N)&lt;br /&gt;
% S_N(x) usando primeros N coeficientes en [-pi,pi] =&amp;gt; cos(nx), sin(nx)&lt;br /&gt;
    SN = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        SN = SN + an(n)*cos(n*x) + bn(n)*sin(n*x);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sigmaN = fourier_cesaro(a0, an, bn, x, N)&lt;br /&gt;
% Cesàro/Fejér: sigma_N = (1/(N+1)) sum_{k=0}^N S_k&lt;br /&gt;
    sigmaN = zeros(size(x));&lt;br /&gt;
    Sk = (a0/2) * ones(size(x));  % S_0&lt;br /&gt;
    sigmaN = sigmaN + Sk;&lt;br /&gt;
&lt;br /&gt;
    for k = 1:N&lt;br /&gt;
        Sk = Sk + an(k)*cos(k*x) + bn(k)*sin(k*x);&lt;br /&gt;
        sigmaN = sigmaN + Sk;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    sigmaN = sigmaN/(N+1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Ar = fourier_abel(a0, an, bn, x, N, r)&lt;br /&gt;
% Abel truncado: A_r(x) = a0/2 + sum_{n=1}^N r^n(...)&lt;br /&gt;
    Ar = (a0/2) * ones(size(x));&lt;br /&gt;
    for n = 1:N&lt;br /&gt;
        Ar = Ar + (r^n) * ( an(n)*cos(n*x) + bn(n)*sin(n*x) );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apéndice ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SumasFourierMMA.gif||]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Imagen_ecuaci%C3%B3n_del_calor_MMA.png&amp;diff=104552</id>
		<title>Archivo:Imagen ecuación del calor MMA.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Imagen_ecuaci%C3%B3n_del_calor_MMA.png&amp;diff=104552"/>
				<updated>2026-04-12T18:37:51Z</updated>
		
		<summary type="html">&lt;p&gt;Andrea Sánchez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrea Sánchez</name></author>	</entry>

	</feed>