SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
Mathématiques et Python
Le langage Python seul ne sait pas faire grand chose dans le domaine mathématique, comme
tracer une fonction, calculer des valeurs de fonctions usuelles, réaliser des opérations matricielles,...
Cependant, de nombreux modules ont été développés pour pallier ce manque, parmi lesquels in
convient de citer :
– scipy
– numpy
– matplotlib
A noter que le module pylab intègre ces trois modules et ipython.
L’objectif de ce document n’est bien entendu pas d’être exhaustif sur ce qu’il est possible de
faire avec python et ces modules, mais juste de donner quelques points d’entrée sur ces librairies
et de proposer des illustrations par l’exemple de leur utilisation. Dans la mesure du possible, les
exemples collent "pas trop loin" du programme officiel de maths MPSI.
1 Ce que l’on peut faire sans les modules...
1.1 Types
Les types de base qui peuvent être utiles dans la suite sont les suivants :
1.1.1 Types numériques
– integer (attention à la division entre entiers !)
– float
– complex : l’imaginaire pur i est noté j en python.
A tout instant, il est possible d’accéder au type d’une variable a en tapant type(a)
Toute variable définie avec un type change de type lors d’une nouvelle affectation. On peut
aussi changer de type à l’aide des fonctions int(), float(). L’une des caractéristiques importantes
de Python est le typage dynamique. Cependant, si certaines opérations provoquent un changement
de type, certaines restent interdites.
1.1.2 Conteneurs
– listes (par exemple tab = [1, 2, 3, 4, 5])
– index (les indices de listes commencent à 0 : par exemple a[2] donne 3)
– slices (a[1 : 3] donne [2, 3])
Le typage dans les listes est faible, on peut combiner différents types numériques (ou non comme
des chaînes de caractères, des booléens...)
De nombreuses fonctions sont associées à ces listes (concaténation, recherche de sous-chaînes...).
1
Ce document provient de : https://www.apprendre-en-ligne.net/pymath/support.pdf
Il est extrait du site : https://www.apprendre-en-ligne.net/index.php
1.2 Opérateurs élémentaires
Les opérateurs classiques suivantes sont disponibles :
1. +,-,*,/
2. modulo : %
3. exposant : **
4. division entière :// (par exemple 9//2=4)
5. opérateurs de comparaison : ==, !=, <>, <,<=,>,>=
6. opérateurs d’affectation : =,+=,-=,*=,/=,%=,**=,//=
7. les opérateurs bit à bit : & (et), (ou),ˆ(XOR),˜(complément à 1), <<(décalage à gauche),
>> (décalage à droite)
8. opérateurs logiques : and, or, not
9. opérateurs d’appartenance (sur des types comme des chaînes) : in, not in
10. opérateurs d’identité : is, is not
1.3 La librairie standard math
Pour disposer des fonctions mathématiques usuelles, la librairie d’origine du python se nomme
math. On peut alors d’importer juste les fonctions nécessaires par from math import cos, log ou
toutes les fonctions mathématiques par from math import *. Dans le premier cas l’inconvénient
est qu’il faut savoir à l’avance les fonctions utilisées par la suite, dans le deuxième cas on risque de
surcharger inutilement la mémoire.
A noter que pour manipuler des complexes, il faut importer le module cmath en plus du module
math (par exemple pour réaliser des produits de complexes).
1.4 Un exemple : calcul d’intégrales
Pour illustrer les capacités de base de Python, nous proposons de calculer de manière numérique
la valeur de I =
b
a
f(x)dx, en utilisant trois méthodes classiques :
– la méthode des rectangles :I ≈
n−1
i=0
(xi+1 − xi)f
xi + xi+1
2
– la méthode des trapèzes : I ≈ h f(a)+f(b)
2 +
n−1
i=1
f(xi)
– la méthode de Simpson : I ≈ h
6 f(a) + f(b) + 4
n−1
i=0
f(x2i+1) + 2
n−1
i=1
f(x2i) avec h = b−a
n
et xk = a + k h
2
et où (x0 · · · xn) est une subdivision régulière de l’intervalle [a, b] de pas h
Le code 1 donne le source python permettant de réaliser ces trois approximations.
2
§
# −∗− coding : utf −8 −∗−
def r e c t a n g l e s ( f , a , b , n) :
#Methode des r e c t a n g l e s
S=0
for i in xrange (0 , n) :
xi=a+(b−a ) ∗ i / f l o a t (n)
xj=a+(b−a ) ∗( i +1)/ f l o a t (n)
S+= f (( xi+xj ) /2.0) ∗( xj−xi )
return S
def trapezes ( f , a , b , n) :
#Methode des trapezes
S=0
for i in xrange (0 , n) :
xi=a+(b−a ) ∗ i / f l o a t (n)
xj=a+(b−a ) ∗( i +1)/ f l o a t (n)
S+= ( f ( xi )+f ( xj ) ) /2.0∗( xj−xi )
return S
def simpson ( f , a , b , n) :
#Methode de Simpson
S=0
for i in xrange (0 , n) :
xi=a+(b−a ) ∗ i / f l o a t (n)
xj=a+(b−a ) ∗( i +1)/ f l o a t (n)
S+= ( xj−xi ) ∗( f ( xi )+4∗ f (( xi+xj ) /2.0)+f ( xj ) ) /6.0
return S
def fn ( x) :
#fo nction a i n t e g r e r
return 4.0/(1+(x−3)∗(x−3))
def main () :
print "par rectangles : " , r e c t a n g l e s ( fn , 0 . , 5 . , 1 0 0 ) ;
print "par trapèzes : " , trapezes ( fn , 0 . , 5 . , 1 0 0 ) ;
print "par Simpson : " , simpson ( fn , 0 . , 5 . , 1 0 0 ) ;
main ()
¦ ¥
Listing 1 – Approximation numérique d’une intégrale par trois méthodes classiques
1.5 Un autre exemple autour des suites
Prenons un exemple classique, celui du calcul d’une estimation du nombre d’or à l’aide de la
suite de Fibonacci. Le code 2 présente le calcul des n premiers termes de la suite de Fibonacci
u0 = 1, u1 = 1 et un = un−1 + un−2, n ≥ 2 ainsi que la valeur absolue de la différence avec le
nombre d’or 1+
√
5
2 .
3
§
# −∗− coding : utf −8 −∗−
def f i b o n a c c i (n) :
a = b = 1.
for i in range (n) :
a , b = a + b , a
print abs (( a/b) −(1+5∗∗0.5) /2)
return b
def main () :
f i b o n a c c i (30)
main ()
¦ ¥
Listing 2 – Calcul approché du nombre d’or
Exercice 1 Proposer un code permettant de calculer ces mêmes quantités de manière récursive.
Exercice 2 Proposer un code permettant de calculer la somme des éléments d’une suite quelconque
indicés par un ensemble d’entiers J
1.6 Un dernier exemple : zéro d’une fonction
Le code 3 présente un calcul simple d’un zéro d’une fonction dans un intervalle donné, en
utilisant une approche dichotomique.§
# −∗− coding : utf −8 −∗−
def f ( x) :
return x∗∗2 +20∗x −12
def zero ( f , a , b) :
i f f ( a ) ∗ f (b) >0:
print ( ’La fonction ne s’’annule pas dans l’’intervalle [’+s t r ( a )+’,’+s t r (b)
+’]’)
return 0
while ( abs (a−b)>1e−3) :
m=(a+b) /2.
print m
i f f (m) ∗ f ( a ) >0:
a=m
else :
b=m
print ( ’la solution de f(x)=0 est ’+s t r (m) )
return m
print ( zero ( f , −10. ,10.) )
¦ ¥
Listing 3 – Zéro d’une fonction sur un intervalle par dichotomie.
4
Exercice 3 Produire un code qui calcule le zéro d’une fonction en utilisant la méthode de Newton
(algorithme 1) :
Algorithm 1: Méthode de Newton
Entrées: N, , f, fp, x0
n← 0
xn ← x0
répéter
xn ← xn − f(xn)
fp(xn)
n ← n + 1
si fp(xn) < alors
Division par zero
fin
jusqu’à f(xn)
fp(xn) < OU n > N;
Exercice 4 Calculer une approximation de π en utilisant par exemple les deux résultats classiques :
π2
6
=
∞
n=1
1
n2
et
π
2
=
∞
n=1
4n2
4n2 − 1
2 ... Et là où ça va mieux : utilisation des librairies
Python présente l’avantage de recourir aux modules pour le développement de fonctions ou
d’ensembles de fonctionnalités spécifiques. Cela permet une grande flexibilité et une dynamique
de développement importante. Parmi ces modules nous nous intéressons particulièrement dans la
suite à Numpy, Scipy et Matplotlib. Suivant la distribution de Python choisie, l’ensemble de ces
modules, avec d’autres, est automatiquement installé lors de l’installation de Python. Si ce n’est
pas le cas il y a toujours la possibilité de les installer a posteriori.
2.1 Présentation rapide des modules
Ces modules fournissent un ensemble d’objets ainsi qu’un groupes de fonctions permettant de
manipuler nombre d’objets de façon simple et très performantes dans le cadre du calcul scientifique.
Voici la description donnée par le site officiel de Numpy (http ://www.scipy.org, numpy.scipy.org )
SciPy is a collection of mathematical algorithms and convenience functions built on the Numpy
extension for Python. It adds significant power to the interactive Python session by exposing the
user to high-level commands and classes for the manipulation and visualization of data. With SciPy,
an interactive Python session becomes a data-processing and system-prototyping environment ri-
valing sytems such as MATLAB, IDL, Octave, R-Lab, and SciLab. NumPy is the fundamental
package needed for scientific computing with Python. It contains among other things :
– a powerful N-dimensional array object - sophisticated (broadcasting) functions tools for in-
tegrating C/C++ and Fortran code
– useful linear algebra, Fourier transform, and random number capabilities.
5
Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional contai-
ner of generic data. Arbitrary data types can be defined. This allows NumPy to seamlessly and
speedily integrate with a wide variety of databases.
Scipy est un ensemble qui comprend de nombreux modules utiles pour des scientifiques :
– cluster : information theory functions (currently, vq and kmeans)
– weave : compilation of numeric expressions to C++ for fast execution
– fftpack : fast Fourier transform module based on fftpack and fftw when available
– ga : genetic algorithms
– io : reading and writing numeric arrays, MATLAB .mat, and Matrix Market .mtx files
– integrate : numeric integration for bounded and unbounded ranges. ODE solvers.
– interpolate : interpolation of values from a sample data set.
– optimize : constrained and unconstrained optimization methods and root-finding algorithms
– signal : signal processing (1-D and 2-D filtering, filter design, LTI systems, etc.)
– special : special function types (bessel, gamma, airy, etc.)
– stats : statistical functions (stdev, var, mean, etc.)
– linalg : linear algebra and BLAS routines based on the ATLAS implementation of LAPACK
– sparse : Some sparse matrix support. LU factorization and solving Sparse linear systems.
Enfin Matplotlib permet de visualiser en 2D des données.
2.2 Quelques exemples de Numpy
Numpy ajoute le type array qui est similaire à une liste (list) avec la condition supplémentaire
que tous les éléments sont du même type.
Le code 4 présente quelques exemples d’instantiation de matrices simples.
6
§
# −∗− coding : utf −8 −∗−
import numpy as np
# tableau 1D
a1 = np . array ( [ 1 , 2 , 3 , 4 ] , f l o a t )
print a1
#tableau 2D
a2=np . array ( [ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 5 , 6 ] , [ 7 , 8 ] ] ] )
print a2
#matrices de 1
un=np . ones (5)
print un
#matrice diagonale
d = np . diag ( a1 )
print d
#matrice bande
d1 = np . diag ( a1 , −1)
print d1
#matrice à c o e f f i c i e n t s a l é a t o i r e s dans [ 0 , 1 ]
r = np . random . rand (3 ,3)
print r
# I d e n t i t é
i = np . eye (5)
print i
# Matrice n u l l e
z = np . zeros (5)
print z
¦ ¥
Listing 4 – Définitions de matrices
Les opérations classiques sur la matrices sont disponibles à l’aide de numpy : addition, multipli-
cation par un scalaire, produit matriciel...Le code 5 présente quelques exemples de ces opérations.
7
§
# −∗− coding : utf −8 −∗−
import numpy as np
A = np . random . rand (3 ,3)
B=np . diag ( [ 1 . , 2 . , 3 . ] )
v = np . array ( [ 3 . , 4 . , 5 . ] , f l o a t )
# addition
C1 = A+B
C2 = 2.+A
#m u l t i p l i c a t i o n
D1 = 2∗A #c o e f f i c i e n t s de A m u l t i p l i é s par 2
D2 = B∗∗3 #c o e f f i c i e n t s de B à la puissance 3
D3 = A∗B # m u l t i p l i c a t i o n terme à terme
D4 = np . dot (A,B)# m u l t i p l i c a t i o n m a t r i c i e l l e
D5 = np . dot (A, v )#produit matrice / vecteur
D6 = np . kron (A,B)#produit de Kronecker
#t e s t
E1 = A<B#renvoie une matrice de booléens e f f e c t u a n t l e t e s t
bo = np . array ( [ 1 , 0 . , 0 ] , bool )
E2=B[ bo ]#e x t r a i t l e s éléments de B qui correspondent à la valeur v r a i e de bo
E3=A[A>0.5]
¦ ¥
Listing 5 – Opérations sur les matrices
Bien entendu, numpy permet facilement de faire du calcul numérique matriciel : calcul du rang
d’une matrice, inversion d’une matrice, résolution de systèmes linéaires. A titre d’exemple, le code
6 présente quelques possibilités offertes par le module.
8
§
# −∗− coding : utf −8 −∗−
import numpy as np
import numpy . l i n a l g as nl
A = np . random . rand (3 ,3)
b = np . array ( [ 3 . , 4 . , 5 . ] , f l o a t )
#Transposition d ’ une matrice
Aprime=A. transpose ()
#Rang d ’ une matrice
r = np . rank (A)
#Inverse d ’ une matrice
Ainv = nl . inv (A) #attention t e s t e r s i A e s t i n v e r s i b l e . . .
#Résolution de systèmes l i n é a i r e s
x = nl . s o l v e (A, b)
#c a l c u l des éléments propres
nl . e i g (A) #valeurs propres , matrice de passage
#Calcul de normes
n1 = nl . norm(A, np . i n f ) ;
n2 = nl . norm(A,−np . i n f ) ;
n3 = n1 = nl . norm(A, 2 ) ;
n4 = n1 = nl . norm(A, ’fro ’) ;
¦ ¥
Listing 6 – Un peu d’algèbre linéaire avec numpy
Exercice 5 Proposer un code qui code la décomposition de Cholesky d’une matrice A. Comparer
avec l’appel à numpy.linalg.cholesky. Pour rappel, l’algorithme de Cholesky est le suivant :
Algorithm 2: Méthode de Cholesky
pour k ∈ {1 · · · n} faire
akk ← akk −
k−1
p=1
a2
kp
2
pour i ∈ {k + 1 · · · n} faire
aik ← 1
akk
aik −
k−1
p=1
aipakp
fin
fin
Notons que numPy propose de nombreux autres atouts, que nous vous conseillons de décou-
vrir dans la documentation de ce module. A titre d’exemple, citons la classe poly1d qui gère les
polynômes à une variable, documentée comme suit :
9
§
class numpy . poly1d ( c_or_r , r =0, v a r i a b l e=None) [ source ]
A one−dimensional polynomial class .
A convenience class , used to encapsulate natural operations on polynomials so that
said operations may take on t h e i r customary form in code ( see Examples ) .
Parameters :
c_or_r : array_like
The polynomials c o e f f i c i e n t s , in decreasing powers , or i f the value of the second
parameter i s True , the polynomials roots ( values where the polynomial evaluates
to 0) . For example , poly1d ( [ 1 , 2 , 3 ] ) returns an object that r e p r e s e n t s ,
whereas poly1d ( [ 1 , 2 , 3 ] , True ) returns one that r e p r e s e n t s .
r : bool , optional
I f True , c_or_r s p e c i f i e s the polynomials roots ; the d e f a u l t i s False .
v a r i a b l e : str , optional
Changes the v a r i a b l e used when p r i n t i n g p from x to v a r i a b l e ( see Examples ) .
Examples
Construct the polynomial :
>>> p = np . poly1d ( [ 1 , 2 , 3 ] )
>>> print np . poly1d (p)
2
1 x + 2 x + 3
Evaluate the polynomial at :
>>> p ( 0 . 5 )
4.25
Find the roots :
>>> p . r
array ([ −1.+1.41421356 j , −1. −1.41421356 j ] )
>>> p(p . r )
array ( [ −4.44089210e −16+0.j , −4.44089210e −16+0. j ] )
These numbers in the previous l i n e represent (0 , 0) to machine p r e c i s i o n
Show the c o e f f i c i e n t s :
>>> p . c
array ( [ 1 , 2 , 3 ] )
Display the order ( the leading zero−c o e f f i c i e n t s are removed ) :
>>> p . order
2
Show the c o e f f i c i e n t of the k−th power in the polynomial ( which is equivalent to p .
c [ −( i +1) ] ) :
>>> p [ 1 ]
2
Polynomials can be added , subtracted , multiplied , and divided ( returns quotient and
remainder ) :
>>> p ∗ p
poly1d ( [ 1 , 4 , 10 , 12 , 9 ] )
>>> (p∗∗3 + 4) / p
( poly1d ( [ 1 . , 4 . , 10. , 12. , 9 . ] ) , poly1d ( [ 4 . ] ) )
asarray (p) g i v e s the c o e f f i c i e n t array , so polynomials can be used in a l l f u n c t i o n s
that accept arrays :
¦ ¥
Listing 7 – Documentation de la classe poly1d
10
§
>>> p∗∗2 # square of polynomial
poly1d ( [ 1 , 4 , 10 , 12 , 9 ] )
>>> np . square (p) # square of i n d i v i d u a l c o e f f i c i e n t s
array ( [ 1 , 4 , 9 ] )
The v a r i a b l e used in the s t r i n g r e p r e s e n t a t i o n of p can be modified , using the
v a r i a b l e parameter :
>>> p = np . poly1d ( [ 1 , 2 , 3 ] , v a r i a b l e=’z’)
>>> print p
2
1 z + 2 z + 3
Construct a polynomial from i t s roots :
>>> np . poly1d ( [ 1 , 2 ] , True )
poly1d ( [ 1 , −3, 2 ] )
This i s the same polynomial as obtained by :
>>> np . poly1d ( [ 1 , −1]) ∗ np . poly1d ( [ 1 , −2])
poly1d ( [ 1 , −3, 2 ] )
Attributes
c o e f f s
order
v a r i a b l e
Methods
__call__( val )
deriv ( [m] ) Return a d e r i v a t i v e of t h i s polynomial .
integ ( [m, k ] ) Return an a n t i d e r i v a t i v e ( i n d e f i n i t e i n t e g r a l ) of t h i s polynomial .
¦ ¥
Listing 8 – Documentation de la classe poly1d : suite
Exercice 6 Proposer un code, utilisant la classe poly1d, et codant les polynômes de Legendre :
P0(x) = 1, P1(x) = x,
et pour tout entier n > 0
(n + 1)Pn+1(x) = (2n + 1)xPn(x) − nPn−1(x).
2.3 Quelques exemples de Scipy
Scipy est construit à partir de Numpy, ce qui signifie qu’il faut avoir le module Numpy pour
faire fonctionner le module Scipy. En effet nombre de fonctions ainsi que le type ’ndarray’ de Scipy
sont en fait ceux définis dans Numpy.
2.3.1 Intégration numérique
Scipy propose une série de classes pour l’intégration. Cet ensemble se trouve regroupé dans le
sous-module scipy.integrate. L’intégration peut se faire sur un intervalle, à partir d’un échantillon
de points ou encore servir à résoudre des équations différentielles (cf. paragraphe 2.3.2)
Le code 9 reprend le calcul de l’intégrale décrit dans le paragraphe 1.4, mais en utilisant trois
fonctions fournies par la librairie
11
§
# −∗− coding : utf −8 −∗−
from numpy import ∗
from scipy import i n t e g r a t e
def fn ( x) :
#fo nction a i n t e g r e r
return 4.0/(1+(x−3)∗(x−3))
def main () :
print "par Scipy : " , i n t e g r a t e . quad ( fn , 0 , 5 )
print "Romberg par Scipy : " , i n t e g r a t e . romberg ( fn , 0 , 5 )
#Subdivision de l ’ i n t e r v a l l e par pas r é g u l i e r
x = l i n s p a c e (0 ,5 ,1000)
y=fn (x )
print "trapezes par Spicy" , i n t e g r a t e . trapz (y , x , dx = 0 . 1 )
main ()
¦ ¥
Listing 9 – Approximation numérique d’une intégrale en utilisant Spicy
2.3.2 Résolution d’une équation différentielle ordinaire
On souhaite par exemple résoudre l’équation différentielle d2
y
dt2 = ay + bdy
dt pour t ∈ [0, 10] et
une condition initiale sur y et sa dérivée. Les modules d’intégration de Scipy (et plus précisément
odeint) permettent de trouver y et, en prenant un peu d’avance sur l’affichage (cf. section 2.4), on
peut tracer la fonction résultat. Le code 10 propose une solution à ce problème.§
# −∗− coding : utf −8 −∗−
import numpy as np
from scipy . i n t e g r a t e import odeint
import matplotlib . pyplot as p l t
#dérivée de y ( en tant que tableau : y [ 0 ] e s t la fonction , y [ 1 ] la dérivée )
def deriv (y , t ) :
a = −2.0
b = −0.1
return np . array ( [ y [ 1 ] , a∗y [0]+b∗y [ 1 ] ] )
tps = np . l i n s p a c e ( 0 . 0 , 1 0 . 0 , 1 0 0 0 )
#valeurs i n i t i a l e s de y et de sa dérivée
y i n i t = np . array ( [ 0 . 0 0 0 5 , 0 . 2 ] )
y = odeint ( deriv , yinit , tps )
p l t . f i g u r e ()
p l t . plot ( tps , y [ : , 0 ] )
p l t . x l a b e l ( ’t’)
p l t . y l a b e l ( ’y’)
p l t . show ()
¦ ¥
Listing 10 – Résolution par intégration d’une équation différentielle ordinaire en utilisant Spicy
12
2.3.3 Interpolation
Scipy possède un module d’interpolation assez complet, qui comprend plusieurs méthodes d’in-
terpolation définies sous formes de classes. Il est possible d’utiliser des interpolations linéaire ou
cubique par exemple. Le code 11 montre quelques appels de ces méthodes. Notons qu’il est néces-
saire d’instancier la classe pour l’utiliser. La figure 1 présente le résultat graphique obtenu.§
# −∗− coding : utf −8 −∗−
import scipy as sp
import numpy as np
from scipy . i n t e r p o l a t e import interp1d
from matplotlib . pyplot import ∗
x_measure = np . l i n s p a c e ( 0 . , 1 , 1 0 )
bruit = np . random . uniform ( −0.1 ,0.1 ,10)
y_measure = np . s i n (2 ∗ np . pi ∗ x_measure ) +np . tan (2 ∗ np . pi ∗ x_measure ) + bruit
# i n s t a n c i a t i o n s de la c l a s s e i n t e r p o l a t i o n
interp_lin = interp1d ( x_measure , y_measure )
interp_cubic = interp1d ( x_measure , y_measure , kind=’cubic ’)
interp_quad = interp1d ( x_measure , y_measure , kind=’quadratic ’) #
x_computed = np . l i n s p a c e ( 0 , 1 . , 1 0 0 )
y_int_lin = interp_lin ( x_computed )
y_int_cub = interp_cubic ( x_computed )
y_int_quad = interp_quad ( x_computed )
import matplotlib . pyplot as p l t
p l t . plot ( x_measure , y_measure , ’o’ , x_computed , y_int_lin , ’-’ , x_computed , y_int_cub , ’
--’ , x_computed , y_int_quad , ’*’)
p l t . legend ( [ ’data ’ , ’linear ’ , ’cubic ’ , ’quad ’ ] , l o c=’best ’)
p l t . show ()
¦ ¥
Listing 11 – interpolation par plusieurs méthodes disponibles dans Spicy
2.4 Quelques exemples de Matplotlib
Le module Matplotlib, comme son nom l’indique, s’occupe du tracé graphique. Nous avons
déjà vu un exemple d’utilisation de ce module dans la partie interpolation. Le code 12 et la
figure 2 donnent de nouveaux exemples, en illustrant certaines possibilités (titres, labels, types de
courbes, couleurs...), tandis que le code 13 et la figure 3 démontrent qu’il est possible d’afficher
simultanément plusieurs graphes sur une même figure.
13
Figure 1 – Tracé des interpolants
§
# −∗− coding : utf −8 −∗−
import matplotlib . pyplot as p l t
import numpy as np
t1=np . l i n s p a c e (1 ,5 ,10)
t2=np . l i n s p a c e (1 ,5 ,20)
p l t . plot ( t1 , t1 , ’r--’ , t1 , t1 ∗∗2 , ’bs’ , t2 , np . log ( t2 ) ∗∗3 , ’g^-’)
p l t . x l a b e l ( "Abcisses" )
p l t . y l a b e l ( ’fonctions ’)
p l t . legend ( [ ’courbe 1’ , ’courbe 2’ , ’courbe 3’ ] , l o c=’best ’)
p l t . t i t l e ( "Zoulies courbes" )
p l t . show ()
¦ ¥
Listing 12 – Quelques possibilités de base de matplotlib
14
Figure 2 – résultat du code 12
§
import numpy as np
import matplotlib . pyplot as p l t
def f ( t ) :
return np . exp(−t ) ∗ np . cos (2∗np . pi ∗ t )
def g ( t ) :
return np . exp ( t ) ∗ np . s i n (2∗np . pi ∗ t )
def h( t ) :
return np . cos (2∗np . pi ∗ t ) ∗∗3
t1 = np . arange ( 0 . 0 , 5.0 , 0 . 1 )
t2 = np . arange ( 0 . 0 , 5.0 , 0.02)
p l t . f i g u r e (1)
p l t . subplot (221)
p l t . x l a b e l ( "Abcisses" )
p l t . plot ( t1 , f ( t1 ) , ’bo’ , t2 , f ( t2 ) , ’k’)
p l t . x l a b e l ( "Abcisses" )
p l t . y l a b e l ( "f" )
p l t . subplot (222)
p l t . plot ( t2 , g ( t2 ) , ’r--’)
p l t . x l a b e l ( "Abcisses" )
p l t . y l a b e l ( "g" )
p l t . subplot (223)
p l t . plot ( t1 , h( t1 ) , ’b-’)
p l t . x l a b e l ( "Abcisses" )
p l t . y l a b e l ( "h" )
p l t . show ()
¦ ¥
Listing 13 – Affichage de plusieurs figures
15
Figure 3 – résultat du code 13
Toutes les courbes peuvent bien sur être tracées avec le module matplotlib. Le code 14 et la
figure 4 donnent quelques exemples de courbes paramétrées classiques.
16
§
from math import ∗
import numpy as np
import matplotlib . pyplot as p l t
# Valeurs du paramètres pour l e s points t r a c é s l e long de la courbe
l t = np . l i n s p a c e (0 ,2∗ pi ,100)
p l t . f i g u r e (1)
p l t . subplot (221)
p l t . plot ([3+1.5∗ cos ( t ) ∗(1+ cos ( t ) ) for t in l t ] , [ s i n ( t ) ∗(1+ cos ( t ) ) for t in l t ] , ’g^
’)
p l t . t i t l e ( "Cardioide" )
p l t . subplot (222)
p l t . plot ( [ cos ( t ) ∗∗3 for t in l t ] , [ s i n ( t ) ∗∗3 for t in l t ] , ’k’)
p l t . t i t l e ( "Astroide" )
p l t . subplot (223)
l t = np . l i n s p a c e (0 ,10∗ pi ,100)
p l t . plot ( [ 3 ∗ ( t−s i n ( t ) ) for t in l t ] , [3∗(1 − cos ( t ) ) for t in l t ] , ’r’)
p l t . t i t l e ( "cycloide" )
p l t . subplot (224)
l t = np . l i n s p a c e (0 ,2∗ pi ,100)
p l t . plot ( [ 2 ∗ s i n ( t ) ∗∗2∗ cos ( t ) for t in l t ] , [2∗ s i n ( t ) ∗ cos ( t ) ∗∗2 for t in l t ] , ’g-’)
p l t . t i t l e ( " quadrifolium " )
p l t . show ()
¦ ¥
Listing 14 – Quelques courbes paramétrées
17
Figure 4 – résultat du code 14
18

