Simulation numérique :
usage scientifique. Scipy utilise les tableaux et les matrices du module numpy.
Le module scipy regroupe un certain nombre de sous modules qui sont autant de boîtes
numpy et scipy. C’est une bibliothèque très utilisée pour tracer des graphiques en deux
1
Fonctions du module matplotlib
Commande Bibliothèque Résultat
Affiche les points définis par les vecteurs x et y, (Option~: c
plot(x,y,c) matplotlib.pyplot
permet de définir le format et la couleur du tracé)
imshow(m,c) matplotlib.pyplot Affiche la matrice m en deux dimensions
show() matplotlib.pyplot Affiche la figure courante
grid() Ajoute des lignes en pointillés pour chaque graduation des
matplotlib.pyplot
axes.
savefig(name) matplotlib.pyplot Sauvegarde la figure courante dans le fichier name
clf() matplotlib Efface la fenêtre graphique
legend(array,loc) matplotlib.pyplot Dessine une légende contenant les lignes apparaissant dans
array (Option~: loc =(x,y) pour définir l'emplacement)
title('Titre') matplotlib.pyplot Définit le titre de la figure.
xlabel(str) matplotlib.pyplot Imprime une légende pour décrire les axes horizontaux et
ylabel(str) verticaux
xlim(a,b) matplotlib.pyplot Impose l’intervalle [a, b] pour les valeurs des abscisses/des
yim(a,b) ordonnées
axis([xl,xr,yb,yt]) matplotlib.pyplot Cadre la figure sur le rectangle décrit par les 4 coordonnées.
Paramètre Description
abscisses La liste des abscisses
ordonnées La liste des ordonnées
options Le motif des points (optionnel)
'. ' pour un petit point
'o' pour un gros point
's' Pour un carré
' +' pour une croix (forme +)
'x' pour une croix (forme x)
' *' pour une étoile
'-' points reliés par des segments
'—' points reliés par des segments en pointillés
'-o' gros points reliés par des segments (on peut combiner
les options)
'b' , 'r' , 'g' , 'y' , 'c', 'm', 'k', pour de la couleur (bleu, rouge, vert, jaune, cyan,
'w' magenta, noir, blanc)
4
Fonctions du module «matplotlib»
Voici les options les plus courantes :
• Style de trait : linestyle='-' donne un trait continu, '--' des tirets, ':' des pointillés, '-.' des
tirets et points alternés.
• Epaisseur du tracé : linewidth=2 donne un trait plus épais (valeur 1 par défaut) ;
comme on s’y attend, plus la valeur est élevé, plus le trait est épais !
• Marques pour les points : marker='x' matérialise la position de chaque point par un
'x'; il y a une grande variété de marqueurs disponibles, o, +, *, ., v, ^, <, >, etc; la taille
des marqueurs peut être réglée grâce à l’option markersize.
• Etiquette : On peut adjoindre à un tracé une chaîne de caractères (son étiquette), qui
pourra notamment être utilisée dans les légendes. Les parties entres deux symboles $
sont interprétées comme du code LATEX (attention, en Python, le caractère \ se code
par le caractère ’\\’). Par défaut, il n’y a pas d’étiquette.
Si tout se passe bien, une fenêtre doit s’ouvrir avec la figure ci-dessus. Il est
possible de jouer avec les menus dans le bas de cette fenêtre : zoomer,
déplacer la figure, etc et surtout sauvegarder dans un format PNG, PDF, EPS,
etc.
7
Matplotlib: Traçage des courbes
Cette bibliothèque permet toutes sortes de représentations de graphes 2D (et
quelques-unes en 3D).
import numpy as np
y = np.sin(np.pi * x)/(np.pi * x)
plt.plot(x, y)
plt.show()
8
Matplotlib: Traçage des courbes
Ce second exemple améliore le tracé. Il utilise le style objet de matplotlib :
import numpy as np
import matplotlib.pyplot as plt
def plt_arrays(x, y, title='', color='red', linestyle='dashed', linewidth=2) :
"""Définition des caractéristiques et affichage d'un tracé y(x)."""
fig = plt.figure()
axes = fig.add_subplot(111)
axes.plot(x, y, color=color, linestyle=linestyle, linewidth=linewidth)
axes.set_title(title)
axes.grid()
plt.show()
def f(a, b, c, d) :
x = np.linspace(-10, 10, 20)
y = a*(x**3) + b*(x**2) + c*x + d
title = '$f(x) = (%s)x^3 + (%s)x^2 + (%s)x + (%s)$' % (a, b, c, d)
plt_arrays(x, y, title=title)
f(0.25, 2, 4, 3)
9
Matplotlib: Traçage des courbes
plt.plot(liste_x,liste_y) : Où liste_x est une liste de nombres [x_1, x_2, ..., x_n] et
liste_y une liste de nombres [y_1, y_2, ..., y_n] avec le même nombre d'éléments.
alors plt.plot(liste_x,liste_y) placera les points de coordonnées (x_1,y_1), (x_2,y_2),
..., (x_n, y_n) et les reliera de proche en proche par un segment. Voici un exemple où
on relie les points (1;2), (3;1) et (4;6) :
import numpy as np
plt.plot([1,3,4],[2,1,6])
plt.show()
10
Matplotlib: Traçage des courbes
Exemple pour le tracé d’un nuage de points :
[<matplotlib.lines.Line2D object at
0x10c6610d0>]
>>> pp.show()
11
Matplotlib: Traçage des courbes
Exemple pour le tracé d’une ligne brisée:
>>> pp.plot(abs,ord,'-b')
>>> pp.show()
12
Matplotlib: Traçage des courbes
Affichages de nuages de points :
import numpy as np
x = [ 1, 3, 2, 1]
y = [ 2, 3, 1, 3]
plt.scatter(x,y)
plt.show() 13
Matplotlib: Traçage des courbes
Exemple tracé de courbes représentatives des fonctions réelles :
>>> import matplotlib.pyplot as pp
>>> import numpy as np
>>> X = np.linspace(0, 2*np.pi, 256) # X
= 256 pts régulièrement espacées
>>> Ycos = np.cos(X) # image directe de
X par cos
>>> Ysin = np.sin(X) # image directe de X
par sin
>>> pp.plot(X,Ycos, 'y') # trace de la
courbe de cos en jaune
>>> pp.plot(X,Ysin, 'g') # trace de la
courbe de sin en vert
pp.show()
14
Matplotlib: Traçage des courbes
On améliore le tracé en remplissant quelques options :
>>> import matplotlib.pyplot as pp
>>> import numpy as np
>>> pp.plot(X, Ycos, 'b', X, Ysin, 'y') #
Tracée simultanée des 2 courbes
>>> pp.grid(True) # Affiche la grille
>>> pp.legend(('cos','sin'), 'upper right',
shadow = True) # Légende
>>> pp.xlabel('axe des x') # Label de
l'axe des abscisses
>>> pp.ylabel('axe des y') # Label de
l'axe des ordonnées
>>> pp.title('Fonctions cosinus et
sinus') # Titre
>>> pp.show()
15
Matplotlib: Traçage des courbes
Voici un autre exemple où on trace une famille de fonction y=cos(nx) avec n allant de
1 à 4 : On en a profité pour rajouter une légende pour que le graphique soit plus
compréhensible. Pour cela, il faut rajouter un label dans la fonction plot et la
fonction plt.legend() dans laquelle on précise sa position (ici en bas à droite). On
remarquera aussi que nous avons utilisé np.pi qui est tout simplement la constante pi
qui est donc disponible aussi dans le module numpy.
17
Matplotlib: Quelques exemples
Donner comme deuxième argument (abscisses) une matrice qui a autant de
lignes que l’argument des abscisses est possible:
18
Matplotlib: Quelques exemples
Si un seul vecteur (ou une seule matrice) est donné, on trace le graphe avec
l’indice des éléments comme abscisse.
19
Matplotlib: Quelques exemples
20
Matplotlib: Quelques exemples
Un système de sous-figures permet de juxtaposer différents graphiques.
import numpy as np
import matplotlib.pyplot as plt
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(222)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.subplot(223)
plt.plot(t2, np.sin(2*np.pi*t2), 'b-')
plt.show() 21
Matplotlib: Quelques exemples
Dans la commande plt.subplot l’argument est nbre de lignes, nbre de colonnes, numéro de la figure.
Il y a une condition à respecter : le nombre de lignes multiplié par le nombre de colonnes est supérieur
ou égal au nombre de figure. Ensuite matplotlib place les figures au fur et à mesure dans le sens des
lignes.
Dans le même registre, ouvrir plusieurs fenêtres graphiques est possible. Si vous avez déjà une
fenêtre graphique, la commande plt.figure(2) en ouvre une seconde et les instructions plt.plot qui
suivent s’adresseront à cette seconde figure. Pour revenir et modifier la première fenêtre graphique,
plt.figure(1) suffit.
22
Matplotlib: Quelques exemples
import matplotlib.pyplot as plt
import math as m
from numpy import linspace
x1 = linspace(-1,1,200)
x2 = linspace(0,m.pi,200)
arccos = [m.acos(t) for t in x1]
cos = [m.cos(t) for t in x2]
plt.clf()
plt.plot(x1,arccos,color='b',label='$\\arccos(t)$',
linewidth=2)
plt.plot(x2,cos,color='r',label='$\\cos(t)$', linewidth=2)
plt.plot([-0.5*m.pi,m.pi],[-0.5*m.pi,m.pi],color = 'g',
linestyle = '--', label = 'Première bissectrice du plan')
plt.xlabel('$t$')
plt.legend(loc=0)
plt.axes()
plt.savefig('ex_avance.png') 23
Module scipy
Scipy s'appuie sur numpy. Il fournit des implémentations efficaces d'algorithmes
standards. Le module scipy contient plusieurs sous-modules permettant divers
calculs approchés :
Intégration (scipy.integrate)
Optimisation (scipy.optimize)
Interpolation (scipy.interpolate)
Statistiques (scipy.stats)
import math as m
from scipy.optimize import fsolve
f=lambda x:m.cos(x)-m.pow(x,3)
df=lambda x:-m.sin(x)-3*m.pow(x,2)
eps=1e-12
print(fsolve(f,0.2)) 25