TP 1: Introduction aux Notebooks de IPython et rappels sur le langage Python.

1. Prise en main de Jupyter notebook

La première chose à faire est d’ouvrir ce document d’introduction à l’aide de Jupyter Notebook. Pour cela, il faut, dans un terminal, lancer la commande

jupyter notebook

puis écrire dans le navigateur

http://localhost:8888/

Cela ouvrira automatiquement le navigateur firefox dans lequel on peut alors commencer à travailler. L'onglet principal représente l’arborescence des fichiers, il faut y avoir sauvegardé le fichier TP1_Rappels_Python.ipynb quelque part.

Les notebooks sont composés de cellules contenant du code (en python) ou du texte (simple ou formaté avec les balisages Markdown). Lorsque la cellule se termine par un calcul, ou une variable seule, lors de l’évaluation Jupyter affiche Out[n]: puis sa valeur. S’il s’agit d’instructions, il n’affiche rien (mais elles sont effectuées).

On peut éditer une cellule en double-cliquant dessus, et l’évaluer en tapant Ctrl+Entrée (on utilisera aussi souvent Maj.+Entrée pour évaluer et passer à la cellule suivante). Les boutons dans la barre d’outil vous seront très utiles, survolez-les pour faire apparaître une infobulle si leur pictogramme n’est pas assez clair. N’oubliez pas de sauvegarder de temps en temps votre travail, même si Jupyter fait des sauvegardes automatiques régulières.

(a) Éditer les trois cellules d’exemples ci-dessous, les modifier et les valider

(b) Rajouter une cellule de code (avant le début de la partie 2) où vous affichez la valeur de $12a+5$ (en ayant au préalable validé la cellule où $a$ est initialisée).

(c) Rééditer une des cellules de code, valider le résultat, et observer que le numéro après In et Out est incrémenté. On peut revenir sur une cellule précédente, cela prendra en compte les modifications effectuées dans des cellules ayant déjà été validées, même si ce n’est pas fait dans l’ordre.

Le bouton Restart Kernel dans la barre d’outil permet de réinitialiser le notebook, ce compteur est remis à zéro et il faudra de nouveau réévaluer les cellules. L’idéal est donc que l'on puisse valider toutes les cellules dans l’ordre. Il est donc recommandé d’effectuer cette opération de temps en temps pour vérifier que tout se valide bien.

In [1]:
## Cellule Markdown
Voici une cellule qui aurait  être considérée comme du texte, mais qui est enregistrée comme du code.
Changez le type de cellule pour « Markdown » à la place de « Code », vous verrez alors un changement dans la coloration syntaxique.

Modifiez son contenu à votre convenance et évaluez-la.
### TP du binôme composé de Ada Lovelace et Alan Turing — Groupe 12.
  File "<ipython-input-1-ea903edd8ed1>", line 2
    Voici une cellule qui aurait dû être considérée comme du texte, mais qui est enregistrée comme du code.
            ^
SyntaxError: invalid syntax
In [2]:
# Ici, une cellule de code en python. Les commentaires commencent par un croisillon #.
a = 12
a**2 + 12 # L'opérateur puissance s'écrit **
# La cellule peut paraître déjà évaluée, mais ce n’est pas le cas.
# Les résultats des précédentes évaluations (avant l’ouverture du notebook) restent affichés.
# Mais si la cellule n’est pas validée de nouveau, la variable a ne sera pas affectée.
Out[2]:
156

Voici enfin une cellule Markdown déjà validée. Double-cliquez pour pouvoir l’éditer et voir la syntaxe. Dans le balisage Markdown (comme pour cette cellule), on peut mettre le texte en forme simplement, en italique, ou en gras. On peut faire

  • des listes
  • des listes numérotées :
    1. Des équations
    2. Des liens

Les équations peuvent être directement données au format $\LaTeX$, on peut donc par exemple écrire $x_i$ au milieu d’une ligne en utilisant $, ou bien écrire des équations plus complètes en utilisant $$ :

$$\sum_{n=1}^{\infty}\frac1{n^2}=\frac{\pi^2}6. $$

Modifiez cette formule pour en mettre une autre (pas forcément juste mathématiquement, mais qui utilise au moins une lettre grecque et une fraction).

Quelques commandes $\LaTeX$ de base sont expliquées sur cette page, et pour plus de détails, vous pourrez consulter la traduction de « A not so short introduction to $\LaTeX2e$ », disponible ici, en particulier le chapitre 3.

(d) Prise en main avancée : Utilisez les menus Help → User Interface Tour et Help → Keyboard Shortcuts pour une utilisation au clavier. On peut naviguer entre les cellules avec les flèches, et utiliser un grand nombre de raccourcis en mode Commandes (utiliser Échap pour passer en mode Commandes ou Entrée pour le mode Édition).

2. Langage Python: syntaxe de base et opérations élémentaires

(a) On considère les vecteurs et matrices suivants $$ \vec{l}= \begin{pmatrix} 1 & 2 & 3 \end{pmatrix},\ \vec{c}= \begin{pmatrix} 3 \\ 4 \\ 5 \end{pmatrix},\ A= \begin{pmatrix} 1 & 2 & 0 \\ 0 & 1 & 2 \\ 0 & 2 & 1 \\ \end{pmatrix},\ B= \begin{pmatrix} -3 & 5 & 0 \\ 0 & 7 & 2 \\ 0 & -2 & 1 \\ \end{pmatrix} . $$ (a1) Créer des tableaux correspondants à $\vec{l}$, $\vec{c}$, $A$ et $B$.

