Fonctions Python
Fonctions Python
Champollion 2014-2015
A. HASSAN
2 décembre 2014
A. Hassan@Champollion PCSI-MPSI – 1
Programmation en
Python (suite)
Les Fonctions
Pourquoi les
fonctions?
Fonctions
intégrées( built in
functions)
Fonctions
importées
Programmation en
• Éviter la redondance et la répétition Python (suite)
Les Fonctions
• Décomposer et segmenter un problème complexe en sous Pourquoi les
fonctions?
problèmes moins complexes Fonctions
intégrées( built in
• Faciliter l’analyse et améliorer la clarté du code functions)
Fonctions
• Re-utilisation du code dans d’autres programmes. importées
Exemple
• En fin cacher des informations : on n’exhibe que le titre de la pratique:
Fonctions
fonction et non son code (qui peut être considérer comme mathématiques
usuelles, le module
une propriété intellectuelle). math et numpy
Quelques Fonctions
Certaines fonctions sont disponibles au démarrage de Pyhton ( du module math
Liste des modules
sorted(a) trier une liste : sorted([2,1,1,3,2])
A. Hassan@Champollion PCSI-MPSI – 4
Fonctions importées
Certains fonctions sont rangées dans des packages, modules, que l’on importe.
Exemple : Si MyModule.py contient des fonctions :f1 et f2 (parmi d’autres). On veut utiliser
f1
1. Tout importer (toutes les commandes de MyModule) :
import MyModule
# u t i l i s a t i o n de f 1 ( mais avec l e p r e f i x : MyModule)
MyModule . f1 (x ,y ) # f2 est disponible
A. Hassan@Champollion PCSI-MPSI – 5
Exemple pratique : Fonctions mathématiques usuelles,
le module math et numpy
On charge le module math avec la commande import.
1. Directement(avec préfixe) :
import math
x = math . pi # x←π
y = math . cos ( x) # y r e c o i t cos(π) = −1
4. Tout charger :
from math import *
x = pi # x←π
y = exp ( - x) - cos ( x) # y ← e−π − cos(π)
A. Hassan@Champollion PCSI-MPSI – 6
Quelques Fonctions du module math
syntaxe fonctions
exp; log; log10; log2 exponentielle et logarithmes
cos; sin; tan Fonctions trigonométriques
acos; asin; atan; atan2 Fonctions trigonométriques réciproques
cosh; sinh; tanh Fonctions hyperboliques
acosh; asinh; atanh Fonctions hyperboliques réciproques
trunc; floor; ceil
sqrt;pow √ et puissance
1 import math as mm
2 mm . log10 (0.0001) # :
3 mm . log2 (32) # :
4 mm . cosh (0) # :
5 mm . log2 ( mm . pow (2 ,5))# :
6 mm . floor ( -5.6) # :
7 mm . trunc ( -5.6) # :
8 mm . ceil ( -5.6) # :
A. Hassan@Champollion PCSI-MPSI – 7
Liste des modules importants
A. Hassan@Champollion PCSI-MPSI – 8
Définir ses propres fonctions : def
Syntaxe générale :
A. Hassan@Champollion PCSI-MPSI – 9
Les fonctions à la volée : l’opérateur lambda
1. Procédure
1 def MySum (x , y ):
2 z =x + y
3 print(z )
4 # Utilisation :
5 MySum (5 ,6)
6 # Par contre
7 11* MySum (5 ,6)
calcule funct
Plutôt : s=funct(x,y,..) puis print(s)
A. Hassan@Champollion PCSI-MPSI – 12
Variable globales Vs Variables locales
2 Variable(s) globale(s)
1. Variable(s) locale(s)
1 v =3.14159
1 def MySum (x , y ): 2 def MySum (x , y ):
2 z= x + y 3 global p ,v
3 p= x * y 4 z =x + y
4 return( z ) 5 p =x * y
5 # Utilisation : 6 v =10* z
6 >>> MySum (5 ,6) 7 return( z )
7 # 8 # Utilisation :
8 >>> 11* MySum (5 ,6) 9 >>> print( MySum (5 ,6))
9 # et l e produit : 10 # Maintenant :
# Mais i l e s t ou? >>> print(p ) # : 30
10 >>> print(p ) 11
11 # 12 >>> print(v ) # : 110
12 Traceback ( most recent call last ):
13 File " < console > " , in < module >
14 NameError : name ’p ’ i s not defined
Les variable p et v sont glo-
bales.
La variable p est locale elle Elles sont accessible et modi-
est crée à l’intérieur de la fonc- fiables par la fonction
tion et détruite de suite après son
usage.
A. Hassan@Champollion PCSI-MPSI – 13
Fonctions (. . . suite)
2. Fonctions avec arguments dont certains ont des valeurs par défaut :
1 def Carre_Et_n_Bonjour (x , n =1): # c a l c u l e x2 e t e c r i r e Bonjour ! n f o i s
2 return( x*x , n* " Bonjour ! " ) # par d ef a u t n vaut 1
3 # f i n du b l o c Bonjour
4 # U t i l i s e r l a f o n c t i o n Carre_Et_n_Bonjour
5 a = Carre_Et_n_Bonjour (4) # : (16 , Bonjour ! )
6 b = Carre_Et_n_Bonjour (4 ,3) # : (16 , Bonjour ! Bonjour ! Bonjour ! )
7 c , bn = Carre_Et_n_Bonjour (4 ,3) # : c=16 e t bn= Bonjour ! Bonjour ! Bonjour !
8 print(a ); print( b [1])
Une fonction est dite récursive, ssi elle contient un appel à elle même.
A. Hassan@Champollion PCSI-MPSI – 15
Appliquer une fonction aux éléments d’une
liste(Exemple)
EvenDigits compte le nombre de chiffres décimaux pairs d’un entier :
1 ##
2 def EvenDigits (n ,b =10):
3 " ""
4 Entree ( s ): n entier (b =10 par defaut )
5 Sortie ( s ): s le nombre de chiffres pairs " " "
6 s =0; # b=10 par d ef a u t
7 while n >0:
8 r =n % b;
9 i f r %2==0:
10 s +=1
11 n =n // b ;
12 return s
13 # U t i l i s a t i o n de EvenDigits
14 a =2**13+51; # a = 213 + 51
15 test = EvenDigits ( a)
16 print(" nombre de chiffres pairs dans a = " ,a , " est : " , test )
17 x = range (22 ,56)
18 for k in x:
19 print(" k= " ,k , " on a " , EvenDigits ( k ) ," chiffres pairs " )
20 #
21 lp =[ EvenDigits ( k ) for k in x ]
22 print( lp )
23 #
24 lp2 = list ( map ( EvenDigits , x )) # x d o i t e t r e un i t e r a b l e
25 print( lp2 ) # transformer l e r e s u l t a t en l i s t avant l ’ a f f i c h a g e
26 ##
A. Hassan@Champollion PCSI-MPSI – 16
Exercice
Programmation en
n
Écrire une fonction puiss(x,n) qui renvoie x , où x est un Python (suite)
Les Fonctions
flottant et n est un entier relatif (i.e. n ∈ Z). Pourquoi les
fonctions?
Fonctions
1 def puiss (x , n ): intégrées( built in
2 nn = n functions)
3 s =1 Fonctions
4 i f nn <0: # cas des puissances n e g a t i v e s importées
5 nn = - nn Exemple
pratique:
6 for k in range ( nn ): Fonctions
7 s =s * x mathématiques
8 i f n <0: usuelles, le module
9 return 1/ s math et numpy
10 else : Quelques Fonctions
11 return s du module math
Liste des modules
importants
C’est une très mauvaise méthode surtout lorsque n est très Définir ses propres
fonctions : def
grand. Les fonctions à la
volée: l’opérateur
A. Hassan@Champollion PCSI-MPSI – 18
Algorithme d’Horner
On ré-ecrit
A. Hassan@Champollion PCSI-MPSI – 19
Comparaison des résultats
A. Hassan@Champollion PCSI-MPSI – 20
Utilisation de la fonction puissance de Python a**b , ou pow(a,b , (qui n’est
pas naïve).
1 ## R e s u l t a t s du Test
2 test =50000*[1] # polynome de degre 49999
3 t1 = tm . time ()
4 pn = naivePolynom ( test ,0.0)
5 tn = tm . time () - t1
6 #
7 t1 = tm . time ()
8 pnl = lessNaivePolynom ( test ,0.0)
9 tln = tm . time () - t1
10 #
11 t1 = tm . time ()
12 ph = Horner ( test ,0.0)
13 th = tm . time () - t1
14 #
15 print( ’ Comparaison des algorithmes ’)
16 print(" -------------- - -- -- -- -- -- -- " )
17 print(" Algorithme naif : " ,tn ," valeur p (x )= " , pn )
18 print(" Algorithme moins naif : " ,tln ," valeur p ( x )= " , pnl )
19 print(" Algo d ’ Horner : " ,th , " valeur p ( x )= " , ph )
20 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
21 Comparaison des algorithmes
22 ------------ -- -- -- -- - -- -- --
23 Algorithme naif : 0.140625 valeur p( x )= 1.0
24 Algo d ’ Horner : 0.03125 valeur p( x )= 1.0
25 >>> tn / th
26 4.5
27 >>> # Horner est 4 fois plus rapide
A. Hassan@Champollion PCSI-MPSI – 21
Programmation en
Python (suite)
Les Fonctions
Graphique avec
Python
Tracé de courbe
Résultat
Tracé de
courbe. . . Nuage de
points
Nuage de points
A. Hassan@Champollion PCSI-MPSI – 22
Tracé de courbe
A. Hassan@Champollion PCSI-MPSI – 23
Résultat
2.0
Fonctions x ↦ x et x
cos( ) ↦ x
sin( )
sin
1.5 cos
Max local
locmax
1.0
0.5
les ordonnees
0.0
−0.5
−1.0
−1.5
−2.0
−6 −4 −2 0 2 4 6
les x
A. Hassan@Champollion PCSI-MPSI – 24
Tracé de courbe. . . Nuage de points
Exemple II :
1 hold ( ’ off ’)
2 ##
3 # graphique d ’ une f o n c t i o n cont non d e r i v a b l e
4 x = linspace (0 ,3.14 ,1000)
5 y1 =[]
6 y2 =[]
7 y3 =[]
8 y4 =[]
9 y5 =[]
10 for t in x:
11 y1 . append ( arccos ( cos (2* t ))/2.)
12 y2 . append ( arccos ( cos (4* t ))/4.)
13 y3 . append ( arccos ( cos (8* t ))/8.)
14 y4 . append ( arccos ( cos (16* t ))/16.)
15 y5 . append ( arccos ( cos (32* t ))/32.)
16 clf ()
17 plot (x , y1 ,x , y2 ,x ,y3 ,x , y4 )
18 show ()
19 Y = array ( y1 )+ array ( y2 )+ array ( y3 )+ array ( y4 )+ array ( y5 )
20 title ( ’ fonction continue mais derivable nulle part ’)
21 plot (x , Y )
22 savefig ( ’ figure_5 . eps ’)
A. Hassan@Champollion PCSI-MPSI – 25
Nuage de points
2.0
1.5
1.0
0.5
0.0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
A. Hassan@Champollion PCSI-MPSI – 26
Nuage de points
0.40
Figure en Nuage de points x ↦x 2
e−x
2
0.35
0.30
0.25
0.20
0.15
0.10
0.05
0.00
−6 −4 −2 0 2 4 6
A. Hassan@Champollion PCSI-MPSI – 27
Tracé de plusieurs fenêtres graphiques
Exemple III :
1 clf ()
2 t = linspace ( -5 ,5 ,100)
3 xt = sin ( t )
4 yt = cos ( t ) # on a u r a i t pu xt , y t=s i n ( t ) , cos ( t )
5 plot (t , xt , ’r - ’ ,t ,yt , ’y - ’ , linewidth =5)
6 #axes ( ’ equ a l ’ )
7 #p l o t ( xt , y t )
8 show ()
9 ##
10 def f (x , y ): return (1 - x /2+ x **5+ y **3)* np . exp ( -x **2 - y **2)
11 #
12 n = 256
13 x = linspace ( -3 ,3 , n )
14 y = linspace ( -3 ,3 , n )
15 X ,Y = meshgrid (x ,y )
16 #
17 axes ([0.025 ,0.025 ,0.95 ,0.95])
18 subplot (211)
19 Z =f (X ,Y )
20 plot_surface (X , Y , Z )
21 show ()
22 subplot (212)
23 contourf (X , Y , f (X , Y ) , 8 , alpha =.75 , cmap = cm . hot )
24 C = contour (X , Y , f (X , Y ) , 8 , colors = ’ black ’ , linewidth =.5)
A. Hassan@Champollion PCSI-MPSI – 28
Sous figures : Résultats
1.0
Histoire de 2 sous_figures(subplots)
0.8
Oscillation amortie
0.6
0.4
0.2
0.0
−0.2
−0.4
−0.6
−0.80 1 2 3 4 5
1.0
Normal(non amorti)
0.5
0.0
−0.5
A. Hassan@Champollion PCSI-MPSI – 29
Sous figures : Exemples
Tracer (t, x(t)), (t, y(t)) puis le portrait de phase (x(t), y(t)) [courbe
paramétrée].
x(t) = t.e−t cos(t) et y(t) = 2te−t .sin(t)
1 # exemple de r em p l i s s a ge
2 fill (x , y , ’r ’)
3 grid ( True )
4 show ()
5 ##
6 # courbes parametrees
7 clf ()
8 t = linspace (0 ,6.28 ,500) # engendrer 100 p o i n t s ent r e 0 ( i n c l u s ) e t 2π
9 xt = cos ( t )+.5* cos (7* t )+ sin (17* t )/3.
10 yt = sin ( t )+.5* sin (7* t )+ cos (17* t )/3.
11 plot ( xt , yt , ’ -r ’ , linewidth =4)
12 # ou bien
13 #p1=p l o t ( x , s i n ( x ) , ’ r −’) # ou marker=’s ’
14 #p2=p l o t ( x , cos ( x ) , ’ bo ’ ) # ou marker=’v ’
15 axis =[ -1.5 ,1.5 , -1.5 ,1.5] # [ xmin , xmax , ymin , ymax ]
16 title ( ’ Courbes parametrees ’)
17 # t i t r e de l a f i g u r e
18 #y l a b e l ( ’ l e s ordonnees ’ ) # l a b e l des ordonnÃľes
19 #x l a b e l ( ’ l e s x ’ ) # l a b e l des a b s c i s s e s
20 #legend ( [ " s i n " ," cos " ] ) # une l egend e
21 grid ( True )
A. Hassan@Champollion PCSI-MPSI – 30
Le SHOW
0.3
t ↦ x(t)
0.8
t ↦ ()
y t
0.6
0.2
0.4
0.1 0.2
0.0 0.0
−0.2
−0.1
−0.4
−0.2 −0.6
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0.8
t ↦ x(t),y(t)
7
inversion d'axes
0.6 6
0.4 5
0.2 4
0.0 3
−0.2 2
−0.4 1
−0.6 0
−0.2 −0.1 0.0 0.1 0.2 0.3 −0.6−0.4−0.2 0.0 0.2 0.4 0.6 0.8
A. Hassan@Champollion PCSI-MPSI – 31
Tracé de nappes en 3D
A. Hassan@Champollion PCSI-MPSI – 32
Visualisation en 3D
nappe z = sin(x 2
+ y
2
)
1.01
0.8
0.51
0.6
0.4
0.00 0.2
0.0
-0.51 −0.2
−0.4
-1.01 −0.6
−0.8
6
4
2
−6 0
−4
−2 −2
0
2 −4
4
6 −6
A. Hassan@Champollion PCSI-MPSI – 33