[Calcul scientifique / technique par Python] Vague "gémissement" et vitesse de groupe, superposition des vagues, visualisation, physique du lycée

introduction

L'intensité du son qui entre dans vos oreilles avec désinvolture peut fluctuer périodiquement. Ce phénomène s'appelle ** "beat" ** ing.

L'origine de ce phénomène est, en prenant une onde unidimensionnelle comme exemple. ** La fréquence d'onde $ k $ et la fréquence angulaire $ \ omega $ sont légèrement différentes, et du fait de la superposition de deux ondes sinusoïdales se déplaçant dans la même direction, la force de l'onde (amplitude) fluctue lentement et périodiquement ** y a-t-il.

Dans un support avec dispersion La fréquence angulaire $ \ omega $ est une fonction de $ k $, et la quantité physique qui caractérise le mouvement de l'onde est ** vitesse du groupe **. Il est important de considérer 80% 9F% E5% BA% A6) $ v_g = \ frac {\ partial \ omega (k)} {\ partial k} $. Ceci se distingue de la vitesse d'onde normale [** vitesse de phase **](vitesse de phase) $ v_p = \ frac {\ omega} {k} $ qui se déplace à travers un milieu uniforme.

** Le phénomène du rugissement s'apprend en physique au lycée, mais il peut être difficile pour les élèves de saisir le phénomène car ils doivent imaginer l'apparition d'ondes variant dans le temps. Par conséquent, dans cet article, nous créons une animation en utilisant la méthode d'animation de matplotlib dans le but d'aider à comprendre le phénomène de bourdonnement. ** **

** Je pense que vous pouvez approfondir votre compréhension du phénomène et de la vitesse du groupe simplement en regardant l'animation montrée dans le résultat. ** </ font>


Contenu

(1) Phénomène de gémissement lorsqu'il n'y a pas de dispersibilité. A ce moment, la vitesse de phase de l'onde et la vitesse de groupe correspondent.

(2) Phénomène de gémissement lorsqu'il y a dispersibilité. La vitesse du groupe ne correspond pas à la vitesse de phase.

(3) Combinez les animations créées en (1) et (2) ci-dessus.


Code (1): Lorsqu'il n'y a pas de décentralisation


"""
Phénomène de gémissement:Pas de dispersibilité

"""

%matplotlib nbagg 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation


fig = plt.figure(figsize = (8, 6))

L, t_max = 6,12
Nx= 240
Nt = 100

delta_x=L/Nx
delta_t=t_max/Nt
xx=list(range(Nx))

a=1
k1= 2*np.pi/(L/10)
omega1=10
phi1=0

k2= (1+0.15)*k1
omega2=(1+0.15)*omega1
phi2=0

u1=np.zeros([Nx,Nt])
u2=np.zeros([Nx,Nt])
utot=np.zeros([Nx,Nt])


xlis=np.zeros([Nx])

for i in range(Nx):
    x = i*delta_x
    xlis[i] = x
    for j in range(Nt):
        t = j*delta_t
        u1[i,j]=a*np.cos(k1*x-omega1*t-phi1)
        u2[i,j]=a*np.cos(k2*x-omega2*t-phi2)
        utot[i,j]= u1[i,j]+u2[i,j]


def update(j,utot,fig_title):
    if j != 0:
        plt.cla()
    plt.ylim(-3, 3)
    plt.xlim(0, L)
    plt.plot( xlis,u1[:,j],  '--', color='red', linewidth = 1)
    plt.plot( xlis,u2[:,j],  '--', color='blue',linewidth = 1)
    plt.plot( xlis,utot[:,j],  '-', color='purple', linewidth =4)

    plt.title(fig_title  + str("{0:.1f}".format(j*delta_t)))

    plt.xlabel('X')
    plt.ylabel('U')
    plt.legend(['u1','u2', 'u1+u2'], loc='upper right')


ani = animation.FuncAnimation(fig,update,fargs = (utot,'Beat: t ='), interval =1, frames = Nt,blit=False)
fig.show()

ani.save("output.gif", writer="imagemagick")


Résultat (1) Aucune dispersibilité

output.gif

Un phénomène de rugissement (un phénomène dans lequel l'amplitude de l'onde composite fluctue périodiquement) est observé. A ce moment, la vitesse de phase et la vitesse de groupe correspondent.

Code (2): Distribué

Étudiez ce qui se passe lorsque des ondes hétérogènes, c'est-à-dire des ondes dispersives, se superposent.

"""
Relation distribuée ω=f(k)S'il y a
"""

