Diferencia entre revisiones de «Ecuación del calor JC»

De MateWiki
Saltar a: navegación, buscar
 
(No se muestran 16 ediciones intermedias de 2 usuarios)
Línea 3: Línea 3:
 
Javier Martínez }}
 
Javier Martínez }}
  
Hola
+
== 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

Archivo:EDPS POSTER 3.pdf center

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);