示例#1
0
def corde_de_melde(base_name,w=1,k=1,L=1,A=0.1,tmax=10,N=1000,ylim=None):
    """ 
    Produit un film (base_name + '_film.mpeg') d'une corde de Melde de 
    longueur L, fixée à droite et excitée à gauche par un moteur de pulsation 
    w imposant la propagation d'une onde d'amplitude de nombre d'onde k en 
    observant les réflexions régulière de l'onde jusqu'au temps tmax sur un 
    total de N images. Si ylim est précisé, il contiendra les limites 
    verticales, sinon c'est matplotlib qui décidera, ce qui déclenchera une 
    adaptation progressive de l'amplitude.
    """
    t = np.linspace(0,tmax,N)  # Échantillonnage en temps
    for i,ti in enumerate(t):  # On les prends l'un après l'autre
        print(ti)              # Un peu de feedback
        fichier = base_name + '{:04d}'.format(i) # Nom du fichier
        fait_corde(ti,file=fichier,w=w,k=k,L=L,A=A,ylim=ylim) # Dessin de la corde
    film.make_film(base_name)  # Fabrication du film à la fin
示例#2
0
def corde_de_melde(base_name,
                   w=1,
                   k=1,
                   L=1,
                   A=0.1,
                   tmax=10,
                   N=1000,
                   ylim=None):
    """ 
    Produit un film (base_name + '_film.mpeg') d'une corde de Melde de 
    longueur L, fixée à droite et excitée à gauche par un moteur de pulsation 
    w imposant la propagation d'une onde d'amplitude de nombre d'onde k en 
    observant les réflexions régulière de l'onde jusqu'au temps tmax sur un 
    total de N images. Si ylim est précisé, il contiendra les limites 
    verticales, sinon c'est matplotlib qui décidera, ce qui déclenchera une 
    adaptation progressive de l'amplitude.
    """
    t = np.linspace(0, tmax, N)  # Échantillonnage en temps
    for i, ti in enumerate(t):  # On les prends l'un après l'autre
        print(ti)  # Un peu de feedback
        fichier = base_name + '{:04d}'.format(i)  # Nom du fichier
        fait_corde(ti, file=fichier, w=w, k=k, L=L, A=A,
                   ylim=ylim)  # Dessin de la corde
    film.make_film(base_name)  # Fabrication du film à la fin
for xi,vi in zip(x0,v0):          # Itération sur les conditions initiales
    print(xi,vi)                  # Un peu de feedback
    sol = sp.integrate.odeint(landau,[xi,vi],t) # On intègre
    x.append(sol[:,0])            # et on stocke à la fois les positions
    v.append(sol[:,1])            # et les vitesses

fig = plt.figure(figsize=(10,10)) # Création de la figure

vlim = (np.min(v),np.max(v))      # Limites verticales (horizontales imposées par les CI)
base_name='PNG/M4_oscillateur_de_landau_tilte_portrait_de_phase'

for i,ti in enumerate(t):         # On regarde à chaque instant d'intégration
    print(ti)                     # Un peu de feedback
    xi = [xp[:i+1] for xp in x]   # On stocke l'avancement
    vi = [vp[:i+1] for vp in v]   # jusqu'à l'instant présent
    plt.suptitle('Oscillateur de Landau tilte, $t={}$'.format(round(ti,2)))
    plt.subplot(2,1,1)            # Première sous-figure
    portrait_de_phase(xi,vi,fantome=50,clearfig=False,color=colors,ylim=vlim)
    plt.xlabel('')
    plt.subplot(2,1,2)            # Seconde sous-figure
    diagramme_energetique(xi,vi,Em,color=colors,clearfig=False,fantome=50)
    plt.savefig('{}_{:04d}.png'.format(base_name,i))
    plt.clf()

from film import make_film        # Boîte à outil visuelle

make_film(base_name)              # et fabrication du film correspondant



示例#4
0
    x = np.linspace(0, 1, 100)
    plt.plot(x, f(x, k), 'k', linewidth=2)
    plt.plot(x, x, 'k', linewidth=2)
    plt.plot(double[1:-1], double[2:])
    plt.title('$k={:.4f}$'.format(k))
    araignee.savefig(base_name + '_{}_{:04d}'.format(suffix, i))
    plt.close(araignee)


fig = plt.figure()  # Initialisation de la figure principale
feigenbaum = fig.gca()  # Récupération de "l'axe"

k_list = np.linspace(kmin, kmax, nb_points)

for i, k in enumerate(k_list):  # Pour toutes les valeurs de la liste des k
    avant, dans = get_cycle(k, u0)  # on récupère le cycle et on l'affiche
    feigenbaum.plot([k] * len(dans), dans, '.k', markersize=1)
    graphique_araignee(avant, k, i)  # Fabrication du graphique "en araignée"
    graphique_araignee(dans, k, i, 'apres')