(a2) Extraire la deuxième composante de $\vec{l}$. Extraire la première ligne, la deuxième colonne et la sous-matrice $(a_{ij})_{2\leq i\leq3,2\leq j\leq3}$ de la matrice $A$. Extraire les termes diagonaux de $A$.

(a3) En utilisant la commande $\texttt{print()}$, déterminer le résultat produit par les instructions suivantes~:

  • $\texttt{l.shape},\ \texttt{A.shape},\ \texttt{A.shape[0]},\ ,\ \texttt{A.shape[1]}$
  • $\texttt{l*c},\ \texttt{sum(l*c)},\ \texttt{dot(l,c)}$
  • $\texttt{norm(l)},\ \texttt{norm(l,ord=1)},\ \texttt{norm(l,ord=inf)}$
  • $\texttt{A*B},\ \texttt{A*l},\ \texttt{A**2}\ ,\texttt{dot(A,l)},\ \texttt{dot(A,B)}$
  • $\texttt{A.T},\ \texttt{inv(A)},\ \texttt{det(A)},\ \text{matrix_rank(A)},\ \texttt{[v,V]=eig(A)},\ \texttt{solve(A,l)}$

(b) Il existe certaines commandes qui permettent de générer rapidement des vecteurs ou matrices particulières. Étudier le résultat produit par les instructions suivantes:

  • r=linspace(0,2*pi,100)
  • w=sin(r)
  • Id=eye(3)
  • u=zeros(5) et U=zeros((3,4))
  • u=ones(5) et U=ones((3,4))
  • d=array([1,2,3]) et D=diag(d)
  • n=5; r=0.3; A=eye(n); i,j = np.indices(A.shape); A[i==j-1]=r; A[i==j+1]=r; A[i==j-2]=r**2; A[i==j+2]=r**2;
In [3]:
# REMARQUE GENERALE:
# Pour ne pas compliquer le codage, on ajoutera au début de chaque programme la commande "%pylab inline"
# qui importera toutes les librairies nécessaires à nos besoins

# REMARQUE IMPORTANTE À DIRE AUX ETUDIANTS:
# Pour les vecteurs lignes ou colonnes, on travaillera avec des objets de type array.
# En fonction de l'opération que l'on souhaite réaliser, Python interprétera les array comme des vecteurs ligne
# ou colonne. Il faut donc savoir comment chaque commande va interpréter l'array. Ceci est, dans la pratique,
# très simple comme on essaye de montrer avec cet exercice.
In [4]:
# On commence toujours par charger les librairies.
%pylab inline
Populating the interactive namespace from numpy and matplotlib

3. Représentation graphique d'une fonction

(a) À l'aide de la fonction plot, représenter graphiquement la fonction $$ f(x)=e^{-x}sin(x),\quad x\in[0,2\pi] $$ Pour cela, on pourra:

1) Créer un vecteur $x$ de $n$ valeurs allant de xmin à xmax à l'aide de la commande $$ \texttt{x=linspace(xmin,xmax,num=n,endpoint=True)} $$

2) Créer un vecteur $\texttt{y=exp(-x)*sin(x)}$ pour obtenir les valeurs de $f(x)$ aux points donnés par $x$.

3) Une fois $x$ et $y$ créés, on peut tracer la courbe graphiquement à l'aide de la commande $$ \texttt{fig=figure()} \\ \texttt{plot(x,y)} $$

4) Rajouter au graphique la fonction $$ g(x)=sin(x)/arctan(x+1),\quad x\in[0,2\pi] $$ ou bien inventez une fonction en utilisant les fonctions de référence $\texttt{cos, sin, tan, arccos, arcsin, arctan, exp, log}$.

5) Mettre un titre général, un titre pour les axes des abscisses et ordonées à l'aide des commandes $$ \texttt{title('mon titre')}\\ \texttt{xlabel('titre abscisses')}\\ \texttt{ylabel('titre pour ordonées')} $$ Ajouter à la commande $\texttt{plot}$ l'attribut $\texttt{label='nom_de_la_courbe'}$ pour chacune des courbes. Par exemple, si on trace la fonction tangente, on peut mettre $$ \texttt{plot(x,y,label='tan')} $$ Ajouter une légende au graphique avec la commande $\texttt{legend()}$.

In [ ]:
 

4. Suite de Fibonacci: Rappels boucles et construction de fonctions

(a) Écrire une boucle calculant les valeurs des vingt premiers termes de la suite de Fibonacci définie par $$ u^{(0)}=0,\ u^{(1)}=1\text{ et},\ \forall k\in\mathbb{N},\ u^{(k+2)}=u^{(k+1)}+u^{(k)}, $$ et conservant ces valeurs dans un tableau.

(b) Écrire une boucle calculant les termes successifs de la suite de Fibonacci dont la valeur est inférieure ou égale à $50000$ et afficher le dernier de ces termes.

(c) Écrire enfin une fonction $\texttt{fibonacci(n)}$ calculant de manière itérative le terme d'indice $n$ de la suite de Fibonacci, sans toutefois conserver les valeurs de tous les termes de la suite.

In [ ]: