Académique Documents
Professionnel Documents
Culture Documents
De nombreuses fonctions utiles pour le scientifique sont progressivement intégrées par scipy.integrate.odeint(arguments). Pour alléger, un alias peut être utilisé : import
les utilisateurs. Elles sont regroupées dans différents modules (appelés également packages scipy.integrate as spi puis spi.odeint(arguments).
ou bibliothèques) complémentaires avec la bibliothèque standard de Python. On peut citer
les bibliothèques suivantes : Conseil : lors de chaque projet, importer Numpy et Matplotlib par les commandes :
— import numpy as np
NumPy Pour la manipulation de matrices et tableaux ; reprend les fonc- import matplotlib.pyplot as plt
tions mathématiques du module math de la bibliothèque standard
— ou éventuellement ravailler dans l’environnement Pylab qui regroupe la bibliothèque
de Python et les rend applicables à un tableau de valeurs (uni-
NumPy et les fonctions de base Matplotlib et les appeler sans sans alias :
versal functions)
from pylab import *
Matplotlib Pour les tracés de figures ; le fonctionnement est assez proche de
celle de Matlab et Scilab Vous travaillez ainsi dans l’environnement Pylab qui regroupe la bibliothèque NumPy
et les fonctions de base Matplotlib. que vous pouvez appeler sans alias
SciPy Pour le calcul scientifique : intégration et résolution d’équa- Vous importerez ensuite les éventuelles fonctions complémentaires (souvent de Scipy)
tions différentielles (scipy.integrate), interpolation de fonc- dont vous avez besoin.
tion (scipy.interpolate), traitement du signal (scipy.signal,
scipy.fftpack etc.), probabilité et statistiques (scipy.stats),
2 Créer et manipuler un tableau de valeurs
résolution d’équations non linéaires (scipy.optimize), algèbre
linéaire (scipy.linalg), etc. Numpy travaille principalement avec le type tableau de valeurs (array). Pour créer un
tableau unidimensionnel contenant les échantillons d’une variable, on peut utiliser une de
SimPy Pour le calcul formel ces deux fonctions du module numpy :
Cette fiche a pour but de présenter les fonctions les plus utiles sans rentrer dans les — linspace(valeur_min,valeur_max,nbr_points) renvoie un tableau comprenant
détails de leur fonctionnement et sans donner tous leurs arguments optionnels mais parfois nbr_points valeurs également espacées entre les valeurs extrêmes valeur_min et
utiles. Elle ne se substitue pas à la documentation de chaque fonction qui vous donnera valeur_max ;
bien plus de précisions sur ses arguments, ses renvois, l’algorithme qu’elle utilise, etc.
>>> t=np.linspace(1,10,10) ; t
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
1 Importer une bibliothèque ou une fonction
— arange(valeur_min,valeur_max,pas) renvoie un tableau comprenant les valeurs al-
Pour importer une fonction (ici odeint) d’un package (ici scipy.integrate) : lant de valeur_min à valeur_max (non incluse) séparées de la valeur pas.
from scipy.integrate import odeint >>> t=np.arange(1,11,10) ; t
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
Pour importer la totalité des classes et fonctions du package :
L’indexation, l’affectation et l’extraction d’éléments d’un tableau se fait de la même
from scipy.integrate import * manière qu’avec une liste. Contrairement aux listes, les opérateurs (*, +, ** etc.) et les
fonctions du package Numpy opèrent sur chaque éléments du tableau, ce qui extrêmement
Une fonction du package peut ainsi être appelée en tapant simplement son nom pratique pour le calcul scientifique.
odeint(arguments) sans préfixe.
Remarque : Ce n’est pas la manière la plus propre d’importer une bibliothèque >>> t+2
(conflit avec des fonctions et commandes déjà présentes). Même si ça n’a guère d’im- array([ 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.])
portance pour nous, les puristes préfèreront taper import scipy.integrate et ap- >>> np.cos(t)
peler la fonction en utilisant le nom du module comme préfixe comme préfixe : array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362, 0.28366219,
0.96017029, 0.75390225, -0.14550003, -0.91113026, -0.83907153])
–1–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
3 Tracer la courbe représentative d’une fonction à une variable On peut également utiliser créer une fenêtre graphique avec plusieurs tracés grâce à la
fonction subplot. Un exemple est proposé en section 7.
Pour tracer la courbe représentative d’une fonction à une variable, on utilisera la fonction
plot du module matplotlib.pyplot. Pour les tracés en échelle logarithmique ou semi- 4 Résoudre un système d’équations linéaires
logarithmique, on dispose des fonctions loglog, semilogx et semilog, fonctionnant de la
même façon que plot. On utilise la fonction solve du module numpy.linalg :
Pour le tracé de fonction de deux variables : voir section ??. — Pour un système mis sous forme matricielle M ×X = A, solve(M,A) renvoie le vecteur
des solutions X.
>>> solve([[3,1], [1,2]],[9,8])
t=np.linspace(0,2*pi,10) array([ 2., 3.])
plt.figure() #crée une nouvelle figure On peut également utiliser les fonctions d’inversion de matrices comme inv du module
plt.plot(t,np.cos(t)) numpy.linalg ou pour des matrices de grande dimension comportant de nombreux zéros,
plt.show() différentes fonctions de scipy.sparse.
–2–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
Soit :
om0=2*pi*1
k=om0/5
–3–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
8 Tracer le spectre d’un signal — pour tracer l’histogramme de distribution des données :
On utilisera la fonction rfft du package numpy.fft qui calcule la transformée de Fourier plt.hist(data,bins='rice')
discrète d’un signal numérique s à valeurs réelles, échantillonné à fréquence Fe , pour les
fréquences f ∈ [0; Fe /2]. Pour tracer le spectre en amplitude, on pourra entrer : L’argument optionnel bins permet de contrôler le nombre de classes (les "bâtons" de
l’histogramme), qui peut être défini explicitement (bins=100) ou par une règle de
N=len(s) calcul 1 .
spectre=rfft(s)/N*2.0 #2/N est un facteur de normalisation
freq=np.linspace(0,Fe/2,N//2+1) #Fe frequence d'echantillonnage 10 Effection une régression linéaire (ou polynomiale)
plt.plot(freq,abs(spectre)) #trace du spectre en amplitude
plt.show() Considérons les listes (ou tableaux) de valeurs de variables x et d’ordonnées y.
Pour visualiser l’évolution du spectre au cours d’un enregistrement long (phrase, extrait — La fonction polyfit(x, y, deg) de Numpy renvoie les valeurs coefficients polynomi-
musical, etc.), on pourra en tracer le spectrogramme (voir 11.2). naux (par puissance décroissante) du polynôme de degré deg modélisant la relation
y = f (x). Pour une régression linéaire, on prendre deg=1.
9 Effectuer des tirages aléatoires et des études statistiques — La fonction polyval(p,x) de Numpy renvoie les valeurs de la fonction polynomiale de
coefficients p évaluées sur les valeurs de la liste x.
Ces fonctions sont particulièrement utiles dans les simulations Monte-Carlo, utilisées
notamment pour estimer la variabilité d’une grandeur expérimentale. x=[2,4,6,8,10,12] ; y=[0.36, 0.578, 0.782,0.993,1.197,1.41]
Pour effectuer des tirages aléatoires de variables, on utilisera les fonctions de la biblio- p=np.polyfit(x,y,1) #p[0]=pente, p[1]=y(0)
thèque random de Numpy. reg=np.polyval(p,x)
— x=np.random.uniform(a,b) affecte à x un flottant tiré aléatoirement dans l’intervalle
[a,b], en suivant une distribution uniforme ; pour un tirage d’entiers, on utilisera la plt.plot(x,y,'o',label='Mesures')
fonction randint. plt.xlabel('x') ; plt.ylabel('y')
text='Modèle : y =%.2f x + %.2f '%(p[0],p[1])
— x=np.random.normal(moy,ecart_type) affecte à x un flottant, en suivant une loi
plt.plot(x,reg,'-',label=text)
normale ;
plt.grid('on') ; plt.legend(loc='best')
— x=np.random.choice(['gagné','perdu'], p=(0.2,0.8)) attribue à x un des élé- plt.show()
ments de la liste L placée en premier argument, l’élément L[i] ayant la probabilité p(i)
d’être tiré ;
1.4 Mesures
— l’argument optionnel size permet de générer des tableaux de valeurs aléa- 0.10 x + 0.15
y
0.8
sure), on écrira np.std(data,ddof=1). 1. La règle de Rice choisie ici donne un nombre de classes k ≈ 2N 1/3 adapté à la plupart des cas.
–4–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
11 Autres fonctions utiles en calcul scientifique permet d’affecter à Fe la fréquence d’échantillonnage du fichier son et à s un tableau
des valeurs des échantillons sonores.
Les outils suivants, dont le fonctionnement n’est pas à connaitre, peuvent vous être très
utiles pour votre TIPE. — Créer une fonction par interpolation à partir de sa valeur en différents points :
interp1d de scipy.interpolate. Par exemple, à partir des tableaux t et x obte-
11.1 Tracés avec barres d’erreurs nus dans le premier exemple :
Pour tracer un graphe de données avec les barres d’erreur, on utilisera la fonction
errorbar de Matplotlib, fonctionnant de manière similaire à la fonction plot. Par fct_x=interp1d(t,x,kind='linear')#interpolation lineaire
exemple, pour T et Ks deux tableaux de valeurs expérimentales avec u_T et u_Ks les fct_x(3.6) #estimation de x(t) pour une valeur quelconque de t
incertitudes-types associées, la commande — Tracer le spectrogramme d’un signal s avec la fonction specgram de Matplotlib. Par
exemple, en tapant
plt.errorbar(T,Ks,xerr=u_T,yerr=u_Ks,zorder=2)
plt.specgram(s,NFFT=512,Fs=Fe)
permet d’obtenir le graphe Ks (T ) (graphe ci-dessous à droite) avec affichage des barres
d’erreurs de largeur l’incertitude élargie d’un facteur 2 (paramètre zorder). Cela peut le signal, de fréquence d’échantillonnage Fs, est découpé en intervalle de NFFT=512
permettre de vérifier la validité d’une modélisation, si la courbe représentative de la loi échantillons chacun. Le spectre du signal sur chaque intervalle est calculé et sa valeur
modèle passe par toutes les barres d’erreurs (exemple d’une régression linéaire satisfaisante absolue affichée en fonction de la fréquence et du temps (spectrogramme).
sur la graphe ci-dessous à droite).
–5–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
0.5
Signal (unit. arb.)
0.0
−0.5
−1.0
–6–
Capacités numériques – TIPE : Fonctions Python utiles en calcul scientifique PSI - Lycée Lapérouse
–7–