Vous êtes sur la page 1sur 26

Institut Préparatoire des Etudes d’Ingénieurs de Tunis

Classes : Première année MP/PC

Simulation numérique :

Modules Matplotlib et Scipy

Dr. Ghabri Afef Année Universitaire : 2020-2021


Introduction
 Scipy est un module visant à unifier et fédérer un ensemble de bibliothèques Python à

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

à outils de routines courantes de calcul numérique, regroupées par fonction : fonctions

spéciales, interpolation, intégration, optimisation, traitement d’images. Certaines

fonctions non présentes dans numpy le sont dans scipy.

 Matplotlib est un module de visualisation pour Python et ses modules mathématiques

numpy et scipy. C’est une bibliothèque très utilisée pour tracer des graphiques en deux

et trois dimensions. En combinaison avec les bibliothèques scientifiques numpy ou

scipy, nous obtenons un outil de prototypage très pratique.

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.

axis('equal') matplotlib.pyplot Impose la même unité sur les deux axes.


close() matplotlib.pyplot Ferme la fenêtre 2
Fonctions du module matplotlib
 Pour le simple tracé de courbes nous n'utiliserons que le sous-module
«pyplot», importé, avec alias, à l'aide de l’instruction :

import matplotlib.pyplot as plt

 Les fonctions essentielles de «pyplot» sont :

1. «plot()» pour le tracé de points, de courbes.

2. «show()» pour afficher le graphique créé.

 D’une manière générale les fonctions plt.plot attendent des


vecteurs/matrices, bref des tableaux de points du plan. Selon les options,
ces points du plan sont reliés entre eux de façon ordonnée par des
segments : le résultat est une courbe.
3
Fonctions du module «matplotlib»
 Utilisation «plot (abscisses, ordonnées, options)»

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 :

• Couleur de la courbe : color='black' donne un tracé en noir ; les autres couleurs


disponibles sont : 'blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'white'

• 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.

 Exemple: plt.plot(x,y,label = '$\\arccos(t)$')


5
Matplotlib: Traçage des courbes
 Fonctions de base:
 np.linspace(début, fin, N) : C'est ici que le module numpy intervient.

Pour tracer correctement une fonction, la fonction np.linspace(debut, fin,


nombre) permet de créer une liste de N nombres qui commencent à la valeur début et
s'arrête à la valeur fin et uniformément répartis. De plus, si on fait une opération sur cette
liste comme par exemple multiplier par 2, alors cette opération sera automatiquement
appliquée à chaque terme de la liste (ce qui n'est pas vrai si on utilise une liste classique).
Par exemple, traçons la fonction définie par y = 2x²+3x-4 entre -2 et 2 en utilisant 100
points :
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace (-2,2,100)
y=2*x**2+3*x-4
plt.plot (x,y)
plt.show() 6
Matplotlib: Traçage des courbes
 Exemple de la fonction sinus :

import matplotlib.pyplot as plt


import numpy as np
x=np.linspace (-5,5,100)
plt.plot (x,np.sin(x)) # on utilise la fonction
sinus de numpy
plt.ylabel ("fonction sinus")
plt.xlabel ("l’axe des abcisses")
plt.show()

 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

import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 200)

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 matplotlib.pyplot as plt

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 :

>>> import matplotlib.pyplot as pp

>>> abs = [0, 1, 2, 3, 4, 5]

>>> ord = [0, 1, 1.5, 1, 2.5, 2]

>>> pp.plot(abs, ord, 'o')

[<matplotlib.lines.Line2D object at

0x10c6610d0>]

>>> pp.show()

11
Matplotlib: Traçage des courbes
 Exemple pour le tracé d’une ligne brisée:

>>> import matplotlib.pyplot as pp

>>> abs = [n/2. for n in range(10)]

>>> ord = [n % 2 for n in range(10)]

>>> pp.plot(abs,ord,'-b')

>>> pp.show()

12
Matplotlib: Traçage des courbes
 Affichages de nuages de points :

Pour tracer des points, il suffit d'utiliser la fonction plt.scatter (abscisses,


ordonnées) où abscisses est la liste des abscisses des points qu'on veut
tracer et ordonnées la liste des ordonnées. Par exemple, si on veut placer les
points (1,2), (3,3), (2,1) et (1,3) :

import matplotlib.pyplot as plt

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.

import matplotlib.pyplot as plt


import numpy as np
x = np.linspace(-np.pi,np.pi,100)
for n in range(1,5):
y = np.cos(n*x)
plt.plot(x,y,label="n="+str(n))
plt.legend(loc="lower right")
plt.show()
16
Matplotlib: Quelques exemples

import matplotlib.pyplot as plt


import numpy as np
x=np.linspace(-5,5,100)
p1=plt.plot(x,np.sin(x),marker='o')
p2=plt.plot(x,np.cos(x),marker='v')
plt.title("Fonctions trigonométriques")
plt.legend(["Sinus", "Cosinus"])
plt.show()

17
Matplotlib: Quelques exemples
 Donner comme deuxième argument (abscisses) une matrice qui a autant de
lignes que l’argument des abscisses est possible:

import matplotlib.pyplot as plt


import numpy as np
x=np.linspace(-5,5,100)
y=np.zeros((100,2))
y[:,0]=np.sin(x)
y[:,1]=np.cos(x)
plt.plot(x,y)
plt.title("Fonctions trigonométriques")
plt.legend(["Sinus", "Cosinus"])
plt.show()

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.

import matplotlib.pyplot as plt


import numpy as np
x=np.linspace(-5,5,100)
y=np.zeros((100,2))
y[:,0]=np.sin(x)
y[:,1]=np.cos(x)
plt.plot(y)
plt.title("Fonctions trigonométriques")
plt.legend(["Sinus", "Cosinus"])
plt.show()

19
Matplotlib: Quelques exemples

import matplotlib.pyplot as plt


import numpy as np
t1=np.linspace(0,5,10)
t2=np.linspace(0,5,20)
plt.plot(t1, t1, 'r--', t1, t1**2, 'bs', t2,
t2**3, 'g^-')
plt.show()

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 :

 Fonctions Spéciales (scipy.special)

 Intégration (scipy.integrate)

 Optimisation (scipy.optimize)

 Interpolation (scipy.interpolate)

 Transformées de Fourier (scipy.fftpack)

 Traitement du Signal (scipy.signal)

 Algèbre Linéaire (scipy.linalg)

 Matrices Sparses et Algèbre Linéaire Sparse (scipy.sparse)

 Statistiques (scipy.stats)

 Traitement d'images N-dimensionelles (scipy.ndimage)

 Lecture/Ecriture Fichiers IO (scipy.io) 24


Scipy : Quelques exemples
 Résolution d‘équations linéaires : Trouver x tel que: Ax=b avec A une matrice
et x,b des vecteurs.

from scipy import linalg


A = np.array([[1,0,3], [4,5,12], [7,8,9]])
b = np.array([1,2,3])
x = linalg.solve(A, b)
print (x) #[ 0.8 -0.4 0.06666667]

 Résolution de la méthode de newtone:

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

Vous aimerez peut-être aussi