SCALab Initiation MATLAB 1 Laurent Ott
Initiation MATLAB 1
1 Introduction
Le logiciel MATLAB, développé par la société The MathWorks ([Link] est devenu
un langage de référence pour l’analyse et la résolution de problème scientifique. Il intègre à la fois des solutions
de calcul, de visualisation et un environnement de développement. Son nom provient de MATrix LABoratory,
l’objectif initial était de fournir un accès simplifié aux bibliothèques de fonctions des projets LINPACK et
EISPACK (dédiées au calcul matriciel et à l’algèbre linéaire).
MATLAB a de nombreux avantages par rapport aux langages de programmation traditionnels (tel que
le C/C++). Il permet le développement intéractif de part l’utilisation d’un langage interprété. La structure
de données de base est le tableau ne nécessitant pas de dimensionnement. Il fournit de nombreuses fonctions
préprogrammées regroupées en boı̂tes à outils (toolbox) pour de nombreux domaines (par ex : signal processing,
statistics, control theory, optimization, ...).
De plus, MATLAB dispose d’un excellente documentation.
2 Démarrer MATLAB
Lorsque vous lancez MATLAB pour la première fois, l’écran ressemble à celui de la Figure 1. Le ’bureau’
MATLAB est une fenêtre contenant d’autres sous-fenêtres. Les principaux outils disponibles depuis ce bureau
sont :
— COMMAND WINDOW : invite de commande permettant de taper des instructions, d’appeler des scripts,
d’exécuter des fonctions MATLAB.
— COMMAND HISTORY : historique des commandes lancées depuis l’invite de commande.
— WORKSPACE : il liste les variables en mémoire, il permet également de parcourir graphiquement le
contenu des variables
— CURRENT DIRECTORY : un navigateur de fichier intégré à MATLAB pour visualiser le répertoire de
travail courant et y effetuer les opérations classiques tel que renommer ou supprimer un fichier.
— le HELP BROWSER : un navigateur permettant de parcourir l’aide de MATLAB. L’aide est un outil
précieux pour trouver les fonctions et apprendre leur fonctionnement (notamment le format des données
à fournir en entrée ainsi que les valeurs renvoyées par la fonction).
Par la suite, il est conseillé de tester toutes les instructions précédées de >> dans la command window.
Lorsque vous optenez une erreur, essayez d’en comprendre la signification. Avec un peu de pratique, vous verrez
que les messages d’erreur sont en général explicites.
3 MATLAB comme calculette
Comme tout langage de programmation, MATLAB dispose de fonctions de calculs mathématiques. Nous en
voyons ici quelques exemples d’utilisation.
1
SCALab Initiation MATLAB 1 Laurent Ott
Gestionnaire de fichier :
liste les fichiers du Voir ou changer
Workspace :
répertoire de travail le répertoire de travail
Obtenir de l’aide liste les variables en mémoire
Invite de commandes : Voir ou réexécuter les
Entrer les commandes à exécuter commandes précédemment
utilisées
Figure 1 – L’interface graphique de l’environnement MATLAB (version R2010b)
+ (addition) ⇒ >> 3+2
- (soustraction) ⇒ >> 3-2
* (multiplication) ⇒ >> 3*2
/ (division) ⇒ >> 3/2
^ (puissance) ⇒ >> 3^2
Si l’on regarde ce que donne l’exemple d’addition :
>> 3+2
ans =
5
On peut remarquer que lorsqu’aucune variable d’affectation n’est spécifiée pour stocker le résultat de
l’opération, MATLAB stocke le résultat dans une variable appelée ans (diminutif pour answer). Cette va-
riable sera écrasée à chaque nouvelle opération. Pour éviter cela, on peut spécifier le nom d’une variable pour
stocker le résultat. On pourra alors réutiliser le résultat de l’opération plus tard. Par ex :
>>x = 3+2
x =
5
x prend alors la valeur 5. Cette variable peut alors être réutilisée dans un calcul suivant :
>>x/2
ans =
2.5000
3.1 Priorité des opérateurs
Les opérations sont évaluées en donnant la priorité aux opérateurs selon l’ordre suivant :
2
SCALab Initiation MATLAB 1 Laurent Ott
1. ()
2. ^
3. * /
4. + -
Exemple 1 :
>> 3 + 2 * 4 ^ 2
-----
16 1) Evalutation de 4^2 car ^ à la priorité sur les autres opérateurs * et +
---------
32 2) Evalutation de 2*16 car * à la priorité sur +
-------------
ans = 35 3) Pur finir, évalutation de 3+32
Exemple 2 :
>> ( ( 3 + 2 ) * 4 ) ^ 2
---------
5 1) Evalutation de 3+2 car () à la priorité sur *
----------------
20 2) Evalutation de 5*4 car () à la priorité sur ^
---------------------
ans = 400 3) Pour finir, évalutation de 20^2
A titre d’exercice, évaluer les expressions suivantes :
123∗456
1) 123+456 , vous devriez obtenir 96.8705
1
+1+1
2) 2 32 + 54 + 65 , vous devriez obtenir 0.6087
3 5 6
1
3) 12−62
+ 32 , vous devriez obtenir 0.625
1
1+( 23 ) 2
4) 12−62
, vous devriez obtenir -0.0757
4 Manipuler des variables
Une variable est un emplacement en mémoire permettant de stocker provisoirement une donnée. On réfère à
l’emplacement en mémoire par le nom que l’on donne à la variable. On pourra utiliser le contenu de la variable
(dans un calcul par exemple si la donnée stockée est une valeur numérique) ou modifier la donnée stockée à
l’emplacement mémoire.
On distingue plusieurs types de variable selon les données qu’elles servent à stocker (nombre, caractère alpha-
numérique, tableau, matrice, structure). Contrairement à d’autres langages de programmation, sous MATLAB
le type des variable n’a pas besoin d’être spécifié, MATLAB infère le type d’une variable en fonction de la
donnée que l’on y stocke.
Sous MATALB, les noms de variable doivent commencer par une lettre, sont sensibles à la casse (différenciation
des caractères majuscule/minuscule) et ne peuvent contenir aucun caractère spécial excepté le tiret bas ( ,
underscore). De même, il faut éviter d’utiliser comme nom de variable des noms déjà employés comme nom de
fonctions (par ex : min, max, exp ...). MATLAB générera également une erreur si un des mots-clés réservés
3
SCALab Initiation MATLAB 1 Laurent Ott
suivant est utilisé : for, end, if, while, function, return, elseif, case, otherwise, switch, continue, else,
try, catch, global, persistent, break. Ces mots-clés font partie de la syntaxe du langage MATLAB, nous
verrons dans la suite des exemples d’utilisation de certains de ces mots-clefs.
4.1 Utilisation d’une variable
Les variables sont créées lors de la première affectation (opération qui permet d’attribuer une valeur à une
variable).
A←0 on affecte la valeur 0 à la variable A, si A n’existait pas auparavant, elle est créée.
B ← 11 on affecte la valeur 11 à la variable B
On peut alors utiliser une variable dans un calcul ou pour affecter son contenu à une autre variable.
A←B on affecte la valeur contenue ds B à la variable A, A vaut à présent 11, B reste inchangée
A ← A + 1 on affecte la valeur contenue ds A incrémentée de 1 à la variable A, A vaut à présent 12
Sous MATLAB, l’affectation se fait à l’aide de l’opérateur =
>> A = 0
>> B = 11
>> A = B
>> A = A + 1
4.2 Quelques types de variables : nombres, vecteurs (tableau 1D), matrices (tableau 2D)
- nombres :
>>a = 0.66
>>deuxiemeNombre = 2/3
>>mon_nom_de_variable = -4
- tableau 1D en ligne :
>>rowvect1 = [1,2,3]
On sépare les éléments du vecteur par une virgule pour obtenir un agencement en ligne
>>rowvect2 = [a , mon_nom_de_variable , 12]
Nous avons ici utilisé le contenu des variables a et mon_nom_de_variable pour affecter les 2 premiers éléments
de la matrice rowvect2. Le résultat sera rowvect2 = [0.66 , -4 , 12]
- tableau 1D en colonne :
>>colvect = [1;2;3] (on sépare les éléments par un point virgule pour obtenir un agencement en colonne)
- matrice :
>>maPremiereMatrice = [1,2,3;4,5,6;7,8,9] %creation d’une matrice de dimension (3x3)
(les élements d’une même ligne sont séparés par des virgules, les lignes de la matrice sont séparées par un point
virgule)
Le caractère % permet de spécifier un commentaire dans le code : ce qui suit sur une ligne le caractère % ne
sera pas interprété par MATLAB. Les commentaires dans un code source d’un programme informatique sont
en général destinés à un lecteur humain pour aider à la compréhension du programme. Vous n’avez pas besoin
de recopier le commentaire dans les exemples sur une ligne de ce tutoriel.
4
SCALab Initiation MATLAB 1 Laurent Ott
4.3 Accès aux éléments des tableaux
Accès à un élément unique :
Pour accéder à un élément unique d’une variable de type tableau 1D, on spécifie entre paranthèses après le
nom de la variable l’indice de l’élément (l’indice peut être donner par le biais d’une variable) :
>>rowvect1(1) %accès au 1er élément de rowvect1
>>colvect(3) %3eme élément de colvect
>> ind = 2
>>rowvect1(ind) %accès au 2eme élément car ind = 2
ne fonctionne que si la variable utlisée contient un entier
>>rowvect1(end) %dernier élément
le mot-clé end permet d’accéder au dernier élement
Pour les tableaux à 2 dimensions, on spécifie entre parenthèses la position de l’élément dans le tableau en
donnant en premier la ligne puis la colonne :
>>maPremiereMatrice(2,3) %élément de la 2eme ligne, 3eme colonne
>>maPremiereMatrice(1,end) %élément de la 1eme ligne, dernière colonne
Accès à un sous-ensemble :
Si l’on souhaite extraire un sous-ensemble d’un tableau, on spécifie pour chaque dimension un tableau des
indices que l’on souhaite conserver. Pour un tableau 2D, on récupère alors l’intersection des lignes et colonnes
spécifiées.
>>rowvect1( [1,3] ) %vecteur composé du 1er et 3eme élément de rowvect1
>>maPremiereMatrice( [1,3] , [1,2] ) %Intersection des lignes 1 et 3 avec les colonnes 1 et 2
>>maPremiereMatrice([1,2],[2,3]) %matrice (2x2) extrait du coin supérieur droit de maPremiereMatrice
>>maPremiereMatrice(2,:) %2eme ligne de la matrice maPremiereMatrice
>>maPremiereMatrice(:,3) %3eme colonne de la matrice maPremiereMatrice
L’opérateur : (double point), lorsqu’utilisé pour accéder aux éléments d’un tableau, permet de conserver
tous les indices de la dimension.
L’opérateur : permet également de créer un tableau 1D en ligne de la manière suivante :
<debut>[:<incrément>]:<fin>
5
SCALab Initiation MATLAB 1 Laurent Ott
Ceci va créer un vecteur en ligne de valeurs allant de <debut> jusqu’à <fin> par pas de <incrément>.
L’incrément est optionnel. Si il n’est pas spécifié, il sera par défaut pris égal à 1.
Exemple de création de tableau avec l’opérateur :
>>D = 1:4
>>E = 0:0.1:2.5
Essayer avec 2.45 au lieu de 2.5. La valeur finale n’étant alors pas un multiple du pas. Le vecteur généré n’ira
que jusqu’à la plus proche valeur inférieure.
>>F = 10:-1:0 %fonctionne également avec un pas négatif.
Cette opération est utile pour :
— créer/initialiser des vecteurs
— accéder à des sous-ensembles de vecteurs ou matrices
>>E(1:10) %10 premiers éléments de E
>>E(end-9:end) %10 derniers éléments de E
— dans les boucles for (à venir)
Exercice : créer tout d’abord la matrice M, à partir de la commande suivante >>M = magic(10). Cette
commande va créer une matrice de dimension (10x10) ayant des propriétés particulières.
— Créer une matrice M1 composée uniquement de la première colonne de M
— Créer une matrice M2 composée uniquement de la deuxième ligne de M
— Créer une matrice M3 composée des 3 premières colonnes de M
— Créer une matrice M4 composée des 3 dernières lignes de M
— Créer une matrice M5 composée de l’intersection des 1ère, 5ème, et 7ème lignes de M et des 2ème,
4ème et 8ème colonnes de M
Vous devriez obtenir :
M5 =
99 8 51
93 2 75
5 89 32
4.4 Plus sur les matrices
4.4.1 Création de matrices spéciales
La matrice est la structure de données de base de MATLAB. Pour rappel, MATLAB a été initialement
créé comme solution de calcul matriciel (algèbre linéaire). De ce fait, MATLAB dispose de fonctions pour créer
différents types de matrices utiles.
— La fonction ones : créer une matrice dont tous les éléments sont des 1.
>>Mones1 = ones(4) %matrice de taille (4x4)
>>Mones2 = ones(10,2) %matrice de taille (10x2)
— La fonction zeros : créer une matrice dont tous les éléments sont des 0.
— La fonction rand : créer une matrice de nombres aléatoires uniformément distribué compris entre 0 et 1.
>>Mrand1 = rand(5) %matrice de taille (5x5)
>>Mrand2 = rand(2,7) * 10 + 5 %matrice de taille (2x7) de nombres compris entre 5 et 15
— La fonction randn : créer une matrice de nombres aléatoires suivant une loi normale centrée réduite.
— La fonction randperm : créer un vecteur ligne (matrice 1xn) contenant une permutation aléatoire du
nombre entier spécifié.
>>randperm(6) pourrait renvoyer le vecteur suivant
[4 1 2 5 3 6 ]
Cette fonction est très utile pour randomiser un vecteur ou les lignes ou colonnes d’une matrice.
6
SCALab Initiation MATLAB 1 Laurent Ott
4.4.2 Assemblage de matrices (concaténation)
La concatenation de matrices permet de rassembler une ou plusieurs matrices pour en créer une nou-
velle. Les crochets [] que nous avons vu plus tôt pour construire des tableaux servent également à réaliser la
concaténation. Par exemple, l’expression C = [A , B] va concaténer horizontalement les matrices A et B. Tan-
dis que l’expression C = [A ; B] va réaliser une concaténation verticale. L’opération de concaténation échoura
si les dimensions des matrices à concaténer ne sont pas compatibles, i.e. pour réaliser une concaténation hori-
zontal les matrices doivent avoir le même nombre de lignes et pour réaliser une concaténation verticale le même
nombre de colonnes.
This example constructs a new matrix C by concatenating matrices A and B in a vertical direction :
>>A = ones(2, 5) * 6; % 2-by-5 matrix of 6’s
>>B = rand(3, 5); % 3-by-5 matrix of random values
>>C = [A; B] % Vertically concatenate A and B
C =
6.0000 6.0000 6.0000 6.0000 6.0000
6.0000 6.0000 6.0000 6.0000 6.0000
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763
Pas de problème, les 2 matrices on bien le même nombre de colonnes. Essayer maintenant de faire la
concaténation horizontale, que ce passe-t-il ?
Exercice : - Utiliser les fonctions ones, zeros et rand ainsi que la concaténation de matrices pour créer
une matrice G de taille (3x10) de la forme suivante.
G =
0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0
0.5831 0.4062 0.2354 0.4088 0.9711 0.8083 0.6523 0.2193 0.3891 0.5491
A titre d’exemple d’utilisation de la fonction randperm, nous pourrions à présent souhaiter randomiser
l’ordre des colonnes de la matrice G.
>>G = G(:,randperm(10))
4.4.3 Opérations sur les matrices
Les opérations mathématiques sur les matrices suivent les règles de l’algèbre linéaire. Des contraintes sur
la taille et la forme des matrices existent pour permettre de réaliser la multiplication (avec l’opérateur *), la
division (avec l’opérateur / ou \), l’exponentiation (avec l’opérateur ^) de matrices. Dans nos applications à
nous ce ne sont en général pas ces opérations d’algèbre linéaire que nous souhaitons réaliser sur nos données.
Les opérations que nous sommes plus susceptible d’effectuer sur des matrices sont les opérations qui s’ap-
pliquent sur les éléments correspondant de 2 matrices de même dimension. Pour les vecteurs, matrices et tableaux
de dimension supérieure, les 2 opérandes doivent avoir la même taille. Chaque élément du premier opérande est
associé avec l’élément du deuxième opérande à la même position pour réaliser l’opération mathématique. Si les
opérandes sont de tailles différentes cette association d’éléments ”un à un” n’est plus possible.
Voici la liste des opérateurs ”un à un”
— 1. + L’addition et la soustraction fonctionne de la même manière qu’en algèbre linéaire
— 2. -
— 3. .* Pour la multiplication, la division et l’exponentiation, il faut adjoindre un point à l’opérateur pour
signifier que l’on souhaite effectuer l’opération élément par élément.
— 4. .^
— 5. ./
7
SCALab Initiation MATLAB 1 Laurent Ott
4.4.4 Suppression de lignes ou colonnes d’une matrice
Parfois, l’on peut vouloir supprimer certaines lignes ou certaines colonnes d’une matrice. Il y a 2 manières
de gérer ce cas. La première manière est de réaffecter à la variable contenant la matrice le sous-ensemble que
l’on souhaite garder. Par exemple, pour supprimer la 5eme ligne de la matrice H
>> H = magic(10) %créer une matrice (10x10)
>> H = H([1:4,6:end],:) %on reaffecte H en gardant toutes les lignes sauf la 5eme
La deuxième manière consiste à effecter une matrice vide aux lignes ou aux colonnes que l’on souhaite
supprimer. Par exemple,
>> I = rand(13) %créer une matrice (13x13)
>> I([1:3,:) = [] %supprimons les 3 premières lignes
>> I([:,end-4:end) = [] %supprimons les 5 dernières colonnes
5 Appeler/utiliser des fonctions de MATLAB
Prototype d’une fonction type :
[out1,out2,...] = function_name(in1,in2,...)
- une fonction peut prendre des arguments d’entrée placés entre parenthèses après le nom de la fonction (ce
sont les données à traiter).
- une fonction peut renvoyer une ou plusieurs valeurs de retour (ce sont le/les résultat(s) du traitement effectué(s)
par la fonction)
Exemple 1 : la fonction max renvoie le maximum du vecteur donné en entrée, mais elle peut aussi renvoyer
la position du maximum dans ce vecteur. Voir l’aide (>>doc max)
>>notes = [12 , 3 , 17 , 15 , 13 ]
>>max(notes) %affiche la note maximale
>>noteMax = max(notes) %stocke la note maximale ds la variable noteMax
>>[noteMax , ind] = max(notes) %ici, en plus ind contiendra la position de ’noteMax’ dans ’notes’
Exemple 2 : la fonction size renvoie un vecteur contenant la taille selon chaque dimension de la variable
passée en argument (voir l’aide >>doc size)
>>size(ind) %un scalaire est une matrice de dimension (1x1)
>>size(rowvect)
>>size(maPremiereMatrice)
>>dim = size(maPremiereMatrice) %sauvegarde du résultat ds la variable dim
>>[dim1 , dim2] = size(maPremiereMatrice)
Exercice : Créer la matrice F en utilisant la commande suivante :
>>F = []; for i=[Link]; F = [F;i:i+8]; end;
— Quelle est la dimension de la matrice F ?
— Quelle est la taille selon chaque dimension ?
— Quelle est le maximum de la deuxième ligne de F ?
Trouver une fonction et de l’aide sur son fonctionnement :
>>lookfor fourier (recherche de fonction par mot-clef, par exemple pour trouver la transformée de fourier
discrète)
>>help fft (obtenir de l’aide sur la fonction fft en ligne de commande)
>>doc fft (ouvre un browser, aide plus détaillée. Le browser contient un moteur de recherche et des menus
permettant de facilement trouver une fonction)
8
SCALab Initiation MATLAB 1 Laurent Ott
6 Ecrire des scripts M-files
Un fichier de script est un fichier externe contenant une suite d’instruction MATLAB. Les fichiers de script
ont une extension de nom de fichier .m. Les M-files peuvent être des scripts qui exécutent simplement une suite
d’instructions ou peuvent être des fonctions (nous verrons les fonctions plus loin).
Exemple : créer le script ”test script” (soit vous tapez >>edit test_script.m, soit vous faites ’File’->’New’-
>’Script’ puis ’Save As’ en spécifiant ”test script.m” comme nom) avec la suite d’instructions suivante :
clear all %efface toutes les variables du workspace
a = 1
b = 2;
c = 3, d = 4;
e = a*b/(c+d),
scal = 11;
Sauvegardez puis exécutez le script (menu Debug->Save&Run ou Fleche verte ou F5). Observez la sortie
sur la ligne de commande et conclure quant à l’utilisation des ; et ,
Il est également possible d’appeler le script depuis la ligne de commande, taper >>test_script
7 Programmer avec MATLAB
7.1 Opérateurs de comparaisons
Les opérateurs de comparaison sont :
== : égal à (x == y)
> : strictement plus grand que (x > y)
< : strictement plus petit que (x < y)
>= : plus grand ou égal à (x >= y)
<= : plus petit ou égal à (x <= y)
~= : différent de (x ~= y)
Le résultat d’une évaluation d’un test logique à l’aide d’opérateurs de comparaisons peut-être Vrai ou Faux
qui sont respectivement représentés par les entiers 1 et 0 sous MATLAB ( VRAI <==> 1 , FAUX <==> 0 ).
Exemple :
>>toto = 3 %on affecte à toto la valeur 3
>>titi = 4 %on affecte à titi la valeur 4
>>toto == 3 % égal à ?
>>toto == titi
>>toto ~= 3 % différent de ?
>>toto ~= titi
>>toto > 3 % plus grand que ?
>>toto > titi
>>toto < 3 % plus petit que ?
>>toto < titi
>>toto >= 3 % plus grand ou égal à ?
>>toto >= titi
>>toto <= 3 % plus petit ou égal à ?
>>toto <= titi
9
SCALab Initiation MATLAB 1 Laurent Ott
7.2 Opérateurs logiques
Créer 4 variables booléennes pour tester les différents opérateurs
>>a = 1; b = 0; c = 1; d = 0;
Puis tester les 3 opérateurs logiques :
- l’opérateur & (ET logique),
>>a&c
>>a&b
>>b&d
>>b&a
Un ET logique entre 2 propositions renvoie VRAI si et seulement si les deux propositions sont vraies.
- l’opérateur | (OU logique),
>>a|c
>>a|b
>>b|d
>>b|a
Un OU logique entre 2 propositions renvoie FAUX si et seulement si les deux propositions sont fausses.
l’opérateur ~ (NON logique),
>>~a
>>~b
>>~b|a
>>~(b|a)
Exemple concret : on veut savoir si un individu a 25 ans révolus et mesure moins 180cm. Si le test
(age>25) & (taille<180) retourne 1 les deux conditions sont vérifiées, si il retourne 0 au moins une des
deux conditions est fausse.
>> age = 30; taille = 170; (age>25) & (taille<180)
>> age = 24; taille = 165; (age>25) & (taille<180)
>> age = 35; taille = 185; (age>25) & (taille<180)
>> age = 20; taille = 195; (age>25) & (taille<180)
A titre d’exercice, écrire l’équation logique permettant de savoir si un individu peut avoir accès au grand
8 du parc d’attraction. Un individu a accès au manège dans les cas suivants :
- il a plus d’1m30
- il est majeur ou accompagné d’un individu majeur.
Pour cela, créer 3 variables age , taille , accompagne et testé les différents cas de figure.
Les opérateurs de comparaison et les opérateurs logiques sont utilisés essentiellement dans les instructions
de contrôle if et while.
7.3 Branchement conditionnel (IF ... THEN ... ELSE ...)
On a parfois besoin d’exécuter une séquence d’instructions seulement dans le cas où une condition donnée
est vérifiée au préalable. Différentes formes d’instruction conditionnée existent sous MATLAB.
— Forme 1
if <expression booléenne>
<suite d’instructions exécutée si l’expression est VRAI>
end
10
SCALab Initiation MATLAB 1 Laurent Ott
— Forme 2
if <expression booléenne>
<suite d’instructions 1 exécutée si l’expression est VRAI>
else
<suite d’instructions 2 exécutée si l’expression est FAUSSE>
end
L’indentation n’est pas obligatoire, mais elle permet de rendre le programme plus lisible.
— Forme 3
if <expression booléenne 1>
<suite d’instructions 1 exécutée si l’expression 1 est VRAI>
elseif <expression booléenne 2
<suite d’instructions 2 exécutée si l’expression 1 est FAUSSE
et que l’expression 2 est VRAI>
.
.
.
else
<suite d’instructions n exécutée si aucune des expressions n’est VRAI >
end
Exemple : écrire un script pile_face.m pour simuler un tirage à pile ou face
x = rand(); %renvoie un nombre aléatoire compris
% entre 0 et 1 selon une loi uniforme
if x > 0.5
disp(’pile’)
else
disp(’face’)
end
Exercice : écrire un script solve_eq_2.m réalisant la résolution d’une équation du second ordre ax2 +
bx + c = 0.
Connaissant a,b,c (variables qu’on pourra initialiser au début du script), trouver x dans l’ensemble des
nombres réels.
Rappel : √ √
- si ∆ = b2 − 4ac est supérieur à 0, alors il existe 2 solutions réelles, x1 = −b−
2a
∆
et x2 = −b+2a
∆
- si ∆ est nul, alors il existe 1 solution unique, x = −b 2a
- si ∆ est inféreur à 0, il n’y a pas de solution ds l’ensemble des réels. On affichera alors ’pas de solution’.
1
Indication : la racine carré s’obtient avec la fonction sqrt ou en élevant à la puissance 2
7.4 Boucle for
La boucle for répéte une suite d’instruction un nombre prédéterminé de fois. Sa structure est la suivante :
for var = <list-of-values>
<suite d’instruction>
end
La boucle for va executer la <suite d’instruction> pour chaque élément de la <list-of-values> en
affectant l’élément à la variable var.
11
SCALab Initiation MATLAB 1 Laurent Ott
Exemple 1 :
i = 0;
for k = 0:0.1:1
i = i + 1;
disp([’Iteration ’,num2str(i),’, k vaut ’,num2str(k)]);
end
En général, la liste de valeurs sert à indexer un vecteur (ou matrice), on doit alors se limiter à des valeurs
entières.
Exemple 2 : (on rajoute plus 2 à tout le monde) :
note1 = [ 4 , 12 , 7 , 15 , 12 ]
for i = 1:length(note1) %voir l’aide de length
note1(i) = note1(i) + 2;
end
Exemple 3 : calcul de moyenne sur un vecteur. Ecrire le script suivant
note2 = [ 4 , 18 , 7 , 15 , 12 ]
somme = 0;
for i = 1:length(note2)
%on fait la somme des notes
somme = somme + note2(i);
end
%on divise la somme des notes par le nombre de notes
moyenne = somme / length(note2)
Il existe bien entendu dans MATLAB des fonctions permettant le calcul direct d’une moyenne, ce n’est
qu’un exemple. Pour info, >>moyenne2 = mean(note2)
Exercice :
1) Écrire un script qui cherche le maximum d’un vecteur sans utiliser la fonction max. Pour se faire,
initialiser une variable maxi avec le premier élément du vecteur, puis écrire une boucle for qui passera
en revue chaque élément du vecteur et qui testera si celui-ci est supérieur à maxi, si il est supérieur, on
mettra à jour maxi avec l’élément courant du vecteur. Ainsi une fois tout le vecteur parcouru, maxi devrait
contenir la valeur maximum du vecteur.
2) Modifier le script pour également sauvegarder la position du maximum dans le vecteur.
7.5 Boucle while
Il arrive que nous souhaitions répéter une suite d’instructions jusqu’à qu’une condition soit satisfaite. Si l’on
ne connait pas le nombre d’itérations nécessaire à l’avance, une boucle while est préférable par rapport à une
boucle for
while <expression booléenne>
<suite d’instructions>
end
La <suite d’instructions> va être répétée tant que l’<expression booléenne> est vrai, ou dit autrement
jusqu’à ce que l’<expression booléenne> soit fausse.
Exemple 1 : on cherche le premier élément négatif d’un vecteur
vec = [1,1,1,1,1,1,-1,1,-1]
12
SCALab Initiation MATLAB 1 Laurent Ott
i = 1;
while vec(i) >= 0 %tant que vec(i) est supérieur à 0
i = i+1; %on incrémente i pour regarder l’élément suivant de vec
end
i %indice du premier élément négatif
vec(i) %premier élément négatif
Réessayer avec vec = [1,1,1,1,1,1,1,1,1], que ce passe-t-il ?
Modifions le script pour prendre en compte ce cas limite :
vec = [1,1,1,1,1,1,-1,1,-1]
i = 1;
while (i <= length(vec)) && (vec(i) >= 0)
i = i+1;
end
if i <= length(vec)
disp( [’i = ’ ,num2str(i)] )
disp( [’vec(i) = ’ ,num2str( vec(i) )] )
else
disp(’Tous les éléments sont positifs’)
end
Réessayer avec vec = [1,1,1,1,1,1,1,1,1]
7.6 Instructions break
L’instruction break : provoque l’arrêt de la première boucle for, while englobante.
L’instruction for ci-dessous est stoppée au premier i tel que t(i) est nul :
t = -2:10;
for i = 1:length(t)
if t(i) == 0
break;
end
end
disp( [’i = ’ ,num2str(i)] )
disp( [’t(i) = ’ ,num2str( t(i) )] )
7.7 Instructions continue
L’instruction continue : dans une instruction for, while, l’instruction continue provoque l’arrêt de
l’itération courante, et le passage au début de l’itération suivante.
Supposons que l’on parcoure un tableau t pour réaliser un certain traitement sur tous les éléments, sauf
ceux qui sont négatifs :
for i = 1:length(t)
if (t(i) < 0 )
continue; % on passe au i suivant dans le for
end
... % traitement de l’élément courant
end
13
SCALab Initiation MATLAB 1 Laurent Ott
Numéros Element du M-file Description
(1) Ligne de définition Définie le nom de la fonction ainsi
de fonction que le nombre et l’ordre des arguments d’entrée et de sortie
(2-5) Texte d’aide Description du programme qui sera
affichée lorsqu’on demandera de l’aide sur la fonction
(6+) Corps de la fonction Code de la fonction réalisant les calculs nécessaires.
Table 1 – Détail des éléments constituant une fonction MATLAB
8 Création d’une fonction
Nous avons évoqué précédemment l’utilisation de fonctions MATLAB préprogrammées telle la fonction
max() et size(). Tout comme pour les scripts, il est possible de créer ses propres fonctions au sein d’un M-file.
Contrairement aux scripts, les fonctions peuvent accepter des données en entrée et renvoyer des données en
sortie. Chaque fonction a son propre espace en mémoire et ne voie pas les données du workspace. Seules les
données qu’on aura spécifié comme arguments d’entrée seront utilisables par la fonction.
A titre d’exemple, nous allons créer une fonction de calcul de moyenne. Ds le répértoire courant, créer le
fichier myMean.m (>>edit myMean.m) contenant le code suivant :
function [mu,minv,maxv] = myMean( tab ) (1)
%MYMEAN(TAB) calcul de moyenne sur un tableau 1D (2)
%Pour un tableau ’tab’ à 1 dimension [mu,minv,maxv] = myMean( tab ) (3)
%retourne la moyenne ’mu’, le minimum ’minv’ le maximum ’maxv’ des (4)
%éléments de ’tab’. (5)
mu = 0; (6)
for i = 1:length(tab) (7)
mu = mu + tab(i); (8)
end (9)
mu = mu / length(tab); (10)
minv = min(tab); (11)
maxv = max(tab); (12)
La première ligne d’une fonction commence avec le mot-clé function. Cette ligne donne le nom de la fonction
ainsi que la liste des arguments d’entrée et de sortie. Dans le cas de cette fonction, elle ne prend qu’un seul
argument en entrée mais peut renvoyer de 1 à 3 valeurs. Il est possible mais pas obligatoire de rajouter en
commentaires sous la première ligne de définition de la fonction un descriptif de ce que fait la fonction. Ces
lignes en commentaires seront affichés lorsqu’on demandera de l’aide sur la fonction. Il est important de noter
que le nom du fichier .m contenant notre fonction doit être formé du nom de la fonction suivi de l’extension .m
. Pour notre exemple de calcul de moyenne, le fichier devra obligatoire s’appeler myMean.m.
Le tableau 1 donne un récapitulatif des éléments constituants une fonction MATLAB.
- Créer un vecteur (par ex, >>note = [2,18,5,15] ) et appeler la fonction myMean() des manières suivantes :
>>myMean(note)
>>a = myMean(note)
>>[a,b] = myMean(note)
>>[a,b,c] = myMean(note)
- Essayer d’accéder à l’aide (>>help myMean)
14
SCALab Initiation MATLAB 1 Laurent Ott
Exercices :
— Ecrivez une fonction de conversion de degrés Fahrenheit vers des degrés Celsius. (Rappel : C =
5
9 (F − 32))
— Ecrivez une fonction prenant 2 arguments d’entrée et 2 arguments de sortie qui permettra de
déterminer la taille en cm et le poids en kg d’une personne à partir de sa taille en pouces (1 in
= 2.54 cm) et son poids en livres (1 lb = 0.453 kg).
9 Graphique 2D
9.1 Fonction élémentaire
On souhaite afficher la fonction y = sin(3πx) sur 0 < x < 1. Pour cela, on évalue un certain nombre de
points sur l’intervalle.
>>N = 10; h = 1/N; x=0:h:1
>>y = sin(2*pi*x)
Pour afficher les données sur un graphique, on utlise la fonction plot(). Elle prend un ou 2 tableaux 1D en
entrée. Si utilisée avec 2 tableaux, ceux-ci doivent être de même taille.
>>figure(1), plot(y)
>>figure(2), plot(x,y)
Comparez les figures 1 et 2, et conclure quant à l’utilisation d’1 ou 2 tableaux.
La fonction figure permet de créer un nouvelle fenêtre pouvant contenir des graphes
Il peut être utile de fermer toutes les fenêtres de graphique en début de script. Pour cela, on appelle la
fonction close all
Effectuer un nouvel affichage pour N = 100
9.2 Titres, labels et grille
Pour rajouter un titre et des labels d’axes à notre figures, on utilise
>>title(’Graph de y = sin(3 pi x)’)
>>xlabel(’Axe x’)
>>ylabel(’Axe y’)
Une grille en pointillés peut égalment être rajoutée
>>grid on %affichage de la grille
>>grid off %masquage de la grille
9.3 Styles de ligne et couleurs
Par défaut, les lignes sont bleues en trait plein. Il est possible de modifier le style et la couleur de la
ligne en rajoutant un 3ème argument à la fonction plot(). La figure 2 présente les couleurs et styles de ligne
disponibles ainsi que les codes associés. Par exemple, pour afficher notre courbe avec un point vert par donnée,
nous utiliserons l’option ’g.’.
>>plot(x,y,’g.’)
15
SCALab Initiation MATLAB 1 Laurent Ott
Figure 2 – Styles de ligne
9.4 Plusieurs courbes sur le même graphique
Un nouvel appel de la fonction plot efface le graphique précédent. Ce n’est pas souhaitable si l’on souhaite
afficher plusieurs courbes sur le même graphe. Pour empécher MATLAB d’effacer le graphe, on utilise hold on
>>plot(x,sin(3*pi*x),’r-’), hold on
>>plot(x,cos(3*pi*x),’kx’)
>>title(’Plusieurs courbes’), xlabel(’Axe x’),ylabel(’Axe y’)
>>legend(’Sinus’,’Cosinus’)
Une légende peut être affichée donnant la liste des styles de lignes suivie de la description spécifiée par
l’utilisateur
9.5 Affichage de plusieurs graphes côte à côte (subplot)
Une fenêtre d’un graphique peut être divisée en sous-fenêtres suivant un tableau de dimension (mxn). On
peut alors afficher dans chaque sous-fenêtre une ou plusieurs courbes. Les fenêtres sont indexées de 1 à m · n en
ligne en partant du coin supérieur gauche. (subplot(2,2,k), pour la k ième fenêtre d’un tableau (2x2)). Les
instructions hold et grid fonctionnent sur le subplot courant
Exemple :
>>subplot(2,2,1), plot(x,sin(3*pi*x))
>> ylabel(’sin 3 pi x’)
>>subplot(2,2,2), plot(x,cos(3*pi*x))
>> ylabel(’cos 3 pi x’)
>>subplot(2,2,3), plot(x,sin(6*pi*x))
>> ylabel(’sin 6 pi x’)
>>subplot(2,2,4), plot(x,cos(6*pi*x)), hold on, plot(x([Link]nd),cos(6*pi*x([Link]nd)),’r.’)
>> ylabel(’sin 6 pi x’)
16
SCALab Initiation MATLAB 1 Laurent Ott
Figure 3 – Liste des fonctions graphiques 2D
17