33
A. Hassan@Champollion PCSI-MPSI – 1 Informatique en PCSI et MPSI Champollion 2014-2015 A. HASSAN 2 décembre 2014

Informatique en PCSI et MPSI Champollion 2014-2015 · A. Hassan@Champollion PCSI-MPSI – 3 ... import math as m # remplacer prefixe numpy par m ... Tout charger : from math import

  • Upload
    lythu

  • View
    297

  • Download
    2

Embed Size (px)

Citation preview

A. Hassan@Champollion PCSI-MPSI – 1

Informatique en PCSI et MPSIChampollion 2014-2015

A. HASSAN

2 décembre 2014

Programmation en Python (suite)Les Fonctions

Programmation enPython (suite)Les FonctionsPourquoi lesfonctions?Fonctions

intégrées( built in

functions)

Fonctionsimportées

Exemple

pratique:Fonctionsmathématiquesusuelles, le module

math et numpy

Quelques Fonctionsdu module math

Liste des modulesimportants

Définir ses propres

fonctions : def

Les fonctions à lavolée: l’opérateur

lambda

Définir ses propresfonctions :Exemples

Fonction versusProcédureVariable globalesVs Variables localesFonctions(. . . suite)

Fonctionsrécursives (àdétailler en 2eannée)

A. Hassan@Champollion PCSI-MPSI – 2

Pourquoi les fonctions ?

Programmation enPython (suite)Les FonctionsPourquoi lesfonctions?Fonctions

intégrées( built in

functions)

Fonctionsimportées

Exemple

pratique:Fonctionsmathématiquesusuelles, le module

math et numpy

Quelques Fonctionsdu module math

Liste des modulesimportants

Définir ses propres

fonctions : def

Les fonctions à lavolée: l’opérateur

lambda

Définir ses propresfonctions :Exemples

Fonction versusProcédureVariable globalesVs Variables localesFonctions(. . . suite)

Fonctionsrécursives (àdétailler en 2eannée)

A. Hassan@Champollion PCSI-MPSI – 3

• Éviter la redondance et la répétition• Décomposer et segmenter un problème complexe en sous

problèmes moins complexes• Faciliter l’analyse et améliorer la clarté du code• Re-utilisation du code dans d’autres programmes.• En fin cacher des informations : on n’exhibe que le titre de la

fonction et non son code (qui peut être considérer commeune propriété intellectuelle).

Certaines fonctions sont disponibles au démarrage de Pyhton (built-in functions ), d’autres sont à chercher dans des modulesspécialisés, sinon il faut les créer. . .

Fonctions intégrées( built in functions)

A. Hassan@Champollion PCSI-MPSI – 4

Fonctions immédiatement disponibles au démarrage de Python. Liste nonexhaustive :Syntaxe Emploi

abs(a) valeur absolue : |a|round(a) et round(a,[n]) arrondi de a, ou à n décimalesbin(a), hex(a), oct(a) conversion en binaire, hexadécimale, octale

chr(a) exemple : chr(97) renvoie ’a’

ord(a) la réciproque de chr()

complexe (a,b) renvoie le complexe a+ ib

len(a) longueur (chaine, tuple, liste, ensemble. . . )divmod (a,b) quotient et reste de la division a÷ b