if ylim: feigenbaum.set_ylim(ylim)  # Rajout des limites verticales
feigenbaum.set_xlim(kmin, kmax)  # et horizontales de la figure principale
feigenbaum.set_title('Figuier de Feigenbaum')
feigenbaum.set_xlabel('$k$')
feigenbaum.set_ylabel('$x$ limite')
fig.savefig('PNG/misc_feigenbaum.png')  # Sauvegarde

# Reste à faire les petits films correspondants aux graphes en araignées
film.make_film(base_name + '_avant')
film.make_film(base_name + '_apres', PNM='PPM')
base_name = 'PNG/M4_pendule_simple_portrait_de_phase_zoom'

for i, ti in enumerate(t):  # Affichage progressif
    print(ti)  # Un peu de feed back
    thi = [th_p[:i + 1] for th_p in th]  # On ne prend que jusqu'�
    thpi = [thp_p[:i + 1] for thp_p in thp]  # l'instant présent
    plt.suptitle('Pendule simple, $t={}$'.format(round(ti, 2)))
    plt.subplot(2, 1, 1)  # Sous-figure du haut
    portrait_de_phase(thi,
                      thpi,
                      fantome=20,
                      clearfig=False,
                      color=colors,
                      xlim=th_lim,
                      ylim=thp_lim)
    plt.xlabel('')
    plt.subplot(2, 1, 2)  # Sous-figure du bas
    diagramme_energetique(thi,
                          thpi,
                          Em,
                          color=colors,
                          clearfig=False,
                          fantome=20,
                          xlim=th_lim)
    plt.savefig('{}_{:04d}.png'.format(base_name, i))
    plt.clf()  # Nettoyage

from film import make_film  # Boîte à outil pour faire un film

make_film(base_name)  # et appel effectif
x2  = 5                              # Position de la deuxième source (première en 0)
xmin,xmax = 0,x2                     # Limites de la fenêtre d'échantillonnage
nb_points = 1000                     # Nombre de points d'échantillonnage
phi = np.pi/2                        # Déphasage de la deuxième source
tmin,tmax = 0,60                     # L'intervalle de temps d'étude
dt = 0.1                             # Incrément de temps

base_name = 'PNG/S03_ondes_stationnaires'

t = tmin
i = 0
while t < tmax:                      # On commence la boucle temporelle
    print(t)                         # Un peu de feedback
    x = np.linspace(xmin,xmax,nb_points) # Échantillonnage horizontal
    S1= source(x,t,0)                # Effet de la première source
    S2= source(x,t,x2,phi)           # Effet de la seconde source
    S =  S1+S2                       # Effet résultant
    plt.plot(x,S1,alpha=0.5)         # Affichage première source (bleu)
    plt.plot(x,S2,alpha=0.5)         # Affichage seconde source (vert)
    plt.plot(x,S,'k',linewidth=2)    # Affichage résultante (noir)
    plt.ylim(-2,2)                   # On contraint l'échelle verticale
    plt.savefig(base_name + '_{:04d}.png'.format(i)) # Sauvegarde
    plt.clf()                        # Nettoyage
    i+= 1                            # et incrémentation
    t+=dt                            # des compteurs

film.make_film(base_name)  # Fabrication du film à la fin



示例#7
0
fig = plt.figure(figsize=(10, 10))  # Création de la figure

# Limites verticales (horizontales imposées par les CI)
vlim = (np.min(v), np.max(v))
base_name = 'PNG/M4_oscillateur_de_landau_portrait_de_phase'

for i, ti in enumerate(t):  # On regarde à chaque instant d'intégration
    print(ti)  # Un peu de feedback
    xi = [xp[:i + 1] for xp in x]  # On stocke l'avancement
    vi = [vp[:i + 1] for vp in v]  # jusqu'à l'instant présent
    plt.suptitle('Oscillateur de Landau, $t={}$'.format(round(ti, 2)))
    plt.subplot(2, 1, 1)  # Première sous-figure
    portrait_de_phase(xi,
                      vi,
                      fantome=50,
                      clearfig=False,
                      color=colors,
                      ylim=vlim)
    plt.xlabel('')
    plt.subplot(2, 1, 2)  # Seconde sous-figure
    diagramme_energetique(xi, vi, Em, color=colors, clearfig=False, fantome=50)
    plt.savefig('{}_{:04d}.png'.format(base_name, i))
    plt.clf()

from film import make_film  # Boîte à outil visuelle

make_film(base_name)  # et fabrication du film correspondant

os.system("pause")
示例#8
0
    plt.plot(double[1:-1],double[2:])
    plt.title('$k={:.4f}$'.format(k))
    araignee.savefig(base_name + '_{}_{:04d}'.format(suffix,i))
    plt.close(araignee)

