• Aucun résultat trouvé

3. Tracer des courbes avec python

N/A
N/A
Protected

Academic year: 2021

Partager "3. Tracer des courbes avec python"

Copied!
7
0
0

Texte intégral

(1)

3. Tracer des courbes avec python

1

Pour tracer des courbes sous python, plusieurs librairies existent. L’une des plus pratiques et utilisées est matplolib.

Cette librairie est accessible après avoir importé le module pylab.

Pour tracer des courbes2, on utilise l’instruction plot. Pour afficher les figures, on utilise l’instruction show().

Exemple 1 :

from pylab import * x=[1,2,3]

y=[4,5,6]

plot(x,y) show()

Ce programme donne :

Application :

Tracer la courbe représentative de l’équation

t

y(t)y .(1 e )f avec yf5 et

0,1s

sur

0;7.

avec 200 points.

Définition des axes :

Pour définir les domaines des axes, on peut utiliser les instructions xlim(xmin,xmax) et ylim(ylim,ymax)

Exemple 2 :

from pylab import * from math import *

t=[i for i in range(100)]

y=[sin(t[i]/10) for i in t ]

xlim(-1,101) ylim(-1.5,1.5) plot(t,y) show()

Ce programme donne :

Mettre un titre à une figure, une légende et nommer les axes :

On utilise l’instruction title() pour rajouter un titre, l’instruction legend() pour rajouter une légende (il faut obligatoirement utiliser label pour que la légende soit correctement écrite), et les instructions xlabel() et ylabel() pour rajouter un titre aux axes.

Exemple 3 : Tracé de

t

100 t

y(t) e .sin( ) 10

 sur

0;100

1 Ce tutoriel n’est absolument pas complet, et présente une manière de tracer des courbes parmi une multitude. La version de python utilisée est 3.3.5 .

2 Les « courbes » tracées sont en fait des segments de droites dont les extrémités sont définies par les éléments successifs d’une liste.

(2)

from pylab import * from math import * t=[i for i in range(100)]

y=[exp(-i/100)*sin(t[i]/10) for i in t ] xlim(-1,101)

ylim(-1.5,1.5)

title("une sinusoïde amortie") xlabel("temps en secondes") ylabel(" y(t) en mètre") plot(t,y,label="y(t)") legend()

show()

Ce programme donne :

Affichage de plusieurs courbes : Exemple 4 :

from pylab import * from math import * t=[]

x=[]

y=[]

for i in range(101):

t.append(i/100)

x.append(sin(t[i]*10)) y.append(cos(t[i]*10)) ylim(-1.5,1.5)

plot(t,x,label="sin(t)") plot(t,y,label="cos(t)") legend()

xlabel("temps en secondes")

title(" sin(t/10) et cos(t/10)")

show()

Ce programme donne :

Donner du style aux courbes :

Il est possible de changer la couleur des courbes, le style des courbes, le symbole des courbes (ou marqueur (« marker »)), et la largeur des courbes.

Exemple 5:

from pylab import * from math import * t=[]

x=[]

y=[]

for i in range(101):

t.append(i/100)

x.append(sin(t[i]*10)) y.append(cos(t[i]*10)) ylim(-1.5,1.5)

plot(t,x,'c--v',label="sin(t)")

plot(t,y,'r-s',label="cos(t)",linewidth=4)

(3)

legend()

xlabel("temps en secondes") title(" sin(t/10) et cos(t/10)") grid()#permet d’ajouter une grille show()

Ce programme donne :

Voici l’ensemble des caractères utilisables pour la personnalisation des courbes.

Chaîne Effet

‘-‘ solid line style

‘--‘ dashed line style

‘-.’ dash-dot line style

‘:’ dotted line style

‘.’ point marker

‘,’ pixel marker

‘o’ circle marker

‘v’ triangle_down marker

‘^’ triangle_up marker

‘<’ triangle_left marker

‘>’ triangle_right marker

‘1’ tri_down marker

‘2’ tri_up marker

‘3’ tri_left marker

‘4’ tri_right marker

‘s’ square marker

‘p’ pentagon marker

‘*’ star marker

‘h’ hexagon1 marker

‘H’ hexagon2 marker

‘+’ plus marker

‘x’ x marker

‘D’ diamond marker

(4)

Chaîne Effet

‘d’ thin_diamond marker

‘|’ vline marker

‘_’ hline marker

Pour les couleurs :

Chaîne Couleur

‘b’ blue

‘g’ green

‘r’ red

‘c’ cyan

‘m’ magenta

‘y’ yellow

‘k’ black

‘w’ white

Donner une échelle commune à ses axes :

Considérons un programme visant à tracer un cercle. L’équation paramétrique d’un cercle est :

 

x(t) cos(t) y(t) sin(t) t 0;2

 

Exemple 6 :

from pylab import * from math import * n=100

t=[i*2*pi/(n-1) for i in range(n)]

x=[]

y=[]

for i in range(n):

x.append(cos(t[i])) y.append(sin(t[i]))

xlim(-1.5,1.5) ylim(-1.5,1.5) plot(x,y) show()

Ce programme donne :

(5)