min(a), max(a) max et min d’une séquencepow(x,y,[z] xy ou xymod z lorsque z présentint(a),float(a), list(a)

str(a), tuple(a), ens(a)conversion entre types

sorted(a) trier une liste : sorted([2,1,1,3,2])

� �

Obtenir de l’aide : help(nom_fonction)

Fonctions importées

A. Hassan@Champollion PCSI-MPSI – 5

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

# ut i l i s a t i o n de f1 (mais avec l e pre f i x : MyModule)MyModule .f1(x,y) # f2 es t d i sponib l e

2. Importer uniquement les fonctions qui nous intéressent, ici f1 :

from MyModule import f1

# ut i l i s a t i o n de f1 (mais sans l e pre f i x : MyModule)f1(x,y) # f2 n ’ es t pas d isponib l e

3. Importer en créant un alias, ainsi on évite les conflits des noms :

import MyModule as MyMo # al i a s MyMo# u t i l i s a t i o n de f1 (mais avec l e pre f i x MyMo)MyMo.f1(x,y)

4. Tout importer et sans préfixe :

from MyModule import *

# ut i l i s a t i o n de f1 (mais sans l e pre f i x MyMo)f1(x,y)

Exemple pratique : Fonctions mathématiques usuelles,le module math et numpy

A. Hassan@Champollion PCSI-MPSI – 6

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 reco i t cos(π) = −1

2. Utiliser un alias(meilleure façon) :import math as m # remplacer pre f ixe numpy par mx=m.pi # x← πy=m.cos(x) # y← cos(π)

3. Charger des fonctions spécifiques :from math import cos ,exp ,sin ,pi # uniquement :π, cos , sin et exp

x=pi # x← π

y=exp(-x)-cos(x) # y← e−π − cos(π)

4. Tout charger :from math import *

x=pi # x← π

y=exp(-x)-cos(x) # y← e−π − cos(π)

5. Pour connaître le contenu d’un module, avoir de l’aide :import math

dir(math) # af f i che l e s fonctions contenues dans mathhelp (math.gamma) # une f i che d ’ aide sur la fonction gamma

Quelques Fonctions du module math

A. Hassan@Champollion PCSI-MPSI – 7

syntaxe fonctions

exp; log; log10; log2 exponentielle et logarithmescos; sin; tan Fonctions trigonométriquesacos; asin; atan; atan2 Fonctions trigonométriques réciproquescosh; sinh; tanh Fonctions hyperboliquesacosh; asinh; atanh Fonctions hyperboliques réciproquestrunc; 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) # :

Liste des modules importants

A. Hassan@Champollion PCSI-MPSI – 8

1. numpy pour l’analyse numérique et calcul matriciel.

2. scipy une surcouche de numpy , calcul intégral et diffrentiel, optimisation

3. matplotlib pour les graphiques.

4. random pour le calcul des probabilités.5. time pour l’utilisation de l’horloge de l’ordinateur.6. os pour la gestion des fichiers et utiliser les fonctions du système

d’exploitation.

Définir ses propres fonctions : def

A. Hassan@Champollion PCSI-MPSI – 9

Syntaxe générale :

1 # le nom que je donne es t MyFunction2 def MyFunction(v1,v2 ,..., df1=a,df2=b, *g): # les : marque l e debut3 """ Entre ces trois guillemets on ecrit a quoi sert cette fonction , surtout

4 Entrees : ses arguments v1, v2, ..., df1 ,.. , *g,

5 Sorties : ce qu’elle renvoie

6 """

7 global x1,x2 ,... # parametres globaux s ’ i l y en a8 instruction1

9 instruction2

10 i f i>1:

11 op1

12 op2

13 ............

14 return s1,s2 ,... # valeurs renvoyees par la fonction s i je veux15 # FIN DE L’INDENTATION du Block MyFunction16 def MyFunction2(): # I l y a d ’ autres fonctions dans la vie17 instr.. # instruct ion hors la fonction nomFunction

Pour utiliser cette fonction, il suffit de taper :

1 MyFunction(x,y,z ,...) # Avec l e nombre qu ’ i l faut d ’ arguments2 a=MyFunction(x,y,z ,...) # Stocker l e s valeurs retrournees pour l e s t r a i t e r apres

Les fonctions à la volée : l’opérateur lambda

Programmation enPython (suite)Les FonctionsPourquoi lesfonctions?Fonctions

intégrées( built in

functions)

Fonctionsimportées

Exemple

pratique:Fonctionsmathématiquesusuelles, le module

math et numpy

Quelques Fonctionsdu module math

Liste des modulesimportants

Définir ses propres

fonctions : def

Les fonctions à lavolée: l’opérateur

lambda

Définir ses propresfonctions :Exemples

Fonction versusProcédureVariable globalesVs Variables localesFonctions(. . . suite)

Fonctionsrécursives (àdétailler en 2eannée)

A. Hassan@Champollion PCSI-MPSI – 10

On peut Définir des fonctions simples à la volée :

1 # pour de f in i r f : x 7→ 2x2 − 5

2 f=lambda x: x**2-5 # et c ’ es t f a i t

3 # pour de f in i r (x;y) 7→ g(x;y) =√

x2 + y2

4 g=lambda x,y : (x**2+y**2)**(0.5)

5 # A koi Serje ?:6 mystery=lambda l:len(set(l))

7 mystery([1,2,4,-1,2,1]) # Alors?8 mystery("coucou c’est moi") # Re−Alors?

Définir ses propres fonctions : Exemples

A. Hassan@Champollion PCSI-MPSI – 11

Exemple élémentaire : Écrire une fonction qui donne le reste et le quotient dedeux entiers positifs

1 def DivEtReste(x,y):

2 """ Donne le quotient et reste de l’entier x par l’entier y (non nul)