fig = plt.figure()                # Initialisation de la figure principale
feigenbaum = fig.gca()            # Récupération de "l'axe"

k_list = np.linspace(kmin,kmax,nb_points)

for i,k in enumerate(k_list):     # Pour toutes les valeurs de la liste des k
    avant,dans = get_cycle(k,u0)  # on récupère le cycle et on l'affiche
    feigenbaum.plot([k]*len(dans),dans,'.k',markersize=1)
    graphique_araignee(avant,k,i) # Fabrication du graphique "en araignée"
    graphique_araignee(dans,k,i,'apres') 

if ylim: feigenbaum.set_ylim(ylim)# Rajout des limites verticales 
feigenbaum.set_xlim(kmin,kmax)    # et horizontales de la figure principale
feigenbaum.set_title('Figuier de Feigenbaum')
feigenbaum.set_xlabel('$k$')
feigenbaum.set_ylabel('$x$ limite')
fig.savefig('PNG/misc_feigenbaum.png') # Sauvegarde


# Reste à faire les petits films correspondants aux graphes en araignées
film.make_film(base_name + '_avant')
film.make_film(base_name + '_apres',PNM='PPM')



示例#9
0
                      xlim=th_lim)
    plt.xlabel('')
    plt.subplot(2, 1, 2)  # Sous-figure du bas
    diagramme_energetique(thi,
                          thpi,
                          Em,
                          color=colors,
                          clearfig=False,
                          fantome=20,
                          xlim=th_lim)
    plt.savefig('{}_{:04d}.png'.format(base_name, i))
    plt.clf()  # Nettoyage

from film import make_film  # Boîte à outil pour faire un film

make_film(base_name)  # et appel effectif

# On peut aussi regarder juste sur juste 2pi d'intervalle, avec les mêmes
# résultats

for theta in th:  # On sait que theta est déjà entre -3pi et 3pi
    theta[theta > np.pi] = theta[theta > np.pi] - 2 * np.pi
    theta[theta < -np.pi] = theta[theta < -np.pi] + 2 * np.pi

fig = plt.figure(figsize=(10, 10))  # Définition de la figure

th_lim = (np.min(th), np.max(th))  # Nouvelles limites en theta
base_name = 'PNG/M4_pendule_simple_portrait_de_phase_2pi'

for i, ti in enumerate(t):  # On regarde à chaque instant
    print(ti)  # Un peu de feedback
    sol = sp.integrate.odeint(pendule, [thi, thpi], t)  # Intégration
    th.append(sol[:, 0])          # Ajout des positions
    thp.append(sol[:, 1])         # et vitesses correspondantes

fig = plt.figure(figsize=(10, 10))  # Création de la figure

th_lim = (np.min(th), np.max(th))  # Limites en theta
thp_lim = (np.min(thp), np.max(thp))  # Limites en theta point
base_name = 'PNG/M4_pendule_simple_portrait_de_phase_zoom'

for i, ti in enumerate(t):        # Affichage progressif
    print(ti)                    # Un peu de feed back
    thi = [th_p[:i + 1] for th_p in th]    # On ne prend que jusqu'à
    thpi = [thp_p[:i + 1] for thp_p in thp]  # l'instant présent
    plt.suptitle('Pendule simple, $t={}$'.format(round(ti, 2)))
    plt.subplot(2, 1, 1)           # Sous-figure du haut
    portrait_de_phase(thi, thpi, fantome=20, clearfig=False,
                      color=colors, xlim=th_lim, ylim=thp_lim)
    plt.xlabel('')
    plt.subplot(2, 1, 2)           # Sous-figure du bas
    diagramme_energetique(thi, thpi, Em, color=colors,
                          clearfig=False, fantome=20, xlim=th_lim)
    plt.savefig('{}_{:04d}.png'.format(base_name, i))
    plt.clf()                    # Nettoyage

from film import make_film       # Boîte à outil pour faire un film

make_film(base_name)             # et appel effectif

os.system("pause")
示例#11
0
    return res


x2 = 5  # Position de la deuxième source (première en 0)
xmin, xmax = 0, x2  # Limites de la fenêtre d'échantillonnage
nb_points = 1000  # Nombre de points d'échantillonnage
phi = np.pi / 2  # Déphasage de la deuxième source
tmin, tmax = 0, 60  # L'intervalle de temps d'étude
dt = 0.1  # Incrément de temps

base_name = 'PNG/S03_ondes_stationnaires'

