Bonjour à tous :

Je souhaite créer un programme avec Python 3 dont l'effet est le suivant:
On rentre les paramètres "U" et "f" correspondant à un signal sinusoidal de la forme y = U*cos(2*pi*f*t + b)
"t" est le paramètre temps et b la phase à l'origine, initialement à 0.
"t" correspond à l'abscisse de mon graphique.
"y" correspond à l'ordonnée de mon graphique.

Je souhaite tracer le graphique dans lequel cette sinusoide soit animée, comme une onde.
J'ai donc pensé à faire varier le paramètre "b" au cours du temps.
Avec le programme ci-dessous, j'obtiens plein de graphiques avec au fur du temps, le décalage de la courbe.
Ce qui m'intéresse, c'est avoir à l'écran 1 seul graphique, et voir la courbe qui se déplace.

Je sais qu'il y a un problème dans ma boucle "while". Je ne sais pas comment résoudre ce problème.
Quelqu'un pourrait-il me proposer un script corrigé ? Merci.
Je précise bien que je travaille avec Python 3.

Voici mon script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np
import matplotlib.pyplot as plt
 
 
t = np.linspace(0, 20, 1000)
 
 
print("")
 
print("")   
print("SINUSOIDE EN MOUVEMENT")
print("")  
print("On considère une fonction sinusoïdale d'équation : U*cos(2*pi*f*t + b)") 
print("")
 
U = float(input("Quelle est l'amplitude de votre signal U (en V, et Umax < 10 V) ?"))
 
print("")
f = float(input("Quelle est la fréquence de votre signal f (en Hz) ?"))
b = -np.pi
while b<np.pi:
 
     y = U*np.cos(2*3.14*f*t + b)
 
     plt.plot(t,y)
 
     b = b + 0.05
     plt.grid()
     plt.title("Onde mécanique en mouvement")
     plt.xlabel("Temps en secondes")
     plt.ylabel("Amplitude en Volt")
     plt.show()
     plt.pause(0.05)
     plt.cla()
 
print("C'est FINI !")