3 Entrees : x et y

4 Sorties : d le quotient et r le reste """

5 # On expl ique a quoi ser t la fonction6 x=int(x); y=int(y); # on s ’ assure que x et y ent iers7 i f x<0 or y<=0:

8 return "x et y doivent etre >0 " #9 i f x<y: # cas ou x < y

10 d=0; r=x;

11 return (d,r)

12 else: # cas ou x ≥ y13 d=0;

14 while x>=y:

15 x=x-y

16 d=d+1

17 r=x

18 return (d,r)

19 # fin du scr ip t de DivEtReste

Exemple d’utilisation : >>> DivEtReste(10,3)

(3,1)

Fonction versus Procédure

A. Hassan@Champollion PCSI-MPSI – 12

1. Procédure

1 def MySum(x,y):

2 z=x+y

3 print(z)

4 # Uti l i sa t ion :5 MySum(5,6)

6 # Par contre7 11* MySum(5,6)

2. Fonction (Valeur renvoyée) avec return v1,v2, ...

1 def MySum(x,y):

2 z=x+y

3 return(z)

4 # Uti l i sa t ion :5 print(MySum (5,6))

6 # Maintenant :7 11* MySum(5,6)

A

Éviter return print("mon resultat est:",res) où res est la valeur que

calcule funct

Plutôt : s=funct(x,y,..) puis print(s)

Variable globales Vs Variables locales

A. Hassan@Champollion PCSI-MPSI – 13

1. Variable(s) locale(s)

1 def MySum(x,y):

2 z=x+y

3 p=x*y

4 return(z)

5 # Uti l i sa t ion :6 >>> MySum (5,6)

7 #8 >>> 11* MySum(5,6)

9 # et l e produit :10 >>> print(p) # Mais i l es t ou?11 #12 Traceback (most recent call last ):

13 File "<console >", in <module >

14 NameError : name ’p’ is not defined

La variable p est locale elleest crée à l’intérieur de la fonc-tion et détruite de suite après sonusage.

2 Variable(s) globale(s)

1 v=3.14159

2 def MySum(x,y):

3 global p,v

4 z=x+y

5 p=x*y

6 v=10*z

7 return(z)

8 # Uti l i sa t ion :9 >>> print(MySum (5,6))

10 # Maintenant :11 >>> print(p) # : 3012 >>> print(v) # : 110

Les variable p et v sont glo-bales.Elles sont accessible et modi-fiables par la fonction

Fonctions (. . . suite)

A. Hassan@Champollion PCSI-MPSI – 14

1. Fonction sans arguments :1 def Bonjour (): # Ne pas oub l ier l e s : A

2 return "Bonjour " # Mais . . .3 # fin du bloc de la fonction

2. Fonctions avec arguments dont certains ont des valeurs par défaut :

1 def Carre_Et_n_Bonjour (x,n=1): # calcu le x2 et ecr i re Bonjour ! n f o i s2 return(x*x,n*"Bonjour ! ") # par defaut n vaut 13 # fin du bloc Bonjour4 # Ut i l i s e r la fonction Carre_Et_n_Bonjour5 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 et bn= Bonjour ! Bonjour ! Bonjour !8 print(a); print(b[1])

3. Fonctions avec un nombre indéterminé d’arguments :

1 def CompteVoyelles (* phrase ):# le nombre de l e t t r e s de phrase inconnu a l ’ avance2 voy=[’a’,’A’,’e’,’E’,’i’,’I’,’o’,’O’,’u’,’U’]# les voye l l e s3 s=0 # compteur de voye l l e s i n i t i a l i s e a 04 for c in phrase: # c parcourt l e s caracteres de phrase5 i f c in voy:

6 s+=1

7 return s

8 # Uti l i sa t ion :9 print(CompteVoyelles(’o’,’h’,’l’,’a’,’l’,’a’))# : 3

10 ph=’ceci est une phrase contenant 16 voyelles , on parie?’#11 CompteVoyelles (*ph) # : 17 perdu

Fonctions récursives (à détailler en 2e année)

A. Hassan@Champollion PCSI-MPSI – 15

Une fonction est dite récursive, ssi elle contient un appel à elle même.

Elle doit vérifer les conditions sui-vantes :

1. Elle contient un (ou plusieurs)cas de base (ou de démarrage)

2. Elle doit toujours modifier sontétat pour se ramener aux cas debase

3. Elle fait appel à elle même

Exemples :

1 # exemple 1:2 # la fonction f a c t o r i e l l3 def fact(n):

4 i f n==0:

5 return 1

6 else:

7 return fact(n-1)

8 # exemple 2:9 # fonction qui somme l e s ch i f f r e s

10 # d ’un entier en base b11 def sumc(n,b=10):

12 i f 0<=n<=9:

13 return n

14 else:

15 return n%b+sumc(n//b)

Appliquer une fonction aux éléments d’uneliste(Exemple)

A. Hassan@Champollion PCSI-MPSI – 16

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 defaut7 while n>0:

8 r=n%b;

9 i f r%2==0:

10 s+=1

11 n=n//b;

12 return s

13 # Uti l i sa t ion de EvenDigits14 a=2**13+51; # a = 213 + 5115 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 doit etre un i t e r a b l e25 print(lp2) # transformer l e r e su l t a t en l i s t avant l ’ a f f i chage26 ##

Exercice

Programmation enPython (suite)Les FonctionsPourquoi lesfonctions?Fonctions

intégrées( built in

functions)

Fonctionsimportées

Exemple

pratique:Fonctionsmathématiquesusuelles, le module

math et numpy

Quelques Fonctionsdu module math

Liste des modulesimportants

Définir ses propres

fonctions : def

Les fonctions à lavolée: l’opérateur

lambda

Définir ses propresfonctions :Exemples

Fonction versusProcédureVariable globalesVs Variables localesFonctions(. . . suite)

Fonctionsrécursives (àdétailler en 2eannée)

A. Hassan@Champollion PCSI-MPSI – 17

Écrire une fonction puiss(x,n) qui renvoie xn, où x est unflottant et n est un entier relatif (i.e. n ∈ Z).

1 def puiss(x,n):

2 nn=n

3 s=1

4 i f nn <0: # cas des puissances negatives5 nn=-nn

6 for k in range(nn):

7 s=s*x

8 i f n<0:

9 return 1/s

10 else:

11 return s

C’est une très mauvaise méthode surtout lorsque n est trèsgrand.On verra comment employer un algorithme d’exponentiationrapide . . . à suivre

Exemple Fondamental : Évaluation polynômiale

A. Hassan@Champollion PCSI-MPSI – 18

Soit : P(x) = a0 + a1x+ a2x2 + · · ·+ an−1x

n−1 + anxn =

k=n∑

k=0

akxk, (an 6= 0).

Évaluer P en un point x. P est donnée sous forme de liste de coefficients (selonl’ordre décroissant ou croissant de degré).Méthode naïve :

Entrées : A liste des coeffs et x

point d’évaluationSorties : s valeur de P(x)s← 0

pour k = 0 à longueur(A)-1 faires← s+A[k].xk

renvoyer s

Oups : Il faut penser à programmerx 7→ xk

1 def naivePolynom(A,x,reverse =0):

2 """