Weitere ähnliche Inhalte

Was ist angesagt?

POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetMouna Torjmen
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Electrocinétique class prépas
Electrocinétique class prépasElectrocinétique class prépas
Electrocinétique class prépasKhadda Aziz
 
chap2 outil_mathematiques
chap2 outil_mathematiqueschap2 outil_mathematiques
chap2 outil_mathematiquesBAKKOURY Jamila
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesAnass41
 
Exercices vhdl
Exercices vhdlExercices vhdl
Exercices vhdlyassinesmz
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmationSageKataliko1
 
Astable à fréquence et rapport cyclique variables
Astable à fréquence et rapport cyclique variablesAstable à fréquence et rapport cyclique variables
Astable à fréquence et rapport cyclique variableskeltouma
 
Présentation marché public
Présentation marché publicPrésentation marché public
Présentation marché publicPr1ssou
 
Mémoire- La performance et les contrats de la commande publique-Niels Bernardini
Mémoire- La performance et les contrats de la commande publique-Niels BernardiniMémoire- La performance et les contrats de la commande publique-Niels Bernardini
Mémoire- La performance et les contrats de la commande publique-Niels BernardiniNiels Bernardini
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmiqueAtef MASMOUDI
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Logiques sequentielle
Logiques sequentielleLogiques sequentielle
Logiques sequentielleAbdelAm20
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 

Was ist angesagt? (20)

POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & Objet
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Traitement du signal
Traitement du signalTraitement du signal
Traitement du signal
 
Electrocinétique class prépas
Electrocinétique class prépasElectrocinétique class prépas
Electrocinétique class prépas
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
chap2 outil_mathematiques
chap2 outil_mathematiqueschap2 outil_mathematiques
chap2 outil_mathematiques
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
 
Asd
AsdAsd
Asd
 
Exercices vhdl
Exercices vhdlExercices vhdl
Exercices vhdl
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmation
 
Astable à fréquence et rapport cyclique variables
Astable à fréquence et rapport cyclique variablesAstable à fréquence et rapport cyclique variables
Astable à fréquence et rapport cyclique variables
 
Video
VideoVideo
Video
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
 
Présentation marché public
Présentation marché publicPrésentation marché public
Présentation marché public
 
Mémoire- La performance et les contrats de la commande publique-Niels Bernardini
Mémoire- La performance et les contrats de la commande publique-Niels BernardiniMémoire- La performance et les contrats de la commande publique-Niels Bernardini
Mémoire- La performance et les contrats de la commande publique-Niels Bernardini
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmique
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Logiques sequentielle
Logiques sequentielleLogiques sequentielle
Logiques sequentielle
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 

