Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Python : vecteur vitesse

Posté par
alpha000000
25-02-21 à 17:51

Bonjour,
Je rencontre quelques difficulté par rapport au tracé des vecteurs de vitesse via le programme Python notamment au travail 5,6,8. Voilà mon travail (en rouge ce que j'ai modifié par rapport au programme fourni par notre prof):

Travail 1,2,3 : Tracé des successions successifs du système
Travail 4,5,6 : Tracé des vecteurs vitesses en chaque point
Travail 7,8 : Tracé des vecteurs variation de vitesse en chaque point

#importation du module numpy afin de lire le contenu du fichier csv et simplification en np
import numpy as np
#importation du module matplotlib.pyplot pour construire le graphique et simplification en plt#
import matplotlib.pyplot as plt
import csv

pointage = np.loadtxt("parabol.csv",delimiter=';',skiprows=3) #création d'une grandeur nommée pointage correspondant à l'ensemble des données situées dans le fichier ????.csv séparées par des ";" à partir de la 4 ème ligne #

t=pointage[:,0]
x=pointage[:,1] #lecture des abscisses x issues de la première colonne (notée 0) du fichier csv; les données se retrouveront dans un tableau d'une ligne#
y=pointage[:,2]  #lecture des ordonnées y issues de la deuxième colonne (notée 1) du fichier csv; les données se retrouveront dans un tableau d'une ligne#

vx=[]
vy=[]


print("temps en s:" ,t)
print("Abscisses x en m :",x) #Affichage du commentaire «Abscisses x en m » suivie de la liste des valeurs correspondantes#
print("Ordonnées y en m :",y) #Affichage du commentaire «Ordonnées y en m » suivie de la liste des valeurs correspondantes
print( " vitesse x",vx)
print( " vitesse y",vy)

plt.xlim(min(x)-2*min (x),1.1*max (x))
plt.ylim(min(y)-2*min (y),1.1*max (y))
plt.grid()

""" TRAVAIL 1:
Taper ci-dessous le code Python permettant de diviser la fenêtre d'affichage en 3 et de tracer le prochain graphique dans la première cellule """
plt.subplot(1,3,1)

""" TRAVAIL 2:
taper, à la place des points entre guillemets, les légendes pour les axes, le titre du graphique"""
plt.xlabel('Distance')                      #affiche un commentaire sur l'axe des abscisses#
plt.ylabel('Hauteur')                      #affiche un commentaire sur l'axe des ordonnée#
plt.title('Evolution de la hauteur en fonction de la distance ')                      #affiche le titre#

""" TRAVAIL 3:
Taper ci-dessous le code Python permettant de tracer l'ordonnée du point en fonction de son abscisse. """
plt.scatter(x,y,s=50,c = 'red',marker= '+')


""" TRAVAIL 4:
Recopier ci-dessous les 5 lignes de programme précédentes et effectuer les modifications """
plt.subplot(1,3,2)
plt.xlabel('Distance')                      #affiche un commentaire sur l'axe des abscisses#
plt.ylabel('Hauteur')                      #affiche un commentaire sur l'axe des ordonnée#
plt.title('Tracé des vecteurs vitesses ')                      #affiche le titre#
plt.scatter(x,y,s=50,c = 'red',marker= '+')



""" TRAVAIL 5:
Créer une boucle permettant de calculer les coordonnées du vecteur vitesse en chaque point tant que cela est possible """
for i in range(len(t)-1):
    deltax=( x[i+1]- x[i])/( t[i+1]- x[i])
    deltay=( y[i+1]- y[i])/( y[i+1]- y[i])







""" TRAVAIL 6:
Taper ci-dessous le code python permettant de tracer le vecteur vitesse en chaque point"""
for i in range(len(t)-1):
    plt.quiver(x0, y0, deltax, deltay, angles='xy', scale=1, scale_units='xy')



""" TRAVAIL 7: """



""" TRAVAIL 8:"""


""" fin du travail """

Posté par
gts2
re : Python : vecteur vitesse 25-02-21 à 19:20

Citation :
for i in range(len(t)-1):
    deltax=( x[i+1]- x[i])/( t[i+1]- x[i])
    deltay=( y[i+1]- y[i])/( y[i+1]- y[i])

Deux remarques :
1- vous calculez UNE valeur deltax au point i et vous affectez la même variable deltax pour le point suivant, donc la valeur deltax précédente est perdue.
2- il y a manifestement des fautes de frappe après le /  : cela devrait être t et ni x, ni y.

Citation :
for i in range(len(t)-1):
    plt.quiver(x0, y0, deltax, deltay, angles='xy', scale=1, scale_units='xy')

x0  y0 ne sont pas définis, et à cet endroit du programme vous n'avez qu'UNE valeur de deltax, (la dernière calculée), donc vous tracez tout le temps le même vecteur.

Citation :
print( " vitesse x",vx)
print( " vitesse y",vy)

Vous imprimez quelque chose que vous n'avez pas encore calculé.

Deux solutions :
- vous ne gardez qu'une boucle et vous utilisez le deltax calculé pour tracer immédiatement le vecteur (mais ceci n'est pas cohérent avec les indications Travail 5 6, puisqu'on fait simultanément 5 et 6)
- vous construisez  les listes vx vy en ajoutant dans le travail 5, deltax à vx et deltay à vy. et pour le travail 6, puisque vous avez les listes v x vy, il n'est pas nécessaire de faire une boucle. Par contre x et vx n'ont pas la même dimension, il faudra extraire de x la partie utile.

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 18:48

Citation :

2- il y a manifestement des fautes de frappe après le /  : cela devrait être t et ni x, ni y.


Ha oui c'est vrai pour le t ça sera plutôt :  deltax=( x[i+1]- x[i])/( t[i+1]- t[i])
    deltay=( y[i+1]- y[i])/( t[i+1]- t[i])

Citation :
1- vous calculez UNE valeur deltax au point i et vous affectez la même variable deltax pour le point suivant, donc la valeur deltax précédente est perdue.


Je n'ai pas tellement compris le sens de cette remarque.

Citation :
x0  y0 ne sont pas définis

Effectivement, c'est ce que le programme me renvoie lorsque je l'exécute.

Merci pour votre réponse.

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 19:21

Citation :
Je n'ai pas tellement compris le sens de cette remarque.  (pour deltax)


Supposons pour simplifier qu'on ne calcule que deltax (pas deltay) et qu'il y ait quatre points.

Premier tour : i =0 on calcule en x[0] deltax qui vaut disons 10
Deuxième tour : i =1 on calcule en x[1] deltax qui vaut disons 15
Troisième tour : i =2 on calcule en x[2] deltax qui vaut disons 20

Quand vous sortez deltax=20 et les valeurs 10 et 15 sont définitivement perdues.

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 19:42

C'est plus clair, merci.

Comment y remédier alors ?

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 19:47

J'ai déjà donné la réponse :

Citation :
vous construisez  les listes vx vy en ajoutant dans le travail 5, deltax à vx et deltay à vy.


Autrement dit, on sauvegarde le résultat deltax dans la liste vx en ajoutant l'élément deltax à cette liste par append.

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 19:56

Mon professeur a lui fait ainsi :

""" TRAVAIL 5:
Créer une boucle permettant de calculer les coordonnées du vecteur vitesse en chaque point tant que cela est possible """

for i in  range(len(t)-1):
    vitessex = (x[i+1]-x[i])/(t[i+1]-t[i])
    vx.append(vitessex)
    vitessey = (y[i+1]-y[i])/(t[i+1]-t[i])
    vy.append(vitessey)

""" TRAVAIL 6:
Taper ci-dessous le code python permettant de tracer le vecteur vitesse en chaque point"""

for n in range(len(t)-1) :
    plt.quiver(x[n], y[n], vx[n], vy[n], angles='xy',scale=30, scale_units='xy',color='red')

Je ne sais pas si c'est la même chose (n'étant pas très doué avec ce logiciel) ... Merci infiniment pour votre aide

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 20:16

