Il existe un certain nombre de versions de Python installées sur
les machines de l'ENSEIRB. Les exercices de cette feuille sont
basés sur la version 2.7.3. Avant de commencer cette feuille, se
référer à la page
de configuration pour
mettre en place l'environnement de travail.
Remarques :
Toutes les zones de code sont copiables à partir du navigateur
et de ce fait ne méritent pas d'être recopiées à la main. Le
bouton en haut à droite de cette page permet d'agrandir la zone
de texte lisible.
Première utilisation de Numpy/Scipy
- Créer un répertoire réservé aux TPs d'IS 104 et se
placer à l'intérieur.
Ajouter les lignes suivantes à votre.emacs
afin de pouvoir charger le mode python adéquat :Créer un fichier ".py" sous emacs, rempli avec quelques commentaires (commençant par(setq load-path (cons "/net/ens/renault/.emacs.d/" load-path)) (load "python-mode")
#
). Lancer l'interpréteur python avec la commandeC-c !
, et l'évaluer avec la commandeC-c C-c
.
Ajouter la ligne suivante au.emacs
permet d'évaluer simplement une région avecC-c C-e
.(global-set-key (kbd "C-c C-e") 'py-execute-region)
- Regarder l'aide sur
la syntaxe du langage
pour visualiser les constructions du langage python.
Parcourir l'aide-mémoire afin de se familiariser avec les commandes disponibles. - Aller jeter un coup d'oeil aux feuilles de référence de Numpy et de Scipy. En particulier, utiliser l'interface de recherche pour trouver la documentation d'une fonction connue.
Ecriture d'algorithmes simples
Cette section présente l'écriture d'algorithmes en langage
python. Le langage de programmation utilisé a une syntaxe
particulière, utilisant les indentations pour définir les blocs de
code. La syntaxe des différentes constructions du langage est
donnée sur cette
page.
- Récupérer le fichier power.py dans emacs et l'exécuter dans à l'aide de l'interpréteur python.
- Utiliser la fonction
power
dans l'interpréteur et vérifier son fonctionnement en calculant. Calculer les puissances de 2 successives en utilisant une boucle :
Quelle est la limite maximale des nombres entiers sous python ? Qu'en est-il pour les nombres flottants ? (Indice : remplacer lefor i in range(10,20): print "2^%d = %d\n" % (i,power(2,i));
%d
par%f
ou%g
) - Écrire une fonction
fibo
qui prend en entrée un nombren
et renvoie le n-ème élément de la suite de Fibonacci définie par :
- fibo(0) = 0
- fibo(1) = 1
- fibo(n+1) = fibo(n)+fibo(n-1)
La syntaxe d'écriture d'une fonction est décrite ici. Jusqu'à quelles valeurs de n êtes vous capables de calculerfibo(n)
en un temps raisonnable (toute réponse inférieure à 100 est inacceptable) ?
Manipulation des vecteurs et matrices
En python, il existe différents types d'objets pour manipuler les
tableaux d'éléments. Se référer à
la documentation pour
comprendre la différence. Dans cette partie, on se limitera aux
objets de type
array
.
- Stocker la matrice suivante dans une variable de
type
array
: -
A partir de la matrice précédente, il est possible de construire des
tranches (slices) qui sont des morceaux de cette matrice. Ainsi, la
notation
m[0,:]
représente la première ligne de la matrice
Construire la deuxième ligne, la dernière ligne, puis la dernière colonne de la matrice précédente (Indice : il est possible d'utiliser des indices négatifs) - Écrire la fonction qui, étant donné
n
, construit la matrice carrée suivante :
Utilisation des polynômes
Le langage permet de représenter facilement des polynômes à l'aide
des fonctions
poly
et poly1d
(cf. ici). Ils sont
stockés sous forme de tableaux de coefficients. Il est possible
d'évaluer un polynôme en un point en écrivant p(x)
.
- Ecrire le polynôme
et le stocker dans une variable. Elever cette variable au carré, et au cube.
Encore une fois, les opérations arithmétiques élémentaires sont surchargées. Essayer de multiplier deux polynômes, et calculer la puissance n-ème d'un polynôme. Que calcule t'on lorsque l'on effectue la division de deux polynômes ?
- Ecrire une fonction qui prend un polynôme donné, ainsi
qu'un intervalle
, et qui cherche une racine de ce polynôme dans cet intervalle par dichotomie.
Tracé de fonctions réelles
Savoir tracer des courbes est très
important car c'est le moyen le plus probant de montrer le
fonctionnement d'un algorithme.
Une petite explication sur la façon de générer des graphiques
avec python est
disponible ici.
- A l'aide de la
commande
plot
, tracer le graphe des fonctionset
, sans oublier le titre et la légende :
- Utiliser la fonction
imshow
pour dessiner les valeurs d'une matrice générée aléatoirement. Vous pouvez générer une grande matrice aléatoire en utilisant :Vous pouvez ajouter un peu de couleur à votre graphe en modifiant la carte des couleurs (colormap). Pour cela, regarder la documentation de matplotlib, qui donne une liste des colormaps possibles.import numpy as n; import matplotlib.pyplot as p m = n.random.rand(5,5) p.imshow(m, interpolation='nearest') p.show()
-
Expliquer les étapes permettant de faire fonctionner
l'exemple suivant :
import numpy as n import matplotlib.pyplot as p from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm fig = p.figure() ax = Axes3D(fig) X = n.arange(-5, 5, 0.25) Y = n.arange(-5, 5, 0.25) X, Y = n.meshgrid(X, Y) R = n.sqrt(X**2 + Y**2) Z = n.sin(R) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)