Lycée Jules Ferry 2016-2017
PTSI 1&2 Informatique
Cours n°7 : calcul matriciel avec numpy, tracé de graphes avec
matplotlib.pyplot et méthode d’Euler
Commandes introduites dans ce cours :
.
1 Calcul matriciel avec numpy
1.1 Calcul matriciel élémentaire
Nous avons déjà vu comment définir des tableaux à l’aide de la bibliothèque .
Numpy offre les primitives permettant de faire du calcul matriciel sur ces tableaux :
on peut additionner ou soustraire deux matrices à l’aide de et ;
on peut multiplier une matrice par un scalaire à l’aide de ;
on peut multiplier deux matrices à l’aide de la commande (attention à la notation pré-
fixée) ;
la commande calcule l’inverse d’une matrice et renvoie un message d’erreur si
la matrice n’est pas inversible (en anglais on parle de singular matrix) ;
la commande permet de calculer les puissances d’une matrice ;
la commande permet de calculer la transposée de ;
enfin la ligne de code permet de résoudre le système linéaire AX =B:
elle renvoie X=A1B(et un message d’erreur si An’est pas inversible).
Notons enfin que la commande permet de définir la matrice identité de taille ,
1
1.2 Inversion d’une matrice et algorithme du pivot de Gauss
Un crash-test classique en calcul numérique matriciel consiste à inverser les matrices de Hilbert.
Nous allons voir que ces matrices sont très mal conditionnées et que tout calcul numérique portant
sur elles peut induire des erreurs d’approximation importantes. La matrice de Hilbert d’ordre nN
est la matrice Hn∈ Mn(R)de terme général hi,j=1
i+j1pour 1 6i,j6n. On peut la définir de la
manière suivante (en prenant garde au décalage d’indice) :
On peut aisément vérifier que l’inverse que donne Numpy de la matrice H5,a priori obtenu par
la méthode de Gauss, n’est pas correct. Il est naturel de penser que cette erreur est due aux arrondis
effectués lors des divisions par les pivots successifs du sytème linéaire.
Sur cet exemple les erreurs peuvent sembler infimes, mais nous allons voir sur un autre exemple
qu’elles preuvent prendre des proportions inquiétantes.
En notant Yla matrice de Mn,1 (R)avec des zéros partout, sauf un 1 en dernière position, la
résolution de HnX=Yva renvoyer la dernière colonne de H1
n. On peut démontrer que H1
na des
coefficients entiers et que le terme d’indice (10, 10)de H1
10 est 44914183600. Grâce à la commande
, on peut calculer la dernière composante de la dernière colonne de H1
10 :
On constate que non seulement le résultat n’est pas un nombre entier, mais en plus celui-ci est loin
de la solution !
2 La bibliothèque matplotlib.pyplot
2.1 Principe
Pour tracer la courbe représentative d’une fonction fsur un intervalle [a,b], nous allons fabriquer
une liste [x1, . . . , xn]contenant un certain nombre de réels de cet intervalle, et ensuite fabriquer la liste
image [f(x1), . . . , f(xn)] associée. La primitive de la bilbiothèque se chargera
alors de placer sur un graphe chacun des points Mide coordonnées (xi,f(xi)), puis de relier chaque
point Mià son successeur Mi+1par des segments de droite. On obtient ainsi une approximation de
la courbe représentative de fpar une ligne polygonale (communément appelée une ligne brisée).
Ce procédé est simple, mais efficace : si l’on se donne suffisament de points, on obtient une ligne
polygonale qui paraît lisse « à l’œil. » Tous les logiciels de calcul scientifique fonctionnent de cette
manière.
2
La figure ci-contre présente un exemple d’approximation d’une courbe
par une ligne polygonale.
2.2 Subdivision régulière d’un intervalle
En mathématiques on utilise la définition suivante.
Définition 1.
Soit I = [a,b]un intervalle de R. On appelle « subdivision régulière de [a,b]» la suite t0, . . . , tnoù n >1et
iJ0, nK,ti=a+iba
n,
et donc en particulier on a a =t0et b =tn. Le réel h =ba
nest alors appelé le « pas de la subdivision. »
Une subdivision de pas h=ba
nd’un intervalle [a,b]est donc le découpage de celui-ci en n
intervalles [ti,ti+1], chacun d’eux étant de longueur égale à h. Pour définir une subdivision en Python,
qui sera renvoyée sous forme de liste, il suffit d’utiliser une définition par compréhension. Voilà deux
définitions possibles, la première à partir du nombre de points n+1 souhaités, la seconde à partir du
pas h.
On utilise souvent ce concept en informatique, à ceci près que l’on n’impose pas à t0(resp. tn)
d’être égal à a(resp. b) ; on dira alors que l’on a donné une « discrétisation » de l’intervalle [a,b]. Pour
discrétiser un intervalle, on peut alors utiliser les primitives et : la première
prendra en entrée le nombre de points souhaités, et la seconde le pas (en plus des bornes a,bde
l’intervalle).
La seconde liste est différente de la première, puisqu’elle ne contient pas le réel 1, mais si l’on souhaite
utiliser cette subdivision pour tracer une courbe représentative cela ne posera pas de problème (nsera
suffisament grand en pratique pour que l’abscence d’un point ne modifie pas le graphe).
3
2.3 La commande plot du module matplotlib.pyplot
La commande de la bibliothèque permet de tracer des lignes polygo-
nales. Cette fonction prend en entrée deux listes et qui contiennent respectivement
les abscisses et les ordonnées des points à relier. En argument optionel, on peut donner un nom à la
courbe avec la syntaxe .
Pour tracer un graphique, il faudra alors définir un grand nombre de points à placer. Par exemple,
pour tracer les courbes représentatives des fonction cosinus et sinus sur l’intervalle [0, 4π], on com-
mence par définir la liste des abscisses en discrétisant l’intervalle [0, 4π]en N+1 points, puis les listes
des ordonnées des points à placer. Par exemple, pour N=1000 :
On remarque que le graphique ne s’affiche pas encore à l’écran. La commande permet
cet affichage. On peut encore définir les noms et unités éventuelles des axes avec et , un
titre avec . Enfin, la commande permet de définir la position du nom de la courbe sur la
figure.
La commande ouvre une fenêtre graphique délimitée par les plus grandes et plus petites
abscisses et ordonnées apparaissant lors de la définition de la courbe. Cela peut être modifié en
utilisant a posteriori les primitives et ; par exemple, le code tronquera la
fenêtre graphique de sorte que la plus grande (resp. plus petite) abscisse apparaissant soit (resp.
).
Remarques. Il existe d’autres options de personnalisation des graphiques, dont certaines se-
ront présentées en TP. On peut par exemple utiliser la commande pour afficher un
quadrillage correspondant à la graduation des axes, et la commande pour
avoir la même échelle sur les deux axes.
la commande permet de définir une nouvelle fenêtre graphique (si on souhaite
tracer des courbes dans une autre fenêtre), la commande permet d’effacer la dernière
fenêtre graphique ouverte, et la commande permet de fermer la dernière fenêtre
graphique ouverte.
4
2.4 La commande subplot
La commande permet de tracer plusieurs courbes représentatives dans une même fenêtre
graphique. Pour cela, on commence par définir une figure vide avec la commande , puis
on utilise la commande signifiant : « la fenêtre graphique est découpée en n×p
figures (nest le nombre de ligne et ple nombre de colonnes), et le code suivant concerne la k-ème de
ces figures (les figures étant numérotées de haut en bas et de gauche à droite). » Chacune des figures
peut alors recevoir une courbe représentative, ainsi qu’un titre, une légende, etc. . . .
0 2 4 6 8 1 0 1 2 1 4
x
1 .0
0 .5
0 .0
0 .5
1 .0
y
y= c os (x )
0 2 4 6 8 1 0 1 2 1 4
x
1 .0
0 .5
0 .0
0 .5
1 .0
y
y= s in (x )
3 Résolution d’une équation différentielle
3.1 La méthode d’Euler
Le calcul explicite des solutions d’une équation différentielle n’est pas toujours aisé, et il existe
un grand nombre de cas que l’on ne sait pas traiter. On dispose néanmoins de méthodes numériques
qui permettent d’obtenir une valeur approchée de la solution, ce qui est suffisant dans le cadre des
sciences expérimentales. La plus simple d’entre elles est la méthode d’Euler.
Cadre. Considérons une fonction f:R2R, et Iun intervalle véritable de R. On cherche à détermi-
ner les fonctions y:IRqui vérifient l’équation différentielle
tI,y(t) = f(y(t),t).
On a ici affaire à une équation différentielle du premier ordre (non linéaire et à coefficients non
constants a priori). On admet que, si la fonction fest dérivable de sorte que fsoit continue, alors
quels que soient y0R,t0I, cette équation possède une unique solution yqui vérifie y(t0) = y0.
Approximation de la courbe représentative de la solution par une ligne polygonale. Le principe de
la méthode d’Euler est le suivant. Soit yla solution de l’équation différentielle considérée. On com-
mence par se donner une subdivision (t0, . . . , tn)régulière de I, et on cherche une valeur approchée
yide chacun des réels y(ti). En reliant par des segments de droite les points de coordonnées (ti,yi)
on obtient alors une ligne polygonale qui est une approximation de la courbe représentative de f. A
priori, plus le nombre nde points que l’on s’est donné est important, plus le graphe obtenu sera une
approximation de qualité.
Principe de la méthode, ou approximation d’une dérivée par la pente d’une corde. Naïvement, le
principe de la méthode peut être exprimé comme suit : partant d’une valeur approchée de yide y(ti),
il suffit de suivre la tangente en (ti,y(ti)) (à la courbe représentative Cyde y) jusqu’à l’abscisse ti+1;
l’ordonnée obtenue est alors une valeur approchée de y(ti+1), que l’on appelle yi+1.
5
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !