Ta b l e o f C o n te n ts I P y th o n e t r a p p e l s...
Transcript of Ta b l e o f C o n te n ts I P y th o n e t r a p p e l s...
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 1/62
In [1]:
In [2]:
M62_CM1 Introduction aux NotebooksIPython et rappels sur le langage Python.
Table of Contents 1 Notebook Jupyter
1.1 Installation simple1.2 Références1.3 Manipulation du notebook
1.4 Mode édition : les cellules Markdown et sa syntaxe1.4.1 La syntaxe1.4.2 Les titres1.4.3 Les paragraphes1.4.4 L’emphase1.4.5 Les citations1.4.6 Les listes non ordonnée1.4.7 Les listes ordonnées1.4.8 Le bloc de code1.4.9 Les filets ou barres de séparation1.4.10 Les liens1.4.11 Les images1.4.12 Les tableaux1.4.13 Échappement des caractères
1.5 Mode édition: les équations1.5.1 Les modes mathématiques1.5.2 Indices et exposantes1.5.3 Symboles d'usage courant1.5.4 Racine carrée, racine n-ième1.5.5 Fractions et coefficients binomiaux
Python version 3.6.2 |Anaconda custom (64-bit)| (default, Jul
20 2017, 13:51:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Matplotlib version 2.1.0
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>"))
import sys #only needed to determine Python version number
import matplotlib #only needed to determine Matplotlib version number
print('Python version ' + sys.version)
print('Matplotlib version ' + matplotlib.__version__ )
%reset -f
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 2/62
1.5.6 Lettres grecques1.5.7 Texte dans une formule displaystyle1.5.8 Fonctions mathématiques1.5.9 Grands opérateurs: intégrales, sommes, produits, etc.1.5.10 Accents mathématiques1.5.11 Délimiteurs1.5.12 Alphabets mathématiques1.5.13 Tableaux mathématiques1.5.14 Distinction de cas1.5.15 Matrices1.5.16 Alignement de formules1.5.17 Flèches extensibles1.5.18 Modules de congruences1.5.19 Placer au-dessus ou en-dessous
1.6 Mode édition : les celulles Code1.6.1 Les exceptions1.6.2 Entrée et sortie standard1.6.3 L'aide en ligne IPython1.6.4 Les commandes systèmes
1.6.5 Les commandes magiques de IPython1.6.5.1 %matplotlib inline & %matplotlib notebook1.6.5.2 %pylab inline1.6.5.3 %autosave 3001.6.5.4 %who , %whos et %reset
1.6.6 Exporter un notebook 2 Notions de base de Python
2.1 Indentation2.2 Commentaires2.3 Variables et affectation2.4 Chaîne de caractères (Strings)2.5 Listes2.6 Matrices (sans NumPy )2.7 Dictionnaires2.8 Fonction range2.9 Fonction print2.10 Opérations arithmétiques2.11 Opérateurs de comparaison et connecteurs logiques
3 Fonctions3.1 def3.2 Fonctions Lambda (fonctions anonimes)3.3 List-comprehensions
4 Structure conditionnelle 5 Boucles
5.1 Boucle while : répétition conditionnelle5.2 Répétition for5.3 Interrompre une boucle: break et continue
6 Modules6.1 Le module math6.2 Le module random
7 Dessiner des courbes avec le module matplotlib 7.1 1D
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 3/62
7.1.1 Plusieurs courbes sur le même repère7.1.2 Plusieurs "fenêtres" graphiques7.1.3 Plusieurs repères dans la même fenêtre7.1.4 Animations
7.2 2D7.3 Représentations des erreurs: échelles logarithmique et semi-logarithmique
Jupyter est une application Web qui regroupe intimement deux fonctionnalités très différentes :
Un outil qui permet de créer des documents multimédia intégrant du texte, des formulesmathématiques, des graphiques, des images, voire des animations et des vidéos.Une interface qui permet d'exécuter du code informatique. Pour cela Jupyter s'appuie sur desprogrammes indépendants capablent d'interpréter le langage dans lequel est écrit ce code.Dans la terminologie de Jupyter ces interpréteurs sont appelés des noyaux (kernel en anglais).Nous utiliserons le noyau pour le langage Python 3.
Les documents Jupyter sont appelés des notebooks. Un fichier notebook est reconnaissable parson extension . Le document que vous lisez actuellement est un notebook.
Pour commencer, dans un terminal, lancer la commande jupyter notebook & (ou anaconda-navigator & ). Cela ouvrira automatiquement un navigateur dans lequel on peut
alors commencer à travailler. L'onglet principal représente l’arborescence des fichiers.
1 Notebook Jupyter
.
La façon la plus simple d’installer Python et Jupyter est d’installer Anaconda. Les procéduresd’installations détaillées selon chaque système d’exploitation sont décrites à l’adresse :https://docs.anaconda.com/anaconda/install/ (https://docs.anaconda.com/anaconda/install/). Lesprocédures suivantes sont un résumé rapide de la procédure d’installation.
Installation sous Windows.1. Télécharger Anaconda 5.2 (ou plus récent) pour Python 3.6 (ou plus récent) à l’adresse :
https://www.anaconda.com/download/#windows(https://www.anaconda.com/download/#windows) ;
2. Double cliquer sur le fichier téléchargé pour lancer l’installation d’Anaconda, puis suivre laprocédure d’installation (il n’est pas nécessaire d’installer VS Code).
3. Une fois l’installation terminée, lancer Anaconda Navigator à partir du menu démarrer.
Installation sous macOS.1. Télécharger Anaconda 5.2 (ou plus récent) pour Python 3.6 (ou plus récent) à l’adresse :
https://www.anaconda.com/download/#macos(https://www.anaconda.com/download/#macos) ;
2. Double cliquer sur le fichier téléchargé pour lancer l’installation d’Anaconda, puis suivre laprocédure d’installation (il n’est pas nécessaire d’installer VS Code).
3. Une fois l’installation terminée, lancer Anaconda Navigator à partir de la liste desapplications.
Installation sous Linux.
1.1 Installation simple
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 4/62
1. Télécharger Anaconda 5.2 (ou plus récent) pour Python 3.6 (ou plus récent) à l’adresse :https://www.anaconda.com/download/#linux (https://www.anaconda.com/download/#linux) ;
2. Exécuter le fichier téléchargé avec bash puis suivre la procédure d’installation (il n’est pasnécessaire d’installer VS Code).
3. Une fois l’installation terminée, taper anaconda-navigator dans un nouveau terminal pourlancer Anaconda Navigator.
https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/examples_index.html(https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/examples_index.html)Ce qu'on peut écrire en Markdown et en dans les notebooks Jupyter (jupyter.org) et cequ'on peut faire dans les cellules de code dans cette série de tutoriels(https://www.youtube.com/playlist?list=PLRJx8WOUx5XcDMOxSQegCJUjTJePTlF9Z)
1.2 Références
LT XAE
Le notebook est constitué d'une succession de cellules comportant
soit du texte en Markdown comme ici,soit du code comme dans la cellule suivante (Python pour nous):
1.3 Manipulation du notebook
In [3]:
Un liseré repère la cellule actuellement selectionnée. Les cellules peuvent être dans le mode commande ou le mode édition:
mode commande : permet de se déplacer d'une cellule à l'autre et d'exécuter les cellulesmode édition : permet de modifier le contenu d'une cellule.
1. Mode commande Pour entrer dans le mode commande de la cellule sélectionnée, il suffit de presser la touche [Esc] . Quand vous êtes dans le mode commande, vous pouvez ajouter ou supprimer des
cellules mais vous ne pouvez pas saisir de texte dans une cellule. Voici les raccourcis principaux disponibles en mode commande :
A et B : Insèrent une nouvelle cellule, respectivement au-dessus ou au-dessous de lacellule sélectionnée.M : Transforme la cellule en une cellule de type Markdown.Y : Transforme la cellule en une cellule de type Code.C et V : Copie et colle des cellules.DD : Supprime la cellule sélectionnée.Z : Annule la dernière suppression de cellule.II : Interrompt l'exécution du code.00 : Redémarre l'interpréteur. Il se retrouve alors dans son état initial.H : Affiche la liste de tous les raccourcis clavier.
x=range(3)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 5/62
2. Mode édition Pour entrer dans le mode édition de la cellule sélectionnée, il suffit de presser la touche [Enter] ou de double-cliquer à l'intérieur de la cellule. Quand une cellule est en édition vous
pouvez saisir du texte comme dans un éditeur classique. Lorsque le curseur est en début de ligne ou lorsque vous avez sélectionné du texte, l'appui surla touche [Tab] (respectivement [Shift-TAB] ) indente (respectivement désindente) leslignes correspondantes. Voici d'autres raccourcis clavier :
[Ctrl-A] : Sélectionne tout le texte de la cellule.[Ctrl-Z] : Annule les dernières saisies de texte.[Ctrl-Enter] : Exécute la cellule.[Shift-Enter] : Exécute la cellule et sélectionne la cellule suivante. L'appui répété de
cette touche permet ainsi d'exécuter pas à pas toutes les cellules du notebook.[Alt-Enter] : Exécute la cellule et insére une nouvelle cellule juste en dessous.[ESC] : Passe dans le mode commande
La touche M transforme la cellule sélectionnée en type Markdown. Vous pouvez alors rédiger dutexte enrichi (titres, sous-titres, gras, italique, alinéas, tableaux, liens hypertexte, etc). Le texte de la cellule doit être rédigé en langage Markdown qui est un langage de balisage léger. Lasyntaxe markdown est facile à apprendre (le plus simple est d'ailleurs de regarder des exemples dedocuments). Voici quelque liens :
Markdown Cheatsheet (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)Markdown for Jupyter notebooks cheatsheet (https://medium.com/ibm-data-science-experience/markdown-for-jupyter-notebooks-cheatsheet-386c05aeebed)
Il est également possible d'insérer des morceaux de texte en langage pour composer desexpressions mathématiques.
1.4 Mode édition : les cellules Markdown et sa syntaxe
LT XAE
Markdown est un système d’édition et de formatage de texte. La philosophie du système veut que letexte écrit soit lisible sans interpréteur particulier en mode texte. Il est léger et épuré de l’essentielde la verbosité d’un language balisé. Les éléments de syntaxe sont des caractères de ponctuation qui font sens visuellement même nonconvertis. Une fois converti, le navigateur web (qui joue alors le rôle d’interpréteur) en rendra lalecture plus claire.
Vous pouvez tout à fait introduire directement des balises HTML dans votre texte. Attention, leformatage markdown ne sera pas appliqué à l’intérieur de ces balises.
1.4.1 La syntaxe
Il est possible de titrer en ajoutant des dièses ( # ) au début de la ligne. Il n’y a pas de limite aunombre de niveaux de titres qu’il est possible d’utiliser (mais n’allez pas au delà de 4).
1.4.2 Les titres
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 6/62
# Title 1
## Title 2
### Title 3
#### Title 4
##### Title 5
Pour afficher un paragraphe, laisser une ligne vide.
Effectuer un saut de ligne simple dans votre texte markdown n’aura aucun effet. Sauf si vousterminez votre ligne par un double espace (ou plus que ça)... comme ici.
1.4.3 Les paragraphes
Pour formater une partie de votre texte comme emphase, entourez le par des astérisques * oudes underscores _ . Entourer par un signe unique passe en italique et par un double signe engras. Il est possible de combiner les deux. Un double tildes ~~ vous permettent de barrer le texte.
1.4.4 L’emphase
Pour afficher un bloc de citation, commencez le paragraphe par un chevron fermant > . Si votre bloc contient plusieurs lignes, vous pouvez faire des sauts de lignes à
la main et toutes les ouvrir par un chevron fermant, mais ce n’est pas nécessaire.Ces bloc peuvent contenir d’autres éléments markdown comme des titres ou deslistes.
1.4.5 Les citations
Pour afficher une liste, commencez la ligne par une astérisque * , un moins - ou un plus + . Làencore, le choix n’a pas d’importance, mais il faut rester cohérent dans votre document.
+ item
+ item
+ item
donne
itemitemitem
1.4.6 Les listes non ordonnée
Pour afficher une liste ordonnée, commencez la ligne par un nombre suivit d’un point.
1.4.7 Les listes ordonnées
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 7/62
1. item
123. item
17. item
donne
1. item2. item3. item
Pour afficher un bloc de code, sautez deux lignes comme pour un paragraphe, puis indentez avec 4espaces ou une tabulation. Pour afficher du code dans une ligne, il faut l’entourer par des guillemets simples (`).
1.4.8 Le bloc de code
Pour afficher un filet de séparation, entrez dans votre texte au moins 3 astérisques * ou 3 moins - sur une ligne entourée de sauts de lignes. Il est possible de les séparer par des espaces.
1.4.9 Les filets ou barres de séparation
Il y a deux façons d’afficher un lien.
1. De manière automatique en encadrant un lien par des chevrons, par exemple <http://www.google.com> donne http://www.google.com (http://www.google.com). Il est
alors cliquable et affiche l’url indiquée entre chevrons.2. Ou en ajoutant des paramètres. Le texte à afficher est alors indiqué entre crochets suivit de
l’adresse du lien entre parenthèses, par exemple [google](http://www.google.com "link to google") donne google (http://www.google.com). Dans les parenthèses, à lasuite du lien, on peut indiquer un titre entre guillemets. Ce titre sera affiché lors du survol dulien dans le navigateur. Il sera également lu par les navigateurs textuels pour les déficientsvisuels.
1.4.10 Les liens
Pour afficher une image, commencez par un point d’exclamation. Puis indiquez le texte alternatifentre crochets. Ce dernier sera affiché si l’image n’est pas chargé et lue par les moteurs derecherche. Terminez par l’URL de l’image entre parenthèses. Cette URL peut être un lien vers leweb ou un chemin local de ce type : /dossier_images/nom_de_mon_image.jpg . Après lelien vers l’image, il est possible d’ajouter un titre lu par les navigateurs textuels et affiché au survolde l’image par les autres. ![Jupyter logo]
(https://upload.wikimedia.org/wikipedia/commons/3/38/Jupyter_logo.svg) donne
1.4.11 Les images
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 8/62
Si l'image doit être redimensionnée, utiliser directement du : ![Google logo](https://www.google.fr/images/srpr/logo11w.png "google
logo") donne
<img src = "https://www.google.fr/images/srpr/logo11w.png" title =
"google logo" alt = "Google logo" width="200"> donne
L’idée globale est de “dessiner” des colonnes en les entourant avec des pipes | . Le nombre decolonnes est défini dans la première ligne du tableau et vous devez pour chaque ligne avoir lemême nombre de colonnes, même si certaines sont vides. La première ligne sera votre en-tête. La seconde ligne sépare cet en-tête du corps du tableau, ellene contient que des tiret - Il n'est plus possible de définir l'alignement des colonnes dansmarkdown.
1.4.12 Les tableaux
| Header 1 | header 2 | header 3 |
|----------|----------|----------|
| 1 Online | 1 | value |
| Line 2 | 2 | value |
| 3 Online | 3 | value |
Header 1 header 2 header 3
1 Online 1 value
Line 2 2 value
3 Online 3 value
Assistant en ligne : Markdown Tables Generator(https://www.tablesgenerator.com/markdown_tables)
1.4.13 Échappement des caractères
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 9/62
Les caractères spéciaux ayant un sens en markdown doivent être échappés. Si vous souhaitezutiliser dans votre texte des astérisques, accolades, dièses... à une position indiquant à markdownque vous désirer un formatage particulier, vous devez les échapper en les faisant précéder d’unantislash \ . Sinon markdown les masquera et appliquera le formatage correspondant. Lescaractères suivants sont à échapper :
\ * ` - _ [] () {} # + . !
Les équations peuvent être directement données au format , on peut donc par exemple écrire au milieu d’une ligne ou bien écrire des équations dans une nouvelle ligne et centrées:
Quelques commandes de base sont expliquées sur cette page(http://www.tuteurs.ens.fr/logiciels/latex/maths.html#s2), et pour plus de détails, vous pourrezconsulter mon polycopié d'Initiation à , disponible ici (http://faccanoni.univ-tln.fr/user/enseignements/20142015/InitiationLaTeX.pdf), en particulier le chapitre 3.
1.5 Mode édition: les équations
LT XAE
xi
= .∑n=1
∞ 1
n2
π2
6
LT XAE
LT X2eAE
Pour taper des formules mathématiques avec , il y a besoin d’entrer en modemathématiques. Il existe deux modes mathématiques : les formules dans le texte (appelée inline) et les formules enévidence (dites en displaystyle).
Pour mettre une formule dans le texte, comme , il suffit de mettre la formule entre deuxdollars: $y=f(x)$ . Remarquer la différence entre le mode texte et le mode mathématique : avec des dollars on a
tandis que sans dollars on a y=f(x)Pour mettre une formule en évidence, comme
il faut mettre la formule entre deux doubles dollars $$y=f(x)$$
1.5.1 Les modes mathématiques
LT XAE
y = f (x)
y = f (x)
y = f (x)
Deux opérations fondamentales en mode mathématique sont la mise en exposant et la mise enindice.
Pour obtenir un indice, il faut utiliser la touche _ qui s’obtient avec la touche «8». Parexemple, taper $x_1$ donnera . Attention, taper $x_12$ ne donne pas mais :seul le premier caractère tapé après _ est mis en indice; pour obtenir , il faut taper $x_{12}$ .
Pour obtenir un exposant, il faut utiliser ^ (accent circonflexe qui s’obtient en tapant deux fois
la touche «^»). Par exemple, $x^2$ donne . De même que pour les indices, $x^23$
donne tandis que $x^{23}$ donne .On peut bien sûr combiner les deux, dans l’ordre que l’on veux : $x_1^2$ ou $x^2_1$donnent
1.5.2 Indices et exposantes
x1 x12 2x1
x12
x2
3x2 x23
x21
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 10/62
Résultat Commande Résultat Commande Résultat Commande
\infty \le \iff
\forall \leq \nearrow
\exists \ge \searrow
\nexists \geq \in
\partial \approx \subset
\ell \simeq \cup
\pm \equiv \cap
\mp \to \setminus
\times \mapsto \emptyset
\neq \implies
Pour la négation d'un symbole, on peut utiliser \not . Par exemple, $F \not\subset E$fournit .
1.5.3 Symboles d'usage courant
∞ ≤ ⟺
∀ ≤ ↗
∃ ≥ ↘
∄ ≥ ∈
∂ ≈ ⊂
ℓ ≃ ∪
± ≡ ∩
∓ → ∖
× ↦ ∅
≠ ⟹
F ⊄ E
La racine carrée s'obtient par \sqrt{...} et la racine n-ième par \sqrt[n]{...} :
1.5.4 Racine carrée, racine n-ième
$$
\sqrt{1+x} + \sqrt[3]{1+x}
$$
+1 + x⎯ ⎯⎯⎯⎯⎯⎯⎯√ 1 + x
⎯ ⎯⎯⎯⎯⎯⎯⎯√3
Pour les fractions, on utilise la commande \frac{}{} qui prend deux arguments, dans l'ordre lenumérateur et le dénominateur. Pour les coefficients binomiaux on utilise la commande \binom{}{} . Le rendu change selon qu'il s'agit d'une formule inline ou d'une formule displaystyle: $\frac{1}{2}+1$ donne
$$\frac{1}{2}+1$$ donne
1.5.5 Fractions et coefficients binomiaux
+ 112
+ 11
2
Pour taper les lettres grecques, il suffit de précéder le nom de la lettre par un backslash; parexemple $\alpha$ donne . Voici une liste complète des lettres grecques disponibles sous
:
1.5.6 Lettres grecques
α
LT XAE
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 11/62
Résultat Commande Résultat Commande Résultat CommandeRésultat Commande Résultat Commande Résultat Commande
\alph$ \nu \Gamma
\beta \xi \Delta
\gamma \pi \Theta
\delta \varpi \Lambda
\epsilon \rho \Xi
\varepsilon \varrho \Pi
\zeta \sigma \Sigma
\eta \tau \Upsilon
\theta \upsilon \Phi
\vartheta \chi \Psi
\iota \phi \Omega
\kappa \varphi
\lambda \psi
\mu \omega
α ν Γ
β ξ Δ
γ π Θ
δ ϖ Λ
ϵ ρ Ξ
ε ϱ Π
ζ σ Σ
η τ Υ
θ υ Φ
ϑ χ Ψ
ι ϕ Ω
κ φ
λ ψ
μ ω
La commande \text{} permet d'insérer du texte dans une formule displaystyle (les commandes \quad et \qquad insèrent de l'espace autour du texte):
$$
y = x^2 \qquad \text{et donc} \quad x = \pm\sqrt{y}
$$
donne
1.5.7 Texte dans une formule displaystyle
y = et donc x = ±x2 y⎯⎯√
Résultat Commande Résultat Commande Résultat Commande Résultat Commande
\exp \cos \cosh \lim
\ln \sin \sinh \limsup
\lg \tan \tanh \liminf
\log \cot \coth \max
\inf \arccos \gcd \sup
\det \arcsin \hom \min
\deg \arctan \ker \arg
\dim
1.5.8 Fonctions mathématiques
exp cos cosh lim
ln sin sinh lim sup
lg tan tanh lim inf
log cot coth max
inf arccos gcd sup
det arcsin hom min
deg arctan ker arg
dim
1.5.9 Grands opérateurs: intégrales, sommes, produits, etc.
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 12/62
Le rendu des grands opérateurs change selon qu'il s'agit d'une formule inline ou d'une formuledisplaystyle. Certaines de ces commandes prennent, tout comme ou , des bornes. Leprincipe est le même, on utilise des indices ou des exposants pour les taper. Le placement desindices et exposants dépend à nouveau de si la formule est mise en évidence ou pas.
$\int_a^b f(x) dx$ et $\sum_{i=0}^n u_n$ donnent et
$$\int_a^b f(x) dx$$ et $$\sum_{i=0}^n u_n$$ donnent
et
Ponctuellement et seulement si absolument nécessaire, dans une formule inline
on peut forcer le positionnement des indices avec \limits :
$\int\limits_a^b f(x) dx$ et $\sum\limits_{i=0}^n u_n$ donnent et
on peut forcer la dimension et le positionnement des indices avec \displaystyle $\displaystyle\int_a^b f(x) dx$ et $\displaystyle\sum_{i=0}^n u_n$
donnent et
Résultat inline Commande Résultat displaystyle Commande
$\int$ $$\int$$
$\iint$ $$\iint$$
$\iiint$ $$\iiint$$
$\sum$ $$\sum$$
$\prod$ $$\prod$$
$\bigcup$ $$\bigcup$$
$\bigcap$ $$\bigcap$$
$\bigsqcup$ $$\bigsqcup$$
$\bigoplus$ $$\bigoplus$$
$\bigotimes$ $$\bigotimes$$
$\coprod$ $$\coprod$$
Pour mettre plusieurs lignes dans les indices, il faut utiliser \substack{} ; à l'intérieur del'argument de \substack , on passe à la ligne avec \\ .
max lim
f (x)dx∫ b
a∑n
i=0 un
f (x)dx∫b
a
∑i=0
n
un
f (x)dx∫a
b
∑i=0
n
un
f (x)dx∫b
a∑i=0
n
un
∫ ∫∬ ∬∭ ∭∑ ∑∏ ∏⋃ ⋃⋂ ⋂⨆ ⨆⨁ ⨁⨂ ⨂∐ ∐
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 13/62
$$
L_i(x)=\prod_{\substack{j=0\\j\neq i}}^n\frac{x-x_j}{x_i-x_j}
$$
donne
(x) =Li ∏j=0j≠i
nx − xj
−xi xj
Voici les accents pouvant se mettre sur une lettre seule:
Résultat Commande Résultat Commande Résultat Commande
\tilde{a} \mathring{a} \dot{a}
\vec{a} \grave{a} \ddot{a}
\hat{a} \acute{a} \dddot{a}
\bar{a} \breve{a} \ddddot{a}
\check{a}
Il existe aussi des accents extensibles:
Résultat Commande Résultat Commande Résultat Com
\widehat{abc} \widetilde{abc} \overleftarro
\overline{abc} \underbrace{abc} \underleftarro
\underline{abc} \overrightarrow{abc} \overleftrightarro
\overbrace{abc} \underrightarrow{abc} \underleftrightarro
Pour \underbrace il est possible de placer du matériel en-dessous en utilisant _ et pour \overbrace du matériel au-dessus en utilisant ^ :
$$
\underbrace{x^3 + x^2 + x + 1}_{\to 0}
\qquad
\overbrace{x^3 + x^2 + x + 1}^{= 0}
$$
donne
1.5.10 Accents mathématiques
a a a
a a a
a a a
a a a
a
abc abc abc← ⎯⎯⎯
abc⎯ ⎯⎯⎯⎯⎯⎯⎯⎯ abc
⏟abc← ⎯⎯⎯
abc⎯ ⎯⎯⎯⎯⎯
abc⎯ →⎯⎯
abc←→
abc⏞
abc⎯ →⎯⎯
abc←→
+ + x + 1x3 x2 →0
+ + x + 1x3 x2 =0
Résultat Commande Résultat Commande Résultat Commande
1.5.11 Délimiteurs
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 14/62
Résultat Commande Résultat Commande Résultat Commande
( / \lfloor
) \backslash \rfloor
[ \lvert \lceil
] \rvert \rceil
\{ \lVert \langle
\} \rVert \rangle
rien .
Il est important de comprendre que, même si \lvert et \rvert se ressemblent, ils ne peuventpas être interchangés: \lvert doit toujours être utilisé pour ouvrir et \rvert pour refermer. Parexemple, se tape $\lvert x \rvert$ . Les seuls délimiteurs à n'être ni ouvrant ni fermantmais médian sont le slash / , l'anti-slash \ et le \middle .
Pour avoir des délimiteurs qui sont de la même taille que ce qu'ils entourent, il faut précéder ledélimiteur ouvrant par \left et le délimiteur fermant par \right :
$$
(1+\frac{1}{n})^n
$$
donne
$$
\left(1+\frac{1}{n}\right)^n
$$
donne
Voici un exemple d'utilisation d'un délimiteur vide:
$$
\left.\frac{\partial P}{\partial T}\right|_{V}=\frac{nR}{V}
$$
donne
On peut aussi utiliser \middle pour mettre un délimiteur médian au milieu d'un couple \left et\right , comme dans la définition d'un ensemble:
$$
\left\{ x \middle| x^2<\frac{1}{2} \right\}
$$
donne
( / ⌊
) ∖ ⌋
[ ∣ ⌈
] ∣ ⌉
{ ∥ ⟨
} ∥ ⟩
∣x∣
(1 +1
n)n
(1 + )1
n
n
=∂P∂T
|
|||V
nR
V
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 15/62
On note qu'ici la barre verticale est trop proche de ce qu'il y a autour d'elle et il faut rajouter à lamain deux petits espaces avec la commande \, :
$$
\left\{ x \, \middle| \, x^2<\frac{1}{2} \right\}
$$
donne
{x < }|
|||x
2 1
2
{x < }|
||| x
2 1
2
Voici un résumé des alphabets mathématiques disponibles:
Résultat Commande Résultat Commande
C x
\mathbb{C} \mathrm{x}
\mathcal{C} \mathbf{x}
\mathscr{C} \boldsymbol{\sigma}
\mathfrak{C} \mathit{PGL}
Ne pas confondre \mathrm et \text : le premier est pour mettre des maths en romain tandisque le second est pour insérer du texte dans une formule.
1.5.12 Alphabets mathématiques
C x
ℂ x
x
𝒞 σ
ℭ PGL
Pour composer des tableaux mathématiques on utilise l'environnement {array} . Cet environnement prend un argument obligatoire qui est la spécification du type des colonnes. Les types de colonnes de base sont c (centré), l (aligné à gauche) et r (aligné à droite). Le texte des différentes colonnes est séparé par un & et on passe à la ligne suivante en utilisant \\ .
Pour rajouter un trait vertical entre deux colonnes, il suffit de mettre un | (qu'on obtient avec lacombinaison de touches "AltGr+6") dans la spécification des colonnes. Pour tracer un trait horizontal, il y a la commande \hline . Cette commande doit être soit au toutdébut du tableau soit après un \\ .
$$
\begin{array}{|c|c|}
\hline
f(x) & f'(x)\\
\hline
x^n & nx^{n-1}\\
\ln(x) & \frac{1}{x}\\
\hline
\end{array}
$$
1.5.13 Tableaux mathématiques
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 16/62
donne
f (x)
xn
ln(x)
(x)f ′
nxn−1
1x
Pour définir une fonction par morceaux on peut utiliser l'environnement {cases} , qui s'utilise dela façon suivante:
$$
H(x) =
\begin{cases}
0 & \text{si $x < 0$,} \\
1 & \text{si $x \geq 0$.}
\end{cases}
$$
donne
1.5.14 Distinction de cas
H(x) = { 0
1
si x < 0,
si x ≥ 0.
On tape les matrices comme des tableaux, sauf qu'on utilise les environnements {matrix} , {pmatrix} , {bmatrix} , {Bmatrix} , {vmatrix} , {Vmatrix} ou {smallmatrix} :
$$
\begin{matrix} a & b \\ c & d \end{matrix}
\quad
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
\quad
\begin{bmatrix} a & b \\ c & d \end{bmatrix}
\quad
\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}
\quad
\begin{vmatrix} a & b \\ c & d \end{vmatrix}
\quad
\begin{Vmatrix} a & b \\ c & d \end{Vmatrix}
\quad
\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}
$$
donne
1.5.15 Matrices
( ) [ ] { }a
c
b
d
a
c
b
d
a
c
b
d
a
c
b
d
|
|||a
c
b
d
|
|||
∥∥∥a
c
b
d
∥∥∥ a
cbd
1.5.16 Alignement de formules
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 17/62
Pour aligner plusieurs formules, on dispose des environnements {align} et {multline} (iln'est pas nécessaire d'utiliser les $$...$$ ). Ne jamais mettre de \\ sur la dernière ligne de cesenvironnements.
L'environnement {align} permet d'aligner plusieurs signes d'égalité à l'intérieur d'une mêmeformule:
\begin{align}
A & = B \\
& = C+D \\
& = E
\end{align}
donne
On peut au besoin mettre plusieurs équations en colonne:
\begin{align}
A & = B & E & = F & I & = J \\
& = C+C & & = G & & = K \\
& = D & & & &
\end{align}
donne
L'environnement {multline} permet de découper une formule trop grande en plusieursmorceaux sans contrôle précis de l'alignement:
\begin{multline}
A+B+C+D+E+F+G+H+I+J\\
+A+B+C+D+E+F+G+H+I+J\\
+A+B+C+D+E+F+G+H+I+J\\
+A+B+C+D+E+F+G+H+I+J
\end{multline}
donne
Le package de défini d'autres environnements, vous pouvez les utiliser (aprèsavoir lu la documentation du package et compris dans quels cas il faut utiliser un environnementplutôt qu'un autre). En revanche, l'utilisation de l'environnement {eqnarray} pour mettre enforme une formule sur plusieurs lignes, qu'on peut trouver dans certains vieux manuels, seraconsidéré comme une faute grave. Cet environnement a plusieurs défauts bien illustré dans cedocument: Avoid eqnarray! (http://tug.org/pracjourn/2006-4/madsen/madsen.pdf)
A = B
= C + D
= E
A = B
= C + C
= D
E = F
= G
I = J
= K
A + B + C + D + E + F + G + H + I + J
+ A + B + C + D + E + F + G + H + I + J
+ A + B + C + D + E + F + G + H + I + J
+ A + B + C + D + E + F + G + H + I + J
LT XAE
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 18/62
On dispose de deux flèches extensibles, \xleftarrow[]{} et \xrightarrow[]{} . Pourmettre une formule dessus, on utilise l'argument obligatoire entre accolades tandis que pour mettreune formule dessous, on utilise l'argument optionnel entre crochets:
$$
f(x) \xrightarrow{\text{d'après }(H)} a
\quad
f(x) \xrightarrow[x\to0]{} a
\quad
f(x) \xrightarrow[x\to0]{\text{d'après }(H)} a
$$
donne
1.5.17 Flèches extensibles
f (x) a f (x) a f (x) a⎯ →⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
d'après (H)
⎯ →⎯⎯⎯⎯x→0
⎯ →⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
x→0
d'après (H)
Selon l'apparence voulue, il y a trois façon d'écrire les modules de congruence:
$a \equiv b \mod m$
$a \equiv b \pmod m$
$a \equiv b \pod m$
donnent
Il y a aussi la commande \bmod qu'on peut utiliser dans le contexte suivant $\gcd(n,m\bmod n)$ donne
1.5.18 Modules de congruences
a ≡ b mod m
a ≡ b (mod m)a ≡ b (m)
gcd(n,m mod n)
Les commandes \underset{en-dessous}{symbole} et \overset{au-dessus}{symbole} permettent de placer du matériel arbitraire en-dessous ou au-dessus de n'importe quelsymbole.
$$
A
\overset{\text{déf}}{=}
\frac{1}{n} \underset{n \to +\infty}{\in} o\left(\frac{1}{n^2}\rig
ht)
$$
donne
1.5.19 Placer au-dessus ou en-dessous
A o( )=déf 1
n∈
n→+∞
1
n2
1.6 Mode édition : les celulles Code
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 19/62
Lorsqu'on ouvre un terminal, un programme interpréteur de commandes système est lancé etattend les commandes pour les exécuter. De la même façon, en arrière-plan d'un notebook, uninterpréteur de code a été lancé et attend lui aussi qu'on lui donne du code. Dans le coin supérieurdroit vous pouvez voir qu'il s'agit ici de l'interpréteur Python 3.
Un notebook est constitué de cellules successives. Les cellules pour écrire du code sont repérablespar le prompt In[ ] . Essayons :
In [4]:
Le texte 2 / 3 a été transmis à l'interpréteur Python 3. Il s'agit d'une expression Python 3 valide.L'interpréteur a donc pu l'évaluer. La valeur de l'expression (dont le type est ici un nombre flottant)est alors récupérée et représentée sous la forme du texte affiché à droite du prompt de sortie
N'oubliez pas que vous êtes dans un notebook. Vous pouvez donc modifier l'expression ci-dessuset la ré-exécuter en appuyant sur [Shift-ENTER] . Le numéro entre crochet est un compteur. Ilest incrémenté à chaque sollicitation de l'interpréteur.
In [5]:
L'exécution de l'instruction ci-dessus n'a produit aucun résultat en sortie. Cette instruction acependant eu un effet. Elle a modifié l'état de l'interpréteur. En interne, l'interpréteur a associé lavaleur de l'expression 2+2 (c'est-à-dire le type entier 4 ) au nom hauteur .
On peut alors exécuter :
In [6]:
Lorsque vous ouvrez un notebook vous le visualisez tel qu'il a été sauvegardé. Vous voyez enparticulier les résultats des séquences de code qui ont été exécutées. Cependant, à l'ouverture dunotebook, un nouvel interpréteur tout neuf est lancé. Vous devez donc exécuter à nouveau lescellules. Mais dans quel ordre? La réponse naturelle est "dans l'ordre où apparaissent lescellules"... mais cela suppose que la personne qui a réalisé le notebook a fait correctement leschoses.
Pour commenter une ou plusieurs lignes, les selectionner et appuyer sur [Ctrl-/] :
1.6.1 Les exceptions
Out[4]:
0.6666666666666666
Out[6]:
8
2 / 3
h = 2+2
h=2*h
h
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 20/62
Dans certaines situations, l'interpréteur peut s'interrompre en levant une exception. Les exceptionsn'ont rien d'exceptionnelles. On en rencontre souvent, en particulier lorsque l'on commet deserreurs de programmation.
In [7]:
Pour comprendre ce qui a produit l'exception il faut :
identifier le nom de l'exception, ici IndexError ,lire le message associé, ici 'list index of range' ,identifier l'instruction qui l'a provoqué, ici l'évaluation de T[3] à la ligne 2.
Il se peut aussi que le code que l'on exécute ne se termine pas :
In [8]:
Lorqu'une cellule de code s'exécute le prompt comporte une étoile In[ *] . Pour interromprel'interpréteur, il suffit d'appuyer deux fois sur la touche I . Si cela s'avère nécessaire, il estégalement possible de redémarrer l'interpréteur. Pour cela il faut appuyer deux fois sur la touche 0 . L'interpréteur se retrouve alors dans son état initial.
Les programmes, quels qu'ils soient, lisent des données en provenance de sources variées(fichiers, réseaux, ports usb, etc). Ils envoient eux-mêmes des données vers diverses destinations.Dans tous les cas, cela se traduit par la lecture ou l'écriture de flux d'octets.
Dans un programme Python la fonction print permet d'écrire sur la sortie standard.
1.6.2 Entrée et sortie standard
In [9]:
Remarquez que l'exécution du code ci-dessus n'a retourné aucune valeur. Il n'y a pas de prompt Out[ ] . Remarquez aussi que chaque fonction print a également envoyé un caractère saut de
ligne sur la sortie standard.
Accueil s'écrit :
a
c
c
u
e
i
l
T = [18, 5, 3]
# T[3] # Décommenter la ligne pour voir l'exception
k = 1
# while k > 0: # Décommenter pour voir l'exception
# k = k + 1
print("Accueil s'écrit :")
for x in "accueil":
print(x)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 21/62
L'auto-complétion Lorsque vous commencez à saisir un nom connu de l'interpréteur, l'appui surla touche [TAB] complète le nom automatiquement. Si plusieurs noms sont possibles unmenu contextuel vous propose de choisir. Ceci économise de la frappe tout en évitant leserreurs d'orthographe dans les noms des variables.Les infobulles Lorsque le curseur de saisie est sur un nom connu de l'interpréteur (ouimmédiatement à droite), l'appui sur [Shift-TAB] affiche une infobulle qui donne undescriptif succinct de l'objet désigné par ce nom. C'est un moyen rapide de vérifier par exemplequels sont les arguments qui sont attendus par une fonction.Documentation en ligne Pour lire la documentation en ligne concernant un objet python(module, fonction, classe, etc), il suffit d'ajouter un ? juste après le nom et d'appuyer sur latouche [Enter] . Un pager s'ouvre alors avec la dite documentation.
1.6.3 L'aide en ligne IPython
In [10]:
Lorsque le texte de la cellule débute par un ! alors IPython en déduit que le reste du texte n'estpas du code python mais une commande système qui doit être exécutée par le Shell. Autrement ditIPython peut se substituer au terminal.
1.6.4 Les commandes systèmes
?abs
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 22/62
In [11]:
1.6.5 Les commandes magiques de IPython
Si la commande magisue %matplotlib est appelée sans argument, la sortie d'une commandede traçage est affichée à l'aide du backend matplotlib par défaut dans une fenêtre séparée.
Alternativement, le backend peut être explicitement demandé en utilisant, par exemple:
1.6.5.1 %matplotlib inline & %matplotlib notebook
total 3604
-rw-rw-r-- 1 minnolina minnolina 36617 févr. 18 10:39 chevr
e1.png
-rw-rw-r-- 1 minnolina minnolina 29100 févr. 18 10:38 chevr
e2.png
-rw-rw-r-- 1 minnolina minnolina 32188 févr. 18 10:38 chevr
e3.png
-rw-rw-r-- 1 minnolina minnolina 32205 juil. 28 2015 erreu
rEuler.png
-rw-rw-r-- 1 minnolina minnolina 36739 févr. 18 11:14 frais
e.png
-rw-rw-r-- 1 minnolina minnolina 1173088 mars 8 16:29 M62-C
M1.ipynb
-rw-rw-r-- 1 minnolina minnolina 604731 mars 8 16:35 M62-C
M2.ipynb
-rw-rw-r-- 1 minnolina minnolina 207432 mars 8 13:20 M62-C
M3.ipynb
-rw-rw-r-- 1 minnolina minnolina 227565 mars 7 13:07 M62-T
P1.ipynb
-rw-rw-r-- 1 minnolina minnolina 75804 mars 7 10:18 M62-T
P2-NumVSFormel.ipynb
-rw-rw-r-- 1 minnolina minnolina 265506 mars 8 16:16 M62-T
P3-Eulers.ipynb
-rw-rw-r-- 1 minnolina minnolina 394900 févr. 15 11:43 M62-T
P4-schemas-1.ipynb
-rw-rw-r-- 1 minnolina minnolina 174883 févr. 19 21:57 M62-T
P4-schemas-2.ipynb
-rw-rw-r-- 1 minnolina minnolina 39717 févr. 15 17:03 M62-T
P5-PbLimites.ipynb
-rw-rw-r-- 1 minnolina minnolina 3719 févr. 18 10:24 M62-T
P6-Examen.ipynb
drwxrwxr-x 2 minnolina minnolina 4096 févr. 18 14:49 __pyc
ache__
-rw-rw-r-- 1 minnolina minnolina 31964 mars 8 12:11 R33-2
017-DM2-exo2-Verhulst-1.png
-rw-rw-r-- 1 minnolina minnolina 12954 avril 23 2018 tikzm
agic.py
-rw-rw-r-- 1 minnolina minnolina 1509 mars 4 13:31 Untit
led1.ipynb
-rw-rw-r-- 1 minnolina minnolina 12332 mars 7 11:44 Untit
led2.ipynb
-rw-rw-r-- 1 minnolina minnolina 192583 févr. 28 13:14 Untit
led.ipynb
# Liste le contenu du dossier courant
!ls -l
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 23/62
%matplotlib inline : la sortie est affichée directement sous la cellule de code qui l’aproduite,%matplotlib notebook : la sortie est affichée directement sous la cellule de code qui l’a
produite et, de plus, permet des figures interactives.
1.6.5.2 %pylab inline
Importe les modules numpy et matplotlib . L'option inline indique que les figuresMatplotlib seront insérées dans le notebook lui-même plutôt que dans une fenêtre graphique à part. L'instruction %pylab inline exécute en particulier les deux instructions import numpy as np import matplotlib.pyplot as plt
In [12]:
In [13]:
Sauvegarde automatiquement le notebook tous les 300 secondes (=5 minues)
1.6.5.3 %autosave 300 […]
%who , %whos affichent les objets qui sont actuellement définis dans l'interpréteur Python. %reset efface les variables définie; %reset -f efface les variables définies sans demander
confirmation.
1.6.5.4 %who , %whos et %reset
Populating the interactive namespace from numpy and matplotli
b
%pylab inline
plot([1,2],[3,4]);
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 24/62
In [14]:
In [15]:
In [16]:
Lorsque vous avez terminé la rédaction de votre document, vous pouvez le télécharger surl'ordinateur local dans le format qui vous convient. Choisir pour cela File/Download as...
Pour mettre vos notebooks en ligne : nbviewer (http://nbviewer.ipython.org/)
1.6.6 Exporter un notebook
2 Notions de base de Python
In [2]:
Le corps d'un bloc de code (boucles, sous-routines, etc.) est défini par son indentation: l'indentationest une partie intégrante de la syntaxe de Python.
2.1 Indentation
Le symbole dièse # indique le début d'un commentaire: tous les caractères entre # et la fin de laligne sont ignorés par l'interpréteur.
2.2 Commentaires
Dans la plupart des langages informatiques, le nom d'une variable représente une valeur d'un typedonné stockée dans un emplacement de mémoire fixe. La valeur peut être modifiée, mais pas letype. Ce n'est pas le cas en Python, où les variables sont typées dynamiquement.
2.3 Variables et affectation
T h k x
Interactive namespace is empty.
Autosaving every 300 seconds
%who
%reset -f
%who
# Enable inline plotting
%matplotlib inline
%autosave 300
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 25/62
In [18]:
In [19]:
L'affectation b = 2 crée une association entre le nom et le nombre entier . La déclaration b*2.0 évalue l'expression et associe le résultat à ; l'association d'origine avec l'entier est
détruite. Maintenant se réfère à la valeur en virgule flottante . Il faut bien prendre garde au faitque l'instruction d'affectation ( = ) n'a pas la même signification que le symbole d'égalité ( ) enmathématiques (ceci explique pourquoi l'affectation de à , qu'en Python s'écrit x = 3 , enalgorithmique se note souvent ).
On peut aussi effectuer des affectations parallèles:
b 2
b 2
b 4.0=
3 x
x ← 3
In [20]:
Attention: Python est sensible à la casse. Ainsi, les noms n et N représentent différents objets.Les noms de variables peuvent être non seulement des lettres, mais aussi des mots; ils peuventcontenir des chiffres (à condition toutefois de ne pas commencer par un chiffre), ainsi que certainscaractères spéciaux comme le tiret bas _ (appelé underscore en anglais).
Une chaîne de caractères est une séquence de caractères entre guillemets (simples ou doubles).Les chaînes de caractères sont concaténées avec l'opérateur plus + , tandis que l'opérateur : estutilisé pour extraire une portion de la chaîne. Voici un exemple:
2.4 Chaîne de caractères (Strings)
2
4.0
128
256
256
128
b = 2 # b is an integer
print(b)
b = b*2.0 # b is a float
print(b)
a, b = 128, 256
print(a)
print(b)
a,b = b,a
print(a)
print(b)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 26/62
In [21]:
Une chaîne de caractères est un objet immuable, i.e. ses caractères ne peuvent pas être modifiéspar une affectation, et sa longueur est fixe. Si on essaye de modifier un caractère d'une chaîne decaractères, Python renvoie une erreur comme dans l'exemple suivant:
In [22]:
Une liste est une suite d'objets, rangés dans un certain ordre. Chaque objet est séparé par unevirgule et la suite est encadrée par des crochets. Une liste n'est pas forcement homogène: elle peutcontenir des objets de types différents les uns des autres. La première manipulation que l'on abesoin d'effectuer sur une liste, c'est d'en extraire et/ou modifier un élément: la syntaxe est ListName[index] . Voici un exemple:
2.5 Listes
In [23]:
En Python, les éléments d'une liste sont indexés à partir de .0
In [24]:
Si on tente d'extraire un élément avec un index dépassant la taille de la liste, Python renvoi unmessage d'erreur:
In [25]:
Press return to exit the program
Press return
[12, 10, 18, 7, 15, 3]
[12, 11, 18, 7, 15, 3]
Out[24]:
(12, 11, 18, 7, 15, 3)
string1 = 'Press return to exit'
string2 = 'the program'
print(string1 + ' ' + string2) # Concatenation
print(string1[0:12])# Slicing
s = 'Press return to exit'
#s[0] = 'p' # Décommenter pour voir l'exception
fraise = [12, 10, 18, 7, 15, 3] # Create a list
print(fraise)
fraise[2]
fraise[1] = 11
print(fraise)
fraise[0], fraise[1], fraise[2], fraise[3], fraise[4], fraise[5]
#fraise[6] # Décommenter pour voir l'exception
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 27/62
On peut extraire une sous-liste en déclarant l'indice de début (inclus) et l'indice de fin (exclu),séparés par deux-points: ListName[i:j] , ou encore une sous-liste en déclarant l'indice dedébut (inclus), l'indice de fin (exclu) et le pas, séparés par des deux-points: ListName[i:j:k] . Cette opération est connue sous le nom de slicing (en anglais).
Un dessin et quelques exemples permettrons de bien comprendre cette opération fort utile:
In [26]:
In [27]:
In [28]:
In [29]:
In [30]:
Out[26]:
[18, 7]
Out[27]:
[18, 7, 15, 3]
Out[28]:
[12, 11]
Out[29]:
[12, 11, 18, 7, 15, 3]
Out[30]:
[18, 7, 15]
fraise[2:4]
fraise[2:]
fraise[:2]
fraise[:]
fraise[2:5]
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 28/62
In [31]:
In [32]:
In [33]:
In [34]:
In [35]:
In [36]:
À noter que lorsqu'on utilise des tranches, les dépassements d'indices sont licites.
Voici quelques opérations et méthodes très courantes associées aux listes:
a.append(x) ajoute l'élément x en fin de la liste aa.extend(L) ajoute les éléments de la liste L en fin de la liste a , équivaut à a+La.insert(i,x) ajoute l'élément x en position i de la liste a , équivaut à a[i:i]=xa.remove(x) supprime la première occurrence de l'élément x dans la liste aa.pop([i]) supprime l'élément d'indice i dans la liste a et le renvoia.index(x) renvoie l'indice de la première occurrence de l'élément x dans la liste aa.count(x) renvoie le nombre d'occurrence de l'élément x dans la liste a
Out[31]:
[18, 7, 15, 3]
Out[32]:
[18, 7, 15, 3]
Out[33]:
[18, 15]
Out[34]:
[]
Out[35]:
[18, 7]
Out[36]:
3
fraise[2:6]
fraise[2:7]
fraise[2:6:2]
fraise[-2:-4]
fraise[-4:-2]
fraise[-1]
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 29/62
a.sort() modifie la liste a en la trianta.reverse() modifie la liste a en inversant les élémentslen(a) renvoie le nombre d'éléments de la liste ax in a renvoi True si la liste a contient l'élément x , False sinonx not in a renvoi True si la liste a ne contient pas l'élément x , False sinonmax(a) renvoi le plus grand élément de la liste amin(a) renvoi le plus petit élément de la liste a
In [37]:
In [38]:
In [39]:
In [40]:
In [41]:
In [42]:
In [43]:
[2, 37, 20, 83, -79, 21]
[2, 37, 20, 83, -79, 21, 100]
[2, 37, 20, 83, -79, 21, 100, 17, 34, 21]
Out[40]:
2
[2, 37, 20, 83, -79, 100, 17, 34, 21]
Out[43]:
1
a = [2, 37, 20, 83, -79, 21] # Create a list
print(a)
a.append(100) # Append 100 to list
print(a)
L = [17, 34, 21]
a.extend(L)
print(a)
a.count(21)
a.remove(21)
print(a)
a.count(21)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 30/62
In [44]:
In [45]:
In [46]:
In [47]:
In [48]:
In [49]:
In [50]:
In [51]:
In [52]:
In [53]:
Out[44]:
-79
[2, 37, 20, 83, 100, 17, 34, 21]
Out[46]:
4
[21, 34, 17, 100, 83, 20, 37, 2]
[2, 17, 20, 21, 34, 37, 83, 100]
Out[51]:
8
[2, 17, 7, 20, 21, 34, 37, 83, 100]
a.pop(4)
print(a)
a.index(100)
a.reverse()
print(a)
a.sort()
print(a)
len(a) # Determine length of list
a.insert(2,7) # Insert 7 in position 2
print(a)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 31/62
In [54]:
In [55]:
In [56]:
In [57]:
ATTENTION: si a est une liste, la commande b=a ne crée pas un nouvel objet b maissimplement une référence (pointeur) vers a . Ainsi, tout changement effectué sur b serarépercuté sur a aussi! Pour créer une copie c de la liste a qui soit vraiment indépendante onutilisera la commande deepcopy du module copy comme dans les exemples suivants:
In [58]:
In [59]:
Qu'est-ce qui se passe lorsque on copie une liste a avec la commande b=a ? En effet, une listefonctionne comme un carnet d'adresses qui contient les emplacements en mémoire des différentséléments de la liste. Lorsque on écrit b=a on dit que b contient les mêmes adresses que a (ondit que les deux listes pointent vers le même objet). Ainsi, lorsqu'on modifie la valeur de l'objet, lamodification sera visible depuis les deux alias.
2.6 Matrices (sans NumPy )
[21, 17, 7, 20, 21, 34, 37, 83, 100]
[21, 17, -2, -5, -1978, 21, 34, 37, 83, 100]
[5.0, 2.0, 3.0]
[5.0, 2.0, 3.0]
[1.0, 2.0, 3.0]
[5.0, 2.0, 3.0]
a[0] = 21 # Modify selected element
print(a)
a[2:4] = [-2,-5,-1978] # Modify selected elements
print(a)
import copy
a = [1.0, 2.0, 3.0]
b = a # 'b' is an alias of 'a'
b[0] = 5.0 # Change 'b'
print(a) # The change is reflected in 'a'
print(b)
a = [1.0, 2.0, 3.0]
c = copy.deepcopy(a) # 'c' is an independent copy of 'a'
c[0] = 5.0 # Change 'c'
print(a) # 'a' is not affected by the change
print(c)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 32/62
Les matrices peuvent être représentées comme des listes imbriquées: chaque ligne est un élémentd'une liste. Par exemple, le code
In [60]:
définit a comme la matrice
La commande len (comme length) renvoie la longueur d'une liste. On obtient donc le nombre deligne de la matrice avec len(a) et son nombre de colonnes avec len(a[0]) :
3 × 3
.
1
4
7
2
5
8
3
6
9
In [61]:
In [62]:
In [63]:
In [64]:
In [65]:
Dans Python les indices commences à zéro, ainsi a[0] indique la première ligne, a[1] ladeuxième etc.
𝔸 =
a00
a10
⋮
a01
a11
⋮
a02
a12
⋮
…
…
⋮
2.7 Dictionnaires
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[4, 5, 6]
6
3
3
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(a)
print(a[1]) # Print second row (element 1)
print(a[1][2]) # Print third element of second row
print(len(a))
print(len(a[0]))
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 33/62
Un dictionnaire est une sorte de liste mais au lieu d'utiliser des index, on utilise des clés, c'est à diredes valeurs autres que numériques.
Pour initialiser un dictionnaire, on utile la syntaxe suivante:
In [160]:
Pour ajouter des valeurs à un dictionnaire il faut indiquer une clé ainsi qu'une valeur:
In [161]:
La méthode get permet de récupérer une valeur dans un dictionnaire et, si la clé est introuvable,de donner une valeur à retourner par défaut:
In [162]:
Pour vérifier la présence d'une clé on utilise in
In [163]:
In [164]:
Il est possible de supprimer une entrée en indiquant sa clé, comme pour les listes:
{'nom': 'engel', 'prenom': 'olivier'}
Olivier
Adresse inconnue
Out[163]:
True
Out[164]:
False
a={}
a["nom"] = "engel"
a["prenom"] = "olivier"
print(a)
data={}
data = {"name": "Olivier", "age": 30}
print(data.get("name"))
print(data.get("adresse", "Adresse inconnue"))
"nom" in a
"age" in a
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 34/62
In [165]:
Pour récupérer les clés on utilise la méthode keysPour récupérer les valeurs on utilise la méthode valuesPour récupérer les clés et les valeurs en même temps, on utilise la méthode items quiretourne un tuple.
In [166]:
On peut utiliser des tuples comme clé comme lors de l'utilisation de coordonnées:
In [167]:
Comme pour les listes, pour créer une copie indépendante utiliser la méthode copy :
{'prenom': 'olivier'}
nom
prenom
engel
olivier
nom engel
prenom olivier
Out[167]:
{(3, 2): 12, (4, 5): 13}
del a["nom"]
print(a)
fiche = {"nom":"engel","prenom":"olivier"}
for cle in fiche.keys():
print(cle)
for valeur in fiche.values():
print(valeur)
for cle,valeur in fiche.items():
print(cle, valeur)
b = {}
b[(3,2)]=12
b[(4,5)]=13
b
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 35/62
In [168]:
La fonction range crée un itérateur. Au lieu de créer et garder en mémoire une liste d'entiers,cette fonction génère les entiers au fur et à mesure des besoins:
range(n) renvoi un itérateur parcourant ;range(n,m) renvoi un itérateur parcourant ;range(n,m,p) renvoi un itérateur parcourant .
2.8 Fonction range
0, 1, 2, … , n − 1
n, n + 1, n + 2, … ,m − 1
n, n + p, n + 2p, … ,m − 1
In [169]:
Pour les afficher on crée une list :
In [170]:
In [171]:
In [172]:
{'k1': 'olivier', 'k2': 'engel'}
{'k1': 'olivier', 'k2': 'engel'}
{'k1': 'XXX', 'k2': 'engel'}
{'k1': 'olivier', 'k2': 'engel'}
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
[0]
d = {"k1":"olivier", "k2":"engel"}
e = d.copy()
print(d)
print(e)
d["k1"] = "XXX"
print(d)
print(e)
A = range(0,10)
print(A)
A = list(A)
print(A)
print(list(range(0)))
print(list(range(1)))
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 36/62
In [173]:
In [174]:
In [175]:
In [176]:
In [177]:
Pour afficher à l'écran des objets on utilise la fonction print(object1, object2, ...) quiconvertis object1, object2 en chaînes de caractères et les affiche sur la même ligne séparéspar des espace.
2.9 Fonction print
In [178]:
Le retour à la ligne peut être forcé par le caractère \n , la tabulation par le caractère \t .
In [179]:
Pour mettre en colonne des nombres on pourra utiliser l'opérateur % : la commande
[3, 4, 5, 6]
[0, 5, 10, 15]
[]
[0, -5, -10, -15]
[20, 15, 10, 5]
(12345, 6789) [2, 4, 6, 8]
a= (12345, 6789) b= [2, 4, 6, 8]
a= (12345, 6789)
b= [2, 4, 6, 8]
print(list(range(3,7)))
print(list(range(0,20,5)))
print(list(range(0,20,-5)))
print(list(range(0,-20,-5)))
print(list(range(20,0,-5)))
a = 12345,6789
b = [2, 4, 6, 8]
print(a,b)
print("a=", a, "\tb=", b)
print("a=", a, "\nb=", b)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 37/62
print('%format1, %format2,...' %(n1,n2,...) affiche les nombres n1,n2,...selon les règles %format1, %format2,... . Typiquement on utilise
wd pour un entierw.df pour un nombre en notation floating pointw.de pour un nombre en notation scientifique
où w est la largeur du champ total et d le nombre de chiffres après la virgule.
In [180]:
In [181]:
In [182]:
In [183]:
In [184]:
+ Addition- Soustraction* Multiplication/ Division** Exponentiation// Quotient de la division euclidienne% Reste de la division euclidienne
2.10 Opérations arithmétiques
1234.57
n = 9876
n = 009876
1234.568 9876
1.2346e+03 9876
a = 1234.56789
n = 9876
print('%7.2f' %a)
print('n = %6d' %n)
print('n = %06d' %n)
print('%12.3f %6d' %(a,n))
print('%12.4e %6d' %(a,n))
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 38/62
In [185]:
In [186]:
In [187]:
Certains de ces opérations sont aussi définies pour les chaînes de caractères et les listes commedans l'exemple suivant:
In [188]:
In [189]:
In [190]:
Out[185]:
(100, 17, 83)
Out[186]:
(2, 17, 19)
Out[187]:
(4, 3, 3)
Hello Hello Hello
[1, 2, 3, 1, 2, 3, 1, 2, 3]
[1, 2, 3, 4, 5]
a = 100
b = 17
c = a-b
a,b,c
a = 2
c = b+a
a,b,c
a = 3
b = 4
c = a
a = b
b = c
a, b, c
s = 'Hello '
t = 'to you'
a = [1, 2, 3]
print(3*s) # Repetition
print(3*a) # Repetition
print(a + [4, 5]) # Append elements
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 39/62
In [191]:
In [192]:
Il existe aussi les opérateurs augmentés:
On écrit Équivaut à
a += b a = a + b
a -= b a = a - b
a *= b a = a * b
a /= b a = a / b
a **= b a = a ** b
a %= b a = a % b
Les opérateurs de comparaison renvoient True si la condition est vérifiée, False sinon. Cesopérateurs sont
On écrit Ça signifie
<
>
<=
>=
==
!=
in
Attention: bien distinguer l'instruction d'affectation = du symbole de comparaison == .
Pour combiner des conditions complexes (par exemple et ), on peut combiner desvariables booléennes en utilisant les connecteurs logiques:
On écrit Ça signifie
and et
or ou
not non
Deux nombres de type différents (entier, à virgule flottante, etc.) sont convertis en un type communavant de faire la comparaison. Dans tous les autres cas, deux objets de type différents sontconsidérés non égaux.
2.11 Opérateurs de comparaison et connecteurs logiques
<
>
≤
≥
=
≠
∈
x > −2 < 5x2
Hello to you
print(s + t) # Concatenation
#print(3 + s) # Décommenter pour voir l'exception
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 40/62
In [193]:
Supposons de vouloir calculer les images de certains nombres par une fonction polynomialedonnée. Si la fonction en question est un peu longue à saisir, par exemple
, il est rapidement fastidieux de la saisir àchaque fois que l'on souhaite calculer l'image d'un nombre par cette fonction.
3 Fonctions […]
f : x ↦ 2 − + 5 − + 9 + 7 + 8x − 1x7 x6 x5 x4 x3 x2
Supposons vouloir définir la fonction valeur absolue:
On a besoin d'une instruction qui opère une disjonction de cas. En Python il s'agit de l'instruction dechoix introduite par le mot-clé if . La syntaxe est la suivante:
if condition_1:
instruction_1.1
instruction_1.2
elif condition_2:
instruction_2.1
instruction_2.2
...
else:
instruction_n.1
instruction_n.2
où condition_1 , condition_2 ... représentent des ensembles d'instructions dont la valeur estTrue ou False (on les obtient en général en utilisant les opérateurs de comparaison). La
première condition condition_i ayant la valeur True entraîne l'exécution des instructionsinstruction_i.1 et instruction_i.2 . Si toutes les conditions sont fausses, les
instructions instruction_n.1 et instruction_n.2 sont exécutées.
Bien noter le rôle essentiel de l'indentation qui permet de délimiter chaque bloc d'instructions et laprésence des deux points après la condition du choix (mot clé if ) et après le mot clé else .
4 Structure conditionnelle […]
∣x∣ = { x
−xsi x ≥ 0,
sinon.
a>b? True
a==c? False
(a>b) and (a==c)? False
(a>b) or (a==c)? True
a = 2 # Integer
b = 1.99 # Floating
c = '2' # String
print('a>b?',a>b)
print('a==c?',a==c)
print('(a>b) and (a==c)?',(a>b) and (a==c))
print('(a>b) or (a==c)?',(a>b) or (a==c))
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 41/62
Les structure de répétition se classent en deux catégories: les répétitions conditionnelles pourlesquelles le bloc d'instructions est à répéter autant de fois qu'une condition est vérifiée, et lesrépétitions inconditionnelles pour lesquelles le bloc d'instructions est à répéter un nombre donné defois.
5 Boucles […]
Un module est une collection de fonctions. Il y a différents types de modules: ceux qui sont inclusdans la version de Python comme random ou math , ceux que l'on peut rajouter comme numpyou matplotlib et ceux que l'on peut faire soi-même (il s'agit dans les cas simples d'un fichierPython contenant un ensemble de fonctions).
Pour importer un module, on peut utiliser la commande import ModuleName . Il est alorspossible d'obtenir une aide sur le module avec la commande help(ModuleName) . La liste desfonctions définies dans un module peut être affichée par la commande dir(ModuleName) . Lesfonctions s'utilisent sous la forme ModuleName.FunctionName(parameters) .
Il est également possible d'importer le contenu du module sous la forme from ModuleName import * et alors les fonctions peuvent être utilisées directement par FunctionName(parameters) .
Python offre par défaut une bibliothèque de plus de deux cents modules qui évite d'avoir àréinventer la roue dès que l'on souhaite écrire un programme. Ces modules couvrent des domainestrès divers: mathématiques (fonctions mathématiques usuelles, calculs sur les réels, sur lescomplexes, combinatoire\dots), administration système, programmation réseau, manipulation defichiers, etc. Ici on en présente seulement quelques-uns, à savoir ce dont on se servira dans lesprojets.
6 Modules
Dans Python seulement quelque fonction mathématique est prédéfinie:
abs(a) Valeur absolue de max(suite) Plus grande valeur de la suitemin(suite) Plus petite valeur de la suiteround(a,n) Arrondi à décimales prèspow(a,n) Exponentiation, renvoi sum(L) Somme des éléments de la suitedivmod(a,b) Renvoie quotient et reste de la division de par
cmp(a,b) Renvoie
Toutes les autres fonctions mathématiques sont définies dans le module math . Commementionné précédemment, on dispose de plusieurs syntaxes pour importer un module:
6.1 Le module math
a
a n
an
a b
−1
0
1
si a < b,
si a = b,
si a > b.
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 42/62
In [233]:
In [234]:
Voici la liste des fonctions définies dans le module math :
3.141592653589793
1.2246467991473532e-16
0.0
3.141592653589793
1.2246467991473532e-16
0.0
import math
print(math.pi)
print(math.sin(math.pi))
print(math.log(1.0))
from math import *
print(pi)
print(sin(pi))
print(log(1.0))
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 43/62
In [235]:
Out[235]:
['__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'acos',
'acosh',
'asin',
'asinh',
'atan',
'atan2',
'atanh',
'ceil',
'copysign',
'cos',
'cosh',
'degrees',
'e',
'erf',
'erfc',
'exp',
'expm1',
'fabs',
'factorial',
'floor',
'fmod',
'frexp',
'fsum',
'gamma',
'gcd',
'hypot',
'inf',
'isclose',
'isfinite',
'isinf',
'isnan',
'ldexp',
'lgamma',
'log',
'log10',
'log1p',
'log2',
'modf',
'nan',
'pi',
'pow',
'radians',
'sin',
'sinh',
'sqrt',
'tan',
'tanh',
import math
dir(math)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 44/62
Notons que le module définit les deux constantes ( pi ) et ( e ).π e
Ce module propose diverses fonctions permettant de générer des nombres (pseudo-)aléatoires quisuivent différentes distributions mathématiques. Il apparait assez difficile d'écrire un algorithme quisoit réellement non-déterministe (c'est-à-dire qui produise un résultat totalement imprévisible). Ilexiste cependant des techniques mathématiques permettant de simuler plus ou moins bien l'effet duhasard. Voici quelques fonctions fournies par ce module:
random.range(p,n,h) choisit un éléments aléatoirement dans la liste range(p,n,h)random.randint(a,b) choisit un entier aléatoirement dans l'intervalle random.choice(seq) choisit un éléments aléatoirement dans la liste seqrandom.random() renvoie un décimal aléatoire dans random.uniform(a,b) choisit un décimal aléatoire dans
6.2 Le module random […]
[a; b]
[0; 1[
[a; b]
Le tracé de courbes scientifiques peut se faire à l'aide du module matplotlib . Matplotlib est un package complet; pylab et pyplot sont des modules de matplotlib
qui sont installés avec matplotlib . Pylab associe les fonctions de pyplot (pour les tracés) avec les fonctionnalité du module numpy pour obtenir un environnement très proche de celui de MATLAB.
On peut écrire et exécuter des script Python (qui utilisent Matplotlib) en ligne à l'adressehttps://trinket.io/python/a8645625fd (https://trinket.io/python/a8645625fd) Pour l'utiliser, on peut importer le module pylab .
La référence complète de matplotlib est lisible à l'adresse:http://matplotlib.sourceforge.net/matplotlib.pylab.html(http://matplotlib.sourceforge.net/matplotlib.pylab.html) Il est en particulier recommandé de regarderles screenshots (captures d'écrans), qui sont donnés avec le code utilisé pour les générer.
Vous pouvez consulter aussi
http://apprendre-python.com/page-creer-graphiques-scientifiques-python-apprendre(http://apprendre-python.com/page-creer-graphiques-scientifiques-python-apprendre)https://www.courspython.com/introduction-courbes.html(https://www.courspython.com/introduction-courbes.html)
7 Dessiner des courbes avec le module matplotlib
Pour tracer le graphe d'une fonction , Python a besoin d'une grille de points oùévaluer la fonction, ensuite il relie entre eux les points par des segments. Plus les pointssont nombreux, plus le graphe est proche du graphe de la fonction . Pour générer les points on
7.1 1D
f : [a, b] → ℝ xi( , f ( ))xi xi
f xi
'tau',
'trunc']
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 45/62
peut utiliser
l'instruction linspace(a,b,n+1) qui construit la liste de éléments
ou l'instruction arange(a,b,h) qui construit la liste de éléments
Voici un exemple avec une sinusoïde:
n + 1
[a, a + h, a + 2h, … , b = a + nh] avec h =b − a
nn = E( ) + 1b−a
h
[a, a + h, a + 2h, … , a + nh]
In [236]:
ou encore
%matplotlib inline
from matplotlib.pylab import *
x = linspace(-5,5,101) # x = [-5,-4.9,-4.8,...,5] with 101 elements
y = sin(x) # operation is broadcasted to all elements of the array
plot(x,y);
#show()
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 46/62
In [237]:
On obtient une courbe sur laquelle on peut zoomer, modifier les marge et sauvegarder dansdifférents formats.
On peut même tracer plusieurs courbes sur la même figure. Par exemple, dans la figure suivante,on a tracé la même fonction: la courbe bleu correspond à la grille la plus grossière, la courbe rougecorrespond à la grille la plus fine:
7.1.1 Plusieurs courbes sur le même repère
from matplotlib.pylab import *
x = arange(-5,5,0.1) # x = [-5,-4.9,-4.8,...,5] with 101 elements
y = sin(x) # operation is broadcasted to all elements of the array
plot(x,y);
# show()
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 47/62
In [238]:
Pour tracer plusieurs courbes sur le même repère, on peut les mettre les unes à la suite desautres en spécifiant la couleur et le type de trait, changer les étiquettes des axes, donner un titre,ajouter une grille, une légende etc.
Par exemple, dans le code ci-dessous "r-" indique que la première courbe est à tracer en rouge(red) avec un trait continu, et "g." que la deuxième est à tracer en vert (green) avec des points.
from matplotlib.pylab import *
a = linspace(-5,5,5)
fa = sin(a) # matplotlib importe numpy qui redefinie les fonctions de base
plot(a,fa,'b-',label="$f(a)$");
b = linspace(-5,5,101)
fb = sin(b)
plot(b,fb,'r-.',label="$f(b)$" );
legend();
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 48/62
In [239]:
Quelques options de pylab :
Line style Color Symbols
- solid line b blue v triangle down symbols
-- dashed line r red > triangle right symbols
: dotted line m magenta + plus symbols
-. dash-dot line k black D diamond symbols
. points g green , pixels
o filled circles c cyan < triangle left symbols
^ filled triangles up y yellow s square symbols
w white x cross symbols
* star symbols
On peut déplacer la légende en spécifiant l'une des valeurs suivantes:
best , upper right , upper left , lower right , lower left , center right , center left , lower center , upper center , center :
from matplotlib.pylab import *
x = linspace(-5,5,101)
y1 = sin(x)
y2 = cos(x)
plot(x,y1,"r-",x,y2,"g.")
legend(['sinus','cosinus'])
xlabel('abscisses')
ylabel('ordonnees')
title('Comparaison de sin(x) et cos(x)')
grid(True)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 49/62
In [240]:
Out[240]:
[-3.141592653589793, 3.141592653589793, -1, 1]
from matplotlib.pylab import *
x = arange(-pi,pi,0.05*pi)
plot(x,sin(x),'co',x,cos(x),'mD')
legend(['sinus','cosinus'],loc='upper left')
axis([-pi, pi, -1, 1]) # axis([xmin, xmax, ymin, ymax])
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 50/62
In [4]:
On génère deux fenêtres contenant chacune un graphe:
7.1.2 Plusieurs "fenêtres" graphiques
from matplotlib.pylab import *
a = linspace(-5,5,5)
fa = sin(a)
plot(a,fa,ls='--', lw=3, color="blue", label=r"$f(a)$")
b = linspace(-5,5,10)
fb = sin(b)
plot(b,fb,ls='--', lw=2.0, color="orange", label=r"$f(b)$")
c = linspace(-5,5,101)
fc = sin(c)
plot(c,fc,ls='-.', lw=0.5, color="green", label=r"$f(c)$")
plot([0], [0.5], lw=0.5, marker='o', color="cyan")
text(0, 0.6,r"$\sigma_i$", horizontalalignment='center', fontsize=20)
xlim(-5, 5)
ylim(-1, 1)
yticks([-1, -0.5, 0, 1])
xticks([-4, -2, 0, 2])
xlabel("$x$", fontsize=18)
ylabel("$y$", fontsize=18)
legend(bbox_to_anchor=(1.04,1),loc='upper left', ncol=1, fontsize=14, frame
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 51/62
In [242]:
La fonction subplot(x,y,z) subdivise la figure sous forme d'une matrice (x,y) et chaquecase est numérotée, z étant le numéro de la case où afficher le graphe. La numérotation se fait degauche à droite, puis de haut en bas, en commençant par .
7.1.3 Plusieurs repères dans la même fenêtre
1
Out[242]:
[<matplotlib.lines.Line2D at 0x7f4701e3aa20>]
from matplotlib.pylab import *
x = arange(-pi,pi,0.05*pi)
figure(1)
plot(x, sin(x), 'r')
figure(2)
plot(x, cos(x), 'g')
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 52/62
In [243]:
Pour afficher une animation on utilisera le module animation de matplotlib . Voici unexemple avec deux méthodes différentes : la première utilise la commande magique %matplotlib inline , la deuxième la commande magique %matplotlib notebook qui
permet d'intéragir avec l'animation.
7.1.4 Animations
Out[243]:
[<matplotlib.lines.Line2D at 0x7f4702bbdcc0>]
from matplotlib.pylab import *
x = arange(-pi,pi,0.05*pi)
figure(figsize=(10, 10), facecolor="#f1f1f1")
# axes coordinates as fractions of the canvas width and height
#left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
#axes((left, bottom, width, height), facecolor="#e1e1e1")
subplot(4,3,1)
plot(x, sin(x), 'r')
subplot(4,3,5)
plot(x, cos(x), 'g')
subplot(4,3,9)
plot(x, x*x, 'b')
subplot(4,3,12)
plot(x, exp(-x*x), 'm')
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 53/62
In [257]:
%reset -f
%matplotlib inline
from matplotlib.pylab import *
import matplotlib.animation as animation
from IPython.display import display, clear_output
fig = figure()
axis([0,3,-1,1])
line, = plot([],[],lw=2)
x = linspace(0,3,100)
animate = lambda i: line.set_data(x, cos(2*pi*(x-0.01*i)))
# CI
plot(x,cos(2*pi*x))
# Marche en temps
for i in range(len(x)):
animate(i)
clear_output(wait=True)
display(fig)
clear_output(wait=True)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 54/62
In [258]:
La représentation graphique de l’évolution d’une fonction de deux variables et n'est pas unetâche facile, surtout si le graphique en question est destiné à être imprimé. Dans ce type de cas, ungraphe faisant apparaître les lignes de niveaux de la fonction en question peut être une solutionintéressante et lisible. Commençons donc par considérer l'exemple simple d'une fonction de laforme:
7.2 2D
f x y
f (x, y) =sin( + )x2 y2
+x2 y2
%reset -f
%matplotlib notebook
%matplotlib notebook
from matplotlib.pylab import *
from matplotlib import animation
x = linspace(0,3,100)
# First set up the figure, the axis, and the plot element we want to animat
fig = figure() # initialise la figure
line, = plot([],[],lw=2)
axis([0,3,-1,1])
# Define the initialization function, which plots the background of each fr
# init = lambda : plot([],[])
init = lambda : plot(x,cos(2*pi*x))
# Define the animation function, which is called for each new frame:
animate = lambda i: line.set_data(x,cos(2*pi*(x-0.01*i)))
# call the animator. blit=True means only re-draw the parts that have chang
ani = animation.FuncAnimation(fig, animate, init_func=init, frames=100, bli
# Eventually
# from IPython.display import HTML, Image
# ani.save('animation.gif', writer='imagemagick', fps=60)
# Image(url='animation.gif')
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 55/62
Le tracé de cette fonction en courbes de niveaux va nécessiter la création d’un maillagebidimensionnel permettant de stocker l’intervalle de chacune des variables. La fonction destinée àcela s’appelle meshgrid (incluse dans le module NumPy ). On construit donc le maillage enquestion sur le rectangle . La fonction meshgrid fait appel dans ce cas à deuxfonctions linspace pour chacune des variables. z est ici un objet array qui contient lesvaleurs de la fonction sur chaque nœud du maillage.
[−5; 5] × [−5; 5]
f
In [246]:
In [247]:
Pour tracer l’évolution de en lignes de niveaux on utilisera les fonctions contour et contourfavec comme arguments les variables x et y , les valeurs de z correspondantes (eteventuellement le nombre de lignes de niveaux choisit).
f
%matplotlib inline
from matplotlib.pylab import *
x=linspace(-2*pi,2*pi,200)
y=linspace(-2*pi,2*pi,200)
xx,yy = meshgrid(x,y)
z = sin(xx**2 + yy**2) / (xx**2 + yy**2)
imshow(z);
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 56/62
In [248]:
In [249]:
In [250]:
Par défaut, ces courbes de niveaux sont colorées en fonction de leur altitude correspondante.z
h = contour(x,y,z)
h = contour(x,y,z,20)
h = contourf(x,y,z,20)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 57/62
S’il n’est pas possible d’utiliser de la couleur, on peut imposer une couleur uniforme pour le grapheet utiliser des labels sur les lignes de niveaux afin de repérer leurs altitudes. La fonction en questions’appelle clabel et prend comme principal argument la variable graphe précédente. La premièreoption inline=1 impose d’écrire les valeurs sur les lignes de niveaux, les deux options suivantesgérant la taille de la police utilisée et le format d’écriture des valeurs.
In [251]:
Pour visualiser un champ de vecteur on pourra utiliser streamplot :
Out[251]:
<a list of 15 text.Text objects>
x=linspace(-2,2,101)
y=linspace(-2,2,101)
xx,yy = meshgrid(x,y)
z = xx**2 + yy**2
graphe4 = contour(x,y,z,8,colors='grey')
clabel(graphe4,inline=1,fontsize=10,fmt='%1.4f')
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 58/62
In [252]:
Quand on étudie les propriétés de convergence d'une méthode numérique, on trace souvent desgraphes représentant
l'erreur en fonction de , le pas de discrétisation (par exemple pour une formule dequadrature ou le calcul approchée de la solution d'une EDO);l'erreur en fonction de , le pas d'itération (par exemple pour les méthodes de recherche deszéros d'une fonction).
7.3 Représentations des erreurs: échelles logarithmique et semi-logarithmique
E h
E k
Pour ces graphes on a recours à des représentations en échelle logarithmique ou semi-logarithmique.
Utiliser une échelle logarithmique signifie représenter sur l'axe des abscisses et sur l'axe des ordonnées. Le but de cette représentation est clair: si alors
. En échelle logarithmique, représente donc la pente de laligne droite . Ainsi, quand on veut comparer deux méthodes, celle présentant la pentela plus forte est celle qui a l'ordre le plus élevé (la pente est pour les méthodes d'ordreun, pour les méthodes d'ordre deux, et ainsi de suite).
Il est très simple d'obtenir avec Python des graphes en échelle logarithmique: il suffit de taper loglog au lieu de plot .
(h)log10
(E)log10 E = Chp
(E) = (C) + p (h)log10 log10 log10 p
(E)log10
p = 1p = 2
Par exemple, ci-dessous à gauche on trace des droites représentant le comportement de l'erreur de
Out[252]:
<matplotlib.streamplot.StreamplotSet at 0x7f4702bf5dd8>
x=linspace(-2,2,101)
y=linspace(-2,2,101)
xx,yy = meshgrid(x,y)
z = xx**2 + yy**2
dx = 2*xx
dy = 2*yy
speed = sqrt(dx*dx+dy*dy)
streamplot(xx, yy, dx, dy, density=1.2, color=speed, linewidth=2*speed / sp
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 59/62
deux méthodes différentes. La ligne rouge correspond à une méthode d'ordre un, la ligne bleu à uneméthode d'ordre deux. Sur la figure à droite on trace les mêmes données qu'à gauche mais avec lacommande plot , c'est-à-dire en échelle linéaire pour les axes et . Il est évident que lareprésentation linéaire n'est pas la mieux adaptée à ces données puisque la courbe seconfond dans ce cas avec l'axe des quand , bien que l'ordonnéecorrespondante varie entre , c'est-à-dire sur ordres de grandeur.
En générale, on utilise cette approche pour estimer l'ordre de convergence d'une méthodenumérique. Or, dans ces cas, on n'a pas exactement une droite. On peut alors calculer la droite demeilleure approximation au sens des moindres carrés et évaluer la pente de cette droite.
x y
E(h) = h2
x x ∈ [ ; ]10−6 10−2
x ∈ [ ; ]10−12 10−4 8
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 60/62
In [268]:
Plutôt que l'échelle log-log, nous utiliserons parfois une échelle semi-logarithmique, c'est-à-dire logarithmique sur l'axe des et linéaire sur l'axe des . Cette représentation est parexemple préférable quand on trace l'erreur d'une méthode itérative en fonction des itérations ou plus généralement quand les ordonnées s'étendent sur un intervalle beaucoup plus grand
que les abscisses. Si avec alors
y x
E
k
E(k) = E(0)C kn C ∈]0; 1[
Pente estimee = 0.899635072418152
Pente estimee = 1.8774398761778017
import random
x = linspace(1.e-6, 1.e-1,100, endpoint=True)
y1 = [xi+random.uniform(-1.e-5,1.e-5) for xi in x]
y2 = [(xi+random.uniform(-1.e-5,1.e-5))**2 for xi in x]
figure(1, figsize=(10, 5))
# log x and y axis
subplot(121)
loglog(x,y1, linewidth=2, color='red',label='$E(h)=h$')
loglog(x,y2, linewidth=2,color='blue',label='$E(h)=h^2$')
axis([1.e-6, 1.e-1, 1.e-12, 1.])
xlabel('ln(h)')
ylabel('ln(E)')
legend(loc='best')
grid(True)
# linear x and y axis
subplot(122)
plot(x,y1, linewidth=2, color='red',label='$E(h)=h$')
plot(x,y2, linewidth=2,color='blue',label='$E(h)=h^2$')
axis([1.e-6, 1.e-1, 1.e-12, 0.1])
xlabel('h')
ylabel('E')
legend(loc='best')
grid(True)
show()
print("Pente estimee =",polyfit(log(x),log(y1),1)[0])
print("Pente estimee =",polyfit(log(x),log(y2),1)[0])
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 61/62
, c'est-à-dire une droite si , une parabole si etc. La commande Python pour utiliser l'échelle semi-logarithmique est semilogy .
(E(k)) = (E(0)) + (C)log10 log10 kn log10 n = 1n = 2
Par exemple, ci-dessous on trace à gauche des courbes représentant le comportement de l'erreurde trois méthodes différentes. La ligne rouge correspond à une méthode d'ordre un, la parabolebleu à une méthode d'ordre deux. Sur la figure à droite on trace les mêmes données qu'à gauchemais avec la commande plot , c'est-à-dire en échelle linéaire pour les axes et . Il est évidentque la représentation linéaire n'est pas la mieux adaptée à ces données.
x y
In [254]:
x = linspace(0, 100,100, endpoint=True)
y1 = 10**(-(x))
y2 = 10**(-(x**2))
figure(1, figsize=(10, 5))
# linear x and semilog y axis
subplot(121)
semilogy(x,y1, linewidth=2, color='red',label='$E(k)=10^{-k}$')
semilogy(x,y2, linewidth=2,color='blue',label='$E(k)=10^{-k^2}$')
axis([0, 50, 1.e-10, 1.])
xlabel('k')
ylabel('log(E)')
legend(loc='best')
grid(True)
# linear x and y axis
subplot(122)
plot(x,y1, linewidth=2, color='red',label='$E(k)=10^{-k}$')
plot(x,y2, linewidth=2,color='blue',label='$E(k)=10^{-k^2}$')
axis([0, 50, 1.e-10, 1.])
xlabel('k')
ylabel('E')
legend(loc='best')
grid(True)
13/03/2019 M62-CM1
http://localhost:8888/notebooks/Dropbox/Notebook/Perso/M62-new/M62-CM1.ipynb 62/62