Ecuacion del Calor CPP
De MateWiki
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Ecuación del calor. Grupo CPP |
| Asignatura | EDP |
| Curso | 2025-26 |
| Autores | Paula Sánchez
Paula Mellado Clara García-Hoz |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
1 Evolución Datos Iniciales
import numpy as np
import matplotlib.pyplot as plt
# 1. Definimos el dominio
x = np.linspace(-2, 2, 1000)
# Número de modos de Fourier
N = 80
# Fijamos semilla para reproducibilidad
np.random.seed(0)
# 2. Coeficientes aleatorios
# Generamos coeficientes con decaimiento 1/n (Esto permite tener bastante ruido al inicio)
a = np.random.normal(0, 1, N) / np.arange(1, N+1)
b = np.random.normal(0, 1, N) / np.arange(1, N+1)
# 3. Solución de la ecuación del calor
def u(x, t):
resultado = np.zeros_like(x)
for n in range(1, N+1):
modo = a[n-1]*np.cos(n*x) + b[n-1]*np.sin(n*x)
resultado += modo * np.exp(-n**2 * t)
return resultado
# 4. Instantes de tiempo
tiempos = [0, 0.005, 0.02, 0.1]
# 5. Representación gráfica
plt.figure(figsize=(10,6))
for t in tiempos:
plt.plot(x, u(x, t), label=f"t = {t}")
plt.title("Evolución temporal de la solución")
plt.xlabel("x")
plt.ylabel("u(x,t)")
plt.legend()
plt.grid()
plt.show()2 Comportamiento del promedio
import numpy as np
import matplotlib.pyplot as plt
# 1. Definimos el tiempo
t = np.linspace(0.01, 1.2, 1000)
# 2. Modos considerados
n_values = [1, 2, 3, 4]
# Valores esperados de los coeficientes
E_an = [1.0, -0.8, 0.5, -0.3]
# 3. Cálculo del promedio total
esperanza_total = np.zeros_like(t)
plt.figure(figsize=(10, 6))
for i, n in enumerate(n_values):
# Contribución de cada modo
contribucion = E_an[i] * np.exp(-(n**2) * t)
# Sumamos al promedio total
esperanza_total += contribucion
# Dibujamos cada modo
plt.plot(t, contribucion, '--', alpha=0.7,
label=f'Modo n={n}')
# 4. Dibujamos el promedio total
plt.plot(t, esperanza_total, color='black', linewidth=3,
label='Promedio total')
# Línea horizontal en 0
plt.axhline(0, linestyle='-', alpha=0.5)
# 5. Detalles de la gráfica
plt.title('Evolución del promedio en x = 0')
plt.xlabel('t')
plt.ylabel('E[u(0,t)]')
plt.grid(alpha=0.6)
plt.legend()
plt.tight_layout()
plt.show()