Ecuacion del Calor CPP

De MateWiki
Saltar a: navegación, buscar
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


Cpp.jpeg

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