Université des sciences et de la technologie d’Oran - Mohamed Boudiaf
Faculté des mathématiques et d’informatique - Département d’informatique
Fiche TP N°1 en Modélisation et simulation – 1ière année Master 2018/2019
Initiation à Python avec Anaconda/Spyder
Terminez le programme suivant selon le modèle ci-dessous
#Simulation du mouvement d'un pendule
import numpy as np
import [Link] as plt
from IPython import get_ipython as IP
#Utiliser QT pour dessiner dans une fenêtre externe
IP().run_line_magic('matplotlib', 'qt')
###### Initialisations #####################################
pendule={"fil":plt.Line2D((0,0),(0,-50),zorder=1),
"ball":[Link]((0,-50),5,Color='red',zorder=2)} #création du pendule
[Link]().add_line(pendule["fil"]) #Ajouter le fil du pendule au dessin
[Link]().add_patch(pendule["ball"]) #Ajouter la balle du pendule au dessin
[Link]('scaled') #Garder des proportions équilibrées pour les axes
[Link](-100, 100) #Limites de l'axe des x (pour l'affichage)
[Link](-100, 10) #limites de l'axe des y (pour l'affichage)
###### Fonctions ###########################################
#Dessin de la nouvelle position (x,y) de la balle
def redessiner_pendule(x,y):
pendule["fil"].set_xdata((0,x)) #changer la position du fil
pendule["fil"].set_ydata((0,y))
pendule["ball"].center=(x,y) #changer la position de la balle
[Link]() #redessiner la figure
[Link](0.01) #attendre 0.01 seconde
#Calcul de la nouvelle position (x,y) du pendule à l’instant t
def mouvement_pendule(t,a,f,r):
...
return x,y
#Lancement de la simulation
#N'oubliez pas les valeurs par défaut des paramètres de la fonction
def simulation_pendule(a,f,r,duree):
...
#Pour t allant de 0 jusqu'à la durée
#calculer la nouvelle position x,y du pendule selon t
#redessiner la nouvelle position du pendule
###### Début du programme ##################################
simulation_pendule() #Essayez les paramètres par défaut puis d’autres paramètres
[Link]("all") #fermer toutes les figures ouvertes
Soit l’approximation du modèle de mouvement d’un pendule :
𝑇 = 20
𝑡
𝑛 = (2 × 𝑟 + 1) ⁄𝑇
𝑡×𝜋
𝑠 = sin ( )
𝑇
𝑓×𝑠×𝜋
𝑥 = 𝑎 ∗ sin ( )
𝑛
𝑓×𝑠×𝜋
𝑦 = −𝑎 ∗ cos ( )
𝑛
𝑡: 𝑡𝑒𝑚𝑝𝑠 𝑎𝑐𝑡𝑢𝑒𝑙
𝑇: 𝑝é𝑟𝑖𝑜𝑑𝑒
𝑓: 𝑓𝑜𝑟𝑐𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙𝑒
𝑎: 𝑙𝑜𝑛𝑔𝑢𝑒𝑢𝑟 𝑑𝑢 𝑓𝑖𝑙
𝑟: 𝑟é𝑠𝑖𝑠𝑡𝑎𝑛𝑐𝑒
𝑥, 𝑦 𝑙𝑎 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑑𝑒 𝑙𝑎 𝑏𝑎𝑙𝑙𝑒 𝑑𝑢 𝑝𝑜𝑛𝑑𝑢𝑙𝑒 à 𝑙 ′ 𝑖𝑛𝑠𝑡𝑎𝑛𝑡 𝑡
𝑛, 𝑠 𝑑𝑒𝑠 𝑣𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝑖𝑛𝑡𝑒𝑟𝑚é𝑑𝑖𝑎𝑖𝑟𝑒𝑠
Par défaut a=50, f=0.5, r=0.2, durée=500
Terminez le programme suivant selon le modèle ci-dessous
#Simulation du mouvement d'une balle en chute libre
import numpy as np
import [Link] as plt
from IPython import get_ipython as IP
#Utiliser QT pour dessiner dans une fenêtre externe
IP().run_line_magic('matplotlib', 'qt')
###### Initialisations #####################################
ball=[Link]((0,0),5,Color='red') #créer un cercle rouge de rayon 5 en position
(0,0)
[Link]().add_patch(ball) #Ajouter le cercle au dessin
[Link]('scaled') #Garder des proportions équilibrés pour les axes
[Link](-10, 200) #Limites de l'axe des x (pour l'affichage)
[Link](0, 150) #Limites de l'axe des y (pour l'affichage)
###### Fonctions ###########################################
#Dessin de la nouvelle position (x,y) de la balle
def redessiner_ball(x,y):
[Link]=(x,y) #changer la position de la balle
[Link]() #redessiner la figure
[Link](0.01) #attendre 0.01 seconde
#Calcul de la nouvelle position (x,y) de la balle
def mouvement_ball(t,fh,fv,r):
...
return x,y
#Lancement de la simulation
#N'oubliez pas les valeurs par défaut des paramètres de la fonction
def simulation_ball(fh,fv,r,duree):
...
#Pour t allant de 0 jusqu'à la durée
#calculer la nouvelle position x,y de la balle selon t
#redessiner la nouvelle position de la balle
###### Début du programme ##################################
print("simulation1")
#simulez avec une force verticale=2 (le reste par défaut)
simulation_ball(...)
print("simulation2")
#simulez avec une force horizontale=1 et une durée de 400 (le reste par défaut)
simulation_ball(...)
[Link]("all") #fermer toutes les figures ouvertes
Soit l’approximation du modèle de mouvement d’une balle en chute libre :
𝑇 = 20
(𝑟 + 1)𝑡//𝑇
𝑛=
100
250
𝑠 = min(𝑡, )
𝑟
𝑟 × 𝑠2
𝑥 = 𝑓ℎ × (𝑠 − )
500
𝑓𝑣 𝑡×𝜋
𝑦= × |sin( )|
𝑛 𝑇
𝑡: 𝑡𝑒𝑚𝑝𝑠 𝑎𝑐𝑡𝑢𝑒𝑙
𝑇: 𝑝é𝑟𝑖𝑜𝑑𝑒
𝑓𝑣: 𝑓𝑜𝑟𝑐𝑒 𝑣𝑒𝑟𝑡𝑖𝑐𝑎𝑙𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙𝑒
𝑓ℎ: 𝑓𝑜𝑟𝑐𝑒 ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙𝑒
𝑟: 𝑟é𝑠𝑖𝑠𝑡𝑎𝑛𝑐𝑒 𝑑𝑢 𝑠𝑜𝑙
𝑥, 𝑦 𝑙𝑎 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑑𝑒 𝑙𝑎 𝑏𝑎𝑙𝑙𝑒 à 𝑙 ′ 𝑖𝑛𝑠𝑡𝑎𝑛𝑡 𝑡
𝑛, 𝑠 𝑑𝑒𝑠 𝑣𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝑖𝑛𝑡𝑒𝑟𝑚é𝑑𝑖𝑎𝑖𝑟𝑒𝑠
Par défaut fv=0, fh=1.5, r=0.5, durée=200
La valeur absolue est obtenue via la fonction abs()de la bibliothèque numpy.