Animation pour une onde progressive¶
(code sous licence creative commun CC BY-NC-SA BY Gaëlle Rebolini)
Lancer le notebook sur binder (lent)
Ce programme propose l’animation d’une onde progressive à partir des valeurs:
de l’amplitude
de la période
de la longueur d’onde
(Une fois lancée, patientez un peu pour voir l’animation)
[1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib import animation, rc
# Fonction permettant l'animation d'une onde
# d'amplitude Ymax (en m), de période T (en secondes)
# et de longueur d'onde lamb (en m). L'affichage sur x
# se fait entre 0 et xmax (xmax = 3 longueurs d'onde
# si le paramètre n'est pas fourni)
def onde_progressive(Ymax, T, lamb, xmax=None):
print("Calcul de l'animation en cours, "
"merci de patienter...")
xmin=0
if xmax is None:
xmax=3*lamb
nbx=100
fig=plt.figure(figsize=(12,10))
line = plt.plot([], [],'bo-')
plt.xlim(xmin,xmax)
plt.ylim(-Ymax,Ymax)
plt.grid()
plt.xlabel("x(m)")
plt.ylabel("y(m)")
plt.title("animation : propagation d'une "
"onde le long d'une corde")
def init():
line[0].set_data([], [])
return (line)
def animate(i):
dt=0.03
t=i*dt
x = np.linspace(xmin, xmax, nbx)
y = Ymax*np.cos(2 * np.pi * (x/lamb - t/T))
line[0].set_data(x, y)
return (line)
anim = animation.FuncAnimation(
fig,
animate,
init_func=init,frames=50,
interval=30,
blit=True,
repeat=False)
plt.close()
# lignes de code à remplacer par plt.show()
# sur un éditeur python (spyder...)
rc('animation', html='jshtml')
print("Calcul terminé, affichage en cours de téléchargement...")
return anim
# patience, c'est un peu long à s'afficher...
[2]:
# Utilisation, animation d'une onde d'amplitude
# Ymax=0,2m, de période T=1s et de longueur d'onde
# lamb=0,4m, pour un affichage jusqu'à xmax=2m
onde_progressive(Ymax=0.2, T=1, lamb=0.4, xmax=2)
Calcul de l'animation en cours, merci de patienter...
Calcul terminé, affichage en cours de téléchargement...
[2]: