initiation au calcul scientifique : bases

48

Upload: others

Post on 22-Jun-2022

5 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Initiation au calcul scientifique : Bases

Initiation au calcul scienti�que : Bases

6 janvier 2020

Initiation au calcul scienti�que : Bases 6 janvier 2020 1 / 15

Page 2: Initiation au calcul scientifique : Bases

1 Calcul scienti�que/Informatique

2 ndarray : le type fondamental dans numpy

3 Action d'une fonction compatible numpy sur un ndarray, vectorisation

4 matplotlib : la bibliothèque graphique

5 Dessiner graphes, trajectoires

Initiation au calcul scienti�que : Bases 6 janvier 2020 2 / 15

Page 3: Initiation au calcul scientifique : Bases

Extrait du programme o�ciel

Dans cette partie de programme, on étudie le développementd'algorithmes numériques sur des problèmes scienti�ques étudiés et mis enéquation dans les autres disciplines. La pédagogie par projets estencouragée. L'objectif est de familiariser les étudiants avec unenvironnement de simulation numérique. Cet environnement doit permettred'utiliser des bibliothèques de calcul numérique et leur documentation pourdévelopper et exécuter des programmes numériques. On veillera à faireaussi programmer par les étudiants les algorithmes étudiés. Aucuneconnaissance des fonctions des bibliothèques n'est exigible des étudiants.Au moment de l'élaboration de ces programmes d'enseignement, l'atelierlogiciel Scilab ou le langage de programmation Python, avec lesbibliothèques Numpy/Scipy, sont les environnements choisis.

Initiation au calcul scienti�que : Bases 6 janvier 2020 3 / 15

Page 4: Initiation au calcul scientifique : Bases

Calcul scienti�que

La modélisation est une activité à la croisée des chemins entre diversesdisciplines :

Mathématiques ;

Informatique et calcul scienti�que ;

Une discipline tierce telle que physique, chimie, biologie ou économie.

Initiation au calcul scienti�que : Bases 6 janvier 2020 4 / 15

Page 5: Initiation au calcul scientifique : Bases

Calcul scienti�que

Les interactions entre ces diciplines peuvent se schématiser grossièrementde la manière suivante :

La discipline tierce s'intéresse à un problème de son champ propre ;La discipline tierce, forte de son expérience dans son champ propre, àl'aide des mathématiques, pose et modélise ce problème : contexte,problématique sont dégagés ;Les mathématiques, fortes de l'universalité des objets mathématiques,a�nent et précisent les concepts et outils intervenant dans cettemodélisation ; elles proposent des méthodes de résolution, exactes ouapprochées, classiques ou nouvelles, théoriques ou numériques ;L'informatique, notamment via le calcul scienti�que permettent lamise en oeuvre de celles de ces méthodes de résolution réclamant degrandes quantités de calculs automatisables ; les résultats obtenus sontreprésentés de manière aisément perceptible ;Les résultats ainsi obtenus sont examinés et critiqués par la disciplinetierce a�n d'être transformés en éléments de réponses au problèmeinitial ;

Initiation au calcul scienti�que : Bases 6 janvier 2020 4 / 15

Page 6: Initiation au calcul scientifique : Bases

Calcul scienti�que

Les outils d'utilisation constante en calcul scienti�que sont :

Evaluation (approximative) des fonctions fondamentales de l'analyse :ln, exp, fonctions trigonométriques et leurs inverses ;

Evaluation de quantités et/ou de fonctions dé�nies comme limites,sommes, intégrales, dérivées... ;

La résolution (approximative) d'équations ou de systèmes d'équationslinéaires ou non linéaire ;

La résolution (calcul de solutions approximatives) d'équationsdi�érentielles ou assimilées ;

Les systèmes de représentation et d'évaluation, textuelle ou graphiquede ces objets et méthodes.

Initiation au calcul scienti�que : Bases 6 janvier 2020 4 / 15

Page 7: Initiation au calcul scientifique : Bases

Calcul scienti�que

Il faut garder à l'esprit que l'on va faire, en calcul scienti�que, des calculssur des nombres �ottants, i.e. des nombres réels représentés sous formescienti�que 1 (signe, mantisse, exposant) à une certaine précision qui estloin d'être in�nie. Les calculs que nous faisons faire à la machine dans cecontexte sont par essence approximatifs et ne sont qu'un décalque, dansl'univers approximatif des nombres �ottants, de calcul dans l'univers exactdes nombres réels.Les mauvaises surprises ne sont pas rares !

Initiation au calcul scienti�que : Bases 6 janvier 2020 4 / 15

Page 8: Initiation au calcul scientifique : Bases

Bibliothèques spécialisées

Les fonctions mathématiques au-delà des opérations algébriquesélémentaires sur les nombres entiers ou �ottants ne font pas partie ducoeur du langage Python.Les fonctions du type ln, exp, etc... opérant sur des �ottants sontregroupées dans une bibliothèque standard 2, la bibliothèque math.L'utilisation de cette bibliothèque pour des calculs "ponctuels" estpertinente . Elle perd de son intérêt dès qu'il s'agit de faire des calculs "enmasse" du fait de la lenteur, intrinsèque au caractère interprété du langage,d'une boucle Python for ou while ou du traitement des listes.Par exemple, il est inapproprié de traiter des images sérieusement enutilisant cette bibliothèque. Le traitement d'image est notoirementgourmand en boucles !

Initiation au calcul scienti�que : Bases 6 janvier 2020 5 / 15

Page 9: Initiation au calcul scientifique : Bases

Le choix de numpy

Nous allons nous concentrer, pour le calcul scienti�que, sur la bibliothèquenumpy qui permet, grâce à la dé�nition du type ndarray, de faire descalculs scienti�ques de "masse" en permettant à certaines boucles des'e�ectuer au niveau "machine" plutôt qu'au niveau interpréteur.La syntaxe résultante de la dé�nition des objets numpy donne à unprogramme Python utilisant ces objets une allure proche d'un programmeScilab/Matlab. Il en est de même du système de représentation graphiquematplotlib. Cette proximité permet de passer rapidement d'un systèmede calcul à l'autre.

Initiation au calcul scienti�que : Bases 6 janvier 2020 6 / 15

Page 10: Initiation au calcul scientifique : Bases

Le choix de numpy

Voici deux codes qui "font la même chose" : le premier typique del'utilisation de la bibliothèque math, la second, typique de la bibliothèquenumpy

x = [ a + (b-a)*k/N for k in range(N)]

y = [ m.cos(2*xi) - 2*m.cos(xi)**2 for xi in x]

x = np.linspace(a,b,N)

y = np.cos(2*x) -2*np.cos(x)**2

Le timing des fonctions, faits dans le scriptpython/vectorisation-ex01.py montre un rapport de vitessesd'exécution de 1 à 3 en faveur de numpy.

Initiation au calcul scienti�que : Bases 6 janvier 2020 6 / 15

Page 11: Initiation au calcul scientifique : Bases

Le choix de numpy

Dans le code math, x est une liste de �ottants (N nombresuniformément répartis entre a et b construite par compréhension, y estla liste des images de éléments de x par la fonctionx 7→ cos(2x)−2cos2(x) (évidemment Python ne sait pas que cettefonctions est la fonction constante égale à 1 et e�ectue servilement lecalcul demandé sans faire de simpli�cation théorique)

Dans le code numpy, x est un ndarray de �ottants (N nombresuniformément répartis entre a et b, instruction numpy.linspace, yest le ndarray image de x par la fonction x 7→ cos(2x)−2cos2(x).Une fonction pouvant être appliquée aussi bien à un argument scalairequ'à chaque entrée d'une � liste � est une fonction dite � vectorisée �.Transformer une fonction scalaire en une fonction supportant demécanisme d'application s'appelle la � vectorisation � d'une fonction.

Initiation au calcul scienti�que : Bases 6 janvier 2020 6 / 15

Page 12: Initiation au calcul scientifique : Bases

Le choix de numpy

La bibliothèque numpy est généralement importée sous l'alias np commedans

import numpy as np

Les fonctions numpy seront présentées sous leur forme pré�xée par l'aliasstandard np..

Initiation au calcul scienti�que : Bases 6 janvier 2020 6 / 15

Page 13: Initiation au calcul scientifique : Bases

Les objets de type ndarray

Un ndarray numpy est appelé vecteur numpy (ou matrice numpy, ouun tableau n-dimensionnel) ; on peut lui appliquer directement unefonction mathématique, entrée par entrée pour obtenir un ndarray demême forme ;

La forme d'un ndarray x s'obtient par l'attribut d'objet .shape quiretourne un t-uple décrivant la forme de x, i.e. les mensurations danschaque dimension ;

on peut faire la somme (x + y), le produit (x * y), ... de ndarray'sde même forme en agissant entrée par entrée pour obtenir un ndarray

de même forme.

on peut faire la somme (x + y), le produit (x * y), ... d'unndarray x et d'un �ottant y en agissant entrée par entrée pourobtenir un ndarray de même forme que x.

Initiation au calcul scienti�que : Bases 6 janvier 2020 7 / 15

Page 14: Initiation au calcul scientifique : Bases

Les objets de type ndarray

Cette structure de calcul est à rapprocher de la structure d'algèbre 3

des fonctions S → R, i.e. sur RS où S décrit la forme du ndarray.

Les constantes scalaires sont alors identi�ées aux fonctions constantes.L'action d'une fonction f : R→ R sur un vecteur x : S → R,x = (xi )i∈S se faisant via la convention f ((xi )i∈S) = (f (xi ))i∈S , i.e. la

composition f (x) = f ◦ x : Sx→ R f→ R.

Certaines fonctions ( c.f. le chapitre algorithmique) de listes sontimplémentées e�cacement pour les ndarray :

x.sum() retourne la somme des valeurs du ndarray x ;x.min(), x.max() retournent respectivement mininum et maximumdu ndarray x ;Sachant que x.mean() et x.std() calculent respectivement moyenneet écart-type d'un ndarray x, x_cr = (x-x.mean())/x.std()

calcule en une instruction le vecteur centré-réduit associé à x.

On peut bien évidemment faire de l'algèbre linéaire et bilinéaire avecles vecteurs et matrices numpy, les produits (matriciels, scalaires,..)s'e�ectuant via la fonction np.dot ou, pour les matrices, l'opérateur @.

Initiation au calcul scienti�que : Bases 6 janvier 2020 7 / 15

Page 15: Initiation au calcul scientifique : Bases

Les objets de type ndarray

Après cette publicité faite sur les ndarray, voici quelques fondamentaux àconnaitre avant d'expérimenter en TP.Il faut retenir que bien que beaucoup d'éléments de la syntaxe des listes seretrouvent dans la syntaxe des ndarray (identi�cateur simple référence àun objet composite, accès aux éléments par indexation, slicing), unndarray n'est pas une liste Python : les entrées d'un ndarray sont toutesdu même type (�ottant dans nos premiers exemples, ou complexe �ottant,booléens ou entiers dans d'autres exemples pertinents), la somme (entréepar entrée) de ndarray ne se comporte pas du tout comme la somme(concaténation) de listes, les méthodes de listes (.pop(), .append(),.sort()) ne s'appliquent pas aux ndarray. Finalement, pour connaitre laforme d'un ndarray, on utilise l'attribut .shape alors que pour une liste, leseul élément de forme dont on dispose est sa longueur obtenue parapplication de len().

Initiation au calcul scienti�que : Bases 6 janvier 2020 7 / 15

Page 16: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Création

np.array : A partir d'une liste ou d'une liste de listes :vecteur = np.array([1,2,3]) oumatrice = np.array([[1,2,3],[3,4,5]])Un ndarray x possède une forme décrite par un vecteur donnant lesmensurations dans chaque dimension sous forme d'un t-uple. Enexemples :

si x.shape s'évalue à (3,), x est un vecteur unidimensionnelcomportant 3 entrées ;si x.shape s'évalue à (3,2), x est une matrice (bidimensionnelle)comportant 3 lignes et 2 colonnes ;si x.shape s'évalue à (256,512,3), x est un tableau tridimensionnelcomportant 256 lignes, 512 colonnes, 3 épaisseurs ( ?) ;

np.empty(s), np.zeros(s), np.ones(s) : A partir d'une forme s

(un t-uple) donnant les mensurations du ndarray désiré, crée unndarray vide, rempli de zéros, rempli de 1.x2 = x.copy() : A partir d'une forme (un t-uple) donnant lesmensurations du ndarray x, crée une copie ( i.e. dédouble enmémoire) de ce ndarray. Attention, x2 = x ne fait que créer uneautre référence vers le ndarray x.

Initiation au calcul scienti�que : Bases 6 janvier 2020 8 / 15

Page 17: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Création

np.array : A partir d'une liste ou d'une liste de listes :vecteur = np.array([1,2,3]) oumatrice = np.array([[1,2,3],[3,4,5]])

Un ndarray x possède une forme décrite par un vecteur donnant lesmensurations dans chaque dimension sous forme d'un t-uple. Enexemples :

np.empty(s), np.zeros(s), np.ones(s) : A partir d'une forme s

(un t-uple) donnant les mensurations du ndarray désiré, crée unndarray vide, rempli de zéros, rempli de 1.

x2 = x.copy() : A partir d'une forme (un t-uple) donnant lesmensurations du ndarray x, crée une copie ( i.e. dédouble enmémoire) de ce ndarray. Attention, x2 = x ne fait que créer uneautre référence vers le ndarray x.

Initiation au calcul scienti�que : Bases 6 janvier 2020 8 / 15

Page 18: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Création

np.array : A partir d'une liste ou d'une liste de listes :vecteur = np.array([1,2,3]) oumatrice = np.array([[1,2,3],[3,4,5]])

Un ndarray x possède une forme décrite par un vecteur donnant lesmensurations dans chaque dimension sous forme d'un t-uple. Enexemples :

np.empty(s), np.zeros(s), np.ones(s) : A partir d'une forme s

(un t-uple) donnant les mensurations du ndarray désiré, crée unndarray vide, rempli de zéros, rempli de 1.

x2 = x.copy() : A partir d'une forme (un t-uple) donnant lesmensurations du ndarray x, crée une copie ( i.e. dédouble enmémoire) de ce ndarray. Attention, x2 = x ne fait que créer uneautre référence vers le ndarray x.

Initiation au calcul scienti�que : Bases 6 janvier 2020 8 / 15

Page 19: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Manipulation

x[i,j] : Accède à l'entrée (i , j) du ndarray x (qui est donc unematrice)

x[:,2] : Accède à toutes les entrées (i ,2), i variant sur toute lagamme possible du ndarray x (qui est donc une matrice) :

Le slicing, déjà connu pour les listes fonctionne de la même manièrepour les ndarray, que ce soit en évaluation ou en a�ectation.

(Avancé) Les fonctions hstack et vstack permettent de construiredes matrices par empilement de plus petites matrices comme dans unjeu de LEGO.

On peut aussi sauver(charger) un ndarray sur le (à partir du) disquegräce aux fonctions np.save et np.load.

Initiation au calcul scienti�que : Bases 6 janvier 2020 9 / 15

Page 20: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Manipulation

x[i,j] : Accède à l'entrée (i , j) du ndarray x (qui est donc unematrice)

x[:,2] : Accède à toutes les entrées (i ,2), i variant sur toute lagamme possible du ndarray x (qui est donc une matrice) :

A l'évaluation : retourne la colonne 2 de la matrice x, il s'agit d'unndarray unidimensionnel ;A l'a�ectation : permet de modi�er l'intégralité de la colonne 2 de lamatrice x, x[:,2] = 0.0 met à zéro la colonne, x[:,2] = y[5,:]

copie la ligne 5 de y dans la colonne 2 de x ;

Le slicing, déjà connu pour les listes fonctionne de la même manièrepour les ndarray, que ce soit en évaluation ou en a�ectation.

(Avancé) Les fonctions hstack et vstack permettent de construiredes matrices par empilement de plus petites matrices comme dans unjeu de LEGO.

On peut aussi sauver(charger) un ndarray sur le (à partir du) disquegräce aux fonctions np.save et np.load.

Initiation au calcul scienti�que : Bases 6 janvier 2020 9 / 15

Page 21: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Manipulation

x[i,j] : Accède à l'entrée (i , j) du ndarray x (qui est donc unematrice)

x[:,2] : Accède à toutes les entrées (i ,2), i variant sur toute lagamme possible du ndarray x (qui est donc une matrice) :

Le slicing, déjà connu pour les listes fonctionne de la même manièrepour les ndarray, que ce soit en évaluation ou en a�ectation. P.ex.x[1:3,:] sélectionne la sous-matrice formée en gardant les lignes 1 et2 (jusque 3 exclu, en fait) et toutes les colonnes de ndarray x.x[::2] sélectionne toutes les entrées d'indices pairs du vecteur x,etc...

(Avancé) Les fonctions hstack et vstack permettent de construiredes matrices par empilement de plus petites matrices comme dans unjeu de LEGO.

On peut aussi sauver(charger) un ndarray sur le (à partir du) disquegräce aux fonctions np.save et np.load.

Initiation au calcul scienti�que : Bases 6 janvier 2020 9 / 15

Page 22: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Manipulation

x[i,j] : Accède à l'entrée (i , j) du ndarray x (qui est donc unematrice)

x[:,2] : Accède à toutes les entrées (i ,2), i variant sur toute lagamme possible du ndarray x (qui est donc une matrice) :

Le slicing, déjà connu pour les listes fonctionne de la même manièrepour les ndarray, que ce soit en évaluation ou en a�ectation.

(Avancé) Les fonctions hstack et vstack permettent de construiredes matrices par empilement de plus petites matrices comme dans unjeu de LEGO.

On peut aussi sauver(charger) un ndarray sur le (à partir du) disquegräce aux fonctions np.save et np.load.

Initiation au calcul scienti�que : Bases 6 janvier 2020 9 / 15

Page 23: Initiation au calcul scientifique : Bases

Les objets de type ndarray : Manipulation

x[i,j] : Accède à l'entrée (i , j) du ndarray x (qui est donc unematrice)

x[:,2] : Accède à toutes les entrées (i ,2), i variant sur toute lagamme possible du ndarray x (qui est donc une matrice) :

Le slicing, déjà connu pour les listes fonctionne de la même manièrepour les ndarray, que ce soit en évaluation ou en a�ectation.

(Avancé) Les fonctions hstack et vstack permettent de construiredes matrices par empilement de plus petites matrices comme dans unjeu de LEGO.

On peut aussi sauver(charger) un ndarray sur le (à partir du) disquegräce aux fonctions np.save et np.load.

Initiation au calcul scienti�que : Bases 6 janvier 2020 9 / 15

Page 24: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

Les fonctions mathématiques du module numpy sont compatibles avec lesndarray. Elles sont du type numpy.ufunc. Cela signi�e, entre autres, pourles fonctions d'une variable, qu'elles agissent aussi sur un ndarray entréepar entrée pour retourner un ndarray de même forme, c'est le caractère� vectorisé � de ces fonctions. Pour les fonctions de plusieurs variables(penser par exemple tout simplement aux fonctions/opérations somme etproduit ou aux fonctions/operateurs de comparaison), il y a aussi desmécanismes indiquant comme gérer des ndarray de formes di�érentes(� broascasting �).La description complète de ces objets (peu accessible pour un débutant)peut se lire surhttps://docs.scipy.org/doc/numpy/reference/ufuncs.html

On peut aussi y trouver l'intégralité des fonctions prédé�nies. On donnemaintenant celles d'usage courant à notre niveau : en général, les noms defonctions numpy seront pré�xés par np., on les donne sans ce pré�xe.

a + b la somme de a et b, élément par élémenta - b la di�érence de a et b, élément par élémenta * b le produit de a et b, élément par élémenta / b le quotient de a par b, élément par élémenta ** b la puissance de a par b, élément par élément

absolute(x) ou abs(x) valeur absolue, module, élément par élémentsqrt(x) racine carrée positive, élément par élément

Table � Opérations algébriques, valeur absolue, racine carrée

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 25: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

exp(x) exponentielle, élément par élémentlog(x) logarithme naturel, élément par élémentsin(x) sinus, élément par élémentcos(x) cosinus, élément par élémenttan(x) tangente, élément par élément

arcsin(x) sinus inverse, arcsinus, élément par élémentarccos(x) cosinus inverse, arccosinus, élément par élémentarctan(x) arctangente, élément par élément

Table � Fonctions exponentielle, logarithme, trigonométriques, trigo. inverses.

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 26: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

sinh(x) sinus hyperbolique, élément par élémentcosh(x) cosinus hyperbolique, élément par élémenttanh(x) tangente hyperbolique, élément par élément

arcsinh(x) argument sinus hyperbolique, élément par élémentarccosh(x) argument cosinus hyperbolique, élément par élémentarctanh(x) argument tangente hyperbolique, élément par élément

Table � Fonctions hyperboliques, hyperboliques inverses

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 27: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

sign(x) signe (−1 si < 0, 0 si = 0, +1 si > 0), élément par élémentfloor(x) partie entière, élément par élémentceil(x) partie entière +1, élément par élément

maximum(x1,x2) maximum, élément par élément, de x1 et x2minimum(x1,x2) minimum, élément par élément, de x1 et x2

Table � Fonctions signe, partie entière, minimum, maximum...

Attention : la fonction maximum donne le maximum de deux arguments etne doit pas être confondue avec la fonction max, qui appliquée à une liste,retourne le maximum des éléments de cette liste. La même remarque vautévidemment pour minimum/min .

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 28: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

On peut considérer des ndarray de booléens, obtenus par exemple enutilisant une comparaison élément par élément de deux ndarray de�ottants : x1 <= x2. Les opérations logiques peuvent évidemements'appliquer élément par éléments à des ndarray de booléens.

x1 <= x2 comparaison ≤ de x1 et x2, élément par élémentnp.abs(x1-x2)<epsilon teste le fait que |x1−x2|< ε , , élément par élément

a & b et logique, élément par élémenta | b ou logique, élément par élément∼a non logique, élément par élément

Table � Opérations logiques

Un ndarray de booléen peut être utilisé comme � slice � dans unndarray. ( c.f. "Vectoriser une fonction").

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 29: Initiation au calcul scientifique : Bases

Les fonctions mathématiques de type ufunc, compatibles

numpy

Les calculs élément par élément sur un ndarray peuvent mener à desproblèmes de dé�nition ou d'in�ni. numpy dé�nit deux constantes à cete�et np.nan et np.inf, de type float et les utilise pour signaler ce typede problème en utilisant des conventions mathématiques usuelles.Par exemple, x = np.linspace(-1,1,11) ; y = 1/np.sqrt(x) faitapparaitre des nan et inf dans le ndarray y.

isfinite(x) Teste élément par élément la �nitude � non in�ni et non NaN(Not a Number).

isinf(x) Teste élément par élément pour in�nité positive ou negative.isnan(x) Teste élément par élément pour NaN.

Table � Flottants particuliers

Initiation au calcul scienti�que : Bases 6 janvier 2020 10 / 15

Page 30: Initiation au calcul scientifique : Bases

Vectoriser une fonction

Lorsque l'on écrit une fonction (mathématique) personnalisée et que l'onveut pro�ter de la vectorisation, une conditionnelle if ou une boucle dansla fonction peuvent poser problème. Par exemple, dé�nissons

def fct_par_morceaux(x):

if -2.0 <= x <= 0.0 :

return 2 + x

elif 0.0 <= x <= 2.0 :

return 2 - x

else :

return 0.0

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 31: Initiation au calcul scientifique : Bases

Vectoriser une fonction

Si dans la suite du script on veut tracer son graphe avec la techniquenumpy/matplotlib naturelle

x = np.linspace(a,b,N)

y = fct_par_morceaux(x)

fig ,ax = plt.subplots ()

plt.plot(x,y)

plt.show()

On obtient

y = fct_par_morceaux(x)

File "/home/jcleger/MPSI/ndc /05/ python/vectorisation -ex02.py",

line 9, in fct_par_morceaux

if -2.0 <= x <= 0.0 :

ValueError: The truth value of an array with more than one element is ambiguous.

Use a.any() or a.all()

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 32: Initiation au calcul scientifique : Bases

Vectoriser une fonction

Que signi�e cette erreur ? Analysons ce que le script fait lorsque l'onappelle la fonction fct_par_morceaux avec un ndarray x.Au passage de l'instruction if -2.0 <= x <= 0.0 :, on doit évaluer-2.0 <= x, x <= 0.0, en faire la conjonction logique et, si celle-ci donneTrue, exécuter le bloc suivant.Le point est que si x est un ndarray alors x <= 0.0 est un ndarray devaleurs booléennes. La condition est évaluée entrée par entrée de x. Laconjonction and de deux tels ndarray n'est pas dé�nie et, quand bienmême elle le serait, la valeur de vérité du ndarray résultant poseproblème : c'est le sens de l'ambiguité soulevée dans le message d'erreur :doit-on considérer que la valeur de vérité de ce ndarray de booléens estTrue si l'un d'entre eux (.any()) est True ou si tous (.all()) le sont ?

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 33: Initiation au calcul scientifique : Bases

Vectoriser une fonction

Evidemment, nous ne recherchons ni l'un ni l'autre des e�ets. Nous voulonsappliquer la formule à chaque entrée de x pour laquelle le test s'évalue àTrue.Le moyen du pauvre, inélégant, consiste à placer l'appel de la fonction surun ndarray x dans une boucle (ici en compréhension 3) comme dans

x = np.linspace(a,b,N)

y = np.array ([ fct_par_morceaux(xi) for xi in x])

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 34: Initiation au calcul scientifique : Bases

Vectoriser une fonction

Pour s'en sortir et transformer notre fonction en fonction compatiblenumpy, le plus simple est d'utiliser np.vectorize comme dans

fct_par_morceaux = np.vectorize(fct_par_morceaux)

x = np.linspace(a,b,N)

y = fct_par_morceaux(x)

Cette instruction place en fait la fonction à vectoriser dans une boucle foret transforme la liste obtenue en un ndarray, exactement comme notreméthode du pauvre le fait. Outre le fait que l'écriture obtenue est plusconforme aux usages numpy/matplotlib, on peut observer un léger gainde vitesse par rapport à la mise en boucle manuelle.

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 35: Initiation au calcul scientifique : Bases

Vectoriser une fonction

(Hors programme o�ciel) On peut aussi faire une version vectorisée plussubtile, en utilisant la possibilité d'agir sur des indices sélectionnés d'unndarray. Pour résumer rapidement, on peut former des ndarray debooléens et utiliser ceux-ci pour n'agir que sur certaines parties d'unndarray. C'est une forme élaborée de slicing.Cette technique donne la dé�nition suivante de la fonction de l'exemple :

def fct_par_morceaux(x):

y = np.empty(x.shape)

cond1 = (-2.0 <= x) & (x <= 0.0)

cond2 = (0.0 <= x) & (x <= 2.0)

cond3 = ~( cond1 | cond2) #~ négation , | ou , & et

y[cond1] = 2 + x[cond1]

y[cond2] = 2 - x[cond2]

y[cond3] = 0.0

return y

Initiation au calcul scienti�que : Bases 6 janvier 2020 11 / 15

Page 36: Initiation au calcul scientifique : Bases

Représentations graphiques, module matplotlib.pyplot

Le calcul scienti�que permet de faire des calculs en masse. Personne(hormis peut-être quelques comptables maniaques) ne s'est jamais extasiédevant une liste interminable de nombres �ottants desquelles aucunestructure ne se dégage. Une part importante du calcul scienti�que estconsacrée à la bonne représentation des données calculées. Une bonnereprésentation des données doit solliciter l'un (voire plusieurs) de nos sensa�n de communiquer l'essentiel de l'information (repérer des annulations,des concentrations, des motifs récurrents, ...).Sous Python/numpy les graphiques sont gérés par la bibliothèquematplotlib.pyplot. Celle-ci est généralement importée sous l'alias pltcomme dans

import matplotlib.pyplot as plt

Elle comporte des fonctions permettant di�érents types de représentationsgraphiques de vecteurs ou de matrices. Il faut au préalable comprendre lemécanisme de construction d'une image.

Initiation au calcul scienti�que : Bases 6 janvier 2020 12 / 15

Page 37: Initiation au calcul scientifique : Bases

Représentations graphiques, module matplotlib.pyplot

La procédure de construction d'une image est la suivante :

Déclaration du canevas (ouverture d'une fenêtre ou d'un espace virtuelde dessin) par

fig ,ax = plt.subplots ()

Commandes et fonctions permettant de décorer ce canevas : tracé despoints voulus, modi�cation des titres, labels d'axes, etc... déclarationd'autres éléments graphiques (annotations, grille...), au minimum....

plt.plot(x,y)

Sauvegarde sur disque, optionnelle, avant a�chage de la fenêtre,optionnelle

plt.savefig('chapeau.pdf',format='pdf')

plt.show()

on peut recommencer ce tryptique de base pour chaque image àcomposer ; on peut aussi composer toutes les fenêtres avant de toutesles a�cher, redessiner après a�chage, faire des animations....

Initiation au calcul scienti�que : Bases 6 janvier 2020 12 / 15

Page 38: Initiation au calcul scientifique : Bases

Représentations graphiques, module matplotlib.pyplot

plt.plot(x,y) dessine les couples de points dont les abs-cisses, respectivement ordonnées sont donnéespar x, resp. y ;

plt.hist(x) dessine un histogramme des valeurs contenuesdans la liste de �ottants (ou ndarray unidi-mensionnel) x ;

plt.imshow(x) dessine l'image représentées par le ndarray

bi(tri)dimensionnel) x ;

Table � les commandes de dessin les plus utilisées

Initiation au calcul scienti�que : Bases 6 janvier 2020 12 / 15

Page 39: Initiation au calcul scientifique : Bases

Représentations graphiques, module matplotlib.pyplot

plt.title(txt) donne le titre txt à la fenêtre ;plt.xlabel(txt) /plt.ylabel(txt)

donne le label txt à l'axe des abscis-ses/ordonnées ;

plt.xticks(vals,txts)

plt.yticks(vals,txts)

place des marques (liste de chaînestxts) à des endroits (liste de va-leurs vals) choisis sur l'axe des abs-cisses/ordonnées ;

plt.grid() a�che la grille en pointillés marquantles xticks/yticks ;

plt.legend() a�che la légende des graphesax.set_aspect('equal') donne un repère orthonormé ;plt.xlim((xmin,xmax))

plt.ylim((ymin,ymax))

limite le dessin à une gamme donnéed'abscisses/ordonnées ; récupère cettegamme si pas d'argument

plt.twinx() � dédouble l'axe des abscisses � ;

Table � Les commandes de décoration les plus utilisées

Les commandes décrites dans les tables 7 et 8 doivent su�re pour toutesles représentations élémentaires. Pour aller plus loin, consulter le sitehttps://matplotlib.org/ et sa galerie d'exemples.

Initiation au calcul scienti�que : Bases 6 janvier 2020 12 / 15

Page 40: Initiation au calcul scientifique : Bases

Graphes de fonctions réelles

Exercice 1.� Illustrer graphiquement l'inégalité suivante

∀x ≥ 0, x− x3

6≤ sin(x)≤ x− x3

6+

x5

120

Pour quelle plage de valeurs de x l'inégalité de droite est-elle triviale du faitque sin(x)≤ 1 ?

Initiation au calcul scienti�que : Bases 6 janvier 2020 13 / 15

Page 41: Initiation au calcul scientifique : Bases

Graphes de fonctions réelles

Exercice 2.�

1. Tracer les graphes des fonctions f et g dé�nies par

∀x ∈ R, f (x) =

{ex −1 si x ≥ 0

sin(x) si x < 0et g(x) =

{e2x −1 si x ≥ 0

sin(x) si x < 0

2. Comment illustrer le fait que l'une d'entre elles est dérivable en 0 alorsque l'autre ne l'est pas ?

Initiation au calcul scienti�que : Bases 6 janvier 2020 13 / 15

Page 42: Initiation au calcul scientifique : Bases

Graphes de fonctions réelles

Exercice 3.� Déterminer, suivant les valeurs de x , le lien entre

arcsin(2.x .√

1−x2) et 2arcsinx

Initiation au calcul scienti�que : Bases 6 janvier 2020 13 / 15

Page 43: Initiation au calcul scientifique : Bases

Graphes de fonctions réelles

Exercice 4.� La fonction f dé�nie par

∀x > 0, f (x) = x− ln(x)

dé�nit par restriction :

d'une part, une bijection ]0,1]→ [1,+∞[ dont on note la réciproquegm ;

d'autre part, une bijection [1,+∞[→ [1,+∞[ dont on note laréciproque gp ;

Donner l'allure des graphes de gm et gp.

Initiation au calcul scienti�que : Bases 6 janvier 2020 13 / 15

Page 44: Initiation au calcul scientifique : Bases

Trajectoires

Exercice 5.� On considère les deux fonctions x ,y : R→ R dé�nies par

∀t ∈ R, x(t) = cos(3t),y(t) = sin(5t).

Tracer les ensembles de points

T0 = {(x(t),y(t), t ∈ [0,π]}, T1 = {(x(t),y(t), t ∈ [0,2π]}

etT = {(x(t),y(t), t ∈ R}.

Initiation au calcul scienti�que : Bases 6 janvier 2020 14 / 15

Page 45: Initiation au calcul scientifique : Bases

Trajectoires

Exercice 6.� Soient p, e, θ0 des paramètres réels. On pose, pour θ ∈ R,r(θ) =

p

1+ e.cos(θ −θ0).

1. Pour p = 1, θ0 = 0 et e valant 1

2, 1 et 2, tracer 3 l'ensemble de points

E = {(r(θ).cosθ , r(θ).sinθ), θ ∈ [0,2π]}

2. Dans la question précédente, faire varier θ0 sur l'intervalle [0,2π],observer et commenter.3. Fixer θ0 = 0 et faire varier e sur une gamme allant de −10 à 10,observer et commenter.

Initiation au calcul scienti�que : Bases 6 janvier 2020 14 / 15

Page 46: Initiation au calcul scientifique : Bases

Trajectoires

Exercice 7.�

1. Ecrire une fonction Python racines_unite(N) retournant la liste(ordonnée de la façon usuelle) des N racines N-ièmes de l'unité.2. Prendre N = 7. Dessiner (en repère orthonormé) les racines 7-ièmes del'unité...3. ...et, sur le même dessin, dessiner successivement les puissances entières(de 2 à ?) de ces racines 7-ièmes, de sorte à obtenir le dessin de la �gure 1.

0 1x

1

0

1

y

{ , 7 = 1}{ 2, 7 = 1}{ 3, 7 = 1}

Figure � Racines 7-ièmes de l'unité.

Initiation au calcul scienti�que : Bases 6 janvier 2020 14 / 15

Page 47: Initiation au calcul scientifique : Bases

Suites réelles récurrentes

Exercice 8.� Soit f : R 3 x 7→ ex

ex+1∈ R et soit u0 ∈ R et la suite u

véri�ant∀n ∈ N, un+1 = f (un)

1. Reproduire la �gure 2 (dans un repère orthonormé) où apparaissent :

le graphe de f d'équation y = f (x) ;

la première bissectrice d'équation y = x ;

les premiers éléments (pour n = 0, . . . ,5) de la suite u placés sur l'axedes abscisses et leurs images par f placées sur l'axe des ordonnées.

Indication:Bien placer les marques d'abscisses et d'ordonnées en construisant des

listes adéquates et en utilisant plt.xticks, plt.yticks et plt.grid

2. La suite u a une limite : Donner sa valeur approximative et prévoir, auvu du dessin, une méthode de preuve mathématique de ce fait.

Initiation au calcul scienti�que : Bases 6 janvier 2020 15 / 15

Page 48: Initiation au calcul scientifique : Bases

Suites réelles récurrentes

Exercice 8.�

0 u0u1u2u3u4 1

0

u1u2u3u4u5

1

Figure � Suite récurrente un+1 = f (un).Initiation au calcul scienti�que : Bases 6 janvier 2020 15 / 15