Le programme est correct, mais la courbe affichée ressemble à une ellipse. Ce problème vient de l’échelle différente en x et y : la distance entre deux graduations successives n’est pas identique suivant l’axe x ou y. Pour y remédier, on insert l’instruction axis(‘equal’). En reprenant le programme précédent et en ajoutant cette instruction avant xlim et ylim., on a :

Tracé de diagrammes de Bode :

Pour la suite on étudie le tracé du diagramme de Bode de la fonction de transfert suivante :

H( p) K

1 Tp

 avec K10 et T0,5s Soit GdB( w) le gain en décibel et ( w) la phase.

On veut tracer cette fonction pour

0,01;1000

.

Commençons par définir une fonction qui renvoie une liste de points tels qu’il y en ait n entre chaque décade, c'est-à-dire n dans

0,01;0,1

, n dans

0,1;1

, …,

équidistants dans une décade : from pylab import *

from math import * def puls(n):

nbdecade=5 t=[]

for i in range(nbdecade):

for j in range(n):

t.append(0.1*(j+1)*pow(10,i)/n) return t

De plus, on a :

 

 

GdB( w) 20.logK 20.log 1 T . 2

( w) arctan T

  

 

 

On créé donc les listes pour le gain et la phase. Pour n=10 par exemple, on rajoute les lignes suivantes :

K=10 T=0.5 n=10

gdb=[20*log10(K)-20*log10(sqrt(1+pow(T*puls(n)[i],2))) for i in range(len(puls(n)))]

phi=[-atan(T*puls(n)[i])*180/pi for i in range(len(puls(n)))]

Traçons tout d’abord le gain. Le tracé nécessite une échelle logarithmique en abscisse uniquement, on utilise l’instruction semilogx()1

On rajoute donc les lignes suivantes :

semilogx(puls(n),gdb) xlim(0.001,10000) ylim(-40,25)

1 Pour tracé semi logarithmique en y on utilise semilogy() et pour un tracé log-log on utilise loglog()

(6)

grid('on',which='both') #permet de tracé le quadrillage ‘fin’

show()

Ce programme donne :

Pour la phase, en suivant le même principe on obtient :

Usuellement, il est commode de tracer ces deux graphiques, les uns en dessous des autres. Matplolib offre la possibilité de tracer plusieurs courbes, sur des graphes différents, associés à une même fenêtre.

Tracer plusieurs graphes dans une même fenêtre :

On utilise subplot(lignes, colonnes, numéro de figure). On désire mettre deux figures sur une même fenêtre de la manière suivante :

La fenêtre peut être vue comme un tableau de figures de deux lignes et une colonne. Ainsi, le tracé de la figure 1 sera un subplot(2,1,1) (elle sera numéroté 1) et la figure 2 sera un subplot(2,1,2) (elle sera numérotée 2).

Les instructions pour créer la figure suivront le subplot(…)

Ainsi le diagramme de Bode est donné par le programme suivant :

from pylab import * from math import * def puls(n):

nbdecade=5 t=[]

for i in range(nbdecade):

for j in range(n):

t.append(0.1*(j+1)*pow(10,i)/n) return t

K=10 T=0.5 n=10

gdb=[20*log10(K)-20*log10(sqrt(1+pow(T*puls(n)[i],2))) for i in range(len(puls(n)))]

(7)

phi=[-atan(T*puls(n)[i])*180/pi for i in range(len(puls(n)))]

subplot(2,1,1)

semilogx(puls(n),gdb,label="courbe de gain")

xlim(0.001,10000) ylim(-40,25)

grid('on',which='both') legend()

xlabel("Pulsation (rad/s)") subplot(2,1,2)

semilogx(puls(n),phi,label="courbe de phase")

xlim(0.001,10000) ylim(-95,5)

grid('on',which='both') legend()

xlabel("Pulsation (rad/s)")

suptitle("Diagramme de Bode complet") show()

Ce programme donne :

Bien d’autres fonctions sont disponibles.

Bibiographie :

http://www.courspython.com/introduction-courbes.html http://www.labri.fr/perso/nrougier/teaching/matplotlib/

http://stackoverflow.com/questions/7066121/pyplot-main-title-subplot

Références

Documents relatifs

Nous alons régler une petite polémique à propos de la vitesse d'un objet laché sans vitesse initiale.. Réalise le pointage de la vidéo puis exporte les données dans un tableur

Trace un rectangle de 6 carreaux de longueur et 3 carreaux de largeur.. Mesure-les

Chacune de ces séries comprend quatre coniques répondant à des fonctions normales pour lesquelles /=== i, Â'==dr i , les éléments (Q et 9' de la caractéristique étant nuls; on

N’importe quelle valeur x ou y, dans ces listes, qui ne peuvent ˆetre repr´esent´ees avec pr´ecision dans le syst`eme de nombre `a virgule fixe de METAPOST sont pass´ees comme

Après avoir associé le bon schéma à main levée à chaque situation, trace les triangles en vraie

les propriétés élémentaires des nombres prouvent qu'on a n droites distinctes, formant un faisceau dont les rayons successifs font entre eux l'angle -• Enfin, notre courbe ne peut

en P, une autre courbe présentant un point d'arrêt en S, on pourra toujours placer ces courbes Tune par rapport à l'autre de telle sorte, que, si on les rapporte à deux

[r]