%matplotlib nbagg 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure(figsize = (8, 6))


L, t_max = 6,12
Nx= 240
Nt = 100

delta_x=L/Nx
delta_t=t_max/Nt
xx=list(range(Nx))
#X,T = np.meshgrid(x,t)

omega=10
omega0=30

a=1
k1= 2*np.pi/(L/10)

V0= omega/k1

omega1=np.sqrt((V0*k1)**2+omega0**2)
phi1=0

k2= (1+0.15)*k1
omega2=np.sqrt((V0*k2)**2+omega0**2)
phi2=0

u1=np.zeros([Nx,Nt])
u2=np.zeros([Nx,Nt])
utot=np.zeros([Nx,Nt])


xlis=np.zeros([Nx])
for i in range(Nx):
    x = i*delta_x
    xlis[i] = x
    for j in range(Nt):
        t = j*delta_t
        u1[i,j]=a*np.cos(k1*x-omega1*t-phi1)
        u2[i,j]=a*np.cos(k2*x-omega2*t-phi2)
        utot[i,j]= u1[i,j]+u2[i,j]



def update(j,utot,fig_title):
    if j != 0:
        plt.cla()
    plt.ylim(-3, 3)
    plt.xlim(0, L)
    plt.plot( xlis,u1[:,j],  '--', color='red', linewidth = 1)
    plt.plot( xlis,u2[:,j],  '--', color='blue',linewidth = 1)
    plt.plot( xlis,utot[:,j],  '-', color='green', linewidth =4)

    plt.title(fig_title  + str("{0:.1f}".format(j*delta_t)))

    plt.xlabel('X')
    plt.ylabel('U')
    plt.legend(['u1','u2', 'u1+u2'], loc='upper right')


ani = animation.FuncAnimation(fig,update,fargs = (utot,'Beat: t ='), interval =1, frames = Nt,blit=False)
fig.show()

ani.save("output2.gif", writer="imagemagick")


Résultat (2) Dispersible

output2.gif

** Dans ce cas, il y a une différence entre la vitesse du groupe (la vitesse à laquelle l'enveloppe ("groan waveform") se déplace) et la vitesse de phase (la vitesse à laquelle l'onde elle-même se déplace). La "forme d'onde de gémissement" se déplace à la vitesse du groupe et l'onde elle-même se déplace à la vitesse de phase. ** **


Résultat (3): Animation distributive et non distribuée: Comparaison

output3.gif

La différence de mouvement entre dispersible (ligne verte) et non dispersive (ligne violette) est claire.


Addenda

(1) À propos de la relation de distribution utilisée dans cet article

Équation d'onde de corde unidimensionnelle, $\frac{\partial^2 u(x,t)}{\partial t^2} = v^2 \frac{\partial^2 u(x,t)}{\partial x^2} \tag{1} $ Lorsque la force de restauration $ - \ omega_0 ^ 2 u (x, t) \ tag {2} $, qui contient les particules constitutives de la chaîne à chaque position, est ajoutée, l'équation d'onde devient