t = tmin
i = 0
while t < tmax:  # On commence la boucle temporelle
    print(t)  # Un peu de feedback
    x = np.linspace(xmin, xmax, nb_points)  # Échantillonnage horizontal
    S1 = source(x, t, 0)  # Effet de la première source
    S2 = source(x, t, x2, phi)  # Effet de la seconde source
    S = S1 + S2  # Effet résultant
    plt.plot(x, S1, alpha=0.5)  # Affichage première source (bleu)
    plt.plot(x, S2, alpha=0.5)  # Affichage seconde source (vert)
    plt.plot(x, S, 'k', linewidth=2)  # Affichage résultante (noir)
    plt.ylim(-2, 2)  # On contraint l'échelle verticale
    plt.savefig(base_name + '_{:04d}.png'.format(i))  # Sauvegarde
    plt.clf()  # Nettoyage
    i += 1  # et incrémentation
    t += dt  # des compteurs

film.make_film(base_name)  # Fabrication du film à la fin
    thi = [th_p[:i + 1] for th_p in th]    # On ne prend que jusqu'à
    thpi = [thp_p[:i + 1] for thp_p in thp]  # l'instant présent
    plt.suptitle('Pendule simple, $t={}$'.format(round(ti, 2)))
    plt.subplot(2, 1, 1)           # Sous-figure du haut
    portrait_de_phase(thi, thpi, fantome=20, clearfig=False,
                      color=colors, xlim=th_lim)
    plt.xlabel('')
    plt.subplot(2, 1, 2)           # Sous-figure du bas
    diagramme_energetique(thi, thpi, Em, color=colors,
                          clearfig=False, fantome=20, xlim=th_lim)
    plt.savefig('{}_{:04d}.png'.format(base_name, i))
    plt.clf()                    # Nettoyage

from film import make_film       # Boîte à outil pour faire un film

make_film(base_name)             # et appel effectif


# On peut aussi regarder juste sur juste 2pi d'intervalle, avec les mêmes
# résultats

for theta in th:  # On sait que theta est déjà entre -3pi et 3pi
    theta[theta > np.pi] = theta[theta > np.pi] - 2 * np.pi
    theta[theta < -np.pi] = theta[theta < -np.pi] + 2 * np.pi

fig = plt.figure(figsize=(10, 10))  # Définition de la figure

th_lim = (np.min(th), np.max(th))  # Nouvelles limites en theta
base_name = 'PNG/M4_pendule_simple_portrait_de_phase_2pi'

for i, ti in enumerate(t):        # On regarde à chaque instant
示例#13
0
    # et celle de la droite
    ax3= plt.subplot2grid((3,3),(0,2),rowspan=2,sharey=ax1)
    plt.xlabel('Intensite')
    plt.xlim((0,vmax**2))
    plt.title('Section $x={}$'.format(xcut))
    plt.plot((source(xcut,y,t,-pos,0)+source(xcut,y,t,pos,0,phi))**2,y)
    plt.savefig(base_name + '_{:04d}.png'.format(i))
    plt.close()

# Ne reste plus qu'à rassembler en un fichier mpeg à l'aide de convert puis de 
# ppmtoy4m et mpeg2enc (paquet mjpegtools à installer sur la machine)

from film import make_film

make_film(base_name,resize="700x500")

#import os
#
#cmd = '(for f in ' + base_name + '*png ; '
#cmd+= 'do convert -density 100x100 $f -depth 8 -resize 700x500 PNM:- ; done)'
#cmd+= ' | ppmtoy4m -S 420mpeg2'
#cmd+= ' |  mpeg2enc -f1 -b 12000 -q7 -G 30 -o {}film.mpeg'.format(base_name)
#
#print("Execution de la commande de conversion")
#print(cmd)
#os.system(cmd)
#print("Fin de la commande de conversion")


示例#14
0
    # et celle de la droite
    ax3= plt.subplot2grid((3,3),(0,2),rowspan=2,sharey=ax1)
    plt.xlabel('Intensite')
    plt.xlim((0,vmax**2))
    plt.title('Section $x={}$'.format(xcut))
    plt.plot((source(xcut,y,t,-pos,0)+source(xcut,y,t,pos,0,phi))**2,y)
    plt.savefig(base_name + '_{:04d}.png'.format(i))
    plt.close()

# Ne reste plus qu'à rassembler en un fichier mpeg à l'aide de convert puis de 
# ppmtoy4m et mpeg2enc (paquet mjpegtools à installer sur la machine)

from film import make_film

make_film(base_name,resize="700x500")

#import os
#
#cmd = '(for f in ' + base_name + '*png ; '
#cmd+= 'do convert -density 100x100 $f -depth 8 -resize 700x500 PNM:- ; done)'
#cmd+= ' | ppmtoy4m -S 420mpeg2'
#cmd+= ' |  mpeg2enc -f1 -b 12000 -q7 -G 30 -o {}film.mpeg'.format(base_name)
#
#print("Execution de la commande de conversion")
#print(cmd)
#os.system(cmd)
#print("Fin de la commande de conversion")