Diferencia entre revisiones de «Ecuacion del Calor CPP»

De MateWiki
Saltar a: navegación, buscar
(Página creada con «{{ TrabajoED | Ecuación del calor. Grupo CPP| EDP|2025-26 | Paula Sánchez Paula Mellado Clara García-Hoz}} Archivo: cpp...»)
 
(EV)
 
Línea 7: Línea 7:
 
[[Archivo: cpp.jpeg||800px]]
 
[[Archivo: cpp.jpeg||800px]]
  
=== Dispersión de partículas ===
+
===Evolución Datos Iniciales ===
  
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
  
 +
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()
  
  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
===Comportamiento del promedio  ===
 +
 +
 +
<syntaxhighlight lang="python">
 +
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()
 +
 +
 +
</syntaxhighlight>
  
  
 
[[Categoría:EDP]]
 
[[Categoría:EDP]]
 
[[Categoría:EDP25/26]]
 
[[Categoría:EDP25/26]]

Revisión actual del 10:36 13 abr 2026

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