Vous êtes sur la page 1sur 19

Annexe 1 :

INITIATION A MATLAB
(Gnralits, les scalaires, les vecteurs, les matrices, graphisme, fonctions, boucles)

I. Introduction:
MATLAB est labrviation de MATtrix LABoratory , cest une application tant
initialement dvelopp afin de fournir un environnement de calcul matriciel simple, efficace,
interactif et portable, permettant la mise en uvre des algorithmes dvelopps. Il est crit
principalement en langage C et C++ et distribu par la socit The MathWorks (voir le site
www.mathworks.com). Il fonctionne dans plusieurs environnements tels que UNIX/X-
Windows,Windows, Macintosh.

Le logiciel offre des outils pour raliser des changes avec des programmes externes et traiter
des jeux de donnes, il propose galement des options pour enregistrer une suite de calculs,
matire constituer ensuite un rapport technique.

MATLAB est constitu d'un noyau relativement rduit, capable d'interprter puis d'valuer les
expressions numriques matricielles qui lui sont adresses :
- Soit directement au clavier depuis la fentre de commande.
- Soit sous forme de squences dexpressions ou scripts enregistres dans des fichiers texte
appels m-files et excutables depuis la fentre de commande.
Ce noyau est complt par une bibliothque de fonctions prdfinies, trs souvent sous forme
de m-files.

Cest un fascicule, pour une premire approche de MATLAB, ou comme outil


daccompagnement dans un cours o lon utilise MATLAB pour effectuer les calculs. Il
suppose des connaissances en gomtrie lmentaire, en algbre et en calcul.

1
II. Gnralits
1. Environnement de travail

2. Commande gnrales
Comme tout langage de programmation, Matlab permet de dfinir des donnes variables. Les
variables sont dfinies au fur et mesure que l'on donne leurs noms (identificateur) et leurs
valeurs numriques ou leurs expressions mathmatiques. Matlab ne ncessite pas de
dclaration de type ou de dimension pour une variable. Les variables sont stockes dans
l'espace de travail (ou workspace) et peuvent tre utilises dans les calculs subsquents. Pour
obtenir la liste des variables actives de l'espace de travail on dispose des commandes who et
whos.
who Affiche le nom des variables ;
whos Affiche le nom, le type et les dimensions des variables ;
Pwd Connaitre le rpertoire courant ;
Dir lister le contenu dun rpertoire ;
Cd changer le rpertoire courant ;
help permet de donner laide sur un problme donn.

>> help cos


COS Cosine.
COS(X) is the cosine of the elements of X.

clear permet de nettoyer l'espace de travail: Toutes les variables gardes en mmoire
sont dtruites. Il est possible de ne dtruire qu'une partie des variables en tapant clear
nom-variable1 nom-variable2 noms des variables dtruire.
clc de mme permet deffacer (nettoyer) lcran.
save suivie du nom fname permet de sauvegarder toutes les variables de lespace de
travail dans un fichier binaire fname.mat pour utilisation future.

2
load fname.mat permet de rcuprer les donnes sauvegarder

Citons enfin quelques fonctions logiques. Les commandes all et any servent tester si les
lments d'un vecteur sont nuls ou non. Si v est un vecteur de valeurs numriques, all(v)
retourne vrai (1) si tous les lments du vecteur sont diffrents de 0 et faux (0) si au moins un
lment vaut 0. any(v) retourne vrai (1) si au moins un lment du vecteur est diffrent de 0 et
faux (0) si le vecteur est compos exclusivement de 0.

III. Oprations sur les scalaires :

1. Oprations usuelles

Addition (+) Soustraction (-) Division (/) Multiplication (*) Exposant (^)

Entrer les commandes suivantes :


>> x=3 , y=4 , z=x^y
x =
3
y =
4
z =
81

>> x=3 ; y=4 ; z=x^y % On peut aussi sparer les commandes par ;
z=81
% Dans ce cas les rsultats intermdiaires ne seront pas affichs
%Pour connatre la valeur dune variable, il suffit de taper son nom :
>> x
x= 3

2. Variables & valeurs particulires

