Diferencia entre revisiones de «Ecuación de ondas. Grupo Eau De Parfum(EDP)»
(→Cambio en condición frontera) |
(→Cambiando datos iniciales) |
||
| Línea 63: | Línea 63: | ||
Procedemos a representar la solución obteniendo: | Procedemos a representar la solución obteniendo: | ||
| + | <syntaxhighlight lang="python"> | ||
| + | import numpy as np | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | # Definimos las funciones iniciales u0(x) y u1(x) | ||
| + | def u0(x): | ||
| + | return np.exp(-100 * (x - 0.5) ** 2) | ||
| + | |||
| + | def u1(x): | ||
| + | return np.zeros_like(x) | ||
| + | |||
| + | # Parámetros | ||
| + | L = 1.0 | ||
| + | c = 1.0 # Velocidad de propagación de las ondas | ||
| + | N = 100 # Número de puntos para el método del trapecio | ||
| + | x = np.linspace(0, L, N) | ||
| + | |||
| + | # Intervalo de tiempo y número de términos de Fourier | ||
| + | T = 2.0 | ||
| + | n_terms = 50 | ||
| + | |||
| + | # Resolución temporal | ||
| + | t_steps = 200 | ||
| + | t = np.linspace(0, T, t_steps) | ||
| + | |||
| + | # Inicialización de u(x,t) | ||
| + | u_xt = np.zeros((N, t_steps)) | ||
| + | |||
| + | # Calculamos la solución para cada tiempo t | ||
| + | for j, tj in enumerate(t): | ||
| + | u_t = np.zeros_like(x) | ||
| + | for n in range(1, n_terms + 1): | ||
| + | # Calculamos los coeficientes A_n y B_n | ||
| + | integrand_f = u0(x) * np.sin(n * np.pi * x / L) | ||
| + | A_n = 2 * np.trapz(integrand_f, x) | ||
| + | |||
| + | integrand_g = u1(x) * np.sin(n * np.pi * x / L) | ||
| + | B_n = 2 / (n * np.pi * c) * np.trapz(integrand_g, x) | ||
| + | |||
| + | # Suma de términos en la serie de Fourier | ||
| + | u_t += (A_n * np.cos(n * np.pi * c * tj) + B_n * np.sin(n * np.pi * c * tj)) * np.sin(n * np.pi * x / L) | ||
| + | u_xt[:, j] = u_t | ||
| + | |||
| + | # Graficamos la solución en diferentes tiempos | ||
| + | plt.figure(figsize=(10, 6)) | ||
| + | for j in range(0, t_steps, t_steps // 10): | ||
| + | plt.plot(x, u_xt[:, j], label=f't={t[j]:.2f}') | ||
| + | |||
| + | plt.xlabel('x') | ||
| + | plt.ylabel('u(x,t)') | ||
| + | plt.title('Desplazamientos transversales de la cuerda') | ||
| + | plt.legend() | ||
| + | plt.show() | ||
| + | |||
| + | # Comprobamos la periodicidad en el tiempo | ||
| + | plt.figure(figsize=(10, 6)) | ||
| + | for i in range(0, N, N // 10): | ||
| + | plt.plot(t, u_xt[i, :], label=f'x={x[i]:.2f}') | ||
| + | |||
| + | plt.xlabel('t') | ||
| + | plt.ylabel('u(x,t)') | ||
| + | plt.title('Periodicidad de la solución en el tiempo') | ||
| + | plt.legend() | ||
| + | plt.show() | ||
| + | </syntaxhighlight> | ||
| − | + | <syntaxhighlight lang="python"> | |
| − | + | import numpy as np | |
| + | import matplotlib.pyplot as plt | ||
| + | from matplotlib.animation import FuncAnimation, PillowWriter | ||
| + | |||
| + | |||
| + | # Graficamos la solución en 3D | ||
| + | X, T = np.meshgrid(x, t) | ||
| + | |||
| + | fig = plt.figure(figsize=(12, 8)) | ||
| + | ax = fig.add_subplot(111, projection='3d') | ||
| + | |||
| + | # Transponemos u_xt para que las dimensiones coincidan con las de X y T | ||
| + | ax.plot_surface(X, T, u_xt.T, cmap='viridis') | ||
| + | |||
| + | ax.set_xlabel('x') | ||
| + | ax.set_ylabel('t') | ||
| + | ax.set_zlabel('u(x,t)') | ||
| + | ax.set_title('Desplazamientos transversales de la cuerda') | ||
| + | |||
| + | plt.show() | ||
| + | </syntaxhighlight> | ||
La gráfica muestra la periodicidad en el tiempo de la solución <math>u(x,t) </math>. La función claramente repite su patrón a medida que <math> t </math> varía, lo que confirma que la solución es periódica en el tiempo con un período de 2. Este período corresponde al término más lento <math> n=1 </math>, ya que <math>\cos(\pi t)</math> tiene un período de 2. | La gráfica muestra la periodicidad en el tiempo de la solución <math>u(x,t) </math>. La función claramente repite su patrón a medida que <math> t </math> varía, lo que confirma que la solución es periódica en el tiempo con un período de 2. Este período corresponde al término más lento <math> n=1 </math>, ya que <math>\cos(\pi t)</math> tiene un período de 2. | ||
Revisión del 19:05 25 may 2024
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Ecuación de Ondas. Grupo Eau De Parfum (EDP) |
| Asignatura | EDP |
| Curso | 2023-24 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
1 Introducción
2 Contexto histórico
La ecuación de onda es una ecuación diferencial en derivadas parciales lineal de segundo orden, crucial para describir la propagación de diversas ondas, como las ondas sonoras, las ondas de luz y las ondas en el agua. Su relevancia se extiende a múltiples campos, incluyendo la acústica, el electromagnetismo, la mecánica cuántica y la dinámica de fluidos. Históricamente, Jean le Rond d'Alembert fue el primero en estudiar el problema de una cuerda vibrante, como las utilizadas en instrumentos musicales, en 1746.
3 Conocimientos previos
En esta sección se van a describir algunos conceptos a tener en cuenta durante todo el trabajo.
-Principio de Huygens: Afirma que cada punto en un frente de onda actúa como una fuente de ondas secundarias que se propagan hacia adelante con la misma velocidad que la propia onda. Estas ondas secundarias se combinan para formar un nuevo frente de onda, que es tangente a todas las ondas secundarias. Es decir, cada punto del frente de onda original puede considerarse como un punto de partida para nuevas ondas que se mueven en la misma dirección que la perturbación inicial. Estas ondas secundarias tienen la misma velocidad y frecuencia que la onda original.
Cabe destacar que vamos a utilizar Series de Furier
4 Ecuación de ondas I
Estamos considerando una cuerda vibrante que se extiende en el intervalo [0,1], con una densidad [math]d[/math] y una tensión constante [math]\tau_0[/math], lo que resulta en una velocidad de propagación [math]c=\frac{\tau_0}{d}=1[/math]. Además suponemos que la cuerda está fija en los extremos y llamamos [math]u_0(x)[/math] y [math]u_1(x)[/math] a su posición e impulso iniciales respectivamente.
El sistema de ecuaciones que modeliza el comportamiento de los desplazamientos transversales de la cuerda es:
[math] \left\{ \begin{aligned} &u_{tt}(x,t) = u_{xx}(x,t) & 0 \lt x \lt 1, t \gt 0, \\ &u(0, t) = u(1, t)=0, & t \gt 0, \\ &u(x, 0) =u_0(x) \\ &u_t(x, 0) = u_1(x), \end{aligned} \right. [/math]
La solución general de la ecuación de ondas empleando separación de variables se puede expresar en términos de la serie de Fourier de las condiciones iniciales [math]u_0(x)[/math], [math]u_1(x)[/math]. La solución tiene la forma
[math]u(x,t)=\sum_{n=1}^{\infty} [A_n \cos(n\pi t)+B_n \sin(n \pi t)]sin(n \pi x) [/math]
Donde los coeficientes [math]A_n[/math] y [math]B_n[/math] se determinan a partir de las condiciones iniciales [math]u_0(x)[/math], [math]u_1(x)[/math].Por lo que la solución completa de a ecuación de ondas para la cuerda vibrante con las condiciones iniciales dadas es:
- [math]u(x,t)=\sum_{n=1}^{\infty}[ (2\int_{0}^{1} u_0(x) \sin(n \pi x) dx) \cos(n \pi t) + (\frac{2}{n\pi} \int_{0}^{1} u_0(x) \sin(n \pi x) dx)\sin(n\pi t)] \sin(n\pi x)[/math]
4.1 Cambiando datos iniciales
Para resolver este problema, primero debemos calcular los coeficientes de Fourier [math] A_n [/math] y [math] B_n [/math] usando los datos iniciales [math] u_0(x)=e^{-100(x-1/2)^2} [/math] y [math] u_1(x)=0 [/math]. Luego, usaremos estos coeficientes para construir la solución aproximada [math] u(x,t) [/math] tomando los primeros 50 términos de la serie.
Los coeficientes de Fourier son:
- [math] A_n = 2 \int_0^1 u_0(x) \sin(n \pi x) \, dx = 2 \int_0^1 e^{-100(x-1/2)^2} \sin(n \pi x) \, dx. [/math]
- [math] B_n = \frac{2}{n \pi} \int_0^1 u_1(x) \sin(n \pi x) \, dx = 0 \quad (\text{porque } u_1(x) = 0). [/math]
Por lo tanto, la solución se simplifica a:
- [math] u(x,t) = \sum_{n=1}^{50} A_n \cos(n \pi t) \sin(n \pi x)=\sum_{n=1}^{50}[2 \int_0^1 u_0(x) \sin(n \pi x) \, dx cos(n \pi t)] \sin(n \pi x) . [/math]
Procedemos a representar la solución obteniendo:
import numpy as np
import matplotlib.pyplot as plt
# Definimos las funciones iniciales u0(x) y u1(x)
def u0(x):
return np.exp(-100 * (x - 0.5) ** 2)
def u1(x):
return np.zeros_like(x)
# Parámetros
L = 1.0
c = 1.0 # Velocidad de propagación de las ondas
N = 100 # Número de puntos para el método del trapecio
x = np.linspace(0, L, N)
# Intervalo de tiempo y número de términos de Fourier
T = 2.0
n_terms = 50
# Resolución temporal
t_steps = 200
t = np.linspace(0, T, t_steps)
# Inicialización de u(x,t)
u_xt = np.zeros((N, t_steps))
# Calculamos la solución para cada tiempo t
for j, tj in enumerate(t):
u_t = np.zeros_like(x)
for n in range(1, n_terms + 1):
# Calculamos los coeficientes A_n y B_n
integrand_f = u0(x) * np.sin(n * np.pi * x / L)
A_n = 2 * np.trapz(integrand_f, x)
integrand_g = u1(x) * np.sin(n * np.pi * x / L)
B_n = 2 / (n * np.pi * c) * np.trapz(integrand_g, x)
# Suma de términos en la serie de Fourier
u_t += (A_n * np.cos(n * np.pi * c * tj) + B_n * np.sin(n * np.pi * c * tj)) * np.sin(n * np.pi * x / L)
u_xt[:, j] = u_t
# Graficamos la solución en diferentes tiempos
plt.figure(figsize=(10, 6))
for j in range(0, t_steps, t_steps // 10):
plt.plot(x, u_xt[:, j], label=f't={t[j]:.2f}')
plt.xlabel('x')
plt.ylabel('u(x,t)')
plt.title('Desplazamientos transversales de la cuerda')
plt.legend()
plt.show()
# Comprobamos la periodicidad en el tiempo
plt.figure(figsize=(10, 6))
for i in range(0, N, N // 10):
plt.plot(t, u_xt[i, :], label=f'x={x[i]:.2f}')
plt.xlabel('t')
plt.ylabel('u(x,t)')
plt.title('Periodicidad de la solución en el tiempo')
plt.legend()
plt.show()import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
# Graficamos la solución en 3D
X, T = np.meshgrid(x, t)
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# Transponemos u_xt para que las dimensiones coincidan con las de X y T
ax.plot_surface(X, T, u_xt.T, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('t')
ax.set_zlabel('u(x,t)')
ax.set_title('Desplazamientos transversales de la cuerda')
plt.show()La gráfica muestra la periodicidad en el tiempo de la solución [math]u(x,t) [/math]. La función claramente repite su patrón a medida que [math] t [/math] varía, lo que confirma que la solución es periódica en el tiempo con un período de 2. Este período corresponde al término más lento [math] n=1 [/math], ya que [math]\cos(\pi t)[/math] tiene un período de 2.
La periodicidad observada es coherente con la naturaleza periódica de las funciones seno y coseno involucradas en la solución de la ecuación de la cuerda vibrante.
4.2 Onda en un solo sentido
Veamos ahora lo que ocurre cuando estudiamos una onda que viaja en un solo sentido, es decir, [math] u(x, t) = f (x − t)[/math]. Que particularizaremos tomando como datos iniciales [math]u_0(x) = f(x)[/math] y [math]u_1(x) = -f'(x)[/math], con [math]f(x)=e^{-100(x-1/2)^2}[/math]. Por tanto el sistema con el que trabajamos es
[math] \left\{ \begin{aligned} &u_{tt}(x,t) = u_{xx}(x,t) & 0 \lt x \lt 1, t \gt 0, \\ &u(0, t) = u(1, t)=0, & t \gt 0, \\ &u(x, 0) =e^{-100(x-1/2)^2} \\ &u_t(x, 0) = 200(x-1/2)e^{-100(x-1/2)^2}, \end{aligned} \right. [/math]
Su solución viene dada mediante el método de separación de variables en términos de los coeficientes de Fourier:
- [math] A_n = 2 \int_0^1 u_0(x) \sin(n \pi x) \, dx = 2 \int_0^1 e^{-100(x-1/2)^2} \sin(n \pi x) \, dx. [/math]
- [math] B_n = \frac{2}{n \pi} \int_0^1 u_1(x) \sin(n \pi x) \, dx =\frac{2}{n \pi} \int_0^1 (200(x-1/2)e^{-100(x-1/2)^2})\sin(n \pi x) \, dx . [/math]
Por lo que la solución completa de la ecuación de ondas para la cuerda vibrante con las condiciones iniciales dadas es:
- [math]u(x,t)=\sum_{n=1}^{\infty}[ ( 2 \int_0^1 e^{-100(x-1/2)^2} \sin(n \pi x) \, dx) \cos(n \pi t) + (\frac{2}{n \pi} \int_0^1 (200(x-1/2)e^{-100(x-1/2)^2})\sin(n \pi x) \, dx)\sin(n\pi t)] \sin(n\pi x)[/math]
La representación gráfica de esta solución es:
GRÁFICAAAAAAAA
4.3 Cambio en condición frontera
Para comprender la diferencia entre las condiciones de frontera Dirichlet y Neumann en la ecuación de ondas, repetiremos el análisis del apartado anterior, esta vez aplicando condiciones de Neumann. En lugar de fijar los valores de la función en los extremos (condiciones de Dirichlet), estableceremos que las derivadas parciales respecto a [math]x[/math] en los extremos sean cero. Es decir, consideramos las condiciones [math] u_x(0,t)=u_x(1,t)=0[/math].
Por tanto nuestro nuevo problema es
[math] \left\{ \begin{aligned} &u_{tt}(x,t) = u_{xx}(x,t) & 0 \lt x \lt 1, t \gt 0, \\ &u_x(0, t) = u_x(1, t)=0, & t \gt 0, \\ &u(x, 0) =e^{-100(x-1/2)^2} \\ &u_t(x, 0) = 200(x-1/2)e^{-100(x-1/2)^2} \end{aligned} \right. [/math]
5 Ecuación de ondas II
En esta sección, abordaremos la resolución de la ecuación de ondas en dimensiones 1, 2 y 3, una tarea que nos permitirá explorar la solución fundamental y, a su vez, comprender el principio de Huygens.
5.1 Soluciones fundamentales para diferentes dimensiones
Comenzamos estudiando la solución fundamental, que surge como respuesta a un impulso inicial localizado en \( x = 0 \). Formalmente, se define mediante límites y funciones características. El objetivo es observar y graficar las soluciones fundamentales en su forma radial para cada dimensión, lo que nos ayudará a comprender mejor la naturaleza de las ondas en diferentes entornos dimensionales.
5.1.1 Solución fundamental en dimensión 1
La solución fundamental en dimensión 1, \( K_1(x, t) \), se define como:
\( K_1(x, t) = \frac{1}{2c} \left[ H(x + ct) - H(x - ct) \right] \)
donde \( H(s) \) es la función de Heaviside, dada por:
\( H(s) = \begin{cases} 0, & \text{si } s < 0 \\ 1, & \text{si } s \geq 0 \end{cases} \)
Dicha función, \( K_1(x, t) \), se compone de dos funciones de Heaviside desplazadas horizontalmente a lo largo del eje \( x \) en \( ct \) y \( -ct \) y luego divididas por \( 2c \). Esto significa que en el intervalo \( (-\infty, -ct) \), \( K_1(x, t) \) es 0, luego aumenta a 1 en el intervalo \( (-ct, ct) \), y finalmente vuelve a 0 en el intervalo \( (ct, \infty) \). La constante \( c \) controla la velocidad de propagación de la onda, que hemos exigido \(1\). Graficamos la función para tener una primera idea intuitiva de la solución fundamental:
[CODIGO-IMAGEN]
Visualmente, la gráfica de \( K_1(x, t) \) parece una función escalón, donde hay un cambio abrupto en el valor de la función en \( x = \pm ct \). Esto refleja la propagación de una onda con velocidad \( c \) a lo largo del eje \( x \). Además, debido a que su valor depende únicamente de la distancia radial desde el origen, es decir, de la magnitud de \( x \), podemos decir que se trata de una función radial y, por tanto, graficarla de esta forma. En la expresión de \( K_1(x, t) \), la variable \( x \) aparece únicamente como \( x \pm ct \), lo que permite su reescritura como \( K_1(r, t) \), donde \( r = |x| \) es la distancia radial.
[CODIGO-GIF]
Al graficar \( K_1(r, t) \) como función de \( r \) para diferentes valores de \( t \), se observa que la forma de la curva es la misma independientemente de la dirección específica en la que nos movamos desde el origen, lo que confirma su carácter radial.
5.1.2 Solución fundamental en dimensión 2
La solución fundamental en dimensión 2, \( K_1(x, t) \), se define como:
\( K_1(x, t) = \frac{1}{2c} \left[ H(x + ct) - H(x - ct) \right] \])
donde \( H(s) \) es la función de Heaviside, dada por:
\( H(s) = \begin{cases} 0, & \text{si } s < 0 \\ 1, & \text{si } s \geq 0 \end{cases} \)
5.2 Solución fundamental del problema en dimensión 2
En particular, nos enfocaremos en la solución del problema en dos dimensiones. Esta solución, obtenida a través de la convolución, nos ofrece una interesante propiedad radial en [math]x[/math]. ¿Qué significa esto y cómo se traduce visualmente? A lo largo de esta resolución, analizaremos cómo varía esta solución en puntos específicos, aprovechando su naturaleza radial y centrándonos en [math]x_1 \gt 0[/math]. Además, exploraremos el concepto de la solución fundamental, que surge al considerar un impulso inicial concentrado en [math]x = 0[/math], delineando su definición matemática y su relevancia en el contexto físico. Con esta premisa, procedamos a abordar la resolución de este fascinante problema.
Para resolver la integral de la función \( u(x,t) \) en coordenadas polares, primero necesitamos reformular la integral en términos de coordenadas polares. La integral original es:
\( u(x,t) = \int_{\mathbb{R}^2} K_2(x-y, t) h(y) \, dy. \)
En coordenadas polares, donde \( x = (r_x \cos \theta_x, r_x \sin \theta_x) \) y \( y = (r_y \cos \theta_y, r_y \sin \theta_y) \), la integral se transforma usando el jacobiano de la transformación polar \( r \, dr \, d\theta \):
\( u(r_x, t) = \int_0^{2\pi} \int_0^{\infty} K_2(r, t, c) h(r \cos(\theta)) r \, dr \, d\theta, \)
donde
\( r = \sqrt{r_x^2 + r_y^2 - 2r_x r_y \cos(\theta)}. \)
5.2.1 Pasos para Transformar la Integral
1. Transformación de Coordenadas:
- Elemento de lista de viñetas: Cambiar las coordenadas cartesianas \( (x,y) \) a coordenadas polares \( (r, \theta) \).
- Las coordenadas \( x \) y \( y \) en polares se expresan como \( x = (r_x \cos \theta_x, r_x \sin \theta_x) \) y \( y = (r_y \cos \theta_y, r_y \sin \theta_y) \).
2. Calcular el Jacobiano:
- La transformación a coordenadas polares introduce un factor adicional \( r \) en el diferencial del área, es decir, \( dx \, dy = r \, dr \, d\theta \).
3. Reformular la Integral:
- Sustituir las variables y el jacobiano en la integral original: \( u(r_x, t) = \int_0^{2\pi} \int_0^{\infty} K_2(r, t, c) h(r \cos(\theta)) r \, dr \, d\theta. \)
4. Expresar \( r \):
- Expresar la distancia \( r \) en términos de \( r_x \) y \( r_y \): \( r = \sqrt{r_x^2 + r_y^2 - 2r_x r_y \cos(\theta)}. \)
Esta reformulación permite evaluar la integral original en coordenadas polares, facilitando el cálculo en situaciones donde la simetría radial simplifica la solución.
