Matlab en Mécanique: Notes de Cours
Matlab en Mécanique: Notes de Cours
Jérôme Hoepffner
Février 2011
4 CONTENTS
Contents
1 Notes de cours 5
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Matlab de base . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Répertoire courant . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Boucles et tests . . . . . . . . . . . . . . . . . . . . . . 9
1.2.5 Fonctions simples de matlab . . . . . . . . . . . . . . . 10
1.2.6 Créer des fonctions . . . . . . . . . . . . . . . . . . . . 11
1.2.7 L’aide matlab . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.8 Caractères spéciaux . . . . . . . . . . . . . . . . . . . 13
1.3 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1 Construire des tableaux par concaténation . . . . . . . 14
1.3.2 Accéder aux sous-tableaux . . . . . . . . . . . . . . . . 16
1.3.3 Opérations avec des tableaux . . . . . . . . . . . . . . 18
1.3.4 Fonctions spéciales pour les tableaux . . . . . . . . . . 20
1.4 Vectorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.5 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.1 Lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.2 surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.3 Isovaleurs . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.5.4 Champs de vecteurs . . . . . . . . . . . . . . . . . . . 34
1.6 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.1 Calcul de la constante d’Euler . . . . . . . . . . . . . . 35
1.6.2 Mesurer une trajectoire sur une image . . . . . . . . . 37
1.7 Votre compte-rendu . . . . . . . . . . . . . . . . . . . . . . . 39
1.8 Remettre votre compte-rendu . . . . . . . . . . . . . . . . . . 41
1.9 Difficultés habituelles . . . . . . . . . . . . . . . . . . . . . . . 43
1.9.1 La fenêtre de Matlab . . . . . . . . . . . . . . . . . . . 43
3
6 CHAPTER 1. NOTES DE COURS
avez pris des mesures, vous avez représenté ces mesures sous la forme de
graphiques, à partir de ces mesures vous avez calculé d’autres quantités qui
sont significatives pour la mécanique, et vous avez comparé ces mesures à
des modèles théoriques: le principe fondamental de la dynamique avec ou
sans frottement. Ces étapes sont les étapes typiques de la science. Ce sont
les étapes qui sont suivies par les chercheurs et les ingénieurs.
Chapter 1 Pour cela vous avez manipulé des images, vous avez enregistré des données
sous forme de tableaux, ou de ”matrices”. Vous avez effectué des opérations
mathématiques sur ces tableaux: addition, multiplication, puissances. Vous
Notes de cours avez calculé les valeurs théoriques de la position de l’objet en chute en util-
isant une formule mathématique. Vous avez tracé un graphique, avec un
titre et des labels. Savoir faire toutes ces choses vous sera très utile par la
suite.
1.1 Introduction
1.2 Matlab de base
Vous trouverez dans ces notes une base de connaissances et de pratiques pour
utiliser Matlab. C’est, réuni en quelques pages, le minimum dont vous aurez Matlab offre une interface via laquelle on peut entrer des commandes, c’est
besoin pour le cours ”Matlab: applications en mécanique”. Aujourd’hui, il ”l’invite”, ou en anglais, le ”prompt”: la ligne qui commence avec >>. On
est difficile de se passer de l’ordinateur pour faire de la science: pour analyser y écrit les lignes de commandes qui vont créer des tableaux, les manipuler,
les données, les représenter, les manipuler. Pour ceci Matlab est un outil tracer des graphiques... Une fois que la ligne de commande est écrite, on
efficace. tape sur ”entrée” et l’ordinateur évalue cette commande, vérifie qu’elle est
Une grande partie de l’enseignement de l’informatique en licence de conforme, qu’elle veuille dire quelque chose. Si il y a un problème: on appelle
mécanique consiste à utiliser l’ordinateur pour calculer des solutions ap- un tableau qui n’existe pas, on utilise un nom de fonction qui n’existe pas,
prochées aux équations différentielles de la mécanique. Ces équations décrivent on demande quelque chose qui n’est pas possible, il y a un message d’erreur
par exemple la trajectoire d’un objet soumis à des forces, ou bien des qui nous donne une indication sur le problème. Il faut lire ces messages et
choses bien plus complexes comme le champ de vitesse et de pression dans corriger l’erreur.
l’écoulement d’un fluide. Ces techniques sont basées sur la discrétisation des Si on crée un tableau, avec un nom, par exemple
équations différentielles. Une étape technique importante pour cela consiste
à résoudre des systèmes d’équations linéaires. Ces choses passionnantes vous >> A=[0.1,5,-2];
les pratiquerez l’année prochaine en L3.
c’est un tableau ligne (une seule ligne et trois colonnes). Alors ce tableau est
Un cas typique d’étude: vous avez filmé la chute d’un objet et vous désormais disponible dans le ”workspace”, c’est à dire dans l’espace mémoire
voulez savoir si ce que vous avez filmé respecte la loi de la chute des corps, de matlab. On peut l’utiliser en l’appelant par son nom, par exemple ici on
et vérifier si le frottement avec l’air y joue un rôle important. A partir du crée un tableau B dans lequel on met deux fois la valeur des éléments qu’il
film, vous pouvez obtenir (en mesurant la position de l’objet sur l’image) y a dans A
la position en fonction du temps. Cette courbe, si vous la tracez devrait
donner une parabole. Vous pouvez à partir de cette trajectoire mesurée, >> B=2*A;
calculer l’énergie cinétique et potentielle de gravité de votre objet, et vérifier
que l’énergie totale est constante. Si le frottement joue un rôle important, Ici, je met un point-virgule à la fin de la ligne pour dire à matlab de ne pas
alors l’énergie totale va décroı̂tre. Voilà: au cours de cette étude, vous afficher à l’écran le résultat de l’opération. Si je ne le met pas j’obtiens:
5
1.2. MATLAB DE BASE 7 8 CHAPTER 1. NOTES DE COURS
se trouve votre script. Une autre manière peut-être plus simple consiste à a=2; b=3;
exécuter le script directement à partir de l’éditeur Matlab, avec le bouton test=a>b
d’exécution du menu de l’éditeur. Si le script en question n’est pas dans if test
le répertoire courant, Matlab vous propose de changer le répertoire courant disp(’a est plus grand que b’)
vers le répertoire dans lequel se trouve le script. else
disp(’a est plus petit que b’)
1.2.4 Boucles et tests end
Pour réaliser des actions répétitives, on peut utiliser la boucle for. J’écrit Ici la variable test est un scalaire (un tableau à une ligne et une colonne)
par exemple les commandes suivantes dans un fichier: dont la valeur est 1 si a est plus grand que b et 0 si a est plus petit que b
ou égal à b. Noter que l’expression if test signifie ”si test est vrai” et est
a=7 un raccourcis pour l’expression plus précise if test==1. L’opérateur == est
for i=1:10 le test d’égalité, comme > est le test ”plus grand que” et < est le test ”plus
a*i petit que”. Il ne faut pas confondre le test d’égalité == avec l’opérateur =
end qui assigne une valeur à une variable. Le test ”n’est pas égal” s’écrit ~=,
Je crée un tableau à une ligne et une colonne, nommé a, et puis pour l’indice puisque ~ est l’opérateur de négation: si a est vrai, alors ~a est faux.
i valant successivement de 1 à 10, je vais afficher à l’écran la valeur de a*i.
Plutôt que de créer le vecteur lors de l’appel de for, je peux créer ce vecteur 1.2.5 Fonctions simples de matlab
à l’avance, ici sous le nom vec, c’est équivalent et parfois pratique:
Il y a beaucoup de fonctions dans matlab, auxquelles on donne des ”ar-
a=7 guments d’entrée” et qui nous rendent des ”arguments de sortie”. Ce qui
vec=1:10 se passe à l’intérieur de la fonction ne nous intéresse pas et peut être très
for i=vec complexe, ce qui nous intéresse c’est ce que la fonction rend. Parmi ces
a*i fonctions, il y a les fonctions mathématiques de base:
end
>> a=sin(2.3);
Je peux utiliser la structure if pour n’exécuter des commandes que si
une condition est satisfaite: c’est la fonction sinus. Ici, la variable a reçoit la valeur du sinus de 2.3
radiants. De la même manière, nous avons les fonctions
a=2; b=3;
if a>b cos: cosinus
disp(’a est plus grand que b’) tan: tangente
else exp: exponentielle
disp(’a est plus petit que b’) sqrt: racine carrée
end log: logarithme
abs: valeur absolue
Il faut bien noter ici que a>b est une valeur binaire: vrai ou faux. Dans sinh: sinus hyperbolique
matlab, vrai, c’est 1 et faux c’est 0. Ici, la fonction disp affiche à l’écran la cosh: cosinus hyperbolique
chaı̂ne de caractère qui lui est donnée en argument. On signale une chaı̂ne tanh: tangente hyperbolique
de caractère avec les guillemets ’ ’. Comme pour la boucle for ci-dessus, erf: fonction erreur
le test sur lequel est fait le if peut être dans une variable: ...
1.2. MATLAB DE BASE 11 12 CHAPTER 1. NOTES DE COURS
et ainsi de suite. Pour le moment, nous avons donné des arguments d’entrée >> help for
FOR Repeat statements a specific number of times.
scalaires, mais on verra plus tard que si on donne un tableau en arguments The general form of a FOR statement is:
d’entrée, ces fonctions donnent en sortie des tableaux de la même taille en FOR variable = expr, statement, ..., statement END
appliquant la fonction mathématique pour chaque élément du tableau. On The columns of the expression are stored one at a time in
verra que cela ouvre de grandes perspectives... the variable and then the following statements, up to the
END, are executed. The expression is often of the form X:Y,
Il y a d’autres genres de fonctions, qui peuvent être très utiles, comme in which case its columns are simply scalars. Some examples
(assume N has already been assigned a value).
par exemple for R = 1:N
for C = 1:N
A(R,C) = 1/(R+C-1);
a=num2str(2.3) end
end
qui transforme l’argument d’entrée en chaı̂ne de caractère et la met dans Step S with increments of -0.1
for S = 1.0: -0.1: 0.0, do_some_task(S), end
la variable a. Une fois ceci fait, a contient la chaı̂ne ’2.3’. On imagine
Set E to the unit N-vectors
aisément ce que fait la fonction str2num. for E = eye(N), do_some_task(E), end
Long loops are more memory efficient when the colon expression appears
in the FOR statement since the index vector is never created.
1.2.6 Créer des fonctions The BREAK statement can be used to terminate the loop prematurely.
On peut créer nos propres fonctions. Pour cela, on crée un fichier dont le See also if, while, switch, break, continue, end, colon.
nom est le nom de la fonction, en mettant l’extension .m comme pour les Reference page in Help browser
doc for
scripts. Par exemple, le fichier testfonction.m. Ce fichier texte est comme
un script, mais avec une en-tête particulière: Un aspect très intéressant de cette aide, c’est qu’elle propose dans ”see also”
en bas de texte une liste de fonction et commandes proches de celle que vous
function [s1,s2]=testfonction(a,b,c)
avez demandé, ici: if, while, switch, break, continue, end, colon.
s1=a+b;
En procédant d’aide en aide, vous pouvez rapidement apprendre beaucoup
s2=s1+c;
de fonctions et fonctionnalités, ce qui vous facilitera grandement la tâche.
Si vous vous demandez la manière dont fonctionne un caractère spécial,
Cette fonction a trois arguments d’entrée, a, b, et c, et rend deux arguments par exemple à quoi servent les deux points : (”colon” en anglais), tapez
de sortie s1 et s2. Le type et le nombre des arguments sont arbitraires en
entrée et en sortie, ils peuvent être des tableaux ou n’importe quoi d’autre. >> help colon
help colon
Ci-dessous un script qui utilise cette fonction: : Colon.
J:K is the same as [J, J+1, ..., K].
J:K is empty if J > K.
J:D:K is the same as [J, J+D, ..., J+m*D] where m = fix((K-J)/D).
toto=1 J:D:K is empty if D == 0, if D > 0 and J > K, or if D < 0 and J < K.
pilou=3 COLON(J,K) is the same as J:K and COLON(J,D,K) is the same as J:D:K.
[p,r]=testfonction(toto,pilou,10); The colon notation can be used to pick out selected rows, columns
and elements of vectors, matrices, and arrays. A(:) is all the
disp(p) elements of A, regarded as a single column. On the left side of an
assignment statement, A(:) fills A, preserving its shape from before.
disp(r) A(:,J) is the J-th column of A. A(J:K) is [A(J),A(J+1),...,A(K)].
A(:,J:K) is [A(:,J),A(:,J+1),...,A(:,K)] and so on.
où on a bien nos trois arguments d’entrée et nos deux arguments de sortie, The colon notation can be used with a cell array to produce a comma-
separated list. C{:} is the same as C{1},C{2},...,C{end}. The comma
puis on affiche p et r à l’écran. separated list syntax is valid inside () for function calls, [] for
concatenation and function return arguments, and inside {} to produce
a cell array. Expressions such as S(:).name produce the comma separated
list S(1).name,S(2).name,...,S(end).name for the structure S.
1.2.7 L’aide matlab For the use of the colon in the FOR statement, See FOR.
Si vous avez oublié les détails d’une fonction ou d’un opérateur, utilisez la For the use of the colon in a comma separated list, See VARARGIN.
fonction help. Par exemple: Overloaded functions or methods (ones with the same name in other directories)
1.2. MATLAB DE BASE 13 14 CHAPTER 1. NOTES DE COURS
Pour avoir la liste générale des noms associés aux caractères spéciaux, tapez à la ligne.
par exemple help :. • == Opérateur logique d’égalité
Si plutôt que d’aide, vous avez besoin de documentation, utilisez la com-
mande doc qui ouvre une fenêtre séparée. • = A lire ”reçoit” et non pas ”égal”: pour donner une valeur à une
variable.
• * Multiplication de matrices.
1.3 Tableaux
Dans cette section, on voit qu’on peut faire beaucoup de choses avec des
Il y a beaucoup de choses dans Matlab. C’est en maı̂trisant son aide que tableaux, opérations qui vont bien nous servir par la suite lorsqu’ils contien-
vous allez véritablement pouvoir l’utiliser comme un langage de haut niveau. dront des données intéressantes, pour l’analyse et les graphiques.
Ce sont les caractères qui jouent un rôle important pour la syntaxe, en voici Le tableau le plus simple a une ligne et une colonne, c’est un scalaire
une petite liste:
a=-3.7;
• [ ] Les crochets pour concaténer des tableaux b=2;
3. Mis côte à côte d et v, c’est possible parce qu’ils ont le même nombre
de lignes.
4. mis dans t4 v, avec ”en dessous” une troisième ligne avec des 2 comme
éléments.
5. Mis dans t5, v, avec à droite une cinquième colonne avec des 1 comme
Je peux construire directement un tableau en concaténant des nombres éléments.
ici je met dans une nouvelle variable b la somme des éléments (2,3) et (1,1)
de A.
On peut de la même manière accéder aux sous-tableaux de A, mais en
mettant maintenant des vecteurs d’indice:
c=A([1,2],[2,3])
A(2,3)=2; C=A+B
On verra que matlab sera très utile pour toutes les opérations qui pren-
nent en compte des matrices, avec l’aide des propriétés de l’algèbre linéaire,
pour résoudre des systèmes d’équations, calculer des vecteurs propres et des
valeurs propres... D’ailleurs, matlab signifie ”MATrix LABoratory”.
On peut aussi utiliser les fonctions mathématiques sur les tableaux, en
appliquant la fonction élément par élément, par exemple:
C=sin(A)
D=exp(B)
E=cos(A)+tanh(B)
Ceci fait gagner des lignes de codes (donc du temps et des soucis), puisqu’il
La multiplication des tableau est aussi une multiplication élément par suffit d’écrire une seule instruction pour appliquer la fonction à tous les
élément, et se note .* et non *. L’instruction éléments. Par exemple la troisième instruction ci-dessus est équivalente à
met dans A(i,j)*B(i,j) dans C(i,j). Elle est équivalente à la suite for i=[1,2]
d’instructions suivante: for j=[1,2]
E(i,j)=cos(A(i,j))+tanh(B(i,j))
C=[0, 0; 0, 0];
end
for i=[1,2]
end
for j=[1,2]
C(i,j)=A(i,j)*B(i,j) Sans cette capacité de matlab de traiter les tableaux élément par élément,
end on a vu dans les exemples précédents, qu’il faut utiliser des boucles for
end imbriquées qui parcourent tous les indices. On voit bien que ce type de
codage alourdi considérablement le code.
A ne pas confondre avec la multiplication de matrices, notée *:
I=eye(6) pour avoir l’élément le plus grand de A, sans le détail colonne par colonne,
il suffit de faire
qui construit une matrice unitaire, c’est à dire remplie de zeros, à part les
éléments diagonaux qui sont des 1. La matrice unitaire est souvent notée I. m=max(max(A))
Le nom ”eye” provient de l’anglais: ”eye-dentity”.
on peut aussi obtenir l’indice auxquels l’élément le plus grand se trouve dans
le tableau, pour cela, voir dans l’aide matlab: help max. La fonction min
fonctionne de manière similaire. On retrouve souvent dans matlab cette
propriété de fonctions agissant colonne par colonne.
On peut calculer la somme ou le produit des éléments d’un tableau
v=sum(A)
r=prod(A)
1.4 Vectorisation
Une fonction qui sera utile pour faire varier les paramètres, la fonction
linspace, qui crée des vecteurs-ligne (un tableau à une ligne et n colonnes) La vectorisation—en fait ici on devrait dire la tableau-isation—est une pra-
tique de programmation qui consiste à éviter les manipulations élément par
v=linspace(0,1,65)
élément. Dans cette section, on verra des exemples et quelques principes di-
ici v est un vecteur de 65 éléments équidistants entre 0 et 65. Cette com- recteurs. Vous verrez que nous avons déjà utilisé beaucoup de formulations
mande est équivalente à vectorisées, qui sont très naturelles en matlab.
Ici une série d’exemples. Création d’un vecteur de zeros. élément par
v=0:1/64:1 élément:
qui est encore équivalent à la séquence explicite x=[];
v=zeros(1,65); for i=1:20
for i=1:65 x=[x, 0];
v(i)=(i-1)/64 end
end vectorisé:
Pour un tableau A, la fonction max donne en sortie un tableau ligne qui en utilisant une fonction prédéfinie zeros. Construction d’un vecteur d’éléments
contient l’élément le plus grand de chaque colonne de A répartis linéairement entre 0 et 2π, élément par élément
(il faut bien faire attention à ne pas se tromper...) vectorisé: On pourrait continuer cette liste pendant longtemps, par exemple, pensez
comment coder élément par élément ce que fait la fonction sort.
x=linspace(0,2*pi,20); Jusqu’ici, pour vectoriser il a fallu connaı̂tre beaucoup de fonctions de
en utilisant la fonction prédéfinie linspace. Calcul du sinus de ces valeurs, matlab. Matlab est un langage dit ”de haut niveau”, non pas parce qu’il
élément par élément: faut être très fort pour pouvoir l’utiliser, mais parce qu’il permet d’éviter
les manipulations élémentaires, dites de ”bas-niveau”, ces manipulations
for i=1:20 élémentaires étant déjà codées de manière sophistiquée et efficace dans une
f(i)=sin(x(i)); très large librairie de fonctions. Maintenant quelques exemples plus subtils
end utilisant les manipulations de tableaux.
Compter le nombre d’éléments égaux à π dans un vecteur v donné.
vectorisé:
Elément par élément:
f=sin(x)
n=0;
graph de ce vecteur du sinus de x, élément par élément: for i=1:length(v)
if v(i)==pi;
for i=1:19 n=n+1;
line([x(i),x(i+1)],[f(i),f(i+1)]); end
hold on end
end
hold off dans cet exemple, n est une variable que l’on utiliser pour compter. Vectorisé
ou nous avons tracé un à un tous les segments reliant les points (abscisse,ordonnée) n=sum(v==pi);
consécutifs. Vectorisé:
ici, v==pi est un vecteur de la même taille que v, avec des zeros dans les
plot(x,f) cases ou v n’est pas égal à π et des 1 dans les cases ou v est égal à π. La
somme avec sum des éléments de ce vecteur est le nombre d’éléments de v
en utilisant la fonction prédéfinie plot. Calcul de la valeur maximale dans le égaux à π. Maintenant un peu plus subtil, on veut connaı̂tre les indices des
vecteur f, en indiquant à quel indice cette valeur ce trouve dans f; élément éléments de v qui sont égaux à π. Élément par élément:
par élément:
indlist=[]
maxval=-inf; for i=1:length(v)
indloc=0; if v(i)==pi;
for i=1:20 indlist=[indlist, i];
if f(i)>maxval; end
maxval=f(i); end
indloc=i;
end vectorisé:
end
k=1:length(v);
Ici, inf c’est la valeur infinie qui est plus grande que toutes les autres. indlist=k(v==pi);
Vectorisé:
dans cet exemple, on a commencé par construire un vecteur auxiliaire—
[maxval,indloc]=max(f); une aide—k comme le vecteur de tous les indices: (1, 2, 3, ...), et on n’a
1.4. VECTORISATION 25 26 CHAPTER 1. NOTES DE COURS
sélectionné dans ce vecteur que les cases telles que la case correspondante lorsque l’on fait boucles et petites opérations, ces instructions sont in-
dans v contient π. En découpant tout cela en petites étapes pour bien voir terprétées une-à-une, ce qui est lent et doit donc être évité autant que
ce qui se passe, au prompt de matlab: faire se peut.
>> v=[0,2,4,pi,0,pi]
v = 1.5 Graphiques
0 2.0000 4.0000 3.1416 0 3.1416
>> v==pi Les fonctions principales sont les fonctions plot pour les lignes, et mesh pour
ans = les surfaces. Nous commencerons par voir comment ces fonctions se com-
0 0 0 1 0 1 portent, et nous verrons ensuite comment tracer des isolignes avec contour,
>> v(v==pi) des surfaces en couleurs avec surf, ou encore des champs de vitesses avec
ans = quiver. Dans ce cours, nous insistons sur le fait que toute donnée peut être
3.1416 3.1416 visualisable, et doit être visualisée.
>> k=1:length(v)
k = 1.5.1 Lignes
1 2 3 4 5 6
Nous allons visualiser la fonction
>> k(v==pi)
ans = −x2
f (x) = sin(x)e 10
4 6
J’ai d’abord construit mon vecteur v, en mettant π en quatrième et sixième elle est composée d’une fonction sinus, qui ondule, et d’un facteur en cloche
2
position. Je regarde à quoi ressemble le vecteur v==pi, c’est un vecteur Gaussienne en e−x qui joue ici le rôle d’enveloppe”, elle force l’amplitude
binaire avec des zéros partout sauf en position quatre et six... je teste du sinus à décroı̂tre vers zeros lorsque |x| devient grand.
v(v==pi), c’est à dire, j’évalue quels éléments de v sont égaux à π, le résultat On commence par définir le vecteur des x et calculer la valeur de f pour
est rassurant... Je construit ensuite mon vecteur auxiliaire k, et je regarde tous les points en x
quels sont les éléments de k qui correspondent aux cases ou v est égal à π, n=200
et je trouve bien le résultat escompté. x=linspace(-10,10,n);
En fait pour ce problème là, on aurait pu utiliser la fonction find qui f=sin(x).*exp(-x.^2/10);
donne directement les indices à partir du tableau de test v==p
avec n le nombre de points. Lorsque je tape la commande
>> find(v==pi)
ans = plot(f)
4 6
je n’ai pas précisé quels sont les points d’abscisse (les x), je n’ai donné que
La vectorisation est avantageuse pour plusieurs raisons: les ordonnées. Dans ce cas matlab suppose que le vecteur des abscisses est
(1, 2, 3, 4...), jusqu’à n. Pour tracer correctement la fonction, il faut entrer
• Eviter les boucles for, cela économise des lignes de codes, économise
des indices à faire varier. C’est une économie de temps de codage. plot(x,f)
• En matlab, c’est beaucoup plus rapide en temps de calcul: la plupart Je peux choisir la couleur et le style de ligne
des fonctions de matlab et des opérations de tableaux (addition, multi-
plication...) sont compilées et optimisées pour une efficacité maximale; plot(x,f,’r*--’)
1.5. GRAPHIQUES 27 28 CHAPTER 1. NOTES DE COURS
ici, je demande a ce que le graph soit en rouge (r), avec des astérisques aux plot(x,f3,’k+-.’);
points x(i) (*), et une ligne en pointillés (--). hold off
subplot(3,1,1); plot(x,f1,’r*-’);
subplot(3,1,2); plot(x,f2,’bo--’);
Quelques couleurs: ”b” pour bleu, ”k” pour noir, ”m” pour magenta, ”c” subplot(3,1,3); plot(x,f1,’k+-.’);
pour cyan... et pour les lignes, ”-” pour ligne continue, ”–” pour pointillés,
”-.” pour une ligne pointillée mixte... Pour plus d’informations, appelez à
l’aide: tapez help plot.
Je peux aussi superposer plusieurs courbes, par exemple en mettant
plusieurs couples abscisses/ordonnées à la suite
f1=sin(x).*exp(-x.^2/10);
f2=sin(x+2*pi/3).*exp(-x.^2/10);
f3=sin(x+4*pi/3).*exp(-x.^2/10);
plot(x,f1,’r*-’,x,f2,’bo--’,x,f3,’k+-.’)
Ici, j’ai mis trois fonctions obtenues en déphasant de 2π/3 et 4π/3 les os- subplot(nl,nc,n) découpe la fenêtre graphique en nl lignes et nc colonnes,
cillations du sinus, on commence à voir apparaı̂tre l’effet de l’enveloppe en et trace les commandes graphiques suivantes dans la sous-fenêtre n, en comp-
exponentielle. tant de gauche à droite et de haut en bas. Dans l’exemple précédent, il y a
On peut également utiliser les commandes hold on et hold off avec la trois colonnes et une seule ligne.
séquence suivante Si l’on veut visualiser nos données sous la forme d’une animation, il est
commode d’utiliser une boucle for
plot(x,f1,’r*-’);
hold on for t=linspace(0,20,300)
plot(x,f2,’bo--’); plot(x,sin(x+t).*exp(-x.^2/10),’r*-’)
1.5. GRAPHIQUES 29 30 CHAPTER 1. NOTES DE COURS
Ainsi, sin(X) est un tableau de la même taille que X, avec pour valeurs les drawnow
sinus des valeurs de X. De manière similaire, Y.^2 est un tableau de la même end
taille que Y avec pour valeurs le carré des valeurs de Y, et encore de manière
similaire, exp(-Y.^2) est un tableau qui a comme éléments l’exponentielle
du carré des éléments de Y. De cette manière, sin(X).*exp(-Y.^2) cor-
respond bien à ce que nous voulons créer. L’utilisation de mesgrid est On peut changer tout ce que l’on veut lors de cette boucle d’animation, par
typique de la pratique en vectorisation: plutôt que de faire des boucles, on example on peut faire orbiter la caméra
se débrouille pour construire des tableaux pratiques. Ca vaut le coup de
prendre le temps qu’il faut pour bien comprendre le principe de meshgrid.
Une fois cette astuce décrite et notre fonction construite, nous pouvons
tracer le graph f
for t=linspace(0,2*pi,30)
mesh(X,Y,f);
mesh(X,Y,sin(X+t).*exp(-Y.^2));
xlabel(’x’); ylabel(’y’); zlabel(’z’);
camorbit(380*t/(2*pi),0);
title(’sin(x)exp(-y^2)’);
drawnow
C’est la fonction mesh que nous avons utilisée; en anglais, ”mesh” signifie end
”filet” ou ”grillage”. Si on veux changer les limites des axes x, y, z, on peut
utiliser les commandes xlim, ylim, zlim comme nous l’avons fait plus tôt.
Ici la fonction camorbit fait tourner la caméra d’un angle donné, en degrés,
par rapport à la position par défaut. Ici nous faisons faire à la caméra un
tour complet (de 0 à 380 degrés) lorsque t va de 0 à 2π.
Si l’on veut une belle surface plutôt qu’un grillage, on peut utiliser la
fonction surf
surf(X,Y,sin(X+t).*exp(-Y.^2));
shading interp;
colormap(jet(400))
subplot(1,2,1)
contour(X,Y,f,30)
xlabel(’x’); ylabel(’y’)
subplot(1,2,2)
surf(X,Y,f); shading interp
xlabel(’x’); ylabel(’y’)
subplot(2,1,1)
plot([1,n],[eexact,eexact],’r--’);
hold on
for ind=1:n
e=e+1/factorial(ind);
1.6. EXEMPLES 37 38 CHAPTER 1. NOTES DE COURS
1.6.2 Mesurer une trajectoire sur une image l’instant t = 0.4s: la position mesurée en pixels est (X = 296, Y = 478). Les
pixels sont comptés de gauche à droite selon l’horizontale, c’est l’axe des X
C’est quelque chose que nous allons souvent faire dans les TP: une expérience de l’image, et de haut en bas selon la verticale, c’est l’axe des Y de l’image.
physique a été capturée par une photographie ou un film, et nous allons L’outil d’étiquetage indique également la valeur en RGB de la couleur du
mesurer des quantités pour les analyser ensuite. Ici un exemple pour la chute pixel sur lequel j’ai cliqué; il s’agit de la proportion de Red/Blue/Green, ici:
d’un corps. L’image est stockée sur le disque dans le fichier [Link]. (151, 151, 140). On utilisera cette information dans un de nos TP.
Je charge cette image sous la forme d’une matrice dans le workspace Je mesure ainsi les positions successives de la pomme au cours de sa
de matlab avec la fonction imload. Les données sous forme d’une matrice chute, et je les sauve dans mon script sous la forme d’un tableau. Il est
sont maintenant stockées dans la matrice a qui était l’argument de sortie de important de bien noter ces valeurs dans votre script et pas seulement de
imload. Ensuite j’affiche l’image à l’écran dans une fenêtre graphique à l’aide les stocker dans un tableau en mémoire, car la commande clear risque de
de la commande image qui prend la matrice a comme argument d’entrée. tout effacer.
Ensuite, j’utilise axis equal; axis tight; xlabel(’Pixels: axe des X’);
ylabel(’Pixels: axe des Y’). Pour régler l’affichage et les labels. tvec=[0,0.1,0.2,0.3,0.4];
Le résultat de ces opérations est représenté sur le graphique ci-dessous: xpix=[294,294,294, 294,294];
ypix=[77,119, 169, 267, 478];
xpix0=294;
ypix0=77;
xphys=ypix*taillepix;
yphys=xpix*taillepix;
plot(tvec,xphys,’b*-’);
title(’chute de pomme’); xlabel(’t’); ylabel(’x’);
hold on
tt=linspace(0,0.5,100);
Avec l’outil d’étiquetage, j’ai mesuré la position en pixels de la pomme à plot(tt,9.81*tt.^2/2,’r-’);
1.7. VOTRE COMPTE-RENDU 39 40 CHAPTER 1. NOTES DE COURS
n’hésitez pas à nous faire profiter des idées et connaissances que vous
legend(’mesure’,’theorique’) avez développées en dehors de notre cours.
• Pour ce que vous n’avez pas réussi à faire: décrire les erreurs que vous
avez obtenu, décrire ce que vous avez tenté pour corriger ces erreurs.
Il est important d’avoir une attitude positive par rapport à ce que
vous n’avez pas su faire, et que cette attitude transparaisse dans le
compte-rendu que vous faites de votre travail. Avoir tenté des choses,
c’est un pas vers la solution, et ça compte pour donner de la valeur à
votre travail.
• Pour chaque question de l’énoncé de TP, une page avec les graphiques
que vous avez tracés, les scripts matlab que vous avez codé. Et des
commentaires qui décrivent les choses intéressantes que l’on voit sur
les graphiques: la physique qui se cache derrière les données. Utiliser
les informations que nous vous donnons dans les énoncés de TP, et
1.8. REMETTRE VOTRE COMPTE-RENDU 41 42 CHAPTER 1. NOTES DE COURS
Important: les scripts doivent comporter des commentaires qui expliquent page du devoir évalué, télétransmettez le ficher de votre compte-rendu que
ce que fait chaque bloc de commande; sinon les codes sont illisibles: on ne vous avez produit pendant le TP, au format pdf. Voici l’interface sur laque-
peut pas vous donnez de conseils de programmation, et il nous est difficile lle vous pouvez télétransmettre votre compte-rendu. Cliquez sur ”choisir
de savoir si vous n’avez rien pu faire ou bien si simplement c’est une petite le fichier”, et vous avez aussi une zone de texte pour éventuellement vous
erreur qui a fait que vous n’avez pas obtenu de graphique. les graphiques exprimer.
doivent avoir un titre et des labels pour les axes, et une légende pour les
courbes tracées.
Pour rédiger votre compte-rendu, utilisez le logiciel ”powerpoint” sous
windows ou ”openoffice” sous linux. Une fois le compte-rendu prêt, faites la
transformation de votre document de travail en un document de présentation
en le sauvant sous le format pdf. Le format pdf est un bon format pour
envoyer des documents, c’est un format portable, c’est à dire qui peut être
lu sous tous les types de systèmes d’exploitation et qui réduit la taille des
fichiers par rapport à powerpoint ou openoffice.
Ensuite cliquez sur ”remettre”. Attention, votre travail n’est pas remis
tant que vous n’avez pas cliqué sur ”remettre” et vu la fenêtre de confirma-
tion. De plus un email de confirmation vous est envoyé.
Pour rendre un devoir, dans l’onglet LA207, cliquez sur ”Devoirs évalués”.
En temps voulu, il y aura un lien portant le nom du TP en question. Sur la Avant de quitter la salle de TP, passer voir votre encadrant qui vérifiera
1.9. DIFFICULTÉS HABITUELLES 43 44 CHAPTER 1. NOTES DE COURS
que vous avez rendu le bon ficher au bon endroit. Pour les TPs notés, c’est 1.9.2 Le graphique actif
lors de cette confirmation que vous pourrez signer la feuille de présence.
Lorsque vous avez plusieurs sous-graphiques, les commandes de tracé de
graphique sont exécutées dans le sous-graphique ”actif”. Il s’agit du sous-
graphique dans lequel à été tracé la dernière figure, ou bien le sous-graphique
1.9 Difficultés habituelles sur lequel on a cliqué en dernier, ou bien encore le sous-graphique rendu actif
par la commande subplot.
Dans cette section, je rajoute quelques descriptions qui correspondent à
ce qui a été difficile pour vos collègues des années précédentes: évitez les 1.9.3 Stopper un calcul
embûches qui les ont gênés!
Il arrive que l’exécution d’une commande ou d’un script prenne beaucoup de
temps parce qu’on s’est trompé. Pour arrêter l’exécution et pouvoir entrer
1.9.1 La fenêtre de Matlab d’autres commandes, cliquez dans la fenêtre du prompt, et tapez ”controle-
c”, c’est à dire enfoncez simultanément la touche CTRL et la touche c.
Matlab propose une interface graphique avec un éditeur de texte (”editor”),
la fenêtre du prompt (”command window”). Vous pouvez choisir la config- 1.9.4 Sauver les figures
uration de cette fenêtre principale grâce au menu déroulant ”window”. Je
vous conseille la configuration ci-dessous qui permet de voir à la fois l’éditeur Pour sauver sur le disque vos figures, il y a deux possibilité: les enregistrer
pour votre script, le prompt ou vous verrez les messages d’erreur, en même au format ”Matlab figure” .fig qui vous permet de ré-ouvrir la figure dans
temps que votre figure. matlab comme si vous venez juste de la créer pour éventuellement la modi-
fier, ou bien vous pouvez les enregistrer dans un format d’image, par exemple
.jpg.
Pour sauver une figure: dans le menu déroulant ”Fichier” (”File” en
anglais) sélectionner ”save as” et choisissez le format jpg et le répertoire
dans lequel vous voulez enregistrer l’image produite.
N’essayez pas de mettre une figure sauvée au format .fig dans votre
compte-rendu. Pour le compte rendu; il faut les sauver sous un format
d’image.
Une solution d’extrême urgence pour mettre une figure dans votre compte-
rendu consiste à faire une capture d’écran (touche sur votre clavier), en
général cela sauve comme une image tout ce que vous voyez sur votre écran.
Vous pouvez ensuite insérer cette image dans votre compte-rendu et la rogner
pour que n’apparaisse que la figure. La qualité de l’image obtenue ainsi sera
moindre que en sauvant par le menu de Matlab.