Simulation Numérique
03/05/2021
Les bibliothèques numpy/scripy/matplotlib (SIMULATION NUMERIQUE)
Présenté par BOUZIDI Houssem Eddine [email protected]
B.H
INTRODUCTION
(numpy)
1
2
numpy: est une extension du langage de programmation Python, destinée à manipuler tableaux ou des multidimensionnels ainsi que des fonctions mathématiques opérant sur ces tableaux
matrices
des
Avant d’utiliser la bibliothèque numpy il faut faire l’importation de la bibliotheque numpy qu’on l’appelera np par convention
>>> import numpy as np
B.H
1
2
B.H
1
Simulation Numérique
03/05/2021
3
4
NUMPY
Différence entre numpy et math:
(numpy)
import math as M
import numpy as np
>>> a=2.5 >>> M.sin(a) 0.5984721441039564
>>>L=[1.5,7,8.5] >>> M.sin(L) ERREUR
>>>M.sqrt(L) erreur
3
>>> a=2.5 >>> np.sin(a) 0.59847214410395644
>>>L=[1.5,7,8.5]
>>> np.sin(L) array([ 0.997494, 0.65698 , 0.798487])
>>>np.sqrt(L) array([ 1.22474487, 2.64575131, 2.91547595])
B.H
Les vecteurs
(numpy)
Création d’un tableau à une seule dimension
Création d’un vecteur à partir d’une liste
Création d’un vecteur à partir d’un tuple
Crée d’un vecteur de valeurs régulièrement espacées
Nom_v=np.array(liste)
Nom_v=np.array(tuple)
>>>v=np.array([3,7,8,9]) array([3, 7, 8, 9])
>>>V4=np.array((5,8,9)) array([5, 8, 9])
Nom_v=np.linspace(bi,bs,n b_elem)
>>>v1=np.linspace(5,10,4) array([ 5.,6.66,8.33,10.])
Création d’un vecteur nul
Nom_v=np.zeros(nb_elem)
Création d’un vecteur avec des uns
Nom_v=np.ones(nb_elem)
>>>V2=np.zeros(5) array([ 0., 0., 0., 0., 0.])
>>>V3=np.ones(5) array([ 1., 1., 1., 1., 1.])
arange joue le même rôle que range
Nom_v=np.arange(bi,bs)
B.H
>>>V5=np.arange(1,10) array([1,2,3,4,5,6,7,8, 9])
4
B.H
2
Simulation Numérique
03/05/2021
5
6
Les vecteurs
(numpy)
Création d’un vecteur à partir d’une fonction
Nom_v=np.fromfunction(nom_f,(nb_elem,))
>>>def f(x):
Il faut que la fonction admet un seul paramètre array([ f(0),f(1), f(2), f(3), f(4)])
return (x**2) >>>F=np.vectorize(f) >>>V=np.fromfunction(F,(5,)) array([ 0., 1., 4., 9., 16.])
Trouver le nombre d’éléments d’un vecteur
Trouver la dimension d’un vecteur
Calculer le produit scalaire
5
Méthode utile pour les vecteurs
np.size(vecteur) np.shape(vecteur) len(vecteur)
np.ndim(vecteur)
B.H np.dot(vecteur1,vecteur2)
>>>np.size(v) 5 >>>np.shape(v) (5,)
>>>np.ndim(v) 1
>>>np.dot(v,v) 354.0
Les vecteurs
(numpy)
Les opérations classiques de python
>>>L1=[3,7,8] >>>L2=[4,8,1]
>>>L1+L2 [3, 7, 8, 4, 8, 1]
>>>L1*2 [3, 7, 8, 3, 7, 8]
>>>L1-L2 ERREUR
>>>L1+2 ERREUR
>>>L1**2 ERREUR
>>>L1<5 ERREUR
6
>>>V1=np.array([3,7,8]) >>>V2=np.array([4,8,1])
>>>V1+V2 array([ 7, 15, 9], dtype=int32)
>>>V1*2 array([ 6, 14, 16], dtype=int32)
>>>V1-V2 array([-1, -1, 7], dtype=int32)
>>>V1+2 array([ 5, 9, 10], dtype=int32)
>>>V1**2 array([ 9, 49, 64], dtype=int32)
B.H >>>V1<5 array([ True, False, False],dtype=bool)
B.H
3
Simulation Numérique
03/05/2021
7
Les vecteurs
ACCEDER à un élément du tableau (le même principe que la liste)
(numpy)
>>>V[0] 12
>>>V[[0]] array([12])
>>>V[len(V)-1] 7
>>>V[-1] 7
>>>V[-len(V)] 12
>>>V[2:5] array([ 8, 9, 11])
V=np.array([12,5,8,9,11,-8,7])
>>>V[:5] array([ 12,5,8, 9, 11])
>>>V[[0,5,2]] array([12, -8, 8])
>>>V[4:] array([11,-8,7])
>>>V[1]=25
>>>print(V) array([12,25,8,9,11,-8,7])
>>>V[3]=5.88 array([12,25,8,5,11,-8,7])
>>>V[::-1] array([ 7, -8, 11, 9, 8, 2, 12])
>>>V[4]=[1,2] B.H ERREUR(les éléments d’un tableau doivent être de même type)
7
Les vecteurs
ACCEDER à un élément du tableau
V=np.array([12,5,8,9,11,-8,7])
8
>>>V<7 array([False,True,False,False,False,True, False)
>>>V[[False,True,False,False,False,True,False]] array([ 5, -8])
comparer chaque élément de V
retourner un vecteur rempli par les éléments de V qui les correspendent True
Retourner un vecteur par les éléments >10 du vecteur V
Autre méthode utile
Retourner la valeur maximale dans le vecteur V
Retourner la valeur minimale dans le vecteur V
B.H
Retourner la somme des éléments du vecteur
>>>V[V>10] array([12, 11])
Publicité
>>>V.max() 12
>>>V.min() -8
>>>V.sum() 44
8
B.H
4
Simulation Numérique
03/05/2021
9
LES MATRICES
(numpy)
CREATION D’un tableau à deux dimensions(Matrice)
Création d’une matrice à partir d’une liste de liste
Nom_v=np.array(liste)
1 5 6 2 3 9 >>>M=np.array([[1,5,6],[2,3,9]])
Création d’une matrice nul
Nom_v=np.zeros((nbL,nbC))
Création une matrice avec des uns
Nom_v=np.ones((nbL,nbC))
Création de la matrice identité
Nom_v=np.identity(ordre) Ou Nom_v=np.eye(ordre)
Création d’une matrice diagonale
Nom_v=np.diag(list)
B.H
0 0 0 0 0 0
>>>M1=np.zeros((3,2))
1 1 1 1 1 1
>>>M2=np.ones((2,3))
1 0 0 0 1 0 0 0 1
>>>M3=np.identity(3)
2 0 0 0 6 0 0 0 3
>>>M4=np.diag([2,6,3])
9
10
LES MATRICES
CREATION D’un tableau avec des éléments aléatoire
Création d’un vecteur avec des entiers aléatoires entre deux bornes
Création d’une matrice avec des entiers aléatoires entre deux bornes
Création d’un vecteur avec des réels aléatoires entre 0 et 1
Création d’une matrice avec des réels aléatoires entre 0 et 1
10
Nom_v=np.random.randint(bi,bs,nb_ele)
>>>np.random.randint(-5,9,5) array([ 5, -5, 4, -5, -1])
Nom_v=np.random.randint(bi,bs,(nbL,nbC))
>>>np.random.randint(-5,9,(2,3)) array([[6,3,1],[-5, -2, -2]])
Nom_v=np.random.random(nb_elem)
>>>np.random.random(3) array([ 0.304,0.659, 0.766])
Nom_v=np.random.random((nbL,nbC))
B.H
>>>np.random.random((3,5)) array([[ 0.04,0.09,0.64,0.61,0.86],[0.78,0 .22,0.11,0.32,0.90],[0.27,0.524,0 .81,0.47,0.41]])
B.H
5
Simulation Numérique
03/05/2021
LES MATRICES
(numpy)
ACCEDER à un élément du tableau à deux dimensions
11
>>>M[0][0] M[0,0] 2
>>>M[1] array([ 1, 0, 6, 16])
>>>M[-1] array([ 1, 9, 3, 11])
>>>M[-1,-1] 11
>>>M[1:3,2] array([6, 3])
>>>M[1:3,1:3] array([[0, 6],[9, 3]]) 11
>>>M[1:3,1:2] array([[0],[9]])
>>>M[:,0] array([2, 1, 1])
>>>M[[1,2]] → M[[1,2],:] array([[ 1, 0, 6, 16],[ 1, 9, 3, 11]])
>>>M[:,[1,3]] array([[ 5, 5],[ 0, 16],[ 9, 11]])
>>>M<1 array([[False,False,False,False],[False,True, False,False],[False, False, False, False]])) B.H >>>M[1]<1 array([False, True,False,False])
12
LES MATRICES
(numpy)
Les opérations classiques de python
>>>M1=np.array([3,7,8],[2,1,3]]) >>>M2=np.array([0,1,-1],[1,0,13]]) >>>V=np.array([1,2,6])
>>>M1+[2,3,4] array([[ 5, 10, 12],[ 4, 4, 7]])
>>>M1+M2 array([[ 3, 8, 7],[ 3, 1, 16]])
>>>M1[:,0]+[2,13] array([ 5, 15])
>>>M1*2 array([[ 6, 14, 16],[ 4, 2, 6]])
>>>M1*M2 array([[ 0, 7, -8],[ 2, 0, 39]], dtype=int32)
>>>M1-M2 array([[ 3, 6, 9],[ 1, 1, -10])
>>>M1<5 array([[True,False,False],[True,True,True]])
>>>M1+2 array([[ 5, 9, 10],[ 4, 3, 5])
>>>M1+V array([[ 4, 9, 14],[ 3, 3, 9])
>>>M1[M1<5] array([3, 2, 1, 3])
Les opérations se font élément par élément
B.H
np.dot(M1,M2) Pour calculer le produit matricielle
12
B.H
6
Simulation Numérique
03/05/2021
LES MATRICES
(numpy)
Méthodes utiles pour les matrices
13
matrice.reshape((nbL,nbC)) >>>M.reshape((4,3))
Trouver le nombre d’éléments d’une matrice
np.size(matrice) np.shape(matrice) len(matrice)
np.ndim(Matrice)
Trouver les dimensions d’une matrice
Modifier les dimensions d’une matrice
Calculer la trace d’une matrice
np.trace(matrice)
Calculer le transposé d’une matrice
np.transpose(matrice)
B.H
13
>>>np.size(M) 12 >>>np.shape(M) (3, 4)
np.ndim(M) 2
array([[2,5,6],[5,1,0],[6,16,1],[ 9, 3, 11]])
>>>np.trace(np.array([[1,2],[5 ,6]]) 7
>>>np.transpose(np.arrray([[ 1,2],[5,6]]) array([[1, 5],[2, 6]])
14
LES MATRICES
Méthode du module numpy.linalg
Calculer le déterminant d’une matrice
M=np.array([[4, 7],[-4, 8]])
np.linalg.det(matrice)
>>> np.linalg.det(M) 59.999
Calculer le rang d’une matrice
np.linalg.matrix_rank(Matr ice)
np.linalg.matrix_rank(M) 2
Calculer les valeurs propres d’une matrice
Calculer le vecteur propre d’une matrice
np.linalg.eigvals(matrice)
np.linalg.eig(matrice)
>>>np.linalg.eigvals(M) array([ 6.+4.89j,6.-4.89j])
>>>np.linalg.eig (M) (array([ 6.+4.89j,6.-4.89j]), array([[ 0.79+0.j,0.79+0.j],
[0.22+0.55j,0.22-0.55j]]))
Calculer l’inverse d’une matrice
np.linalg.inv(matrice)
B.H
>>>np.linalg.inv(M) array([[0.13,-0.11], [0.06,0.06]])
14
B.H
7
Simulation Numérique
03/05/2021
15
LES MATRICES
Publicité
Méthode utiles pour les matrices
Trouver la valeur maximum dans une matrice
np.max(matrice) Ou Matrice.max()
Trouver la valeur maximale dans une ligne d’une matrice
np.max(matrice[ligne]) Ou Matrice[ligne].max()
Trouver la valeur minimale dans une matrice
np.min(matrice) Ou Matrice.min()
>>>np.max(M) 8 >>>M.max(M) 8
>>>np.max(M[0]) 7 >>>M.max(M[0]) 7
>>>np.min(M) -4 >>>M.min(M) -4
Calculer la somme des éléments d’une matrice
np.sum(matrice) ou Matrice[ligne].sum()
>>>np.sum(np.arrray([[1,2],[5,6]]) 7
Calculer le transposé d’une matrice 15
np.transpose(matrice) >>>np.transpose(np.arrray([[1,2],[5
B.H
,6]])
16
LES MATRICES
(numpy)
Résolution d’un système linéaire à l’aide de la sous bibliothèque de
linalg de numpy
np.linalg.solve (A,B) permet de résoudre le système linéaire tel que
A.X=B
A: est une matrice d’ordre n B: est un vecteur Exemple:
2(cid:1876) + 3(cid:1878) = 9 (cid:1876) + 2(cid:1877) − (cid:1878) = 1 (cid:1876) + (cid:1877) + 5(cid:1878) = 2
On veut résoudre le système linéaire suivant:
>>> import numpy as np >>>A=np.array([[2,0,3],[1,2,-1],[1,1,5]]) >>>B=np.array([9,1,2]) >>>X=np.linalg.solve(A,B) ou x=np.dot(np.linalg.inv(A),B) >>>print(X) array([ 4.73684211, -1.94736842, -0.15789474])
B.H
16
B.H
8
Simulation Numérique
03/05/2021
Application d’une fonction sur les éléments d’un tableau
(numpy)
Définir une fonction lambda
Définir une fonction def
Rendre une fonction applicable sur les éléments d’un tableau
Appliquer une fonction sur les éléments d’un tableau
Nom_f=lambda parametres: expression Nom_F=lambda parametres: expr1 if condition else expr2
def nom_f(parametres): Traitements return (resultat)
>>>f=lambda x: x**2 >>>f1=lambda x: x**3 if x>0 else x**2
>>>def f(x):
return(x**2)
Nom_F1=np.vectorize(Nom_F) >>>F=np.vectorize(f)
Nom_F(tableau) Erreur Nom_F1=np.vectorize(nom_F) Nom_F1(tableau)
>>>g(V) ERREUR >>>F(V) array([F(V[0]),F(V[1]),F(V[2])]
B.H
17
17
18
EXERCICE:(concours 2012)
(numpy)
On considère la matrice carrée A=(ai,j) d’ordre 5 tel que :
1 − (
1 )(cid:2873)(cid:2879)(cid:3036) (cid:1871)(cid:1861) (cid:1861) = (cid:1862) (cid:1857)(cid:1872) (cid:1861) < 5 2 1 (cid:1871)(cid:1861) (cid:1861) = 5 (cid:1857)(cid:1872) (cid:1862) = 5
(cid:2873)(cid:2879)(cid:3037)
1 2
(cid:1871)(cid:1861) (cid:1861) = (cid:1862) + 1
(cid:1853)(cid:3036),(cid:3037) =
0 (cid:1871)(cid:1861)(cid:1866)(cid:1867)(cid:1866)
Répondre en python aux questions suivantes : 1) Définir la fonction f à deux variables i et j tel que f(i,j)=ai,j 2) Définir A, en utilisant f 3) Calculer d, le déterminant de A 4) Déterminer L, la liste des valeurs propres de A 5) Déterminer AI, la matrice inverse de A 6) Définir I5, la matrice identité d’ordre 5
7) Résoudre le système linéaire A.x=b avec b=
B.H
1 0 0 0 0
18
B.H
9
Simulation Numérique
03/05/2021
19
20
EXERCICE:(concours 2012)
(numpy)
Correction :
>>> import numpy as np 1) def f(i,j):
if i==j and i<5:
return(1-(1/2)**(5-j))
elif i==5 and j==5:
return (1)
elif i==j+1:
return((1/2)**(5-j))
else:
return (0)
2) F=np.vectorize(f)
A=np.fromfunction(F,(5,5))
3) d=np.linalg.det(A) 4) L=list(np.linalg.eigvals(A)) 5) AI=np.linalg.inv(A) 6) I5=np.identity(5) 7) b=np.array([1]+[0]*4)
x=np.linalg.solve(A,b)
B.H
Traçage des courbes
(matplotlib)
matplotlib : est une bibliothèque qui permet de faire le traçage des
courbes à l’aide des tableaux Tableau des abscisses Tableau des ordonnées
On doit faire l’importation de la bibliothèque matplotlib.pylab
>>> import matplotlib.pylab as plt
La méthode qui permet de tracer la courbe plot
>>>plt.plot(vecteur_abscisse,vecteur_ordonnée)
La méthode qui permet de visualiser la courbe show()
>>> plt.show()
B.H
19
20
B.H
10
Simulation Numérique
03/05/2021
21
22
Traçage des courbes
(matplotlib)
Exemple: On veut faire le traçage de la courbe de la fonction f(x)=x3+2x-1 dans l’intervalle [-5,10] 1ère étape: définir la fonction 2ème étape: importation de la bibliothèque numpy et matplotlib 3ème étape: définir un vecteur qui contient des valeurs dans l’intervalle [-5 , 10]
4ème étape: appliquer la fonction f sur le vecteur défini précédemment 5ème étape : faire le traçage de la courbe 6ème étape : voir la courbe
B.H
Traçage des courbes
(matplotlib)
Exemple: On veut faire le traçage de la courbe de la fonction f(x)=(cid:1876)(cid:2871) + 2(cid:1876) + 1 dans l’intervalle [-5,10]
>>> def f(x):
return (x**3+2*x+1)
>>>import numpy as np >>>import matplotlib.pylab as plt >>>VA=np.linspace(-5,10,100) >>>FV=np.vectorize(f) >>>VO=FV(VA) >>>plt.plot(VA,VO) >>>plt.show()
B.H
21
22
B.H
11
Simulation Numérique
03/05/2021
23
Traçage des courbes
(matplotlib)
Des méthodes pour modifier les caractéristiques de la figure affichant la courbe
Modifier le nom de l’axe des abscisses
plt.xlabel(nom_de_l’axe)
Modifier le nom de l’axe des ordonnées
plt.ylabel(nom_de_laxe)
Modifier le titre de la figure
plt.title(nom_figure)
B.H
23
24
Traçage des courbes
Publicité
(matplotlib)
Exemple:
On veut tracer les courbes des deux fonctions, f(x)=sin(x) et g(x)=1/tg(x) sur le même graphique pour x ϵ [-π,π]
>>>plt.plot(a,of) >>>plt.plot(a,og) >>>plt.xlabel("axe des abscise") >>>plt.ylabel("axe des ordonnés") >>> plt.title("courbes de la fonction f et g") >>>plt.show()
>>>import numpy as np >>>import matplotlib.pylab as plt >>>def f(x):
return(np.sin(x))
>>>def g(x):
return(1/np.tan(x)) >>>a=np.linspace(-np.pi,np.pi,1000) >>>f1=np.vectorize(f) >>>g1=np.vectorize(g) >>>of=f1(a) >>>og=g1(a)
B.H
24
B.H
12
Simulation Numérique
03/05/2021
25
26
scipy
scipy: contient de nombreuses boîtes à outils sur les méthodes d'informatique scientifique. Ses différents sous-modules correspondent à différentes applications scientifiques, telles méthodes d'interpolation, que les les l'optimisation, l'imagerie, l'intégration, statistiques, les fonctions mathématiques spéciales.
B.H
scipy
Dans la librairie scipy existe plusieurs modules tel que: scipy.special (fonction de bessel, erf, gamma, etc) scipy.integrate(intégration numérique ou d’équation différentielles) scipy.optimize (minimisation, moindres-carrées, zéros d’une
fonction)
scipy.interpolate scipy.signal(convolution,filtrage,ondelettes) scipy.linalg (pour l’algèbre linéaire) scipy.stats (fonctions et distribution statistiques) scipy.ndimage ( pour le traitement d’images)
B.H
25
26
B.H
13
Simulation Numérique
03/05/2021
Résolution d’équation
Pour résoudre les équations, on utilise le module scipy.optimize Exemple: On veut chercher les racines de la fonction: F(x)=x3+6x2-3x+1 dans l’intervalle [-10,10] Pour vérifier les résultats on va tracer la courbe de la fonction F sur l’intervalle pour voir les résultats
>>> def F(x):
return (x**3+6*x-3*x+1)
>>>import numpy as np >>>import matplotib.pylab as plt >>>VA=np.linspace(-10,10,10000) >>>FV=np.vectorize(F) >>>VO=FV(VA) >>>plt.plot(VA,VO) >>>plt.show()
B.H
27
27
28
Résolution d’équation
Résolution: F(x)=x3+6x2-3x+1 dans l’intervalle [-10,10]
explication
code
1 Définir la fonction F
>>>def F(x):
return(x**3+6*x**2-3*x+1)
Ou >>>F=lambda x: x**3+6*x**2-3*x+1
2 Importation du module optimize de scipy
>>>import scipy.optimize as op
3 Résolution avec la méthode newton
4 Résolution avec la méthode dichotomique
5 Résolution avec des algorithmes hybrid
>>>op.newton(F,-10) -0.32218535462618547
>>>op.bisect(F,-10,10) -0.32218535462608555
>>>op.fsolve(F,-10) array([-0.32218535])
B.H
28
B.H
14
Simulation Numérique
03/05/2021
29
30
Résolution d’équation
explication
code
6 Résolution avec la méthode hybride
aussi (Sol:La solution représentait un objet `` Result`)`. Les attributs importants sont: x:la solution array, success: Indicateur booléen indiquant si l'algorithme est sorti avec succès Message: qui décrit la cause de la terminaison.
>>>sol=op.root(F,-10) status: 1 success: True qtf: array([ 5.51154809e-07]) nfev: 10 r: array([-45.38049125]) fun: array([ -3.37507799e-12]) x: array([-0.32218535462618547]) message: 'The solution converged.'
fjac: array([[-1.]])
B.H
29
Calcul de l’intégrale
Pour calculer l’intégrale on utilisera le sous module scipy.integrate
import scipy.integrate as SI
Des méthodes pour le calcul de l’intégrale
SI.trapz(Y,X)
Applique la méthode des trapèzes à une liste des points dont les abscisses sont dans X et les ordonnées dans Y
SI.simps(Y,X)
Applique la méthode de Simpson
SI.quad(function,bi,bs)
Renvoie un couple (x,eps) x:est une valeur approchée de l’intégrale de la fonction sur l’intervalle ]bi,bs[ eps: majoration de l’erreur commise
SI.quad(function,np.inf,np.inf)
B.H
30
B.H
15
Simulation Numérique
03/05/2021
Calcul de l’intégrale
Soit la fonction f(x)=x**2+x-1
31
Calculer ∫ (cid:1858)((cid:1876))
dx
(cid:2873) (cid:2868)
INSTRRUCTIONS
EXPLICATION
>>>import scipy.integrate as SI
Importation de la bibliothèque
>>>f=lambda x : x**2+x+1
>>>import numpy as np >>> X=np.linspace(0,5,1000) >>> Y=f(X)
>>>SI.trapz(Y,X) 59.166687541729274
>>>SI.simps(Y,X) 59.166666687562625
Définition de la fonction f
Préparation des deux tableaux pour l’utilisation des deux méthodes de calcul de l’intégrale
Utilisation de la méthode trapz
Utilisation de la méthode simps
>>>SI.quad(f,0,5) (59.16666666666666, 6.568819562365509e-13)
B.H
Utilisation de la méthode quad
31
32
Résolution d’équation différentielle
32
Pour résoudre une équation différentielle numériquement, on utilisera aussi le sous module: scipy.integrate
import scipy.integrate as SI SOL=SI.odeint(function,Y0,TX)
Function: c’est une fonction à deux paramètres Y ET X Y0: la condition initiale TX: un vecteur qui contient les abscisses des points qui appartiennent à
l’intervalle dans lequel on veut trouver les solutions
SOL: est le résultat de la méthode odeint qui sera une matrice d’une seule colonne et le nombre de lignes est égale au nombre des éléments de TX
B.H
B.H
16
Simulation Numérique
03/05/2021
Résolution d’équation différentielle
33
EXEMPLE: On veut résoudre l’équation différentielle du premier ordre suivante :
y’=y*sin(y) + sin(t) avec y(0) = 2 pour t=[0…20]
>>>import scipy.integrate as SI >>>import numpy as np >>>def deriv (y , t ) :
return (y∗np.sin (y) +np.sin (t))
>>>TX = np.linspace(0,20,1000) >>>Y0 = 2 >>>sol=SI.odeint(deriv,Y0,TX)
Tracer la courbe de la solution trouvée
>>>import matplotlib.pylab as plt >>>plt.plot(TX,sol[:,0]) >>>plt.show()
B.H
33
B.H
17