Diferencia entre revisiones de «Ecuacion del Calor CPP»
De MateWiki
(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]] | ||
| − | === | + | ===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 | |
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()