>> p=pi
%La variable pi contient la valeur de pi=3.1415.
p=3.1416

- Les variables i et j sont initialises par racines carre de (-1) pour reprsenter les nombres
complexes de la forme (a+ib).

>> z1=3+2*i,z2=3+2*j ou bien >> z1=3+2i, z2=3+2j


z1= z1 =
3.0000+2.0000i 3.0000 + 2.0000i
z2= z2 =
3.0000+2.0000i 3.0000 + 2.0000i

Inf reprsente linfini (exemple : 5/0 donne Inf). Rq : Inf = inf.


NaN (Not a Number) est le rsultat dune expression non dfinie (exemple : 0/0 donne NaN).
abs (x) permet de donner la valeur absolue ou le module de x.
ans : MATLAB utilise ans (pour dire answer) quand une expression est calcule mais nest
pas affecte une variable.
eps : fournit la valeur ( = 252 2.2204 .1016).
realmin : plus petit nombre virgule flottante manipulable (realmin = 2.2251e-308).
realmax : plus grand nombre virgule flottante manipulable (realmax = 1.7977e+308).

3
Effectuer les commandes suivantes et vrifier les rsultats donns :

>> x1 = - 3 ; x2 = 3 + 4*j ; y1= abs(x1), y2 = abs(x2), y1+y2


y1 =
3 % Valeur absolue de x1
y2 =
5 % Module de x2

% On na pas spcifi le nom de la variable correspondant y1+y2


ans =
8

Remarque :
Il est prfrable dutiliser lexpression z=3+4j (ou z=3+4i) au lieu de z=3+4*j (ou z=3+4*i)
car il arrive de donner aux variables i et j des valeurs au pralable, dans ce cas le calcul ne
donnera pas un nombre complexe.
Inf, NaN et ans peuvent aussi tre affectes des valeurs pralables.

>> i=2 ; z1= 2+5*I >> i=2 ; z2= 2+5i


z1= z2 =
12 2.0000 + 5.0000i

- Lorsque la fonction est dfinie sur le corps des nombres complexes l'argument peut tre de
type complexe. On dispose galement de fonctions spcifiques aux complexes :
conj(z) : Le conjugu de z.
angle(z) : Argument de z.
real(z) : Partie relle de z.
imag(z) : Partie imaginaire de z.
complex(x,y) : dfinit un nombre complexe avec x est la partie relle et y, la partie
imaginaire.

3. Commandes utiles

>> rst=rem(3,2)
% le reste (remainder) de la division entire de deux entiers
rst =1

Les commandes lcm(m,n) et gcd(m,n) retournent respectivement le plus petit multiple


commun et le plus grand commun diviseur deux entiers m et n.
factor(n) permet d'obtenir les termes de la dcomposition en facteurs premiers de l'entier n.

>> f=factor(60)
f =
2 2 3 5

- Les fonctions mathmatiques incorpores sont:


