Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
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.
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.
1. Oprations usuelles
Addition (+) Soustraction (-) Division (/) Multiplication (*) Exposant (^)
>> 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
>> 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).
3
Effectuer les commandes suivantes et vrifier les rsultats donns :
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.
- 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
>> f=factor(60)
f =
2 2 3 5
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).
Linstruction disp permet aussi dafficher sur lcran le contenu dune variable sans prciser
son nom :
5
IV. Opration sur les vecteurs :
1. Cration dun vecteur ligne:
On peut aussi crer un vecteur ligne et le transposer, on ajoute pour cela un apostrophe .
Ce qui permet entre autres de modifier un lment (une composante) dun vecteur (ligne ou
colonne).
6
3. Les oprations lment par lment (mme dimension des vecteurs):
Donner les deux instructions suivantes une une et commenter les rsultats :
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= 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 ( .^ ).
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.
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.
A = B=
14 32 50 1 8 21
32 77 122 8 25 48
50 122 194 21 48 81
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
O :
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).
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
La commande fplot permet de tracer le graphe d'une fonction sur un intervalle donn. La
syntaxe est :
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
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)
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
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.
Syntaxe :
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 :
Remarque :
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
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
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 :
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 :
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
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