Ähnlich wie Mathématiques et Python

Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Mat lab1
Mat lab1Mat lab1
Mat lab1fouadDD
 
PJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdfPJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdfYounesOuladSayad1
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleAlexandru Radovici
 
Introduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfIntroduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfTarakBenslimane
 
Introduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfIntroduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfTarakBenslimane
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdfCours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdfsaid350040
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite Saddem Chikh
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMALoic Yon
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 

Ähnlich wie Mathématiques et Python (20)

COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 
PJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdfPJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdf
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
 
Introduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfIntroduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdf
 
Introduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdfIntroduction à MATLAB et Simulink.pdf
Introduction à MATLAB et Simulink.pdf
 
algo-imsi-2.pdf
algo-imsi-2.pdfalgo-imsi-2.pdf
algo-imsi-2.pdf
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdfCours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
langage C++
langage C++langage C++
langage C++
 

Mehr von Dany-Jack Mercier

CAPES maths 2019 composition 2
CAPES maths 2019 composition 2CAPES maths 2019 composition 2
CAPES maths 2019 composition 2Dany-Jack Mercier
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)Dany-Jack Mercier
 
CAPES maths 2019 composition 1
CAPES maths 2019 composition 1CAPES maths 2019 composition 1
CAPES maths 2019 composition 1Dany-Jack Mercier
 
