<?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=Javier+Mart%C3%ADnez+Saiz</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=Javier+Mart%C3%ADnez+Saiz"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/Javier_Mart%C3%ADnez_Saiz"/>
		<updated>2026-04-28T20:29:06Z</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_JC&amp;diff=104540</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104540"/>
				<updated>2026-04-12T16:56:17Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%  Evolución de un bloque de calor u0 = 1[0,1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1;                         &lt;br /&gt;
t_vals = [0.001, 0.01, 0.1];    &lt;br /&gt;
x_grid = linspace(-1, 2, 400);  &lt;br /&gt;
y_int = linspace(0, 1, 1000);   &lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 850, 500]);&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar el dato inicial &lt;br /&gt;
plot(x_grid, (x_grid &amp;gt;= 0 &amp;amp; x_grid &amp;lt;= 1), 'k--', 'LineWidth', 1.5, 'DisplayName', 'u_0(x) (t=0)');&lt;br /&gt;
&lt;br /&gt;
% Cálculo por convolución numérica (Trapecio)&lt;br /&gt;
colores = [0.85 0.33 0.1; 0.93 0.69 0.13; 0 0.45 0.74]; &lt;br /&gt;
&lt;br /&gt;
for k = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(k);&lt;br /&gt;
    u = zeros(size(x_grid));&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:length(x_grid)&lt;br /&gt;
        K = (1 / sqrt(4 * pi * D * t)) * exp(-(x_grid(i) - y_int).^2 / (4 * D * t));&lt;br /&gt;
        u(i) = trapz(y_int, K);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x_grid, u, 'Color', colores(k,:), 'LineWidth', 2.5, ...&lt;br /&gt;
        'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Etiquetas&lt;br /&gt;
title('Difusión de un bloque unitario: $u(x,t) = (u_0 * K)(x,t)$', 'Interpreter', 'latex', 'FontSize', 14);&lt;br /&gt;
xlabel('Posición (x)'); ylabel('Temperatura (u)');&lt;br /&gt;
legend('Location', 'northeast');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
ylim([-0.1 1.2]);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 6=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 7 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Evolución de la Solución Fundamental en R^3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
%Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; %&lt;br /&gt;
res = 35; &lt;br /&gt;
[X, Y, Z] = meshgrid(linspace(-1, 1, res));&lt;br /&gt;
R2 = X.^2 + Y.^2 + Z.^2;&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [50, 50, 1500, 500]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    % Cálculo de la solución fundamental en R^3&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)^(3/2)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    x_v = X(:); y_v = Y(:); z_v = Z(:); phi_v = Phi(:);&lt;br /&gt;
    &lt;br /&gt;
    threshold = max(phi_v) * 0.01; &lt;br /&gt;
    idx = phi_v &amp;gt; threshold;&lt;br /&gt;
    &lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    &lt;br /&gt;
    % 3. Gráfico de dispersión 3D&lt;br /&gt;
    s = scatter3(x_v(idx), y_v(idx), z_v(idx), 20, phi_v(idx), 'filled');&lt;br /&gt;
    s.MarkerFaceAlpha = 'flat';&lt;br /&gt;
    alpha_vals = phi_v(idx) / max(phi_v(idx));&lt;br /&gt;
    s.AlphaData = alpha_vals;&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    grid on; view(3);&lt;br /&gt;
    axis([-1 1 -1 1 -1 1]);&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t) ' (Pico: ' num2str(max(phi_v), '%.1f') ')'], 'FontSize', 11);&lt;br /&gt;
    xlabel('x'); ylabel('y'); zlabel('z');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución Volumétrica de la Solución Fundamental en $\mathbb{R}^3$', 'Interpreter', 'latex', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104539</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104539"/>
				<updated>2026-04-12T16:53:43Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104537</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104537"/>
				<updated>2026-04-12T16:52:29Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104535</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104535"/>
				<updated>2026-04-12T16:51:47Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* CODIGO 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104533</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104533"/>
				<updated>2026-04-12T16:51:21Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* CODIGO 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104532</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104532"/>
				<updated>2026-04-12T16:50:53Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* CODIGO 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104531</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104531"/>
				<updated>2026-04-12T16:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* CODIGO 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab line&amp;gt;&lt;br /&gt;
