Prise en main de l'environnement Python/Numpy
Objectif
L'objectif de ce TP est de vous familiariser avec l'environnement de calcul scientifique Python et les modules Numpy, Scipy et Matplotlib. Pour cela vous travaillerez dans un système dit de « notebook », propice au développement d'une démarche scientifique.
Préambule
Pour effectuer les quelques exercices de ce TP, vous allez travailler dans l'environnement notebook d'IPython/Jupyter. Pour cela, créez un répertoire pour cette matière, déplacez-vous dans celui-ci et exécutez les commandes suivantes :
$> module load python/3.6.5 $> jupyter-notebook
Ceci va ouvrir votre navigateur sur un explorateur de fichier du répertoire dans lequel vous avez lancé la commande.
Si vous obtenez un message d'erreur comme quoi la commande module n'existe pas, exécutez la commande suivante :
$> source /usr/local/Modules/init/profile.sh
Créez un nouveau projet Python3, que vous nommerez tp1.
Au début, dans la première cellule, pour activer le remplissage de l'espace de nommage avec les modules Numpy et Matplotlib (et math), écrivez la commande suivante et exécutez la cellule avec la séquence de touche Ctrl-Enter ou Shift-Enter
%pylab inline
L'option inline permet d'afficher les images dans le notebook et non dans une nouvelle fenêtre à part.
La commande %pylab est équivalente à ces commandes
%pylab makes the following imports:: import numpy import matplotlib from matplotlib import pylab, mlab, pyplot np = numpy plt = pyplot from IPython.display import display from IPython.core.pylabtools import figsize, getfigs from pylab import * from numpy import *
Quelques manipulations simples
- Définissez la fonction delta(n) (\(\delta(n)\)) qui retourne 1 pour \(n=0\), et 0 sinon.
- Afficher cette fonction sur l'intervalle \([-20;20]\times[-0.1; 1.1]\) en utilisant la fonction stem.
- Définir la fonction unit(n) qui retourne 0 pour \(n<0\) et 1 sinon.
- Afficher cette fonction sur l'intervalle \([-20;20]\times[-0.1; 1.1]\) en utilisant la fonction stem.
- Tester et afficher sur \([-20;20]\) les fonctions \(\delta(n)\), \(\delta(-n)\), \(\delta(n-5)\) et \(\delta(n+5)\) en 4 sous-figures avec en titre la fonction.
- Afficher sur \([-20;20]\) les fonctions \(\alpha^n\times unit(n)\) pour les valeurs de \(\alpha\) 0.95, 0.9, 0.6.
- Définissez une fonction affiche_complexe(z) qui affiche dans le plan le point d'affixe \(z\). Attention, cette fonction ne doit pas créer de nouvelle figure.
- Affichez dans le plan \([-10;10]x[-10;10]\) les nombres suivants : \(z = 4+3i\), \(z*e^{i\frac{\pi}{2}}\), \(\bar{z}\) (conjugué de z), \(z+\bar{z}\) et \(z-\bar{z}\). Affichez également les axes ainsi que les droites d'équation \(x=4\), \(y = \frac{3}{4}x\) et la droite d'équation \(y = -\frac{4}{3}x\).
Manipulations d'objets Numpy
L'idée dans les manipulations demandées est d'utiliser les capacités de calculs vectorisées que permet Numpy, c'est-à-dire ne pas avoir à explicitement écrire des boucles.
- Définissez le tableau Numpy array C, des valeurs de la fonction \(\cos(2\pi x)\) sur 100 points répartis uniformément entre -1 et 1.
- Affichez sur \([-1;1]\) la fonction \(\cos(2\pi x)\) avec 10 puis 100 points de résolution, en utilisant C.
- Affichez sur \([-1;1]\) la fonction \(0.5\times\cos(2\pi x + 1)\) avec 10 puis 100 points de résolution.
- Définissez la matrice \(M\) de dimension 4x3, remplie uniquement de la valeur 2.
- Extrayez la ligne 3, puis la colonne 3.
- Modifiez \(M\) de telle sorte que la ligne 2 soit égale à la ligne 2 plus 3 fois la ligne 4. Puis la colonne 1 égale à la colonne 1 plus la moitié de la colonne 3.
- Changez les caractéristiques de \(M\) pour qu'elle soit maintenant une matrice 6x2.
- Créez les matrices carré \(B\) et \(C\) 4x4 et de valeur respective 2 et 3. Les résultats de B+C, B*C et B@C correspondent-ils bien avec ce que vous pensiez ?
- Créez une matrice 3x3 avec les valeurs de 0 à 8.
- Trouvez les indices des valeurs supérieures à 3 dans le tableau [1, 0, 2, 0, 0, 3, 4, 0, 5].
- Modifiez la matrice \(M\) afin de mettre à -1 toutes les valeurs supérieures à 3.
- Trouvez les indices des valeurs nulles de \(M\).