Programmes de maths de seconde et premières pour 2019-20
Programmes de maths de seconde et premières pour 2019-20Programmes de maths de seconde et premières pour 2019-20
Programmes de maths de seconde et premières pour 2019-20Dany-Jack Mercier
 
Oral 1 CAPES Maths - L'intégration en terminale
Oral 1 CAPES Maths - L'intégration en terminaleOral 1 CAPES Maths - L'intégration en terminale
Oral 1 CAPES Maths - L'intégration en terminaleDany-Jack Mercier
 
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...Mathématiques et codes secrets - Des mathématiques pour protéger les communic...
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...Dany-Jack Mercier
 
Les mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationLes mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationDany-Jack Mercier
 

Mehr von Dany-Jack Mercier (7)

CAPES maths 2019 composition 2
CAPES maths 2019 composition 2CAPES maths 2019 composition 2
CAPES maths 2019 composition 2
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)
 
CAPES maths 2019 composition 1
CAPES maths 2019 composition 1CAPES maths 2019 composition 1
CAPES maths 2019 composition 1
 
Programmes de maths de seconde et premières pour 2019-20
Programmes de maths de seconde et premières pour 2019-20Programmes de maths de seconde et premières pour 2019-20
Programmes de maths de seconde et premières pour 2019-20
 
Oral 1 CAPES Maths - L'intégration en terminale
Oral 1 CAPES Maths - L'intégration en terminaleOral 1 CAPES Maths - L'intégration en terminale
Oral 1 CAPES Maths - L'intégration en terminale
 
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...Mathématiques et codes secrets - Des mathématiques pour protéger les communic...
Mathématiques et codes secrets - Des mathématiques pour protéger les communic...
 
Les mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationLes mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’information
 

Kürzlich hochgeladen

Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxmmatar2
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
presentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxpresentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxNYTombaye
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 

Kürzlich hochgeladen (20)

Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptx
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
presentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxpresentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptx
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 

Mathématiques et Python

  • 1. Mathématiques et Python Le langage Python seul ne sait pas faire grand chose dans le domaine mathématique, comme tracer une fonction, calculer des valeurs de fonctions usuelles, réaliser des opérations matricielles,... Cependant, de nombreux modules ont été développés pour pallier ce manque, parmi lesquels in convient de citer : – scipy – numpy – matplotlib A noter que le module pylab intègre ces trois modules et ipython. L’objectif de ce document n’est bien entendu pas d’être exhaustif sur ce qu’il est possible de faire avec python et ces modules, mais juste de donner quelques points d’entrée sur ces librairies et de proposer des illustrations par l’exemple de leur utilisation. Dans la mesure du possible, les exemples collent "pas trop loin" du programme officiel de maths MPSI. 1 Ce que l’on peut faire sans les modules... 1.1 Types Les types de base qui peuvent être utiles dans la suite sont les suivants : 1.1.1 Types numériques – integer (attention à la division entre entiers !) – float – complex : l’imaginaire pur i est noté j en python. A tout instant, il est possible d’accéder au type d’une variable a en tapant type(a) Toute variable définie avec un type change de type lors d’une nouvelle affectation. On peut aussi changer de type à l’aide des fonctions int(), float(). L’une des caractéristiques importantes de Python est le typage dynamique. Cependant, si certaines opérations provoquent un changement de type, certaines restent interdites. 1.1.2 Conteneurs – listes (par exemple tab = [1, 2, 3, 4, 5]) – index (les indices de listes commencent à 0 : par exemple a[2] donne 3) – slices (a[1 : 3] donne [2, 3]) Le typage dans les listes est faible, on peut combiner différents types numériques (ou non comme des chaînes de caractères, des booléens...) De nombreuses fonctions sont associées à ces listes (concaténation, recherche de sous-chaînes...). 1 Ce document provient de : https://www.apprendre-en-ligne.net/pymath/support.pdf Il est extrait du site : https://www.apprendre-en-ligne.net/index.php
  • 2. 1.2 Opérateurs élémentaires Les opérateurs classiques suivantes sont disponibles : 1. +,-,*,/ 2. modulo : % 3. exposant : ** 4. division entière :// (par exemple 9//2=4) 5. opérateurs de comparaison : ==, !=, <>, <,<=,>,>= 6. opérateurs d’affectation : =,+=,-=,*=,/=,%=,**=,//= 7. les opérateurs bit à bit : & (et), (ou),ˆ(XOR),˜(complément à 1), <<(décalage à gauche), >> (décalage à droite) 8. opérateurs logiques : and, or, not 9. opérateurs d’appartenance (sur des types comme des chaînes) : in, not in 10. opérateurs d’identité : is, is not 1.3 La librairie standard math Pour disposer des fonctions mathématiques usuelles, la librairie d’origine du python se nomme math. On peut alors d’importer juste les fonctions nécessaires par from math import cos, log ou toutes les fonctions mathématiques par from math import *. Dans le premier cas l’inconvénient est qu’il faut savoir à l’avance les fonctions utilisées par la suite, dans le deuxième cas on risque de surcharger inutilement la mémoire. A noter que pour manipuler des complexes, il faut importer le module cmath en plus du module math (par exemple pour réaliser des produits de complexes). 1.4 Un exemple : calcul d’intégrales Pour illustrer les capacités de base de Python, nous proposons de calculer de manière numérique la valeur de I = b a f(x)dx, en utilisant trois méthodes classiques : – la méthode des rectangles :I ≈ n−1 i=0 (xi+1 − xi)f xi + xi+1 2 – la méthode des trapèzes : I ≈ h f(a)+f(b) 2 + n−1 i=1 f(xi) – la méthode de Simpson : I ≈ h 6 f(a) + f(b) + 4 n−1 i=0 f(x2i+1) + 2 n−1 i=1 f(x2i) avec h = b−a n et xk = a + k h 2 et où (x0 · · · xn) est une subdivision régulière de l’intervalle [a, b] de pas h Le code 1 donne le source python permettant de réaliser ces trois approximations. 2
  • 3. § # −∗− coding : utf −8 −∗− def r e c t a n g l e s ( f , a , b , n) : #Methode des r e c t a n g l e s S=0 for i in xrange (0 , n) : xi=a+(b−a ) ∗ i / f l o a t (n) xj=a+(b−a ) ∗( i +1)/ f l o a t (n) S+= f (( xi+xj ) /2.0) ∗( xj−xi ) return S def trapezes ( f , a , b , n) : #Methode des trapezes S=0 for i in xrange (0 , n) : xi=a+(b−a ) ∗ i / f l o a t (n) xj=a+(b−a ) ∗( i +1)/ f l o a t (n) S+= ( f ( xi )+f ( xj ) ) /2.0∗( xj−xi ) return S def simpson ( f , a , b , n) : #Methode de Simpson S=0 for i in xrange (0 , n) : xi=a+(b−a ) ∗ i / f l o a t (n) xj=a+(b−a ) ∗( i +1)/ f l o a t (n) S+= ( xj−xi ) ∗( f ( xi )+4∗ f (( xi+xj ) /2.0)+f ( xj ) ) /6.0 return S def fn ( x) : #fo nction a i n t e g r e r return 4.0/(1+(x−3)∗(x−3)) def main () : print "par rectangles : " , r e c t a n g l e s ( fn , 0 . , 5 . , 1 0 0 ) ; print "par trapèzes : " , trapezes ( fn , 0 . , 5 . , 1 0 0 ) ; print "par Simpson : " , simpson ( fn , 0 . , 5 . , 1 0 0 ) ; main () ¦ ¥ Listing 1 – Approximation numérique d’une intégrale par trois méthodes classiques 1.5 Un autre exemple autour des suites Prenons un exemple classique, celui du calcul d’une estimation du nombre d’or à l’aide de la suite de Fibonacci. Le code 2 présente le calcul des n premiers termes de la suite de Fibonacci u0 = 1, u1 = 1 et un = un−1 + un−2, n ≥ 2 ainsi que la valeur absolue de la différence avec le nombre d’or 1+ √ 5 2 . 3
  • 4. § # −∗− coding : utf −8 −∗− def f i b o n a c c i (n) : a = b = 1. for i in range (n) : a , b = a + b , a print abs (( a/b) −(1+5∗∗0.5) /2) return b def main () : f i b o n a c c i (30) main () ¦ ¥ Listing 2 – Calcul approché du nombre d’or Exercice 1 Proposer un code permettant de calculer ces mêmes quantités de manière récursive. Exercice 2 Proposer un code permettant de calculer la somme des éléments d’une suite quelconque indicés par un ensemble d’entiers J 1.6 Un dernier exemple : zéro d’une fonction Le code 3 présente un calcul simple d’un zéro d’une fonction dans un intervalle donné, en utilisant une approche dichotomique.§ # −∗− coding : utf −8 −∗− def f ( x) : return x∗∗2 +20∗x −12 def zero ( f , a , b) : i f f ( a ) ∗ f (b) >0: print ( ’La fonction ne s’’annule pas dans l’’intervalle [’+s t r ( a )+’,’+s t r (b) +’]’) return 0 while ( abs (a−b)>1e−3) : m=(a+b) /2. print m i f f (m) ∗ f ( a ) >0: a=m else : b=m print ( ’la solution de f(x)=0 est ’+s t r (m) ) return m print ( zero ( f , −10. ,10.) ) ¦ ¥ Listing 3 – Zéro d’une fonction sur un intervalle par dichotomie. 4
  • 5. Exercice 3 Produire un code qui calcule le zéro d’une fonction en utilisant la méthode de Newton (algorithme 1) : Algorithm 1: Méthode de Newton Entrées: N, , f, fp, x0 n← 0 xn ← x0 répéter xn ← xn − f(xn) fp(xn) n ← n + 1 si fp(xn) < alors Division par zero fin jusqu’à f(xn) fp(xn) < OU n > N; Exercice 4 Calculer une approximation de π en utilisant par exemple les deux résultats classiques : π2 6 = ∞ n=1 1 n2 et π 2 = ∞ n=1 4n2 4n2 − 1 2 ... Et là où ça va mieux : utilisation des librairies Python présente l’avantage de recourir aux modules pour le développement de fonctions ou d’ensembles de fonctionnalités spécifiques. Cela permet une grande flexibilité et une dynamique de développement importante. Parmi ces modules nous nous intéressons particulièrement dans la suite à Numpy, Scipy et Matplotlib. Suivant la distribution de Python choisie, l’ensemble de ces modules, avec d’autres, est automatiquement installé lors de l’installation de Python. Si ce n’est pas le cas il y a toujours la possibilité de les installer a posteriori. 2.1 Présentation rapide des modules Ces modules fournissent un ensemble d’objets ainsi qu’un groupes de fonctions permettant de manipuler nombre d’objets de façon simple et très performantes dans le cadre du calcul scientifique. Voici la description donnée par le site officiel de Numpy (http ://www.scipy.org, numpy.scipy.org ) SciPy is a collection of mathematical algorithms and convenience functions built on the Numpy extension for Python. It adds significant power to the interactive Python session by exposing the user to high-level commands and classes for the manipulation and visualization of data. With SciPy, an interactive Python session becomes a data-processing and system-prototyping environment ri- valing sytems such as MATLAB, IDL, Octave, R-Lab, and SciLab. NumPy is the fundamental package needed for scientific computing with Python. It contains among other things : – a powerful N-dimensional array object - sophisticated (broadcasting) functions tools for in- tegrating C/C++ and Fortran code – useful linear algebra, Fourier transform, and random number capabilities. 5
  • 6. Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional contai- ner of generic data. Arbitrary data types can be defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases. Scipy est un ensemble qui comprend de nombreux modules utiles pour des scientifiques : – cluster : information theory functions (currently, vq and kmeans) – weave : compilation of numeric expressions to C++ for fast execution – fftpack : fast Fourier transform module based on fftpack and fftw when available – ga : genetic algorithms – io : reading and writing numeric arrays, MATLAB .mat, and Matrix Market .mtx files – integrate : numeric integration for bounded and unbounded ranges. ODE solvers. – interpolate : interpolation of values from a sample data set. – optimize : constrained and unconstrained optimization methods and root-finding algorithms – signal : signal processing (1-D and 2-D filtering, filter design, LTI systems, etc.) – special : special function types (bessel, gamma, airy, etc.) – stats : statistical functions (stdev, var, mean, etc.) – linalg : linear algebra and BLAS routines based on the ATLAS implementation of LAPACK – sparse : Some sparse matrix support. LU factorization and solving Sparse linear systems. Enfin Matplotlib permet de visualiser en 2D des données. 2.2 Quelques exemples de Numpy Numpy ajoute le type array qui est similaire à une liste (list) avec la condition supplémentaire que tous les éléments sont du même type. Le code 4 présente quelques exemples d’instantiation de matrices simples. 6
  • 7. § # −∗− coding : utf −8 −∗− import numpy as np # tableau 1D a1 = np . array ( [ 1 , 2 , 3 , 4 ] , f l o a t ) print a1 #tableau 2D a2=np . array ( [ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 5 , 6 ] , [ 7 , 8 ] ] ] ) print a2 #matrices de 1 un=np . ones (5) print un #matrice diagonale d = np . diag ( a1 ) print d #matrice bande d1 = np . diag ( a1 , −1) print d1 #matrice à c o e f f i c i e n t s a l é a t o i r e s dans [ 0 , 1 ] r = np . random . rand (3 ,3) print r # I d e n t i t é i = np . eye (5) print i # Matrice n u l l e z = np . zeros (5) print z ¦ ¥ Listing 4 – Définitions de matrices Les opérations classiques sur la matrices sont disponibles à l’aide de numpy : addition, multipli- cation par un scalaire, produit matriciel...Le code 5 présente quelques exemples de ces opérations. 7
  • 8. § # −∗− coding : utf −8 −∗− import numpy as np A = np . random . rand (3 ,3) B=np . diag ( [ 1 . , 2 . , 3 . ] ) v = np . array ( [ 3 . , 4 . , 5 . ] , f l o a t ) # addition C1 = A+B C2 = 2.+A #m u l t i p l i c a t i o n D1 = 2∗A #c o e f f i c i e n t s de A m u l t i p l i é s par 2 D2 = B∗∗3 #c o e f f i c i e n t s de B à la puissance 3 D3 = A∗B # m u l t i p l i c a t i o n terme à terme D4 = np . dot (A,B)# m u l t i p l i c a t i o n m a t r i c i e l l e D5 = np . dot (A, v )#produit matrice / vecteur D6 = np . kron (A,B)#produit de Kronecker #t e s t E1 = A<B#renvoie une matrice de booléens e f f e c t u a n t l e t e s t bo = np . array ( [ 1 , 0 . , 0 ] , bool ) E2=B[ bo ]#e x t r a i t l e s éléments de B qui correspondent à la valeur v r a i e de bo E3=A[A>0.5] ¦ ¥ Listing 5 – Opérations sur les matrices Bien entendu, numpy permet facilement de faire du calcul numérique matriciel : calcul du rang d’une matrice, inversion d’une matrice, résolution de systèmes linéaires. A titre d’exemple, le code 6 présente quelques possibilités offertes par le module. 8
  • 9. § # −∗− coding : utf −8 −∗− import numpy as np import numpy . l i n a l g as nl A = np . random . rand (3 ,3) b = np . array ( [ 3 . , 4 . , 5 . ] , f l o a t ) #Transposition d ’ une matrice Aprime=A. transpose () #Rang d ’ une matrice r = np . rank (A) #Inverse d ’ une matrice Ainv = nl . inv (A) #attention t e s t e r s i A e s t i n v e r s i b l e . . . #Résolution de systèmes l i n é a i r e s x = nl . s o l v e (A, b) #c a l c u l des éléments propres nl . e i g (A) #valeurs propres , matrice de passage #Calcul de normes n1 = nl . norm(A, np . i n f ) ; n2 = nl . norm(A,−np . i n f ) ; n3 = n1 = nl . norm(A, 2 ) ; n4 = n1 = nl . norm(A, ’fro ’) ; ¦ ¥ Listing 6 – Un peu d’algèbre linéaire avec numpy Exercice 5 Proposer un code qui code la décomposition de Cholesky d’une matrice A. Comparer avec l’appel à numpy.linalg.cholesky. Pour rappel, l’algorithme de Cholesky est le suivant : Algorithm 2: Méthode de Cholesky pour k ∈ {1 · · · n} faire akk ← akk − k−1 p=1 a2 kp 2 pour i ∈ {k + 1 · · · n} faire aik ← 1 akk aik − k−1 p=1 aipakp fin fin Notons que numPy propose de nombreux autres atouts, que nous vous conseillons de décou- vrir dans la documentation de ce module. A titre d’exemple, citons la classe poly1d qui gère les polynômes à une variable, documentée comme suit : 9
  • 10. § class numpy . poly1d ( c_or_r , r =0, v a r i a b l e=None) [ source ] A one−dimensional polynomial class . A convenience class , used to encapsulate natural operations on polynomials so that said operations may take on t h e i r customary form in code ( see Examples ) . Parameters : c_or_r : array_like The polynomials c o e f f i c i e n t s , in decreasing powers , or i f the value of the second parameter i s True , the polynomials roots ( values where the polynomial evaluates to 0) . For example , poly1d ( [ 1 , 2 , 3 ] ) returns an object that r e p r e s e n t s , whereas poly1d ( [ 1 , 2 , 3 ] , True ) returns one that r e p r e s e n t s . r : bool , optional I f True , c_or_r s p e c i f i e s the polynomials roots ; the d e f a u l t i s False . v a r i a b l e : str , optional Changes the v a r i a b l e used when p r i n t i n g p from x to v a r i a b l e ( see Examples ) . Examples Construct the polynomial : >>> p = np . poly1d ( [ 1 , 2 , 3 ] ) >>> print np . poly1d (p) 2 1 x + 2 x + 3 Evaluate the polynomial at : >>> p ( 0 . 5 ) 4.25 Find the roots : >>> p . r array ([ −1.+1.41421356 j , −1. −1.41421356 j ] ) >>> p(p . r ) array ( [ −4.44089210e −16+0.j , −4.44089210e −16+0. j ] ) These numbers in the previous l i n e represent (0 , 0) to machine p r e c i s i o n Show the c o e f f i c i e n t s : >>> p . c array ( [ 1 , 2 , 3 ] ) Display the order ( the leading zero−c o e f f i c i e n t s are removed ) : >>> p . order 2 Show the c o e f f i c i e n t of the k−th power in the polynomial ( which is equivalent to p . c [ −( i +1) ] ) : >>> p [ 1 ] 2 Polynomials can be added , subtracted , multiplied , and divided ( returns quotient and remainder ) : >>> p ∗ p poly1d ( [ 1 , 4 , 10 , 12 , 9 ] ) >>> (p∗∗3 + 4) / p ( poly1d ( [ 1 . , 4 . , 10. , 12. , 9 . ] ) , poly1d ( [ 4 . ] ) ) asarray (p) g i v e s the c o e f f i c i e n t array , so polynomials can be used in a l l f u n c t i o n s that accept arrays : ¦ ¥ Listing 7 – Documentation de la classe poly1d 10
  • 11. § >>> p∗∗2 # square of polynomial poly1d ( [ 1 , 4 , 10 , 12 , 9 ] ) >>> np . square (p) # square of i n d i v i d u a l c o e f f i c i e n t s array ( [ 1 , 4 , 9 ] ) The v a r i a b l e used in the s t r i n g r e p r e s e n t a t i o n of p can be modified , using the v a r i a b l e parameter : >>> p = np . poly1d ( [ 1 , 2 , 3 ] , v a r i a b l e=’z’) >>> print p 2 1 z + 2 z + 3 Construct a polynomial from i t s roots : >>> np . poly1d ( [ 1 , 2 ] , True ) poly1d ( [ 1 , −3, 2 ] ) This i s the same polynomial as obtained by : >>> np . poly1d ( [ 1 , −1]) ∗ np . poly1d ( [ 1 , −2]) poly1d ( [ 1 , −3, 2 ] ) Attributes c o e f f s order v a r i a b l e Methods __call__( val ) deriv ( [m] ) Return a d e r i v a t i v e of t h i s polynomial . integ ( [m, k ] ) Return an a n t i d e r i v a t i v e ( i n d e f i n i t e i n t e g r a l ) of t h i s polynomial . ¦ ¥ Listing 8 – Documentation de la classe poly1d : suite Exercice 6 Proposer un code, utilisant la classe poly1d, et codant les polynômes de Legendre : P0(x) = 1, P1(x) = x, et pour tout entier n > 0 (n + 1)Pn+1(x) = (2n + 1)xPn(x) − nPn−1(x). 2.3 Quelques exemples de Scipy Scipy est construit à partir de Numpy, ce qui signifie qu’il faut avoir le module Numpy pour faire fonctionner le module Scipy. En effet nombre de fonctions ainsi que le type ’ndarray’ de Scipy sont en fait ceux définis dans Numpy. 2.3.1 Intégration numérique Scipy propose une série de classes pour l’intégration. Cet ensemble se trouve regroupé dans le sous-module scipy.integrate. L’intégration peut se faire sur un intervalle, à partir d’un échantillon de points ou encore servir à résoudre des équations différentielles (cf. paragraphe 2.3.2) Le code 9 reprend le calcul de l’intégrale décrit dans le paragraphe 1.4, mais en utilisant trois fonctions fournies par la librairie 11
  • 12. § # −∗− coding : utf −8 −∗− from numpy import ∗ from scipy import i n t e g r a t e def fn ( x) : #fo nction a i n t e g r e r return 4.0/(1+(x−3)∗(x−3)) def main () : print "par Scipy : " , i n t e g r a t e . quad ( fn , 0 , 5 ) print "Romberg par Scipy : " , i n t e g r a t e . romberg ( fn , 0 , 5 ) #Subdivision de l ’ i n t e r v a l l e par pas r é g u l i e r x = l i n s p a c e (0 ,5 ,1000) y=fn (x ) print "trapezes par Spicy" , i n t e g r a t e . trapz (y , x , dx = 0 . 1 ) main () ¦ ¥ Listing 9 – Approximation numérique d’une intégrale en utilisant Spicy 2.3.2 Résolution d’une équation différentielle ordinaire On souhaite par exemple résoudre l’équation différentielle d2 y dt2 = ay + bdy dt pour t ∈ [0, 10] et une condition initiale sur y et sa dérivée. Les modules d’intégration de Scipy (et plus précisément odeint) permettent de trouver y et, en prenant un peu d’avance sur l’affichage (cf. section 2.4), on peut tracer la fonction résultat. Le code 10 propose une solution à ce problème.§ # −∗− coding : utf −8 −∗− import numpy as np from scipy . i n t e g r a t e import odeint import matplotlib . pyplot as p l t #dérivée de y ( en tant que tableau : y [ 0 ] e s t la fonction , y [ 1 ] la dérivée ) def deriv (y , t ) : a = −2.0 b = −0.1 return np . array ( [ y [ 1 ] , a∗y [0]+b∗y [ 1 ] ] ) tps = np . l i n s p a c e ( 0 . 0 , 1 0 . 0 , 1 0 0 0 ) #valeurs i n i t i a l e s de y et de sa dérivée y i n i t = np . array ( [ 0 . 0 0 0 5 , 0 . 2 ] ) y = odeint ( deriv , yinit , tps ) p l t . f i g u r e () p l t . plot ( tps , y [ : , 0 ] ) p l t . x l a b e l ( ’t’) p l t . y l a b e l ( ’y’) p l t . show () ¦ ¥ Listing 10 – Résolution par intégration d’une équation différentielle ordinaire en utilisant Spicy 12
  • 13. 2.3.3 Interpolation Scipy possède un module d’interpolation assez complet, qui comprend plusieurs méthodes d’in- terpolation définies sous formes de classes. Il est possible d’utiliser des interpolations linéaire ou cubique par exemple. Le code 11 montre quelques appels de ces méthodes. Notons qu’il est néces- saire d’instancier la classe pour l’utiliser. La figure 1 présente le résultat graphique obtenu.§ # −∗− coding : utf −8 −∗− import scipy as sp import numpy as np from scipy . i n t e r p o l a t e import interp1d from matplotlib . pyplot import ∗ x_measure = np . l i n s p a c e ( 0 . , 1 , 1 0 ) bruit = np . random . uniform ( −0.1 ,0.1 ,10) y_measure = np . s i n (2 ∗ np . pi ∗ x_measure ) +np . tan (2 ∗ np . pi ∗ x_measure ) + bruit # i n s t a n c i a t i o n s de la c l a s s e i n t e r p o l a t i o n interp_lin = interp1d ( x_measure , y_measure ) interp_cubic = interp1d ( x_measure , y_measure , kind=’cubic ’) interp_quad = interp1d ( x_measure , y_measure , kind=’quadratic ’) # x_computed = np . l i n s p a c e ( 0 , 1 . , 1 0 0 ) y_int_lin = interp_lin ( x_computed ) y_int_cub = interp_cubic ( x_computed ) y_int_quad = interp_quad ( x_computed ) import matplotlib . pyplot as p l t p l t . plot ( x_measure , y_measure , ’o’ , x_computed , y_int_lin , ’-’ , x_computed , y_int_cub , ’ --’ , x_computed , y_int_quad , ’*’) p l t . legend ( [ ’data ’ , ’linear ’ , ’cubic ’ , ’quad ’ ] , l o c=’best ’) p l t . show () ¦ ¥ Listing 11 – interpolation par plusieurs méthodes disponibles dans Spicy 2.4 Quelques exemples de Matplotlib Le module Matplotlib, comme son nom l’indique, s’occupe du tracé graphique. Nous avons déjà vu un exemple d’utilisation de ce module dans la partie interpolation. Le code 12 et la figure 2 donnent de nouveaux exemples, en illustrant certaines possibilités (titres, labels, types de courbes, couleurs...), tandis que le code 13 et la figure 3 démontrent qu’il est possible d’afficher simultanément plusieurs graphes sur une même figure. 13
  • 14. Figure 1 – Tracé des interpolants § # −∗− coding : utf −8 −∗− import matplotlib . pyplot as p l t import numpy as np t1=np . l i n s p a c e (1 ,5 ,10) t2=np . l i n s p a c e (1 ,5 ,20) p l t . plot ( t1 , t1 , ’r--’ , t1 , t1 ∗∗2 , ’bs’ , t2 , np . log ( t2 ) ∗∗3 , ’g^-’) p l t . x l a b e l ( "Abcisses" ) p l t . y l a b e l ( ’fonctions ’) p l t . legend ( [ ’courbe 1’ , ’courbe 2’ , ’courbe 3’ ] , l o c=’best ’) p l t . t i t l e ( "Zoulies courbes" ) p l t . show () ¦ ¥ Listing 12 – Quelques possibilités de base de matplotlib 14
  • 15. Figure 2 – résultat du code 12 § import numpy as np import matplotlib . pyplot as p l t def f ( t ) : return np . exp(−t ) ∗ np . cos (2∗np . pi ∗ t ) def g ( t ) : return np . exp ( t ) ∗ np . s i n (2∗np . pi ∗ t ) def h( t ) : return np . cos (2∗np . pi ∗ t ) ∗∗3 t1 = np . arange ( 0 . 0 , 5.0 , 0 . 1 ) t2 = np . arange ( 0 . 0 , 5.0 , 0.02) p l t . f i g u r e (1) p l t . subplot (221) p l t . x l a b e l ( "Abcisses" ) p l t . plot ( t1 , f ( t1 ) , ’bo’ , t2 , f ( t2 ) , ’k’) p l t . x l a b e l ( "Abcisses" ) p l t . y l a b e l ( "f" ) p l t . subplot (222) p l t . plot ( t2 , g ( t2 ) , ’r--’) p l t . x l a b e l ( "Abcisses" ) p l t . y l a b e l ( "g" ) p l t . subplot (223) p l t . plot ( t1 , h( t1 ) , ’b-’) p l t . x l a b e l ( "Abcisses" ) p l t . y l a b e l ( "h" ) p l t . show () ¦ ¥ Listing 13 – Affichage de plusieurs figures 15
  • 16. Figure 3 – résultat du code 13 Toutes les courbes peuvent bien sur être tracées avec le module matplotlib. Le code 14 et la figure 4 donnent quelques exemples de courbes paramétrées classiques. 16
  • 17. § from math import ∗ import numpy as np import matplotlib . pyplot as p l t # Valeurs du paramètres pour l e s points t r a c é s l e long de la courbe l t = np . l i n s p a c e (0 ,2∗ pi ,100) p l t . f i g u r e (1) p l t . subplot (221) p l t . plot ([3+1.5∗ cos ( t ) ∗(1+ cos ( t ) ) for t in l t ] , [ s i n ( t ) ∗(1+ cos ( t ) ) for t in l t ] , ’g^ ’) p l t . t i t l e ( "Cardioide" ) p l t . subplot (222) p l t . plot ( [ cos ( t ) ∗∗3 for t in l t ] , [ s i n ( t ) ∗∗3 for t in l t ] , ’k’) p l t . t i t l e ( "Astroide" ) p l t . subplot (223) l t = np . l i n s p a c e (0 ,10∗ pi ,100) p l t . plot ( [ 3 ∗ ( t−s i n ( t ) ) for t in l t ] , [3∗(1 − cos ( t ) ) for t in l t ] , ’r’) p l t . t i t l e ( "cycloide" ) p l t . subplot (224) l t = np . l i n s p a c e (0 ,2∗ pi ,100) p l t . plot ( [ 2 ∗ s i n ( t ) ∗∗2∗ cos ( t ) for t in l t ] , [2∗ s i n ( t ) ∗ cos ( t ) ∗∗2 for t in l t ] , ’g-’) p l t . t i t l e ( " quadrifolium " ) p l t . show () ¦ ¥ Listing 14 – Quelques courbes paramétrées 17
  • 18. Figure 4 – résultat du code 14 18