log(x) : Logarithme nperien de x.
log10(x) : Logarithme en base 10 de x.
exp(x) : Exponentielle de x.
sqrt(x) : Racine carre de x (s'obtient aussi par x.^0.5).
sign(x) : Fonction valant 1 si x est positif ou nul et -1 sinon.

4
- Les fonctions trigonomtriques et hyperboliques sont:
cos : Cosinus.
acos : Cosinus inverse (arccos).
sin : Sinus.
asin : Sinus inverse (arcsin).
tan : Tangente.
atan : Tangente inverse (arctan).
cosh : Cosinus hyperbolique (ch).
acosh : Cosinus hyperbolique inverse (argch).
sinh : Sinus hyperbolique (sh).
asinh : Sinus hyperbolique inverse (argsh).
tanh : Tangente hyperbolique (th).
atanh : Tangente hyperbolique inverse (argth).

4. Affichage & saisie

Affichage dun message lcran avec linstruction disp :


>> disp('BIENVENU') %Affiche BIENVENU sur lcran
%Affiche cest mon premier test sur lcran
>> disp('c''est mon premier test')

Linstruction disp permet aussi dafficher sur lcran le contenu dune variable sans prciser
son nom :

>> a=4 ; b=2 ; c = a/b ; c >> a=4 ; b=2 ; c = a/b ; disp(c)


c=
2 2

- Saisie une donne avec linstruction input :

>> x = input('Valeur de x =')% Affiche sur lcran Valeur de x =


% et attend la saisie de linformation.
>> A = input('Valeur de A =') %Affiche sur lcran Valeur de A =
Valeur de A = 5 % Introduite partir du clavier

5
IV. Opration sur les vecteurs :
1. Cration dun vecteur ligne:

Vrifier les rsultats des commandes suivantes :

>> a=[1 3 5 7] >> b=[1,3,5,7]


a = b =
1 3 5 7 1 3 5 7

>> d2=[1:7] >> c=[1:2:7]


d2= c =
1 2 3 4 5 6 7 1 3 5 7

La cration de c se fait en allant de 1 7 avec un pas de 2, retaper de nouveau le vecteur c en


omettant les crochets [ ]. Est-ce que cest pareil pour a et b ?

Pour crer un vecteur d1 (allant de 1 7) avec un pas de 1, il suffit de remplacer dans le


vecteur c 2 par 1.

2. Cration dun vecteur colonne:

Vrifier le rsultat des commandes suivantes :

>> v=[2 ; 4 ; 6 ; 8] >> v = 2


4
6
8

On peut aussi crer un vecteur ligne et le transposer, on ajoute pour cela un apostrophe .

>> w=[2 :2 :8] >> w=2


4
6
8

- Accder un lment dun vecteur en indiquant son indice entre parenthses.

>> a4 = a(4), b3 = b(3), c2 = c(2), v1 = v(1)


a4 = 7 % on accde un lment dun vecteur
b3 = 5 % en indiquant son indice entre parenthses.
c2 = 3
v1 = 2

Ce qui permet entre autres de modifier un lment (une composante) dun vecteur (ligne ou
colonne).

>> x=[1 5 10 20]


x =
1 5 10 20
>> x(4)=15
x =
1 5 10 15

6
3. Les oprations lment par lment (mme dimension des vecteurs):

Addition (+) Soustraction (-) Division (. /) Multiplication (. *) Multiplicatrice (. ^)

Donner les deux instructions suivantes une une et commenter les rsultats :

>> a=[1 3 5 9];b=[0 2 4 6];c=a.b


>> e=[1 3 5 9];f=[0 2 4 6];g=e.*f

- Soit x un vecteur, on peut lui appliquer les fonctions suivantes :


max(x) : Plus grand lment.
min(x) : Plus petit lment.
sum(x) : Somme des lments.
prod(x) : Produit des lments.
mean(x) : Moyenne des lments.
sort(x) : Classement des lments par ordre croissant.

Vrifier alors les commandes suivantes :


>> x=[16 8 -9 1] ;
>>m=min(x) >> M=max(x) >> P=prod(x)
m = M = P=
- 9 16 -1152
>> S = sum(x) >> Moy=mean(x) >> tri=sort(x)
S= M= tri=
1 6 4 -9 1 8 1 6
>> l=length(x)
l = % La plus grande dimension dun vecteur constitue sa longueur
4

Si p est un vecteur, alors la commande polyval(p,x0) permet de dterminer limage de x0 par


la fonction polynomiale dont les coefficients sont les lments de p. Vrifier alors que pour
p=[1 1 1], p(2)=7 ?

Remarque :
Si on considre un vecteur x = [2*pi :0.1 :2*pi], alors y= cos(x) est un vecteur de mme
dimension form par le cosinus de chaque lment de x, de mme pour les autres fonctions
sin, tan,
Sil arrive de multiplier par exemple le vecteur y1= cos(x) par y2 = sin(x), il ne faut pas
oublier le . , car la multiplication de ces deux vecteurs se fait point par point.

7
V. Opration sur les matrices
1. Cration dune matrice & sa transpose

>> M= [1 2 3 ; 4 5 6 ; 7 8 9] >> TM=M

M= TM=
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9

Comme pour les vecteurs, les oprations addition, soustraction, multiplication et puissance
restent valables. Il faut toujours faire la diffrence entre ( * ) et ( .* ) ou ( ^ ) et ( .^ ).

Excuter les commandes suivantes :

>> P=M*TM >> Q=M.*TM


P = Q=
14 32 50 1 8 21
32 77 122 8 25 48
50 122 194 21 48 81

2. Commandes utiles pour les matrices

Soit M une matrice, on peut lui appliquer les fonctions suivantes :


det(M) : Dterminant de M.
inv(M) : Inverse de M.
eig(M) : Valeurs propres de M donnes sous forme dun vecteur colonne.
size(M) : Nombre de ligne et nombre de colonne de M donns sous forme
dun vecteur ligne (size est aussi applicable un vecteur ou un scalaire).
poly(A): renvoie les coefficients du polynme caractristique associ la matrice carre A.

On sera vigilant l'ordre dans lequel sont rangs les coefficients : le premier lment du
vecteur est le coefficient du monme de plus haut degr. Ainsi dans l'exemple suivant il faut
lire p(x) = x3 p1 x2 p2 x p3.

Vrifier les proprits prcdentes avec les instructions suivantes :

>> E=[3 4 ; 5 10] >> IE=inv(E)


E = IE =
3 4 1.0000 -0.4000
5 10 -0.5000 0.3 000

>> vp = eig(E) >> D = det(E)


vp = D =
0.8211 10
12.1789

>> s= size(E) >>a=2 ; v=1 : 5 ; sa=size(a) , sv=size(v)


s= sa = sv=
2 2 1 1 1 5

>> A = [1 2 3 ; 4 5 6 ; 7 8 0]; p = poly(A)


p =
-6 -72 -27

8
3. Matrices utiles :

ones(n) : Donne une matrice (n*n) dont tout les lments sont gaux 1.
ones(m,n) : Donne une matrice (m*n) dont tout les lments sont gaux 1.
zeros(n) : Donne une matrice (n*n) dont tout les lments sont gaux 0.
zeros(m,n) : Donne une matrice (m*n) dont tout les lments sont gaux 0.
eye(n) : Donne une matrice identit.
rand(m,n):une matrice m lignes et n colonnes dont les lments sont gnrs de manire
alatoire entre 0 et 1
A = [] dfinit une matrice vide.

>> O=ones(2,3) >>Z=zeros(3,2)


O = Z=
1 1 1 0 0
1 1 1 0 0
0 0

4. Accder aux lments dune matrice

Soit A une matrice, soit i lindice de ligne et j lindice de colonne :


A( i,j) est llment de A se trouvant la ligne i et la colonne j.
A( :, j) : est la jme colonne.
A(i, :) : est la ime ligne.
A( :, :) : est la matrice A.
A( :, j :k) : est la partie de A allant de la jme colonne la kime colonne.
A( :) : est le vecteur form par les colonnes de A places les unes la suite des autres.
A(j) : est llment de rang j dans cette liste et
A(j :k) donne les lments de rang j au rang k .

A = B=
14 32 50 1 8 21
32 77 122 8 25 48
50 122 194 21 48 81

Vrifier les rsultats suivants :


>> a = A(2,3) >> b=B(1,3)
a= 122 b= 21

>>va=A( :,2) >>vb=B(3, :)


va= 32 vb= 21 48 81
77
122

La liste des oprations matricielles est disponible dans laide :>> help elmat
La commande who affiche le nom des variables actives, tandis que la commande
whos donne plus d'informations: le nom, la taille du tableau (nombre de lignes et de colonnes)
associ, l'espace mmoire utilis (en Bytes) et la classe des donnes (principalement double
array s'il s'agit d'un tableau de valeurs relles ou complexes et char s'il s'agit d'un tableau de
caractres).
>> P=B(2:3,2:3)
P =
25 48
48 81