% Solución por medio de la Solución Fundamental &lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% parámetros de la EDP&lt;br /&gt;
L = 1;                  &lt;br /&gt;
D = 1;                  &lt;br /&gt;
nx = 500;               &lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t_evols = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; % Tiempos de observación&lt;br /&gt;
colores = jet(length(t_evols));&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Comparativa Ecuación del Calor', 'Position', [50, 50, 1200, 800]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Fuente Puntual&lt;br /&gt;
subplot(3, 1, 1); hold on;&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % u(x,t) = Phi(x,t)&lt;br /&gt;
    u = (1 / sqrt(4 * pi * D * t)) * exp(-(x.^2) / (4 * D * t));&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('1. Evolución de la difusión con una fuente de calor en x=0', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([0 6]); &lt;br /&gt;
&lt;br /&gt;
%CASO 2: Condición Inicial Senoidal&lt;br /&gt;
subplot(3, 1, 2); hold on;&lt;br /&gt;
% u(x,0) = sin(pi * x)&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    % Por propiedad de funciones propias: u = sin(k*x) * exp(-D*k^2*t)&lt;br /&gt;
    u = sin(pi * x) * exp(-D * pi^2 * t);&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('2. Evolución de la difusión con condición inicial sen(x)', 'FontSize', 12);&lt;br /&gt;
ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.2 1.2]);&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Condición Inicial Aleatoria&lt;br /&gt;
subplot(3, 1, 3); hold on;&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 20;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos); % Amplitudes aleatorias decrecientes&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_evols)&lt;br /&gt;
    t = t_evols(i);&lt;br /&gt;
    u = zeros(size(x));&lt;br /&gt;
    for n = 1:N_modos&lt;br /&gt;
        u = u + A(n) * sin(n * pi * x / L) * exp(-D * (n * pi / L)^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    plot(x, u, 'Color', colores(i,:), 'LineWidth', 2, 'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
title('3. Evolución de la difusión con condiciones iniciales aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('Espacio (x)'); ylabel('Temperatura'); legend('Location', 'northeast'); grid on;&lt;br /&gt;
ylim([-1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
% Anotación global&lt;br /&gt;
sgtitle('Análisis de Difusión: Fuente de calor, función senoidal y funciones aleatorias', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Visualización de la superficie de solución u(x,t)&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros Globales&lt;br /&gt;
L = 1;              &lt;br /&gt;
T_final = 1;      &lt;br /&gt;
D = 1;             &lt;br /&gt;
nx = 100;          &lt;br /&gt;
nt = 100;           &lt;br /&gt;
&lt;br /&gt;
x = linspace(-L, L, nx);&lt;br /&gt;
t = linspace(0.01, T_final, nt);&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Name', 'Evolución 3D: Solución Fundamental vs Perfiles', 'Position', [100, 100, 1200, 400]);&lt;br /&gt;
&lt;br /&gt;
%CASO 1: Punto Caliente&lt;br /&gt;
% u(x,t) = Phi(x,t)&lt;br /&gt;
U1 = (1 ./ sqrt(4 * pi * D * T)) .* exp(-(X.^2) ./ (4 * D * T));&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 1);&lt;br /&gt;
surf(X, T, U1, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('1. Fuente Puntual (\Phi)', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 2: Función seno&lt;br /&gt;
% u(x,0) = sin(pi*x) -&amp;gt; u(x,t) = sin(pi*x) * exp(-D*pi^2*t)&lt;br /&gt;
U2 = sin(pi * X) .* exp(-D * pi^2 * T);&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 2);&lt;br /&gt;
surf(X, T, U2, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('2. Función seno', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
%CASO 3: Funciones aleatorias&lt;br /&gt;
rng(10); &lt;br /&gt;
N_modos = 15;&lt;br /&gt;
A = randn(1, N_modos) ./ (1:N_modos);&lt;br /&gt;
U3 = zeros(size(X));&lt;br /&gt;
for n = 1:N_modos&lt;br /&gt;
    U3 = U3 + A(n) * sin(n * pi * X / L) .* exp(-D * (n * pi / L)^2 * T);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subplot(1, 3, 3);&lt;br /&gt;
surf(X, T, U3, 'EdgeColor', 'none');&lt;br /&gt;
colormap(hot); view(-30, 30);&lt;br /&gt;
title('3. Funciones aleatorias', 'FontSize', 12);&lt;br /&gt;
xlabel('x'); ylabel('t'); zlabel('u');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
&lt;br /&gt;
sgtitle('Superficies de Solución u(x,t): Efecto de Regularización', 'FontSize', 16, 'FontWeight', 'bold');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from scipy.special import erfc&lt;br /&gt;
&lt;br /&gt;
# 1. Definición del dominio espacial (x &amp;gt; 0). Usamos un rango de 0 a 5.&lt;br /&gt;
x = np.linspace(0, 5, 1000)&lt;br /&gt;
&lt;br /&gt;
# 2. Definición de los instantes de tiempo muy pequeños para ver el comportamiento cerca de t=0&lt;br /&gt;
tiempos = [0.01, 0.1, 0.5, 1.0, 5.0]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# 3. Cálculo y representación de la solución para cada tiempo&lt;br /&gt;
for t in tiempos:&lt;br /&gt;
    u = 1 + erfc(x / (2 * np.sqrt(t)))&lt;br /&gt;
    plt.plot(x, u, label=f't = {t}')&lt;br /&gt;
&lt;br /&gt;
# 4. Decoración de la gráfica para el póster&lt;br /&gt;
plt.title('Evolución Térmica en Semiespacio: $u(0,t)=2, u(x,0)=1$', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)', fontsize=12)&lt;br /&gt;
plt.ylabel('Temperatura (u)', fontsize=12)&lt;br /&gt;
&lt;br /&gt;
# Límites del Principio del Máximo&lt;br /&gt;
plt.axhline(2, color='red', linestyle='--', alpha=0.5, label='Frontera u=2')&lt;br /&gt;
plt.axhline(1, color='blue', linestyle='--', alpha=0.5, label='Dato inicial u=1')&lt;br /&gt;
&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, which='both', linestyle='--', alpha=0.5)&lt;br /&gt;
plt.ylim(0.8, 2.2)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%  Evolución de un bloque de calor u0 = 1[0,1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1;                         &lt;br /&gt;
t_vals = [0.001, 0.01, 0.1];    &lt;br /&gt;
x_grid = linspace(-1, 2, 400);  &lt;br /&gt;
y_int = linspace(0, 1, 1000);   &lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 850, 500]);&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Dibujar el dato inicial &lt;br /&gt;
plot(x_grid, (x_grid &amp;gt;= 0 &amp;amp; x_grid &amp;lt;= 1), 'k--', 'LineWidth', 1.5, 'DisplayName', 'u_0(x) (t=0)');&lt;br /&gt;
&lt;br /&gt;
% Cálculo por convolución numérica (Trapecio)&lt;br /&gt;
colores = [0.85 0.33 0.1; 0.93 0.69 0.13; 0 0.45 0.74]; &lt;br /&gt;
&lt;br /&gt;
for k = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(k);&lt;br /&gt;
    u = zeros(size(x_grid));&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:length(x_grid)&lt;br /&gt;
        K = (1 / sqrt(4 * pi * D * t)) * exp(-(x_grid(i) - y_int).^2 / (4 * D * t));&lt;br /&gt;
        u(i) = trapz(y_int, K);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x_grid, u, 'Color', colores(k,:), 'LineWidth', 2.5, ...&lt;br /&gt;
        'DisplayName', ['t = ' num2str(t)]);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Etiquetas&lt;br /&gt;
title('Difusión de un bloque unitario: $u(x,t) = (u_0 * K)(x,t)$', 'Interpreter', 'latex', 'FontSize', 14);&lt;br /&gt;
xlabel('Posición (x)'); ylabel('Temperatura (u)');&lt;br /&gt;
legend('Location', 'northeast');&lt;br /&gt;
grid on; axis tight;&lt;br /&gt;
ylim([-0.1 1.2]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 5=&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
% Solución Fundamental de la Ecuación del Calor en 2D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clear all; close all; clc;&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
D = 1; &lt;br /&gt;
t_vals = [0.1, 0.01, 0.001]; &lt;br /&gt;
[X1, X2] = meshgrid(linspace(-1, 1, 100)); % Dominio espacial [-1, 1]^2&lt;br /&gt;
&lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1300, 400]);&lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_vals)&lt;br /&gt;
    t = t_vals(i);&lt;br /&gt;
    &lt;br /&gt;
    %Cálculo de la solución fundamental en 2D&lt;br /&gt;
   &lt;br /&gt;
    R2 = X1.^2 + X2.^2;&lt;br /&gt;
    Phi = (1 / (4 * pi * D * t)) * exp(-R2 / (4 * D * t));&lt;br /&gt;
    &lt;br /&gt;
    %Gráfico&lt;br /&gt;
    subplot(1, 3, i);&lt;br /&gt;
    surf(X1, X2, Phi, 'EdgeColor', 'none');&lt;br /&gt;
    colormap(hot);&lt;br /&gt;
    view(3);&lt;br /&gt;
    grid on;&lt;br /&gt;
    &lt;br /&gt;
    title(['t = ' num2str(t)], 'FontSize', 12);&lt;br /&gt;
    xlabel('x_1'); ylabel('x_2'); zlabel('\Phi');&lt;br /&gt;
    axis tight;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
sgtitle('Evolución de la Solución Fundamental en 2D: Hacia la Singularidad', 'FontSize', 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 4 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def K(x, t, y=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Solución fundamental centrada en y.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return (1 / np.sqrt(4 * np.pi * t)) * np.exp(-(x - y)**2 / (4 * t))&lt;br /&gt;
&lt;br /&gt;
x = np.linspace(-5, 5, 1000)&lt;br /&gt;
t = 0.1  # Fijamos un tiempo&lt;br /&gt;
&lt;br /&gt;
# Definimos tres centros y tres intensidades (coeficientes)&lt;br /&gt;
centros = [-2, 0, 1.5]&lt;br /&gt;
pesos = [0.8, 1.2, 0.5]&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
&lt;br /&gt;
# Dibujamos cada solución fundamental individual&lt;br /&gt;
u_total = np.zeros_like(x)&lt;br /&gt;
for y, c in zip(centros, pesos):&lt;br /&gt;
    u_i = c * K(x, t, y)&lt;br /&gt;
    u_total += u_i&lt;br /&gt;
    plt.plot(x, u_i, '--', alpha=0.6, label=f'Centrada en y={y} (peso {c})')&lt;br /&gt;
&lt;br /&gt;
# Dibujamos la combinación lineal (la suma)&lt;br /&gt;
plt.plot(x, u_total, 'k-', lw=2, label='Combinación Lineal (Suma)')&lt;br /&gt;
&lt;br /&gt;
plt.title('Superposición de Soluciones Fundamentales', fontsize=14)&lt;br /&gt;
plt.xlabel('Posición (x)')&lt;br /&gt;
plt.ylabel('Temperatura (u)')&lt;br /&gt;
plt.legend()&lt;br /&gt;
plt.grid(True, alpha=0.3)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_4.jpg&amp;diff=104515</id>
		<title>Archivo:EDPS POSTER 4.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_4.jpg&amp;diff=104515"/>
				<updated>2026-04-12T16:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_3.pdf&amp;diff=104510</id>
		<title>Archivo:EDPS POSTER 3.pdf</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_3.pdf&amp;diff=104510"/>
				<updated>2026-04-12T16:28:36Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104508</id>
		<title>Ecuación del calor JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_JC&amp;diff=104508"/>
				<updated>2026-04-12T16:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP25/26]]&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_3.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_4.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104359</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104359"/>
				<updated>2026-02-19T07:56:00Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_1.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_2.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_1.pdf&amp;diff=104358</id>
		<title>Archivo:EDPS POSTER 1.pdf</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_1.pdf&amp;diff=104358"/>
				<updated>2026-02-19T07:55:20Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: Poster definitivo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Poster definitivo&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104357</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104357"/>
				<updated>2026-02-19T07:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:EDPS_POSTER_1.pdf]]&lt;br /&gt;
[[Archivo:Poster_Fourier_JC.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_2.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104356</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104356"/>
				<updated>2026-02-19T07:52:02Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
[[Archivo:Poster_Fourier_JC.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_2.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104354</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104354"/>
				<updated>2026-02-19T07:51:09Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EDPS_POSTER_Definitivo.jpg|center|800px]]&lt;br /&gt;
[[Archivo:Poster_Fourier_JC.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_2.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_2.jpg&amp;diff=104353</id>
		<title>Archivo:EDPS POSTER 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EDPS_POSTER_2.jpg&amp;diff=104353"/>
				<updated>2026-02-19T07:47:12Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: Poster EDPS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Poster EDPS&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:POSTER_EDP_2.jpg&amp;diff=104352</id>
		<title>Archivo:POSTER EDP 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:POSTER_EDP_2.jpg&amp;diff=104352"/>
				<updated>2026-02-19T07:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: Poster definitivo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Poster definitivo&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104351</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104351"/>
				<updated>2026-02-19T07:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EDPS_POSTER_Definitivo.jpg|center|800px]]&lt;br /&gt;
[[Archivo:Poster_Fourier_JC.pdf]]&lt;br /&gt;
[[Archivo:EDPS_POSTER_2.jpg|center|800px]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Screenshot_20260219_083516_Jnotes.jpg&amp;diff=104347</id>
		<title>Archivo:Screenshot 20260219 083516 Jnotes.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Screenshot_20260219_083516_Jnotes.jpg&amp;diff=104347"/>
				<updated>2026-02-19T07:38:12Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104297</id>
		<title>Series de Fourier JC</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_JC&amp;diff=104297"/>
				<updated>2026-02-18T23:29:13Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: /* Póster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier. Grupo 6-A | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Carlos Asensio &lt;br /&gt;
&lt;br /&gt;
Javier Martínez }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Póster ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EDPS_POSTER_Definitivo.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=CODIGO 1 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&lt;br /&gt;
=CODIGO 2 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
=CODIGO 3 =&lt;br /&gt;
&amp;lt;source lang: &amp;quot;Matlab&amp;quot; line&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.Simulación de una función aleatoria tomando coeficientes normales ===&lt;br /&gt;
Este código genera una función usando su desarrollo de Fourier, pero los coeficientes de la serie vienen elegidos por una variable normal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
%% Simulación de Función Aleatoria con coeficientes normales.&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros&lt;br /&gt;
L = 1;              % Longitud del dominio&lt;br /&gt;
N = 500;            % Número de armónicos&lt;br /&gt;
dx = 0.001;&lt;br /&gt;
x = 0:dx:L;&lt;br /&gt;
f = zeros(size(x));&lt;br /&gt;
p=8;&lt;br /&gt;
&lt;br /&gt;
% 2. Generación de Coeficientes&lt;br /&gt;
% Introducimos la desviación típica (raiz de la varianza) &lt;br /&gt;
k = 1:N;&lt;br /&gt;
sigma_k = 1./k.^(p/2); &lt;br /&gt;
&lt;br /&gt;
% Coeficientes: Normal(0, 1) multiplicada por su desviación estándar&lt;br /&gt;
ak = randn(1, N) .* sigma_k;&lt;br /&gt;
bk = randn(1, N) .* sigma_k;&lt;br /&gt;
&lt;br /&gt;
% 3. Construcción de la Serie&lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
for i = 1:N&lt;br /&gt;
    f = f + ak(i)*cos(i*omega*x) + bk(i)*sin(i*omega*x);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
plot(x, f, 'LineWidth', 1.5, 'Color', [0.8, 0.2, 0.2]);&lt;br /&gt;
title(['Función Aleatoria (Desviación \sigma_k^2 = 1/k^', num2str(p), ')']);&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('f_{\sigma}(x)');&lt;br /&gt;
grid on;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Histograma del ruido según la normal escogida ===&lt;br /&gt;
El código genera un histograma a partir de los valores de distintas funciones generadas, evaluadas en un punto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
%% Histograma Adaptativo según Desviación Típica en un punto x&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
% 1. Parámetros de Control&lt;br /&gt;
L = 1;              &lt;br /&gt;
N_harmonicos = 500;  &lt;br /&gt;
M_iter = 3000; &lt;br /&gt;
x_fijo = 0.5;       &lt;br /&gt;
omega = 2 * pi / L;&lt;br /&gt;
p=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% 2. Definición de la desviación típica por modo&lt;br /&gt;
k = 1:N_harmonicos;&lt;br /&gt;
sigma_k = 1 ./ (k.^(p/2)); &lt;br /&gt;
&lt;br /&gt;
% 3. Simulación de Monte Carlo&lt;br /&gt;
valores_f = zeros(1, M_iter);&lt;br /&gt;
for m = 1:M_iter&lt;br /&gt;
    ak = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    bk = randn(1, N_harmonicos) .* sigma_k;&lt;br /&gt;
    &lt;br /&gt;
    % Evaluamos la serie en x_fijo&lt;br /&gt;
    f_x = sum( ak .* cos(k * omega * x_fijo) + bk .* sin(k * omega * x_fijo) );&lt;br /&gt;
    valores_f(m) = f_x;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% 4. Cálculo de la Varianza Teórica &lt;br /&gt;
% La varianza de la suma es la suma de las varianzas de los sumandos&lt;br /&gt;
&lt;br /&gt;
var_teorica_adaptada = sum(sigma_k.^2); &lt;br /&gt;
&lt;br /&gt;
% 5. Representación Gráfica&lt;br /&gt;
figure('Color', 'w');&lt;br /&gt;
h = histogram(valores_f, 50, 'Normalization', 'pdf', 'FaceColor', [0.2, 0.7, 0.5], 'EdgeColor', 'none');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Generar Gaussiana basada en la varianza calculada&lt;br /&gt;
x_axis = linspace(min(valores_f), max(valores_f), 200);&lt;br /&gt;
y_gauss = (1/sqrt(2*pi*var_teorica_adaptada)) * exp(-x_axis.^2 / (2*var_teorica_adaptada));&lt;br /&gt;
&lt;br /&gt;
plot(x_axis, y_gauss, 'r', 'LineWidth', 2.5);&lt;br /&gt;
&lt;br /&gt;
title(['Distribución Adaptada: \sigma_{total}^2 = ', num2str(var_teorica_adaptada, '%.4f')]);&lt;br /&gt;
subtitle(['Parámetros: p = ', num2str(p)]);&lt;br /&gt;
xlabel(['Valor de f(x) en x = ', num2str(x_fijo)]);&lt;br /&gt;
ylabel('Densidad de Probabilidad');&lt;br /&gt;
legend('Simulación', 'Gaussiana Teórica Adaptada');&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fprintf('Varianza Teórica Calculada: %f\n', var_teorica_adaptada);&lt;br /&gt;
fprintf('Varianza Observada: %f\n', var(valores_f));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Solución de la Ecuación del calor con condiciones iniciales aleatorias ===&lt;br /&gt;
Este código representa las soluciones de la ecuación del calor en 1 dimensión en distintos intervalos de tiempo, con condición inicial una función aleatoria.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
% Solución de la Ecuación del Calor con Condiciones Iniciales Aleatorias&lt;br /&gt;
% Caso: Dominio Periódico (Anillo) con Coeficientes de Fourier Estocásticos&lt;br /&gt;
&lt;br /&gt;
clear; clc; close all;&lt;br /&gt;
&lt;br /&gt;
%% 1. Parámetros del Problema&lt;br /&gt;
&lt;br /&gt;
L = 2*pi;              % Longitud del dominio (anillo)&lt;br /&gt;
alpha = 0.5;           % Difusividad térmica&lt;br /&gt;
T_final = 3.0;         % Tiempo total de simulación&lt;br /&gt;
N_x = 500;             % Puntos en el espacio&lt;br /&gt;
x = linspace(0, L, N_x);&lt;br /&gt;
k_max = 50;            % Número de modos de Fourier a sumar&lt;br /&gt;
p = 1;                 % Exponente de decaimiento de varianza (1/k^p)&lt;br /&gt;
&lt;br /&gt;
%% 2. Generación de la Condición Inicial Aleatoria (t = 0)&lt;br /&gt;
% Coeficientes de Fourier aleatorios&lt;br /&gt;
A0 = randn(1); % Media aleatoria&lt;br /&gt;
Ak = randn(1, k_max) ./ ( (1:k_max).^(p/2) ); % Varianza 1/k^p&lt;br /&gt;
Bk = randn(1, k_max) ./ ( (1:k_max).^(p/2) );&lt;br /&gt;
&lt;br /&gt;
% Construcción de la función inicial f(x)&lt;br /&gt;
u_initial = A0/2;&lt;br /&gt;
for k = 1:k_max&lt;br /&gt;
    u_initial = u_initial + Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%% 3. Evolución Temporal y Graficación&lt;br /&gt;
t_steps = [0, 0.05, 0.2, 0.5, 1.5,3]; &lt;br /&gt;
figure('Color', 'w', 'Position', [100, 100, 1000, 600]);&lt;br /&gt;
hold on; grid on;&lt;br /&gt;
&lt;br /&gt;
colors = jet(length(t_steps)); &lt;br /&gt;
&lt;br /&gt;
for i = 1:length(t_steps)&lt;br /&gt;
    t = t_steps(i);&lt;br /&gt;
    &lt;br /&gt;
    % Calculamos la solución u(x,t) usando la serie de Fourier&lt;br /&gt;
    u_t = A0/2;&lt;br /&gt;
    for k = 1:k_max&lt;br /&gt;
        decay = exp(-alpha * (2*pi*k/L)^2 * t); &lt;br /&gt;
        u_t = u_t + decay * (Ak(k)*cos(2*pi*k*x/L) + Bk(k)*sin(2*pi*k*x/L));&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    plot(x, u_t, 'Color', colors(i,:), 'LineWidth', 2, ...&lt;br /&gt;
        'DisplayName', sprintf('t = %.2f', t));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
title(['Evolución de u(x,t) con C.I. Aleatoria (p = ', num2str(p), ')']);&lt;br /&gt;
xlabel('Posición x');&lt;br /&gt;
ylabel('Temperatura u');&lt;br /&gt;
legend show;&lt;br /&gt;
set(gca, 'FontSize', 12);&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>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85021</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85021"/>
				<updated>2025-03-19T12:20:59Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:Evol1.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol2.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol4.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol6.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Conclusión =&lt;br /&gt;
El mapa de calor proporciona otra perspectiva de cómo la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son cero. Al cambiar los parámetros anteriormente detallados de la EDP, la forma de la solución cambia. Modificando &amp;lt;math&amp;gt;\alpha y k&amp;lt;/math&amp;gt;, las cuales son dependientes entre ellas y reflejan la capacidad del medio de transmitir calor por sí mismo, podemos alterar el ritmo al cual el calor se transfiere por el medio. Por otro lado, en la condición frontera de la superficie vienen reflejadas &amp;lt;math&amp;gt;\k,h&amp;lt;/math&amp;gt;. Aumentar &lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85017</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85017"/>
				<updated>2025-03-19T12:04:24Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:Evol1.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol2.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol4.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol6.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
= Conclusión =&lt;br /&gt;
El mapa de calor proporciona otra perspectiva de cómo la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son cero. Al cambiar los parámetros anteriormente detallados de la EDP, la forma de la solución cambia. Modificando &amp;lt;math&amp;gt;\alpha,k&amp;lt;/math&amp;gt;, las cuales son dependientes entre ellas y reflejan la capacidad del medio de transmitir calor por sí mismo; podemos alterar el ritmo al cual el calor se transfiere por el medio. &lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85013</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85013"/>
				<updated>2025-03-19T11:55:11Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:Evol1.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol2.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol4.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol6.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El mapa de calor proporciona otra perspectiva de cómo la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son cero. Al cambiar los parámetros anteriormente detallados de la EDP, la forma de la solución cambia. Modificando &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; &lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85010</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85010"/>
				<updated>2025-03-19T11:50:51Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:Evol1.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol2.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol4.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol6.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El mapa proporciona otra perspectiva de como la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son cero. Al cambiar los parámetros anteriormente detallados de la EDP, la forma de la solución cambia.&lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85006</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=85006"/>
				<updated>2025-03-19T11:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:EDP.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol2.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol4.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Archivo:Evol6.png|400px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
Se puede representar en un mapa de calor la variación de la temperatura del mar en función del tiempo. Proporciona otra perspectiva de como la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El mapa proporciona otra perspectiva de como la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son cero. Al cambiar los parámetros anteriormente detallados de la EDP, la forma de la solución cambia.&lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=84994</id>
		<title>Ecuación del calor (Grupo CJMAS)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_CJMAS)&amp;diff=84994"/>
				<updated>2025-03-19T11:36:34Z</updated>
		
		<summary type="html">&lt;p&gt;Javier Martínez Saiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{ TrabajoED | &lt;br /&gt;
Ecuación del calor en el océano (Grupo CJMAS). | [[:Categoría: EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Claudia Domínguez Sánchez&lt;br /&gt;
&lt;br /&gt;
Javier Martínez Saiz&lt;br /&gt;
&lt;br /&gt;
Marta De Miguel Prieto&lt;br /&gt;
&lt;br /&gt;
Analía Olivero Betancor&lt;br /&gt;
&lt;br /&gt;
Sofía de Benito Valdueza }}&lt;br /&gt;
&lt;br /&gt;
= Introducción =&lt;br /&gt;
La difusión del calor en el océano es un proceso clave ya que define la distribución térmica en las masas de agua y su interacción con la atmósfera. En este trabajo, utilizamos la ecuación del calor con el objetivo de comprender cómo el calor se transfiere en el océano bajo diferentes condiciones como son la densidad, difusividad y conductividad del agua. &lt;br /&gt;
&lt;br /&gt;
= Modelización de la transferencia de calor en el océano profundo =&lt;br /&gt;
&lt;br /&gt;
== Planteamiento ==&lt;br /&gt;
Consideremos una porción de la Tierra de longitud &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, en la cual distinguimos regiones diferenciadas. En el extremo izquierdo, la superficie está en contacto con la atmósfera, donde la temperatura varía debido a la radiación solar y la influencia de la temperatura ambiental. A continuación, nos adentramos en el océano profundo, donde la temperatura varía principalmente por la difusión térmica.&lt;br /&gt;
&lt;br /&gt;
Aplicando la ley de Fourier de conducción térmica tenemos que la ecuación de transmisión del calor en el océano es la siguiente:&lt;br /&gt;
 &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \frac{du}{dt}=\alpha \frac{d^2 u}{dx^2}&amp;lt;/math&amp;gt;, &amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; es la constante que representa la difusividad del agua.&lt;br /&gt;
&lt;br /&gt;
En la superficie (&amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;) la temperatura del océano está influenciada por la temperatura del ambiente luego la condición en de esta frontera quedaría determinada por:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(0,t)=\frac{h}{k}(u_{amb}-u(0,t))&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
En cambio, en el extremo opuesto, consideramos que su flujo es nulo. &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{du}{dx}(L,t)=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; representa el coeficiente de transferencia del calor y &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; la conductividad térmica.&lt;br /&gt;
&lt;br /&gt;
Para establecer la condición inicial suponemos una situación ideal de equilibrio en el océano, por lo que podemos expresar la temperatura en el instante inicial como constante,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,0)=u_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solución ==&lt;br /&gt;
=== Solución estacionaria ===&lt;br /&gt;
Para tiempos muy grandes, \(t \to \infty \), la temperatura en el océano alcanza un estado estacionario donde \( u_t(x,t) \to 0 \). En este caso, la solución estacionaria está dada por:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
v(x) = u_{\text{amb}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Es decir, a largo plazo, la temperatura del océano se iguala a la temperatura ambiente.&lt;br /&gt;
&lt;br /&gt;
=== Solución mediante separación de variables ===&lt;br /&gt;
&lt;br /&gt;
La solución general del problema, resuelta mediante separación de variables, es&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty \left(A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) + B_n\sin\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right)\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;math&amp;gt;\lambda_n=\alpha \beta_n^2 &amp;lt;/math&amp;gt;, dónde  &amp;lt;math&amp;gt;\beta_n&amp;lt;/math&amp;gt; cumple que &amp;lt;math&amp;gt;\tan(L \beta )=\frac{h}{k \beta}&amp;lt;/math&amp;gt;. En cuanto a los coeficientes de Fourier, &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A_n= \frac{2(u_{amb}-u_0)}{L\sqrt{\frac{\lambda_n}{\alpha}}} \sin\left(\sqrt{\frac{\lambda_n}{\alpha}}L\right)&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;B_n= 0&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este modo, la solución quedaría como:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u(x,t)= u_{amb} - \sum_{n=1}^\infty A_n\cos\left(\sqrt{\frac{\lambda_n}{\alpha}}x\right) e^{-\lambda_n t}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Códigos =&lt;br /&gt;
Mediante la implementación del siguiente código, conseguimos representar la evolución de la temperatura del océano a lo largo del espacio y tiempo bajo la influencia de la temperatura ambiente. Tomando x=0 como el fondo y x=1 como la superficie, tenemos que en x=1 se alcanzan los máximos valores de temperatura y que decrece con el tiempo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 100; % Número de pasos en t&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
t = linspace(0, 2000, Nt); % Tiempo hasta 1 día (en segundos)&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 5;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb-u0) * sin(beta_n * L) / (beta_n * L); % &lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Graficar evolución de la temperatura&lt;br /&gt;
figure;&lt;br /&gt;
[X, T] = meshgrid(x, t/3600); % Convertir tiempo a horas&lt;br /&gt;
surf(X, T, u', 'EdgeColor', 'none');&lt;br /&gt;
xlabel('Distancia (m)');&lt;br /&gt;
ylabel('Tiempo (horas)');&lt;br /&gt;
zlabel('Temperatura (°C)');&lt;br /&gt;
title('Evolución de la temperatura en el océano');&lt;br /&gt;
colorbar;&lt;br /&gt;
view(3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:EDP.png|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En el siguiente código se ha buscado representar la evolución de la temperatura del océano cuando el tiempo tiende a infinito, lo que lleva a que la temperatura de océano tome el mismo valor que la temperatura ambiente, es decir, la solución estacionaria:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Código MATLAB !! Representación gráfica&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | {{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros del problema&lt;br /&gt;
L = 1000;      % Longitud del océano (en metros)&lt;br /&gt;
alpha = 1.4e-6; % Difusividad térmica del agua (m^2/s)&lt;br /&gt;
h = 10;       % Coeficiente de transferencia de calor&lt;br /&gt;
k = 0.6;      % Conductividad térmica del agua&lt;br /&gt;
u_amb = 20;   % Temperatura ambiente (grados Celsius)&lt;br /&gt;
u0 = 5;       % Temperatura inicial (grados Celsius)&lt;br /&gt;
&lt;br /&gt;
% Dominio espacial y temporal&lt;br /&gt;
Nx = 50; % Número de puntos en x&lt;br /&gt;
Nt = 50; % Número de pasos en t (mucho menor para avanzar rápido)&lt;br /&gt;
t_max = 10000000 * 86400; % Simulación hasta 10 días en segundos&lt;br /&gt;
t = linspace(0, t_max, Nt); % Tiempo con pasos mucho más grandes&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Número de términos en la serie&lt;br /&gt;
N_terms = 10;&lt;br /&gt;
&lt;br /&gt;
% Solución de la serie de Fourier&lt;br /&gt;
u = zeros(Nx, Nt);&lt;br /&gt;
for n = 1:N_terms&lt;br /&gt;
    beta_n = (2*n - 1) * pi / (2 * L); % Modificación para condición de Neumann en x=L&lt;br /&gt;
    lambda_n = alpha * beta_n^2; % Parámetro de la ecuación&lt;br /&gt;
    A_n = 2 * (u_amb - u0) * sin(beta_n * L) / (beta_n * L);&lt;br /&gt;
    for i = 1:Nx&lt;br /&gt;
        for j = 1:Nt&lt;br /&gt;
            u(i, j) = u(i, j) + A_n * cos(beta_n * x(i)) * exp(-lambda_n * t(j));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Solución&lt;br /&gt;
u = u_amb - u;&lt;br /&gt;
&lt;br /&gt;
% Crear el objeto VideoWriter para guardar el video&lt;br /&gt;
v = VideoWriter('evolucion_calor_océano.mp4', 'MPEG-4'); % Nombre del archivo y formato&lt;br /&gt;
v.FrameRate = 5; % Velocidad de los cuadros (puedes ajustarlo según lo necesites)&lt;br /&gt;
open(v); % Abrir el objeto para grabar el video&lt;br /&gt;
&lt;br /&gt;
% Crear la figura&lt;br /&gt;
figure;&lt;br /&gt;
colormap hot; % Mapa de calor para mejor visualización&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y capturar cada cuadro&lt;br /&gt;
for j = 1:Nt&lt;br /&gt;
    imagesc(x, [0, L], repmat(u(:, j)', [Nx, 1])); % Representación del perfil de temperatura&lt;br /&gt;
    set(gca, 'YDir', 'normal'); % Mantener el eje y en la dirección correcta&lt;br /&gt;
    xlabel('Distancia (m)');&lt;br /&gt;
    ylabel('Profundidad (m)');&lt;br /&gt;
    title(['Evolución del calor en el océano - t = ', num2str(t(j)/86400, '%.1f'), ' días']);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    &lt;br /&gt;
    % Ajustar la escala de colores dinámicamente&lt;br /&gt;
    caxis([min(u(:)), max(u(:))]); &lt;br /&gt;
    &lt;br /&gt;
    pause(0.2); % Control de la velocidad de la animación&lt;br /&gt;
    &lt;br /&gt;
    % Capturar el cuadro actual y agregarlo al video&lt;br /&gt;
    frame = getframe(gcf); % Capturar el cuadro de la figura&lt;br /&gt;
    writeVideo(v, frame); % Escribir el cuadro en el archivo de video&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cerrar el archivo de video&lt;br /&gt;
close(v); % Finalizar y guardar el archivo de video&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
| [[Archivo:evolucion_calor_océano.gif|550px|center|Primeros 10 términos de la base trigonométrica]]&lt;br /&gt;
|}&lt;br /&gt;
Se puede representar en un mapa de calor la variación de la temperatura del mar en función del tiempo. Proporciona otra perspectiva de como la temperatura converge en tiempo hacia la temperatura ambiente, es decir, la solución estacionaria de la EDP. La interpretación física de esto reside en el hecho de considerar la temperatura ambiente como una fuente de calor inalterable, de forma que la transferencia de calor ocurre del ambiente a nuestro medio, hasta llegar a la solución estacionaria, donde las derivadas parciales respecto a tiempo y posición son 0.&lt;br /&gt;
[[Categoría: EDP]]&lt;br /&gt;
&lt;br /&gt;
[[Categoría: EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Javier Martínez Saiz</name></author>	</entry>

	</feed>