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