\frac{\partial^2 u(x,t)}{\partial t^2} = v^2 \frac{\partial^2 u(x,t)}{\partial x^2} -\omega_0^2 u(x,t) \tag{3} Sera. Certaines vibrations qui se produisent dans les matériaux réels suivent une équation similaire (comme les vibrations d'électrons intraatomiques).

La solution de cette équation d'onde est

Comme $ \ omega (k) = (v ^ 2k ^ 2 + \ omega_0 ^ 2) ^ \ frac {1} {2} \ tag {4} $

u(x,t) = a cos(k x-\omega(k)t-\phi \tag{5}

Il se trouve que Dans le contenu (2) de cet article, la relation de dispersion ci-dessus (équation .4) a été utilisée.

(2) Diverses relations de dispersion sont connues dans divers milieux. Laisse moi te donner un exemple.

  • ** Formule de dispersion des ondes voyageant à la surface des eaux profondes **: $ \ omega (k) = \ sqrt (gk + T k ^ 3 / \ rho) \ tag {6} $ (g est l'accélération de gravité, T est La tension superficielle, $ \ rho $ est la densité.

  • ** Système à deux atomes (chaque masse ionique est $ m_1 $ et $ m_2 $) ** ** vibration du réseau ** en considérant uniquement l'interaction la plus proche wiki /% E6% A0% BC% E5% AD% 90% E6% 8C% AF% E5% 8B% 95) distribution: \omega^2(k)= \frac{f}{m_\mu} \left ( 1 \pm \sqrt{1-\frac{4m_\mu^{\, 2}}{m_1m_2} \sin^2{ka} } \right ), \quad \frac{1}{m_\mu}=\frac{1}{m_1} + \frac{1}{m_2}\tag{7}


Les références

[1] Pour la création d'animation, l'article Qiita d'AnchorBlues: Création d'animation flexible utilisant animation.FuncAnimation de matplotlib était utile et facile à comprendre. ..

[2] Pour la vitesse de groupe, par exemple, par Yosuke Nagaoka ["Vibration and Waves"](https://www.amazon.co.jp/%E6%8C%AF%E5%8B%95%E3%81% A8% E6% B3% A2-% E9% 95% B7% E5% B2% A1-% E6% B4% 8B% E4% BB% 8B / dp / 4785320451) a une explication élémentaire et facile à comprendre.

Recommended Posts

[Calcul scientifique / technique par Python] Vague "gémissement" et vitesse de groupe, superposition des vagues, visualisation, physique du lycée
[Calcul scientifique / technique par Python] histogramme, visualisation, matplotlib
[Calcul scientifique / technique par Python] Graphique logistique, visualisation, matplotlib
[Calcul scientifique / technique par Python] Graphique de coordonnées polaires, visualisation, matplotlib
[Calcul scientifique / technique par Python] Exemple de visualisation de champ vectoriel, champ magnétique électrostatique, matplotlib
[Calcul scientifique / technique par Python] Calcul de somme, calcul numérique
Calcul scientifique / technique avec Python] Dessin et visualisation d'isoplans 3D et de leurs vues en coupe à l'aide de mayavi
[Calcul scientifique / technique par Python] Calcul de matrice inverse, numpy
[Calcul scientifique / technique par Python] Dessin de surface courbe 3D, surface, fil de fer, visualisation, matplotlib
[Calcul scientifique / technique par Python] Tracé, visualisation, matplotlib de données 2D lues à partir d'un fichier
[Calcul scientifique / technique par Python] Dessin, visualisation, matplotlib de lignes de contour 2D (couleur), etc.
[Calcul scientifique / technique par Python] Solution numérique d'équations d'ondes unidimensionnelles et bidimensionnelles par méthode FTCS (méthode explicite), équations aux dérivées partielles bi-courbes
[Calcul scientifique / technique par Python] Interpolation spline de troisième ordre, scipy
[Calcul scientifique / technique par Python] Fonctionnement de base du tableau, numpy
[Calcul scientifique / technique par Python] Intégration Monte Carlo, calcul numérique, numpy
[Calcul scientifique / technique par Python] Liste des utilisations des fonctions (spéciales) utilisées en physique en utilisant scipy
[Calcul scientifique et technique par Python] Dessin de figures fractales [Triangle de Shelpinsky, fougère de Bernsley, arbre fractal]
[Calcul scientifique / technique par Python] Solution numérique d'un problème d'oscillateur harmonique unidimensionnel par vitesse Méthode de Berle
[Calcul scientifique / technique par Python] Intégration numérique, loi trapézoïdale / Simpson, calcul numérique, scipy
[Calcul scientifique / technique par Python] Résolution d'équations linéaires simultanées, calcul numérique, numpy
[Calcul scientifique / technique par Python] Marche aléatoire 2D (problème de marche ivre), calcul numérique
[Calcul scientifique / technique par Python] Dérivation de solutions analytiques pour équations quadratiques et cubiques, formules, sympy
[Calcul scientifique / technique par Python] Ajustement par fonction non linéaire, équation d'état, scipy
[Calcul scientifique / technique par Python] Calcul du produit de la matrice par l'opérateur @, python3.5 ou supérieur, numpy
[Calcul scientifique / technique par Python] Résolution d'équations différentielles ordinaires, formules mathématiques, sympy
[Calcul scientifique / technique par Python] Résolution de problèmes de valeurs propres (généralisés) en utilisant numpy / scipy, en utilisant des bibliothèques
[Calcul scientifique / technique par Python] Dessin d'animation de mouvement parabolique avec locus, matplotlib
[Calcul scientifique / technique par Python] Résolution de l'équation différentielle ordinaire du second ordre par la méthode Numerov, calcul numérique
[Calcul scientifique / technique par Python] Tracer, visualiser, matplotlib des données 2D avec barre d'erreur
[Calcul scientifique / technique par Python] Résolution de l'équation de Newton unidimensionnelle par la méthode Runge-Kutta du 4ème ordre
Calcul des indicateurs techniques par TA-Lib et pandas