Upload
zan-layle
View
9
Download
0
Embed Size (px)
DESCRIPTION
CoursPython
Citation preview
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
from scipy import *
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 *
SciPySciPy
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]])
vecteur (1,2,3)
matrice1 2 3
4 5 61 1M=ones((3,2))
z=2*x+1
y=dot(M,x)
4 5 6
matrice1 1
1 1
1 1
produit matriciel
Opérations
x+y
x-y
x*y
x/y
x**2
exp(x)
sqrt(x)
élément par élément
x²
dot(x,y)
dot(M,x)
M.T
M.max()
M.sum()
size(x)
M.shape
produit scalaire
produit matriciel
transposition
maximum
somme
nombre total d’éléments
Indexation
x[i]
M[i,j]
x[i:j]
M[i,:]
M[:,i]
x[[1,3]]
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:3]=[0,1]
M[1,:]+=xx[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=z
x[1]=3
M[0,2] vaut 5
z[1] vaut 3 x=z.copy()copie:
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])
à partir de listes
vecteur de 1matrice nullematrice identitématrice diagonale
x=rand(5)
x=randn(5)
x=arange(10)
x=linspace(0,1,100)
vecteur aléatoire dans [0,1]vecteur aléatoire gaussien
0,1,2,...,9
100 nombres entre 0 et 1
Vecteurs booléens
x=array([1,2,3,4])
x>2.5
A(B)
x[x>2.5]+=1
M=rand(3,3)
[False, False, True, True]
ajoute 1 à chaque élément > 2.5
= tous les aij tels que bij est True
M=rand(3,3)
i,j=where(M>.5)
i=where(x>2.5)[0]
indices (ligne, colonne) des éléments > .5
indices des éléments > 2.5
Algèbre linéaire
from scipy import linalg
help(linalg)
d=linalg.det(M)
liste des fonctions
Quelques fonctions:
detdet
norm
lstsq
solve
eigvals
lu
...
Bibliothèque scientifique
import scipy
help(scipy) liste des modules de SciPy
Exemple: optimisation (scipy.optimize)
from scipy import optimize
def f(x):def f(x):
return (x-1)*(x-3)
print optimize.fsolve(f,0)
point initial
résout f(x)=0
Vectorisation
� Comment écrire des programmes efficaces?
� Remplacer les boucles par des opérations vectorielles
for i in range(1000000):
X[i]=1
X=ones(1000000)
for i in range(1000000): X=X*2for 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
PylabPylab
Pylab
from pylab import *
plot([1,2,3],[4,5,6])
show()
import pylab
help(pylab)
x y
affiche la figure
plus d’exemples:http://matplotlib.sourceforge.net/gallery.html
plot(x,y,’r’)
plot(x,y,’.’)
xlabel(’Temps (ms)’)
figure()
subplot(211)
plot(x,y)
subplot(212)
plot(u,v)
en rouge
avec des points (pas de lignes)
nouvelle figuresous-figure
211
2122 lig
nes
1 colonne
légende pour l’axe horizontal
ExercicesExercices
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� 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éatoires from scipy import *
-> fonction random.randint
Exercice 2 - Triangle de Pascal
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Ci,j=Ci-1,j-1+Ci-1,j
Ecrire une fonction qui affiche les n premières lignes du Ecrire une fonction qui affiche les n premières lignes du
triangle de Pascal. Ecrire le calcul de manière vectorielle
(ligne = vecteur).
Exercice 3 – Dessiner un cercle
� Un cercle (x(t),y(t)) est solution d’un système différentiel: dx/dt = -y
dy/dt = x
t = angle en radian
� 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:
X=(x,y)
dX/dt=MX0 -1
1 0M=
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 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.]]