initiation à la programmation en python romain brette 11 mars 2009

18
Initiation à la programmation en Python Romain Brette 11 mars 2009

Upload: stephane-louvet

Post on 04-Apr-2015

112 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Initiation à la programmation en Python Romain Brette 11 mars 2009

Initiation à la programmation en Python

Romain Brette11 mars 2009

Page 2: Initiation à la programmation en Python Romain Brette 11 mars 2009

Calcul scientifique: SciPy et Pylab SciPy = bibliothèque scientifique Pylab = bibliothèque graphique

Utilisation:

Matlab

Documentation:http://docs.scipy.org/doc/http://matplotlib.sourceforge.net/ (voir la gallerie d’exemples)http://mathesaurus.sourceforge.net/matlab-numpy.html

from scipy import *from pylab import *

Page 3: Initiation à la programmation en Python Romain Brette 11 mars 2009

SciPy

Page 4: Initiation à la programmation en Python Romain Brette 11 mars 2009

Vecteurs et matrices Type de base défini par SciPy: array

(= vecteur ou matrice)

from scipy import *x=array([1,2,3])M=array([[1,2,3],[4,5,6]])

M=ones((3,2))

z=2*x+1

y=dot(M,x)

vecteur (1,2,3)

matrice1 2 34 5 6

matrice1 11 11 1

produit matriciel

Page 5: Initiation à la programmation en Python Romain Brette 11 mars 2009

Opérationsx+yx-yx*yx/yx**2exp(x)sqrt(x)

dot(x,y)dot(M,x)

M.TM.max()M.sum()

size(x)M.shape

élément par élément

produit scalaireproduit matriciel

transpositionmaximumsomme

nombre total d’éléments

Page 6: Initiation à la programmation en Python Romain Brette 11 mars 2009

Indexation

x[i]M[i,j]x[i:j]M[i,:]M[:,i]x[[1,3]]

x[1:3]=[0,1]M[1,:]+=x

Indexation des vecteurs listes (premier élément = 0)

(i+1)e élement

tranche de x[i] à x[j-1](i+1)e ligne(i+1)e colonneéléments x[1] et x[3]

x[1]=0, x[3]=1ajouter le vecteur x à la 2e ligne de M

M[i,:] est une « vue » sur la matrice M copie ( référence)

y=M[0,:]y[2]=5

x=zx[1]=3

M[0,2] vaut 5

z[1] vaut 3 x=z.copy()copie:

Page 7: Initiation à la programmation en Python Romain Brette 11 mars 2009

Construction

x=array([1,2,3])M=array([[1,2,3],[4,5,6]])

x=ones(5)M=zeros((3,2))M=eye(3)M=diag([1,3,7])

x=rand(5)x=randn(5)

x=arange(10)

x=linspace(0,1,100)

à partir de listes

vecteur de 1matrice nullematrice identitématrice diagonale

vecteur aléatoire dans [0,1]vecteur aléatoire gaussien

0,1,2,...,9

100 nombres entre 0 et 1

Page 8: Initiation à la programmation en Python Romain Brette 11 mars 2009

Vecteurs booléens

x=array([1,2,3,4])x>2.5

A(B)

x[x>2.5]+=1

M=rand(3,3)i,j=where(M>.5)

i=where(x>2.5)[0]

[False, False, True, True]

ajoute 1 à chaque élément > 2.5

= tous les aij tels que bij est True

indices (ligne, colonne) des éléments > .5

indices des éléments > 2.5

Page 9: Initiation à la programmation en Python Romain Brette 11 mars 2009

Algèbre linéaire

from scipy import linalghelp(linalg)

d=linalg.det(M)

liste des fonctions

Quelques fonctions:

detnormlstsqsolveeigvalslu...

Page 10: Initiation à la programmation en Python Romain Brette 11 mars 2009

Bibliothèque scientifique

import scipyhelp(scipy) liste des modules de SciPy

Exemple: optimisation (scipy.optimize)

from scipy import optimize

def f(x): return (x-1)*(x-3)

print optimize.fsolve(f,0)

point initial

résout f(x)=0

Page 11: Initiation à la programmation en Python Romain Brette 11 mars 2009

Vectorisation Comment écrire des programmes efficaces? Remplacer les boucles par des opérations

vectoriellesfor i in range(1000000): X[i]=1

X=ones(1000000)

for i in range(1000000): X[i]=X[i]*2

X=X*2

for i in range(999999): Y[i]=X[i+1]-X[i]

Y=X[1:]-X[:-1]

for i in range(1000000): if X[i]>0.5: Y[i]=1

Y[X>.5]=1

Page 12: Initiation à la programmation en Python Romain Brette 11 mars 2009

Pylab

Page 13: Initiation à la programmation en Python Romain Brette 11 mars 2009

Pylab

from pylab import *plot([1,2,3],[4,5,6])

show()

plot(x,y,’r’)plot(x,y,’.’)xlabel(’Temps (ms)’)

figure()subplot(211)plot(x,y)subplot(212)plot(u,v)

import pylabhelp(pylab)

x y

affiche la figure

en rougeavec des points (pas de lignes)

nouvelle figuresous-figure

211

2122 lig

nes

1 colonne

légende pour l’axe horizontal

plus d’exemples:http://matplotlib.sourceforge.net/gallery.html

Page 14: Initiation à la programmation en Python Romain Brette 11 mars 2009

Exercices

Page 15: Initiation à la programmation en Python Romain Brette 11 mars 2009

Exercice 1 – Analyse de notes Ecrire une fonction qui analyse une liste de

notes (entre 0 et 20) en affichant: Le nombre de notes La moyenne Le nombre de notes au-dessus de 10 Le nombre de notes au-dessous de 10 La meilleure note La plus mauvaise note L’histogramme des notes (pylab.hist)

Essayer avec des notes aléatoiresfrom scipy import *-> fonction random.randint

Page 16: Initiation à la programmation en Python Romain Brette 11 mars 2009

Exercice 2 - Triangle de Pascal

Ci,j=Ci-1,j-1+Ci-1,j

Ecrire une fonction qui affiche les n premières lignes du triangle de Pascal. Ecrire le calcul de manière vectorielle (ligne = vecteur).

Page 17: Initiation à la programmation en Python Romain Brette 11 mars 2009

Exercice 3 – Dessiner un cercle Un cercle (x(t),y(t)) est solution d’un système

différentiel:

Ecrire un programme qui dessine un cercle en intégrant les équations différentielles (x(t+dt)=x(t)+dt*(-y(t)))

La même chose en l’écrivant sous forme vectorielle:

dx/dt = -ydy/dt = x

t = angle en radian

X=(x,y)dX/dt=MX 0 -1

1 0M=

Page 18: Initiation à la programmation en Python Romain Brette 11 mars 2009

Exercice 4 – Carrés presques magiques

[[ 3. 4. 2. 5. 1.] [ 1. 2. 5. 3. 4.] [ 4. 5. 3. 1. 2.] [ 2. 3. 1. 4. 5.] [ 5. 1. 4. 2. 3.]]

Somme identique sur les lignes et les colonnes

1) Ecrire une fonction qui détermine si un carré (= matrice) est presque magique.

2) Ecrire une fonction qui renvoie un carré presque magique dit « élémentaire »:

3) Ecrire une fonction qui calcule un carré presque magique en échangeant un grand nombre de fois des lignes et des colonnes aléatoirement à partir d’un carré élémentaire.

[[ 1. 2. 3. 4. 5.] [ 2. 3. 4. 5. 1.] [ 3. 4. 5. 1. 2.] [ 4. 5. 1. 2. 3.] [ 5. 1. 2. 3. 4.]]