3 Evaluation naive d’un polynome

4 Entrees : A liste des Coeffs

5 x valeur d’evaluation

6 Sorties : P(x)

7 """

8 A=list(A)

9 n=len(A) # n − 1 = deg(P)

10 s=0 # Attention : pour moi 00 = 111 for k in range(n):

12 s+=A[k]*x**(k) # s← s + akxk

13 return s

Algorithme d’Horner

A. Hassan@Champollion PCSI-MPSI – 19

On ré-ecrit

P(x) = (((an)x+ an−1)x+ an−2)x+ an−3)x+ · · ·+ a0

Aucun calcul de puissance, que des multiplications et additions :

Entrées : A liste des coeffs et x

point d’évaluation classésdans le sens croissant desdegrés

Sorties : s valeur de P(x)

s← 0

pour k = len(A) à 0 (pas=-1)faire

s← s.x+A[k]renvoyer s

1 def Horner(A,x,c=1):

2 """

3 Evaluation polynomiale selon Horner

4 Entrees : A liste des Coeffs

5 (sens croissant des degres );

6 x valeur d’evaluation

7 Sorties : P(x)

8 """

9 # On met l e s coe f f s dans l e sens voulu10 i f c!=1:

11 A=A[::-1]

12 s,n=0,len(A)

13 for i in range(n):

14 s=s*x+A[n-1-i]

15 return s

Comparaison des résultats

A. Hassan@Champollion PCSI-MPSI – 20

1 test =50000*[1] # polynome de degre 499992 t1=tm.time ()

3 pn=naivePolynom(test ,0.0)

4 tn=tm.time()-t1

5 #6 t1=tm.time ()

7 ph=Horner(test ,0.0)

8 th=tm.time()-t1

9 #10 print(’Comparaison des algorithmes’)

11 print(" --------------------------- ")

12 print(" Algorithme naif:",tn ," valeur p(x)=",pn)

13 print(" Algo d’Horner:",th," valeur p(x)=",ph)

14 ##−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−15 >>> (executing cell "Resultats du Test" (line 54 of "Horner.py"))

16 Comparaison des algorithmes

17 ---------------------------

18 Algorithme naif: 250.46875 valeur p(x)= 1.0

19 Algo d’Horner: 0.03125 valeur p(x)= 1.0

20 # rapport de vitesse avec une puissance tres naive

21 >>>tn/th

22 8015.0

Python ne calcule pas xk naïvement

A. Hassan@Champollion PCSI-MPSI – 21

Utilisation de la fonction puissance de Python a**b , ou pow(a,b , (qui n’estpas naïve).

1 ## Resultats du Test2 test =50000*[1] # polynome de degre 499993 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

Graphique avec Python

Programmation enPython (suite)Les Fonctions

Graphique avecPython

Tracé de courbe

RésultatTracé decourbe. . .Nuage depoints

Nuage de points

Nuage de points

Tracé de plusieursfenêtres graphiques

Sous figures:RésultatsSous figures:Exemples

Le SHOWTracé de nappes en3D

Visualisation en 3D

A. Hassan@Champollion PCSI-MPSI – 22

Tracé de courbe

A. Hassan@Champollion PCSI-MPSI – 23

Pour tracer des courbes on a besoin du package matplotlib

Exemple I : Traçons les courbes des sinus et cosinus :

1 ##2 from numpy import * # charger l e module numpy3 from matplotlib.pyplot import * # charger l e package matp lo t l i b . pyplot4 from os import chdir ,getcwd

5 chdir("G:\\ Azzam\\ MyPython \\ DropAzzam \\ Python1stYear")

6 ##7 x=linspace (-5,5,100) # engendrer 100 points entre −5 ( inc lus ) et 58 plot(x,cos(x),’-r’,x,sin(x),’bo’,linewidth =4)

9 # ou bien10 #p1=p lo t (x , sin (x ) , ’ r−’) # ou marker=’s ’11 #p2=p lo t (x , cos (x ) , ’ bo ’) # ou marker=’v ’12 axis =[-5,5,-1.5,1.5] # [xmin ,xmax,ymin ,ymax]13 title(’Fonctions $x\mapsto\cos(x)$ et $x\mapsto \sin(x)$’) # t i t r e de la f igure14 ylabel(’les ordonnees ’) # labe l des ordonnÃľes15 xlabel(’les x’) # labe l des absc i sses16 legend (["sin","cos"]) # une legende17 #annotate ( ’ t ex te ’ ,1 ,1) # ecr ire du tex te18 grid(True)

19 savefig ("figure_1 .eps") # ou save (" f i g1 . png")pour autre format de l ’ image20 show () # Montrer l e graphique

Résultat

A. Hassan@Champollion PCSI-MPSI – 24

−6 −4 −2 0 2 4 6les x

−2.0

−1.5

−1.0

−0.5

0.0

0.5

1.0

1.5

2.0le

s ord

onnees

locmaxMax local

Fonctions x↦cos(x) et x↦sin(x)

sincos

Tracé de courbe. . . Nuage de points

A. Hassan@Champollion PCSI-MPSI – 25

Exemple II :

1 hold(’off’)

2 ##3 # graphique d ’une fonction cont non der ivab l e4 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’)

Nuage de points

A. Hassan@Champollion PCSI-MPSI – 26

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.50.0

0.5

1.0

1.5

2.0

2.5fonction continue mais derivable nulle part

Nuage de points

A. Hassan@Champollion PCSI-MPSI – 27

−6 −4 −2 0 2 4 60.00

0.05

0.10

0.15

0.20

0.25

0.30

0.35

0.40Figure en Nuage de points x↦x2 e−x

2

Tracé de plusieurs fenêtres graphiques

A. Hassan@Champollion PCSI-MPSI – 28

Exemple III :

1 clf()

2 t=linspace (-5,5,100)

3 xt=sin(t)

4 yt=cos(t) # on aurait pu xt , yt=sin ( t ) , cos ( t )5 plot(t,xt ,’r-’,t,yt ,’y-’,linewidth =5)

6 #axes ( ’ equal ’)7 #plo t ( xt , yt )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)

Sous figures : Résultats

A. Hassan@Champollion PCSI-MPSI – 29

0 1 2 3 4 5−0.8−0.6−0.4−0.2

0.00.20.40.60.81.0

Osc

illati

on a

mort

ie

Histoire de 2 sous_figures(subplots)

0.0 0.5 1.0 1.5 2.0temps (s)

−1.0

−0.5

0.0

0.5

1.0

Norm

al(

non a

mort

i)

Sous figures : Exemples

A. Hassan@Champollion PCSI-MPSI – 30

Tracer (t, x(t)), (t, y(t)) puis le portrait de phase (x(t), y(t)) [courbeparamétrée].x(t) = t.e−t cos(t) et y(t) = 2te−t.sin(t)

1 # exemple de remplissage2 fill(x, y, ’r’)

3 grid(True)

4 show ()

5 ##6 # courbes parametrees7 clf()

8 t=linspace (0 ,6.28 ,500) # engendrer 100 points entre 0 ( inc lus ) et 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 bien13 #p1=p lo t (x , sin (x ) , ’ r−’) # ou marker=’s ’14 #p2=p lo 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 la f igure18 #y labe l ( ’ l e s ordonnees ’) # l a b e l des ordonnÃľes19 #xlabe l ( ’ l e s x ’) # l a b e l des absc i sses20 #legend ([" sin " ,"cos "]) # une legende21 grid(True)

Le SHOW

A. Hassan@Champollion PCSI-MPSI – 31

0 1 2 3 4 5 6 7−0.2

−0.1

0.0

0.1

0.2

0.3t↦x(t)

0 1 2 3 4 5 6 7−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8t↦y(t)

−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.8t↦x(t),y(t)

−0.6−0.4−0.2 0.0 0.2 0.4 0.6 0.80

1

2

3

4

5

6

7inversion d'axes

Tracé de nappes en 3D

A. Hassan@Champollion PCSI-MPSI – 32

Exemple : Tracé de la nappe z = sin(x2 + y2)

1 from mpl_toolkits.mplot3d import Axes3D

2 from matplotlib import cm

3 from matplotlib.ticker import LinearLocator , FormatStrFormatter

4 import matplotlib.pyplot as plt

5 import numpy as np

6

7 fig = plt.figure () # def in i r une f igure8 ax = fig.gca(projection=’3d’)

9 X = np.arange(-5, 5, 0.25) # in t e r va l l e des x10 Y = np.arange(-5, 5, 0.25) # in t e r va l l e des y11 X, Y = np.meshgrid (X, Y) # creer la g r i l l e12 R = np.sqrt(X**2 + Y**2)

13 Z = np.sin(R) # surface Z = sin(x2 + y2)14 surf = ax.plot_surface(X, Y, Z, rstride =1, cstride =1, cmap=cm.coolwarm ,

15 linewidth =0, antialiased=False)

16 ax.set_zlim (-1.01, 1.01) # fenetre des z

17 plt.title("nappe z = sin(x2 + y2)")18 ax.zaxis.set_major_locator (LinearLocator (5)) # graduation axe z19 ax.zaxis.set_major_formatter (FormatStrFormatter (’%.02f’))# format des nombres20 fig.colorbar (surf , shrink =0.5, aspect =5)

21 plt.savefig ("G:\\ Azzam\\ MyPython \\ DropAzzam \\ Python1stYear \\fig3d.eps")

22 plt.show ()

Visualisation en 3D

A. Hassan@Champollion PCSI-MPSI – 33

−6−4

−20

24

6 −6−4

−20

24

6

-1.01

-0.51

0.00

0.51

1.01

nappe z=sin(x2 +y2 )

−0.8−0.6−0.4−0.20.00.20.40.60.8