Citation :
for i in  range(len(t)-1):
    vitessex = (x[i+1]-x[i])/(t[i+1]-t[i])
    vx.append(vitessex)


Ressemble à : "en ajoutant l'élément deltax à cette liste par append."

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 20:18

Qu'est ce qu'un "append" ?

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 20:22

On va prendre un exemple :
vx=[1,5]
vx.append(6)
conduit à vx qui vaut [1,5,6]

append veut dire en anglais joindre à
Ici on joint 6 à vx, ou si vous préférez, on ajoute 6 à la fin de la liste vx

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 20:56

Ok merci, mais du coup je me pose tout de même des questions sur le travail 6 : [

quote] for n in range(len(t)-1) :
    plt.quiver(x[n], y[n], vx[n], vy[n], angles='xy',scale=30, scale_units='xy',color='red')

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 21:00

Quelles questions ?

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 21:17

Citation :
x[n], y[n], vx[n], vy[n]


Pourquoi cela ?

Posté par
gts2
re : Python : vecteur vitesse 26-02-21 à 22:05

plt.quiver(x, y, dx, dy)

Trace le vecteur (dx,dy) au point (x,y)

deltax et x sont des listes pour lesquelles on accède au point i par deltax[i] et x[i] comme vous l'avez déjà fait pour calculer la vitesse.

Posté par
alpha000000
re : Python : vecteur vitesse 26-02-21 à 22:29

Je ne comprends, mon professeur n'a pas utilisé cette notation : "plt.quiver(x, y, dx, dy)
"

Posté par
gts2
re : Python : vecteur vitesse 27-02-21 à 09:08

Quelle différence de notation voyez-vous entre :


plt.quiver(x[n], y[n], vx[n], vy[n], angles='xy',scale=30, scale_units='xy',color='red')
et
plt.quiver(x, y, dx, dy)

C'est la même chose, j'ai juste indiqué les paramètres obligatoires alors que dans votre programme vous avez indiqué des options du type couleur .

Posté par
gts2
re : Python : vecteur vitesse 27-02-21 à 09:29

Et sous la forme :

plt.quiver(1,2,3,4) trace le vecteur (3,4) au point (1,2)

Posté par
alpha000000
re : Python : vecteur vitesse 27-02-21 à 10:24

Citation :
plt.quiver(x[n], y[n], vx[n], vy[n], angles='xy',scale=30, scale_units='xy',color='red')
et
plt.quiver(x, y, dx, dy)


Je n'ai pas compris dans ce cas pourquoi mon prof a mis "x[n], y[n], vx[n], by[n] et dans votre notation, DX et dy

Posté par
gts2
re : Python : vecteur vitesse 27-02-21 à 11:35

x[n] est la coordonnée x du point n et idem pour y vx vy

Vous pouvez écrire si vous voulez en détaillant :

for n in range(len(t)-1) :
    x0= x[n] # abscisse point courant
    y0= y[n]
    deltax = vx[n] # composante x de la vitesse du point courant
    delta y=  vy[n]
    plt.quiver(x0, y0,detax,deltay, angles='xy',scale=30, scale_units='xy',color='red')

Mais à vrai dire, je ne comprends pas trop ce que vous ne comprenez pas.

Posté par
alpha000000
re : Python : vecteur vitesse 27-02-21 à 12:29

Citation :
x[n] est la coordonnée x du point n et idem pour y vx vy


Ok, ça j'ai compris.
Citation :
deltax = vx[n] # composante x de la vitesse du point courant
    delta y=  vy[n]
    plt.quiver(x0, y0,detax,deltay,


Par contre, ça non. Qu'est ce que "delatx" et "deltay" ?
En tout cas, je vous remercie de votre aide

Posté par
gts2
re : Python : vecteur vitesse 27-02-21 à 13:27

Citation :
Qu'est ce que "deltax" et "deltay" ?


C'est juste une notation intermédiaire pour détailler, car je ne voyais pas votre problème.
Si ce n'est pas le x[n] qui pose problème, cela n'a plus d'intérêt.

Comme je disais au-dessus : on aurait pu faire une seule boucle pour utiliser deltax avant qu'il soit perdu et faire qqch du genre :

for i in  range(len(t)-1):
    vitessex = (x[i+1]-x[i])/(t[i+1]-t[i])
    vitessey = (y[i+1]-y[i])/(t[i+1]-t[i])
    plt.quiver(x[i], y[i], vitessex, vitessey, angles='xy',scale=30, scale_units='xy',color='red')

Je ne sais pas si cela vous parle plus, mais cela ne respecte pas le découpage travail 5/travail 6.
  

Posté par
alpha000000
re : Python : vecteur vitesse 27-02-21 à 13:39

Oui effectivement cette dernière notation me parle plus. Mais pourquoi mon professeur a utilisé une scale de 30 ?

Posté par
gts2
re : Python : vecteur vitesse 27-02-21 à 13:46

Pour ce qui est de l'échelle, cela dépend fortement de vos données : l'échelle initiale est définie par l'excursion en x et en y exprimés disons en m, alors que votre vitesse étant en m/s, il faut définir une nouvelle échelle. Pour une même trajectoire de dimension 1mx1m on peut avoir des vitesses de 0,1 m/s ou 10 m/s, il faut donc adopter l'échelle des vitesses je dirai de manière très expérimentale, on laisse l'échelle par défaut, on regarde si les vecteurs sont trop grands ou trop petit et on adapte.

Posté par
alpha000000
re : Python : vecteur vitesse 27-02-21 à 19:23

Citation :
for i in  range(len(t)-1):
    vitessex = (x[i+1]-x[i])/(t[i+1]-t[i])
    vitessey = (y[i+1]-y[i])/(t[i+1]-t[i])
    plt.quiver(x[i], y[i], vitessex, vitessey, angles='xy',scale=30, scale_units='xy',color='red')


Merci pour votre aide, je retiens cette notation qui me semble plus claire.



Mentions légales - Retrouvez cette page sur l'île de la physique - chimie
© digiSchool 2024

Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 237 fiches de physique

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !