Dr. Ricardo Méndez Fragoso $\mathbb{R}i\vec c \hbar$.
En este notebook
se muestran los modos normales de vibración que se obtienen de las soluciones de la ecuación de onda en 2 dimensiones en coordenadas cartesianas. Esta ecuación se utiliza en muchos sistemas lineales con vibraciones en dos dimensiones con forma rectangular como por ejemplo en membranas delgadas de instrumentos musicales. En la página del curso se muestra la forma de obtener la solución para dicha ecuación cuando las condiciones a la frontera son tipo Dirichlet y condiciones iniciales arbitrarias. De esta manera la solución encontrada es:
donde $\omega _{n_x x_y} = \sqrt{ \left(\tfrac{n_x \pi}{L_x} \right)^2 + \left(\tfrac{n_y \pi}{L_y} \right)^2 } v$, $n_x = 1,2,3,...$, $n_y = 1,2,3,...$, y $v$ es la velocidad de propagación de la onda en el medio. Los modos de vibración son la componente espacial de la solución anterior, y ello determina las frecuencias de vibración $\omega _{n_x x_y}$. Los coeficientes $\alpha _{n_x x_y}$ y $\beta _{n_x x_y}$ se determinan con las condiciones iniciales de posición inicial $\Psi(x,y,0)=f(x,y)$ y velocidad inicial $\tfrac{\partial \Psi(x,y,0)}{\partial t}=g(x,y)$ de la siguiente manera:
$$ \alpha _{n_x x_y} = \frac{4}{L_x L_y} \int _0 ^{L_x} \int _0 ^{L_y} f(x,y) \sin \left( \tfrac{n_x \pi}{L_x} x \right) \sin \left( \tfrac{n_y \pi}{L_y} y \right) dy dx $$$$ \beta _{n_x x_y} = \frac{4}{L_x L_y \omega _{n_x x_y}} \int _0 ^{L_x} \int _0 ^{L_y} g(x,y) \sin \left( \tfrac{n_x \pi}{L_x} x \right) \sin \left( \tfrac{n_y \pi}{L_y} y \right) dy dx $$En este notebook se harán las gráficas de los primeros modos normales de vibración. Las bibliotecas que utilizaremos en este notebook son las siguientes:
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
%config InlineBackend.figure_format = 'retina' # solo para pantallas de alta definicion
Las siguiente celda se programa el modo normal con la función modo_nx_ny
. Las otras dos funciones permiten generar las gráficas de dichos modos como una superficie en 3D.
def modo_nx_ny(x,y,nxny):
# nxny es el modo a calcular en forma de lista [n_x,n_y]
Psi = sin(nxny[0]*pi*x)*sin(nxny[1]*pi*y)
return Psi
def mem_3D(X,Y,Z,modo):
# comandos para graficar
fig = figure(figsize=(10, 7))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm,linewidth=0, antialiased=False)
ax.set_zlim(-2, 2.),ax.set_xlabel('Eje $x/L_x$'),ax.set_ylabel('Eje $y/L_y$'),ax.set_zlabel('$\Psi(x,y)$')
fig.colorbar(surf, shrink=0.5, aspect=7, cmap=plt.cm.coolwarm)
fig.suptitle(r"Modo $n_x=$ %d , $n_y=$ %d" %(modo[0],modo[1]) ,fontsize=16)
ax.view_init(50,40)
show()
def mem_3D2(X,Y,Z1,Z2,modos):
# comandos para graficar
fig = figure(figsize=(12, 6))
# superficie 1
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
surf1 = ax1.plot_surface(X, Y, Z1, rstride=1, cstride=1, cmap=plt.cm.coolwarm,linewidth=0, antialiased=False)
ax1.set_zlim(-2, 2.),ax1.set_xlabel('Eje $x/L_x$'),ax1.set_ylabel('Eje $y/L_y$'),ax1.set_zlabel('$\Psi(x,y)$')
ax1.set_title('$n_x = $ %d,$n_y = $ %d' %(modos[0][0],modos[0][1]) ,loc='left')
fig.colorbar(surf1, shrink=0.5, aspect=7, cmap=plt.cm.coolwarm)
# superficie 2
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
surf2 = ax2.plot_surface(X, Y, Z2, rstride=1, cstride=1, cmap=plt.cm.coolwarm,linewidth=0, antialiased=False)
ax2.set_zlim(-2, 2.),ax2.set_xlabel('Eje $x/L_x$'),ax2.set_ylabel('Eje $y/L_y$'),ax2.set_zlabel('$\Psi(x,y)$')
ax2.set_title('$n_x = $ %d,$n_y = $ %d' %(modos[1][0],modos[1][1]) ,loc='left')
fig.colorbar(surf2, shrink=0.5, aspect=7, cmap=plt.cm.coolwarm)
#
fig.suptitle(r"Modos de vibración",fontsize=16)
ax1.view_init(40,40),ax2.view_init(40,40)
show()
A continuación de hace la gráfica del modo fundamental $(1,1)$ donde los ejes se han normalizado como $x/L_x$ y $y/L_y$.
x,y = linspace(0, 1, 200),linspace(0, 1, 200)
X,Y = meshgrid(x, y)
Z = modo_nx_ny(X, Y,[1,1])
mem_3D(X,Y,Z,[1,1])
A continuación se muestran los modos $(1,2)$ y $(2,1)$. Se puede apreciar la aparición de los nodos en cada una de las coordenadas.
modos=[[1,2],[2,1]]
Z2_1 = modo_nx_ny(X, Y,modos[0])
Z1_2 = modo_nx_ny(X, Y,modos[1])
mem_3D2(X,Y,Z2_1,Z1_2,modos)
En la siguiente celda se generan los modos $(1,3)$, $(3,1)$, $(2,3)$, $(3,2)$ y $(3,3)$. Se puede apreciar la aparición de los nodos correspondientes a cada coordenada dependiendo de los números $n_x -1$ para el eje $x$ y $n_y -1$ para el eje $y$.
modos = [[1,3],[3,1],[2,3],[3,2],[3,3]]
Z1_3 = modo_nx_ny(X, Y,modos[0])
Z3_1 = modo_nx_ny(X, Y,modos[1])
Z2_3 = modo_nx_ny(X, Y,modos[2])
Z3_2 = modo_nx_ny(X, Y,modos[3])
Z3_3 = modo_nx_ny(X, Y,modos[4])
mem_3D2(X,Y,Z1_3,Z3_1,[modos[0],modos[1]])
mem_3D2(X,Y,Z2_3,Z3_2,[modos[2],modos[3]])
mem_3D(X,Y,Z3_3,modos[4])
En general, para este tipo de sistemas, los modos de vibración se utilizan para reconstruir cualquier vibración que se produzca en el sistema utilizando las condiciones iniciales.