9
VI. Programmer sous Matlab
1. Scripts
Il est possible d'enregistrer une squence d'instructions dans un fichier (appel un M-file) et
de les faire excuter par Matlab. Un tel fichier doit obligatoirement avoir une extension de la
forme .m (d'o le nom M-file) pour tre considr par Matlab comme un fichier d'instructions.
On distingue deux types de M-file, les fichiers de scripts et les fichiers de fonctions. Un script
est un ensemble d'instructions Matlab qui joue le rle de programme principal. Si le script est
crit dans le fichier de nom nom.m on l'excute dans la fentre Matlab en tapant nom. Il est en
effet beaucoup plus simple de modifier des instructions dans un fichier l'aide d'un diteur de
texte que de retaper un ensemble d'instructions Matlab dans la fentre de commande.

2. Fonctions
Une fonction nom est en gnral dfinie dans un m-fichier (appel gnriquement nom.m) qui
commence par une ligne de la forme :

Syntaxe

function function [out1,... ,outn]=name(in1 ,... ,inm)


squence d'instructions

O :

out1,...,outn sont les variables de sortie ;


in1,...,inm sont les variables dentre.
squence d'instructions est le corps de la fonction.

function y = eff(x)
% eff Calcul de la valeur efficace
% Pour un vecteur eff(x) donne la valeur efficace
% Pour une matrice, eff(x) donne un vecteur contenant
% la valeur efficace de chaque colonne.
m = length(x);
y=sqrt(sum(x.*x)/m);

Si la fonction est contenue dans un fichier eff.m on pourra lappeler par eff dans la ligne de
commande, dans un autre fichier M ou dans une autre fonction utilisateur :

v = [1; 2; 3];
val_effy = eff(v)
val_eff =
2.1602

Remarques

les commentaires dentte donns dans la fonction eff seront affichs lcran lorsquon
tape help eff ;
la fonction nest accessible que si le fichier qui la dfinit se trouve dans le rpertoire courant
ou dans un rpertoire inclus dans le path (help addpath ou helppath pour plus de dtails).

10
Quand une fonction est appele, MATLAB cre un espace de travail local. Les commandes
situes lintrieur de la fonction ne peuvent pas se rfrer aux variables de lespace de
travail global (interactif) moins que ces variables ne soient passes comme paramtres
dentre. Les variables utilises dans une fonction sont effaces la fin de son excution,
moins quelles ne soient retournes comme paramtres de sortie.

Remarque

- Chaque fonction MATLAB dispose de ses propres variables locales, qui sont disjointes
de celles des autres fonctions et de celles de lespace de travail. Cependant, si plusieurs
fonctions (et ventuellement lespace de travail) dclarent une mme global variable
comme global, alors elles partagent toutes une copie de cette variable.
- Toute modification de la variable dans une des fonctions se rpercute toutes les
fonctions dclarant cette variable comme globale.
- Si le fichier ne commence pas par le mot-cl function on a tout simplement crit un
script!
- Lexcution dune fonction sarrte gnralement quand la fin de son return code source
est atteinte. Nanmoins, linstruction return peut tre utilise pour forcer une interruption
prmature (quand une certaine condition est satisfaite).

VII. Affichage graphique


1 Gestion des fentres graphiques

Une instruction graphique ouvre une fentre dans laquelle est affich le rsultat de cette
commande. Par dfaut, une nouvelle instruction graphique sera affiche dans la mme fentre
et crasera la figure prcdente. On peut ouvrir une nouvelle fentre graphique par la
commande figure. Chaque fentre se voit affecter un numro n. Ce numro est visible dans le
bandeau de la fentre sous forme d'un titre. Le rsultat d'une instruction graphique est par
dfaut affich dans la dernire fentre graphique ouverte qui est la fentre graphique active.
On rend active une fentre graphique prcdemment ouverte en excutant la commande
figure(n), o n dsigne le numro de la figure.
La commande close permet de fermer la fentre graphique active. On ferme une fentre
graphique prcdemment ouverte en excutant la commande close(n). Il est galement
possible de fermer toutes les fentres graphiques en tapant close all.

2 Graphisme 2D

2.1 Tracer le graphe dune fonction ; la commande fplot

La commande fplot permet de tracer le graphe d'une fonction sur un intervalle donn. La
syntaxe est :

fplot('nomf', [xmin , xmax])

O :

nomf est soit le nom d'une fonction Matlab incorpore, soit une expression dfinissant une
fonction de la variable x, soit le nom d'une fonction utilisateur.
[xmin , xmax] est l'intervalle pour lequel est trac le graphe de la fonction.

11
%le graphe de la fonction incorpore sinus entre 2 et 2 par
%l'instruction :
>>fplot('sin',[-2*pi 2*pi]).

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-6 -4 -2 0 2 4 6

2.2 Tracer un vecteur en fonction dun autre ; la commande plot(X,Y)


Cette commande trace lcran Y en fonction de X , o X et Y sont des vecteurs de mme
longueur.. Par dfaut, les points seront relis entre eux; on peut toutefois choisir dafficher
uniquement les points : plot(X,Y,o) (dautres caractres sont possibles comme (x, ., *
et +). Si X est omis, alors les lments de Y seront tracs en fonction de leur rang dans le
vecteur.
stem(X,Y) affiche des signaux a temps discret.
semilogx(X,Y), semilogy(X,Y) ou loglog(X,Y)utiliss pour une chelle logarithmique .

3 Ajout de texte au graphique

title(Ceci est le titre affich) utilis pour laffichage dun titre,


xlabel(identification de laxe x) et ylabel(axe y) utilis pour lidentification des axes.
hold, hold on, hold off garder le graphique sur lcran (pour tracer plusieurs courbes sur le
mme graphique)
gtext(Valeur absolue) ajouter du texte au graphique avec la souris
legend(sortie relle,sortie simule) ajouter une lgende
grid trace des lignes de rfrence sur le graphique.
axis permet de fixer les bornes des abscisses et ordonnes du graphique.

12
t=0:0.01e-3:0.06;
y=10*exp(-60*t).*cos(120*pi*t);
z=10*exp(-60*t).*sin(120*pi*t);
plot(t,y,r,t,z,g),grid
a=10*exp(-60*t);
hold
plot(t,a,b-)
plot(t,-a,b-)
title(Fonctions sinusoidales amorties)
xlabel(Temps , s),ylabel(Tension , V)

Fonctions sinusoidales amorties


10

2
Tension , V

-2

-4

-6

-8

-10
0 0.01 0.02 0.03 0.04 0.05 0.06
Temps , s

hold off
plot(y,z),grid
axis equal
xlabel(y),ylabel(z)

13
6

2
z

-2

-4

-6 -4 -2 0 2 4 6 8 10
y

VIII. Instructions de contrle


Les instructions de contrle sous Matlab sont trs proches de celles existant dans d'autres
langages de programmation.

1 Boucle for : parcours d'un intervalle

Une premire possibilit pour excuter une squence d'instructions de manire rpte
consiste effectuer une boucle pour les valeurs d'un indice, incrment chaque itration,
variant entre deux bornes donnes. Ce processus est mis en uvre par la boucle for.
Syntaxe :
For indice=borne_inf :borne_sup
squence d'instructions
end

O :
indice est une variable appele l'indice de la boucle;
borne_inf et borne_sup sont deux constantes relles (appeles paramtres de la boucle);
squence d'instructions est le traitement effectuer pour les valeurs d'indices variant entre
borne_inf et borne_sup avec un incrment de 1. On parle du corps de la boucle.

Interprtation :

Si borne_inf est plus petit ou gal borne_sup, le traitement squence d'instructions est
excut borne_sup - borne_inf fois, pour les valeurs de la variable indice gales borne_inf,
borne_inf+1, ..., borne_sup. Si borne_inf est strictement plus grand que borne_sup, on passe
l'instruction qui suit immdiatement l'instruction de fin de boucle end.

14
Remarque :

L'indice de boucle ne prend pas ncessairement des valeurs entires. D'autre part il n'est pas
ncessaire que l'indice de la boucle apparaisse dans le corps de la boucle; par contre il est
interdit de modifier sa valeur s'il apparat. Il est possible d'imbriquer des boucles mais elles ne
doivent pas se recouvrir. On peut utiliser un incrment (pas) autre que 1 (valeur par dfaut).
La syntaxe est alors borne_inf : pas : borne_sup. Le pas peut tre ngatif. Attention bien
grer la borne suprieure! Voici un exemple venant illustrer les possibilits de variations de
l'indice de la boucle.

>> for r=1.1 :-0.1 :0.75 disp(['r = ', num2str(r)]); end


r = 1.1
r = 1
r = 0.9
r = 0.8

8.2 Boucle while : tant que . . . faire


Une seconde possibilit pour excuter une squence d'instructions de manire rpte consiste
effectuer une boucle tant qu'une condition reste vrifie. On arrte de boucler ds que cette
condition n'est plus satisfaite. Ce processus est mis en uvre par la boucle while.

Syntaxe :

while expression logique


squence d'instructions
end

O :
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions est le traitement effectuer tant que expression logique est vraie.

Interprtation :

Tant que expression logique est vraie le traitement squence d'instructions est excut sous
forme d'une boucle. Lorsque expression logique devient faux, on passe l'instruction qui suit
immdiatement l'instruction de fin de boucle end.

Remarque :

expression logique est en gnral le rsultat d'un test (par exemple i < Imax) ou le rsultat
d'une fonction logique (par exemple all(x)). Il est impratif que le traitement de la squence
d'instructions agisse sur le rsultat de expression logique sans quoi on boucle indfiniment.
Voici comment calculer n! avec une boucle while :

>> n = 4; k = 1; nfac = 1;
>> while k <= n nfac = nfac*k; k = k+1; end
>> nfac
nfac =
24

15
8.3 L'instruction conditionne if

On a parfois besoin d'excuter une squence d'instructions seulement dans le cas o une
condition donne est vrifie au pralable. Diffrentes formes d'instruction conditionne
existent sous Matlab. L'instruction conditionne la plus simple a la forme suivante :

Syntaxe :

If expression logique
squence d'instructions
end

O :
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions est le traitement effectuer si expression logique est vraie.

Interprtation :

La squence d'instructions n'est excute que si le rsultat de l'valuation de l'expression


logique est vraie (c'est--dire vaut 1). Dans le cas contraire on excute l'instruction qui suit le
mot cl end. Dans le cas o l'expression logique est vraie, aprs excution de la squence
d'instructions on reprend le programme l'instruction qui suit le mot cl end.

Remarque :

Contrairement certains langages de programmation, il n'y a pas de mot cl then dans


cette instruction conditionne. Notez galement que la marque de fin de bloc conditionn est
le mot cl end et non pas endif .
Il existe une squence conditionne sous forme d'alternatives :

Syntaxe :

If expression logique
squence d'instructions 1
else
squence d'instructions 2
end

O :
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions 1 est la squence d'instructions excuter dans le cas o
expression logique est vraie et squence d'instructions 2 est la squence d'instructions
excuter dans le cas o expression logique est faux.

Interprtation :

Si expression logique est vraie la squence d'instructions 1 est excute, sinon c'est la
squence d'instructions 2 qui est excute. Le droulement du programme reprend ensuite la
premire instruction suivant le mot cl end.
Il est bien entendu possible d'imbriquer des squences d'instructions conditionnes (au sens o
la squence d'instruction conditionne contient des squences dinstructions conditionnes).
Pour une meilleure lisibilit, il est recommand d'utiliser des indentations afin de mettre en

16
vidence l'imbrication des squences d'instructions conditionnes. Il est possible d'effectuer
un choix en cascade :

Syntaxe

If expression logique 1
squence d'instructions 1

elseif expression logique 2


squence d'instructions 2
...
elseif expression logique N
squence d'instructions N
else
squence d'instructions par dfaut
end

Interprtation :
Si expression logique 1 est vraie la squence d'instructions 1 est excute et le programme
reprend ensuite la premire instruction suivant le mot cl end, sinon si expression logique 2
est vraie la squence d'instructions 2 est excute et le programme reprend ensuite la
premire instruction suivant le mot cl end, etc. Si aucune des expressions logiques 1 N
n'est vraie alors squence d'instructions par dfaut est excute.

Remarque :
Attention ne pas laisser d'espace entre else et if; le mot cl est elseif.
On utilise frquemment un choix en cascade lors d'initialisation de donnes. Par exemple, on
initialise une matrice A en fonction de la valeur d'une variable nbre (nombre) de la manire
suivante :

if nbre == 1
A = ones(n);
elseif nbre == 2
A = magic(n);
elseif nbre == 3 | nbre
if numex == 1
A = ones(n);
elseif nbre == 2 A = magic(n);
elseif nbre == 3 | nbre == 4
A = rand(n);
else error('nombre d''exemple non prevu ...');
end

8.4 Choix ventil, l'instruction switch

Une alternative l'utilisation d'une squence d'instructions conditionnes pour effectuer un


choix en cascade existe. Il s'agit de l'instruction switch.

Syntaxe :

switch var
case cst1,
squence d'instructions 1
case cst2,
squence d'instructions 2
...

17
case cstN,
squence d'instructions N
otherwise
squence d'instructions par dfaut
end

O :

var est une variable numrique ou une variable chane de caractres;


cst1, ..., cstN, sont des constantes numrique ou des constantes chane de caractres;
squence d'instructions i est la squence d'instructions excuter si le contenu de la variable
var est gal la constante csti (var==csti).

Interprtation :

Si la variable var est gale l'une des constantes cst1, ..., cstN, (par exemple csti) alors la
squence d'instructions correspondante (ici squence d'instructions i) est excute. Le
programme reprend ensuite la premire instruction suivant le mot-cl end. Si la variable var
n'est gale aucune des
constantes la squence d'instructions par dfaut est excute.

Remarque :

La variable var doit bien entendu tre du mme type que les constantes cst1, ..., cstN. Il n'est
pas ncessaire de prvoir un cas par dfaut (bien que cela soit prfrable). S'il n'y a pas de cas
par dfaut et si la variable var n'est gale aucune des constantes, alors le programme
continue la premire instruction suivant le mot-cl end.
Il est possible de regrouper plusieurs cas si la squence d'instructions excuter est la mme
pour ces diffrents cas. La syntaxe est alors :

case{ cstk , cstl , ...}


squence d'instructions commune

Reprenons l'exemple o l'on souhaite initialiser une matrice A en fonction de la valeur prise
par une variable numrique nbre. En utilisant un choix ventil on obtient :

function A = initA(n,nbre)
switch nbre case 1, A = ones(n) case 2, A = magic(n);
case {3,4}, A = rand(n);
otherwise
error('numero d''exemple non prevu ...');
end
%Voici un exemple de choix ventil portant sur une variable de type chane
de caractres.
rep = input('Votre reponse (oui, non, chepas) :');
switch rep case {'oui','o'}, disp('bravo ...');
case {'non','n'} disp('perdu ...');
case 'chepas' disp('c''est pourtant facile ...');
end

8.5 Interruption d'une boucle de contrle

Il est possible de provoquer une sortie prmature d'une boucle de contrle. L'instruction
break permet de sortir d'une boucle for ou d'une boucle while. L'excution se poursuit alors

18
squentiellement partir de l'instruction suivant le mot cl end fermant la boucle. En cas de
boucles imbriques, on interrompt seulement l'excution de la boucle intrieure contenant
l'instruction break. L'instruction return provoque un retour au programme appelant (ou au
clavier). Les instructions suivant le return ne sont donc pas excutes. L'instruction return
est souvent utilise conjointement avec une instruction conditionne par exemple pour tester
dans le corps d'une fonction si les paramtres d'entre ont les valeurs attendues.
L'instruction error permet d'arrter un programme et d'afficher un message d'erreur. La
syntaxe est error(' message d''erreur '). L'instruction warning permet d'afficher un message
de mise en garde sans suspendre l'excution du programme. La syntaxe est warning('
message de mise en garde '). Il est possible d'indiquer Matlab de ne pas afficher les
messages de mise en garde d'un programme en tapant warning off dans la fentre de
commandes. On rtablit l'affichage en tapant warning on.
La commande pause permet d'interrompre l'excution du programme. L'excution normale
reprend ds que l'utilisateur enfonce une touche du clavier. L'instruction pause(n) suspend
l'excution du programme pendant n secondes.

19