You are on page 1of 78

Dbuter avec matlab

Stphane Balac
Centre de Mathmatiques
INSA de Lyon
(c) Copyright 2001 Stphane Balac - INSA de Lyon
(Centre de Mathematiques, F-69621 Villeurbanne Cedex)
(c) Copyright 1999 Stphane Balac - Universit de Bretagne Occidentale
(Dpartement de Mathmatiques, F-29285 Brest cedex)
Ce document peut tre reproduit et distribu des ns non-commerciales dans son intgra-
lit ou partiellement. La mention du copyright ainsi que lidentit de lauteur doivent tre
conserves et la prsente notice prserve dans son intgralit sur toute copie intgrale ou
partielle. Si vous distribuez ce travail en partie, vous devez mentionner comment obtenir
une version intgrale du document.
matlab est un produit de The Mathswork Inc., www.mathswork.com.
Table des matires
1 Prsentation et gnralits 7
1.1 Une session matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Lespace de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Obtenir de laide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Syntaxe dune ligne dinstructions . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Gestion des chiers du rpertoire de travail . . . . . . . . . . . . . . . . . . 12
2 Types de donnes et variables 13
2.1 Particularits de matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Les types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 Les 4 types de donnes matlab . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Le type complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3 Le type chane de caractres . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Le type logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Dnir un vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.2 Vecteurs spciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1 Dnir une matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.2 Matrices spciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.3 Manipuler des matrices . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 La structure sparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Calculer avec matlab 28
3.1 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Oprations et fonctions portant sur les scalaires . . . . . . . . . . . . . . . . 28
3.3 Oprations et fonctions portant sur les vecteurs . . . . . . . . . . . . . . . . 30
3.4 Oprations et fonctions portant sur les matrices . . . . . . . . . . . . . . . . 31
3.5 Rsolution de systmes linaires . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.6 Les polynmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Les entres-sorties 36
4.1 Les formats dachage des rels . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Achage simple, la commande disp . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Impressions diriges par format . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 Programmer sous matlab 41
5.1 Scripts et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Oprateurs de comparaison et oprateurs logiques . . . . . . . . . . . . . . . 44
5.3 Instructions de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.1 Boucle FOR : parcours dun intervalle . . . . . . . . . . . . . . . . . 45
5.3.2 Boucle WHILE : tant que . . . faire . . . . . . . . . . . . . . . . . . . 46
5.3.3 Linstruction conditionne IF . . . . . . . . . . . . . . . . . . . . . . 47
5.3.4 Choix ventil, linstruction switch . . . . . . . . . . . . . . . . . . . 49
5.3.5 Interruption dune boucle de contrle . . . . . . . . . . . . . . . . . . 51
5.4 Un exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3
6 Graphisme 56
6.1 Gestion des fentres graphiques . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2 Graphisme 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2.1 Tracer le graphe dune fonction; la commande fplot . . . . . . . . . 57
6.2.2 La commande plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.3 La commande loglog . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Amliorer la lisibilit dune gure . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3.1 Lgender une gure . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3.2 Acher plusieurs courbes dans une mme fentre . . . . . . . . . . . 62
6.3.3 Sauvegarder une gure . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4 Graphisme 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.4.1 Tracer les lignes de niveau dune fonction de 2 variables . . . . . . . 65
6.4.2 Reprsenter une surface dquation z = g(x, y) . . . . . . . . . . . . 69
6.4.3 Reprsenter une surface paramtre . . . . . . . . . . . . . . . . . . . 73
4
Introduction
Ce document est un guide dinitiation matlab. matlab est un programme interac-
tif de calcul scientique utilisable pour la rsolution numrique de nombreux problmes
mathmatiques ou appliqus. En outre, matlab dispose de potentialits graphiques im-
portantes.
Lobjectif de ce document est de permettre au dbutant de rapidement se familiariser
avec matlab. Aussi, seules les fonctionnalits les plus courantes de matlab sont prsen-
tes (aucune rfrence aux Toolbox nest faite par exemple). De mme, en gnral, les
commandes matlab ne sont pas prsentes de manire exhaustive. Seule lutilisation la
plus courante de la commande est mentionne. Cette documentation a t rdige en
prenant comme support la version 5.1 de matlab. Toutefois dans la mesure o nous
nous limitons aux fonctionnalits les plus courantes de matlab, la plupart des commandes
dcrites sont communes aux versions antrieures et resteront compatibles avec les versions
ultrieures. Les commandes sont gnralement prsentes suivies dun exemple. Le lecteur
est invit tester par lui mme les exemples proposs (et des variantes). Au sein dun mme
paragraphe, les dirents exemples sont souvent lis. Il est donc recommand dexcuter
les exemples dans lordre o ils apparaissent. Par contre dun paragraphe lautre, il peut
tre ncessaire de nettoyer lespace de travail en tapant clear all dans la fentre de
contrle matlab. La prsentation qui est faite correspond une utilisation de matlab sur
station de travail Unix, mais devrait tre trs facilement transposable aux autres systmes.
matlab est abrviation de MATrix LABoratory. matlab est avant tout un programme
de calcul matriciel. Lexemple suivant est rvelateur ce sujet : si A et B sont deux variables
dnies comme tant des matrices, linstruction A*B calcule le produit matriciel des ma-
trices A et B. Dautre part avec matlab, un scalaire est considr comme une matrice un
lment et un vecteur est considr comme une matrice une ligne (ou une colonne). Bien
quun peu droutant au dpart, cette approche savre en pratique dune grande ecacit.
Nous supposons que le lecteur est famili des notions dalgbre linaire lmentaire,
notamment matriciel. Un exemple de matrice que nous utiliserons frquemment dans ce
document correspond au carr magique. Lexpression carr magique dsigne tout tableau
carr dont les cases renferment des nombres entiers disposs de telle sorte que les sommes
des nombres inscrits sur chaque ligne, sur chaque colonne et chaque diagonale soient toutes
gales. On pourra consulter au sujet des carrs magiques le chapitre 2 de louvrage Histoire
dalgorithmes [1] : plus souvent utiliss comme talismans que comme objet de recherche
mathmatique, les carrs magiques taient troitement lis la vie quotidienne. Ainsi, il
tait fait appel eux pour faciliter les accouchements, soigner les morsures danimaux
vnneux ou encore gurir de maladie. Il est donc naturel quils ne se rencontrent pas que
dans les livres mais aussi sur des tableaux, sous forme de gravure sur des monuments, des
mdailles . . .. Comme exemple bien connu, on peut citer le carr magique dordre 4 qui
apparat sur une gravure sur bois de la Renaissance dAlbrecht Drer (Mlancolie, 1415).
5
Fig. 1 Mlancolie par Albrecht Drer (1415). Un carr magique dordre 4 apparat au
dessous de la cloche.
Par convention, les commandes matlab apparaissent dans le texte dans une fonte
true-type . Les exemples sont eux aussi prsents dans une fonte true-type . Dans
un souci de gain de place certains exemples sont prsents sur deux colonnes.
Ce document est disponible aux formats pdf et postscript auprs de lauteur. Une version
hypertexte (HTLM) de ce document est galement disponible.
Ce document est destin voluer, aussi toute erreur ou ambigit releve, toute remarque
ou avis peut tre communiqu ladresse suivante : Stephane.Balac@voila.fr.
Brest, aot 1999
Cette version du document a bnci de corrections suggres par Olivier Mazet du Centre
de Mathmatiques de lINSA de Lyon.
Lyon, janvier 2001
Stphane Balac
Centre de Mathmatiques
INSA de Lyon
F-69621 Villeurbanne Cedex
6
1 Prsentation et gnralits
1.1 Une session matlab
Pour lancer matlab
1
, commencez par ouvrir une fentre de commande (commandtool)
puis dplacez-vous dans votre rpertoire (directory) de travail. Tapez la commande matlab.
Voici ce que vous devez voir apparatre :
[unix prompt] matlab
< M A T L A B (R) >
(c) Copyright 1984-97 The MathWorks, Inc.
All Rights Reserved
Version 5.1.0.421
May 25 1997
Commands to get started: intro, demo, help help
Commands for more information: help, whatsnew, info, subscribe
>>
Notez le prompt matlab () qui indique que matlab attend des instructions. Voici
un exemple de session matlab :
>> A = [ 1 3; 4 2 ]
A =
1 3
4 2
>> A*A
ans =
13 9
12 16
>> quit
16 flops.
[unix prompt]
Dans cette session on a dni la matrice
A =
_
1 3
4 2
_
et lon a calcul son carr.
Chaque ligne dinstructions doit se terminer par un retour chariot. La commande pour
quitter matlab est quit. On veillera dans la mesure du possible ne pas lancer simulta-
nment plusieurs sessions matlab.
1.2 Lespace de travail
Comme tout langage de programmation matlab permet de dnir des donnes va-
riables. Les variables sont dnies au fur et mesure que lon donne leurs noms (iden-
ticateur) et leurs valeurs numriques ou leurs expressions mathmatiques. matlab ne
1
La prsentation qui est faite correspond une utilisation de matlab sur station de travail Unix, mais
devrait tre trs facilement transposable aux autres systmes.
Stphane Balac - Dbuter avec matlab 7
ncessite pas de dclaration de type ou de dimension pour une variable. Les variables sont
stockes dans lespace de travail (ou workspace) et peuvent tre utilises dans les calculs
subsquents.
Pour obtenir la liste des variables actives de lespace de travail on dispose des com-
mandes who et whos. La commande who ache le nom des variables actives. La commande
whos donne plus dinformations : le nom, la taille du tableau (nombre de lignes et de co-
lonnes) associ, lespace mmoire utilis (en Bytes) et la classe des donnes (principalement
double array sil sagit dun tableau de valeurs relles ou complexes et char sil sagit dun
tableau de caractres).
La commande clear permet de nettoyer lespace de travail : toutes les variables sont
dtruites. Il est possible de ne dtruire quune partie des variables en tapant clear nom-var
o nom-var est le nom de la (ou des) variable(s) dtruire.
>> x=2*pi/3; y=sin(x); z=cos(x);
>> A = [ 1 3; 4 2 ]; B = A*A;
>> t = bonjour;
>> who
Your variables are:
A B t x y z
>> whos
Name Size Bytes Class
A 2x2 32 double array
B 2x2 32 double array
t 1x7 14 char array
x 1x1 8 double array
y 1x1 8 double array
z 1x1 8 double array
Grand total is 18 elements using 102 bytes
>> clear x y t
>> whos
Name Size Bytes Class
A 2x2 32 double array
B 2x2 32 double array
z 1x1 8 double array
Grand total is 9 elements using 72 bytes
>> clear
>> who
>>
Stphane Balac - Dbuter avec matlab 8
Il est possible de sauvegarder une session matlab matlab dans un chier pour une
utilisation ultrieure. Linstruction save nom-fic enregistre toutes les variables de lespace
de travail dans le chier nom-fic.mat. Si aucun nom de chier nest prcis, le chier
par dfaut est matlab.mat. Il est possible de ne sauver quune partie des variables (par
exemple seulement la variable contenant le rsultat dun calcul) en utilisant linstruction
save nom-fic nom-var o nom-var est le nom de la (ou des) variable(s) sauvegarder. At-
tention, seul le contenu des variables est sauvegard et non pas lensemble des instructions
eectues durant la session. Pour ramener dans lespace de travail les variables sauvegardes
dans le chier nom-fic.mat, taper load nom-fic.
Dans lexemple qui suit on calcule le sinus et le cosinus de 2/3 dans les variables y
et z. On sauve ces rsultats dans un chier toto.mat. Aprs avoir quitt matlab on peut
vrier que le chier toto.mat existe bien mais quil ne sagit pas dun chier ascii. Si
lon relance matlab et que lon tape load toto, on peut vrier que les variables y et z
existent bien et ont les valeurs prcdentes.
>> x=2*pi/3, y=sin(x), z=cos(x)
x =
2.0944
y =
0.8660
z =
-0.5000
>> save toto y z
>> quit
6 flops.
[unix prompt] ls
toto.mat
[unix prompt] more y.mat
MATLAB 5.0 MAT-file, Platform: SOL2, Created on: Mon Jul 5 20:42:21 1999
MI 8 e e d z
[unix prompt] matlab
>> load toto
>> who
Your variables are:
y z
>> y
y =
0.8660
>> z
z =
Stphane Balac - Dbuter avec matlab 9
-0.5000
>> x
??? Undefined function or variable x.
>>
La commande diary permet de sauvegarder lensemble dune session dans un chier
ascii pour un traitement ultrieur (insertion dans un document, impression, . . .). Le chier
de sauvegarde par dfaut a pour nom diary. On provoque la sauvegarde dans le chier
nom-fic, par linstruction diary nom-fic. Attention, cest la commande diary qui d-
clenche le dbut de sauvegarde ; il est impossible de sauvegarder la partie de la session
prcdent son appel. Pour arrter la sauvegarde, taper diary off.
>> x=2*pi/3; y=sin(x);
>> diary toto
>> z=cos(x)
z =
-0.5000
>> diary off
>> t = tan(x)
t =
-1.7321
>>
Si vous ditez le chier toto, voici ce que vous verrez :
>> z=cos(x)
z =
-0.5000
>> diary off
et rien de plus . . .
1.3 Obtenir de laide
Dans une session matlab, il est possible dobtenir une aide en ligne sur une commande
en tapant help nom-commande. Par exemple,
>> help diary
DIARY Save text of MATLAB session.
DIARY file_name causes a copy of all subsequent terminal input
and most of the resulting output to be written on the named
file. DIARY OFF suspends it. DIARY ON turns it back on.
DIARY, by itself, toggles the diary state.
Use the functional form of DIARY, such as DIARY(file),
when the file name is stored in a string.
>>
Attention, les commandes matlab doivent tre tapes en minuscules pour tre recon-
nues, mme si elles gurent en majuscules dans laide en ligne.
Stphane Balac - Dbuter avec matlab 10
On peut galement obtenir de laide par le biais de la commande doc qui donne accs
une documentation complte au format HTML. Pour quitter cette documentation, cliquer
sur Exit Program dans le menu File du navigateur.
La commande lookfor permet de rechercher un mot-cl parmi les lignes de commen-
taires en entte des fonctions matlab (ces lignes sont celles aches par la commnande
doc). Linstruction lookfor motcl recherche le mot-cl motcl dans la premire ligne
de commentaire de toutes les fonctions matlab. Linstruction lookfor motcl -all re-
cherche le mot-cl dans toutes les lignes de commentaires en entte des fonctions. Attention
le mot-cl doit tre en anglais, les commentaires des fonctions matlab tant rdigs en
anglais. On peut utiliser une phrase comme mot-cl. Il faut alors lcrire entre guillemets
( ). La commande lookfor retourne le nom la fonction matlab (ou des fonctions) o
le mot-cl gure dans la premire ligne de commentaires. Elle retourne galement la ligne
de commentaires o gure le mot-cl. Si le mot-cl na t trouv dans aucune ligne de
commentaires, matlab rend la main sans rien acher.
>> lookfor determinant
DET Determinant.
>> lookfor tridiagonal matrix
LESP Tridiagonal matrix with real, sensitive eigenvalues.
POISSON Block tridiagonal matrix from Poissons equation.
TRIDIAG Tridiagonal matrix (sparse).
TRIDIEIG Find a few eigenvalues of a tridiagonal matrix.
TRIDISOLVE Solve A*x = b where A is a square, symmetric tridiagonal matrix.
>> lookfor papillon
>>
1.4 Syntaxe dune ligne dinstructions
Si une instruction matlab est suivie dun point virgule, le rsultat de cette instruction
nest pas ach. Pour r-acher un rsultat contenu dans une variable, il sut de taper
le nom de la variable. Le rsultat de la dernire instruction excute peut tre rappel par
la commande ans :
>> A = [ 8 1 6; 3 5 7; 4 2 9];
>> A
A =
8 1 6
3 5 7
4 9 2
>> A*A;
>> ans
ans =
91 67 67
67 91 67
67 67 91
>>
Plusieurs instructions matlab peuvent gurer sur une mme ligne. Il faut alors les
sparer par une virgule ou par un point virgule. Dautre part, si une commande est trop
longue pour tenir sur une ligne, il est possible de poursuivre sur la ligne suivante en
terminant la ligne par 3 points (...).
>> B = [ 1 3; 4 2 ]; B*B
ans =
Stphane Balac - Dbuter avec matlab 11
13 9
12 16
>> x = 1 + 2 + 3 + 4 + 5 + 6 ...
+7 + 8 + 9 + 10
x =
55
>>
Si la syntaxe de linstruction soumise est errone ou si vous demandez matlab
dexcuter une instruction illgale (qui na pas de sens mathmatique par exemple), vous
obtiendez un message derreur. Ce message vous indique les sources derreurs possibles et
doit vous permettre de corriger rapidement votre erreur.
>> A + B
??? Error using ==> +
Matrix dimensions must agree.
>> C = [ 1 2 3; 4 5]
??? Number of elements in each row must be the same.
>> whose
??? Undefined function or variable whose.
>>
1.5 Gestion des chiers du rpertoire de travail
Un certain nombre de commandes permettent de grer les chiers du rpertoire de tra-
vail. La commande dir donne la liste des chiers du rpertoire de travail. La commande
cd permet de changer de rpertoire de travail. La commande type permet dacher le
contenu dun chier. La commande delete permet de dtruire un chier. Ces commandes
sutilisent de la mme manire que les commandes correspondantes dUnix (ou du DOS).
Enn la commande edit permet douvrir un diteur de texte. Le choix de lditeur a t
eectu au moment de linstallation de matlab sur votre machine, il vous est donc impos-
sible de choisir votre diteur favori. Il est galement possible dexcuter des commandes
Unix partir de matlab en faisant prcder la commande dun point dexclamation ( !).
Si vous avez eectu les exemples du paragraphe 1.2, deux chiers toto et toto.mat
existent dans votre rpertoire de travail. Voici alors quelques exemples dutilisation des
commandes de gestion des chiers.
>> dir
. .. toto toto.mat
>> edit toto
>> delete toto
>> !ls
toto.mat
>>
Stphane Balac - Dbuter avec matlab 12
2 Types de donnes et variables
2.1 Particularits de matlab
Comme tout langage de programmation matlab permet de dnir des donnes va-
riables. Une variable est dsigne par un identicateur qui est form dune combinaison
de lettres et de chires. Le premier caractre de lidenticateur doit ncessairement tre
une lettre. Attention, matlab direncie majuscules et minuscules ! Ainsi X33 et x33 d-
signent deux variables distinctes. Les variables sont dnies au fur et mesure que lon
donne leurs noms (identicateur) et leurs valeurs numriques ou leurs expressions math-
matiques. Lutilisation de variables avec matlab ne ncessite pas de dclaration de type
ou de dimension. Le type et la dimension dune variable sont dtermins de manire auto-
matique partir de lexpression mathmatique ou de la valeur aecte la variable. Une
variable peut tre de type rel, complexe, chane de caractres ou logique.
Pour matlab toute variable est considre comme tant un tableau dlments dun
type donn. matlab direncie trois formes particulires de tableaux. Les scalaires qui sont
des tableaux une ligne et une colonne. Les vecteurs qui sont des tableaux une ligne ou
une colonne. Les matrices qui sont des tableaux ayant plusieurs lignes et colonnes. Une
variable matlab est donc toujours un tableau que lon appelle variable scalaire, vecteur
ou matrice suivant la forme du tableau.
2.2 Les types de donnes
2.2.1 Les 4 types de donnes matlab
Les trois principaux types de variables utiliss par matlab sont les types rel, complexe
et chane de caractres. Il ny a pas de type entier proprement parler. Le type logique est
associ au rsultat de certaines fonctions. Signalons quil est inutile (impossible) de dclarer
le type dune variable. Ce type est tabli automatiquement partir des valeurs aectes
la variable. Par exemple les instructions x = 2 ; z = 2+i ; rep = oui ; dnissent une
variable x de type rel, une variable z de type complexe et une variable rep de type chane
de caractres.
>> clear
>> x = 2; z = 2+i; rep = oui;
>> whos
Name Size Bytes Class
rep 1x3 6 char array
x 1x1 8 double array
z 1x1 16 double array (complex)
Grand total is 5 elements using 30 bytes
>>
Comme on ne dnit pas de manire explicite le type dune variable, il est parfois utile
de pouvoir le dterminer. Cela est possible grce aux commandes ischar, islogical et
isreal. ischar(x) retourne 1 si x est de type chane de caractres et 0 sinon. islogical(x)
retourne 1 si x est de type logique et 0 sinon. La commande isreal(x) est utiliser avec
discernement : elle retourne 1 si x est rel ou de type chane de caractres et 0 sinon (x
Stphane Balac - Dbuter avec matlab 13
est complexe partie imaginaire non nulle ou nest pas un tableau de valeurs relles ou de
caractres).
>> ischar(rep)
ans =
1
>> ischar(x)
ans =
0
>> isreal(z)
ans =
0
>> isreal(x)
ans =
1
>> isreal(rep)
ans =
1
>>
2.2.2 Le type complexe
Lunit imaginaire est dsigne par i ou j. Les nombres complexes peuvent tre crits
sous forme cartsienne a + ib ou sous forme polaire re
it
. Les direntes critures possibles
sont a+ib, a+i*b, a+b*i, a+bi et r*exp(it) ou r*exp(i*t) avec a, b, r et t des variables
de type rel. Les commandes imag, real, abs, angle permettent de passer aisment de
la forme polaire la forme cartsienne et rciproquement. Si z est de type complexe, les
instructions imag(z) et real(z) retournent la partie imaginaire et la partie relle de z.
Les instructions abs(z) et angle(z) retournent le module et largument de z.
On fera attention au fait que les identicateurs i et j ne sont pas rservs. Aussi il est
possible que des variables de noms i et j aient t rednies au cours dun calcul antrieur
et soient toujours actives. Si cest la cas, on peut soit dtruire ces deux variables (clear
i j), i et j redeviennent alors lunit imaginaire, soit r-aecter i ou j la valeur
unit imaginaire par linstruction i=sqrt(-1). On se mera donc des boucles dindices
i et j dans lesquelles on manipule des variables de type complexe. On fera galement
attention ne pas laisser despace autour de lunit imaginaire an dviter de mauvaises
interprtations des donnes dans certains cas. Comparez par exemple,
>> z = [1+i, 2, 3i]
z =
1.0000 + 1.0000i 2.0000 0 + 3.0000i
>> y = [1+i, 2, 3 i]
y =
1.0000 + 1.0000i 2.0000 3.0000 0 + 1.0000i
>>
2.2.3 Le type chane de caractres
Une chane de caractres est un tableau de caractres. Une donne de type chane de
caractres (char) est reprsente sous la forme dune suite de caractres encadre dapos-
trophes simples (). Une variable de type chane de caractres tant interprte comme
un tableau de caractres, il est possible de manipuler chaque lettre de la chane en faisant
rfrence sa position dans la chane. La concatnation de chanes de caractres seectue
selon les rgles de manipulation des tableaux, voir le paragraphe 2.3.
Lexemple suivant prsente direntes manipulations dune chane de caractres.
Stphane Balac - Dbuter avec matlab 14
>> ch1 = bon
ch1 =
bon
>> ch2 = jour
ch2 =
jour
>> whos
Name Size Bytes Class
ch1 1x3 6 char array
ch2 1x4 8 char array
Grand total is 7 elements using 14 bytes
>> ch = [ch1,ch2]
ans =
bonjour
>> ch(1), ch(7), ch(1:3)
ans =
b
ans =
r
ans =
bon
>> ch3 = soi;
>> ch = [ch(1:3), ch3, ch(7)]
ans =
bonsoir
>>
Si une chane de caractres doit contenir le caractre apostrophe () celui-ci doit tre
doubl dans la chane (ainsi pour aecter le caractre apostrophe () une variable on
devra crire , soit 4 apostrophes).
>> rep = aujourdhui
??? rep = aujourdhui
|
Missing operator, comma, or semi-colon.
>> rep = aujourdhui
rep =
aujourdhui
>> apos =
apos =

>>
La chane de caractres vide sobtient par 2 apostrophes . La commande isempty
permet de tester si une variables de type chane de caractres est vide ou non. La commande
Stphane Balac - Dbuter avec matlab 15
strcmp permet de tester si deux chaines de caractres sont gales ou non.
2.2.4 Le type logique
Le type logique (logical) possde 2 formes : 0 pour faux et 1 pour vrai. Un rsultat de
type logique est retourn par certaines fonctions ou dans le cas de certains tests.
Dans lexemple qui suit on considre une variable x contenant la valeur 123 et une
variable y dnie par lexpression mathmatique y = exp(log(x)). On teste si les variables
x et y contiennent les mmes valeurs. La variable tst est une variable de type logique qui
vaut 1 (vrai) les valeurs sont gales et 0 (faux) sinon. Suivant la valeur de tst, on ache
la phrase x est egal a y ou la phrase x est different de y. Dans lexemple propos,
compte-tenu des erreurs darrondis lors du calcul de exp(log(123)), la valeur de la variable
y ne vaut pas exactement 123. On pourra galement considrer le cas o x = 12.
>> x = 123; y = exp(log(x));
>> tst = ( x==y );
>> if tst, disp(x est egal a y ), else disp(x est different de y ), end
x est different de y
>> whos
Name Size Bytes Class
tst 1x1 8 double array (logical)
x 1x1 8 double array
y 1x1 8 double array
Grand total is 3 elements using 24 bytes
>> format long
>> x, y, tst
x =
123
y =
1.229999999999999e+02
tst =
0
>> format, clear
>>
2.3 Les vecteurs
2.3.1 Dnir un vecteur
On dnit un vecteur ligne en donnant la liste de ses lments entre crochets ([ ]). Les
lments sont spars au choix par des espaces ou par des virgules. On dnit un vecteur
colonne en donnant la liste de ses lments spars au choix par des points virgules ( ;) ou
par des retours chariots (touche Entre/Enter). On peut transformer un vecteur ligne x en
un vecteur colonne et rciproquement en tapant x ( est le symbole de transposition).
Il est inutile de dnir la longueur dun vecteur au pralable. Cette longueur sera tablie
automatiquement partir de lexpression mathmatique dnissant le vecteur ou partir
des donnes. On peut obtenir la longueur dun vecteur donn grce la commande length.
Stphane Balac - Dbuter avec matlab 16
Un vecteur peut galement tre dni par blocs selon la mme syntaxe. Si par
exemple x
1
, x
2
et x
3
sont trois vecteurs (on note x1, x2 et x3 les variables matlab corres-
pondantes), on dnit le vecteur X = (x
1
| x
2
| x
3
) par linstruction X = [x1 x2 x3].
>> x1 = [1 2 3], x2 = [4,5,6,7], x3 = [8; 9; 10]
x1 =
1 2 3
x2 =
4 5 6 7
x3 =
8
9
10
>> length(x2), length(x3)
ans =
4
ans =
3
>> whos
Name Size Bytes Class
x1 1x3 24 double array
x2 1x4 32 double array
x3 3x1 24 double array
Grand total is 10 elements using 80 bytes
>> x3
ans =
8 9 10
>> X = [x1 x2 x3]
X =
1 2 3 4 5 6 7 8 9 10
>>
Les lments dun vecteur peuvent tre manipuls grce leur indice dans le tableau.
Le k
e
lment du vecteur x est dsigne par x(k). Le premier lment dun vecteur a
obligatoirement pour indice 1. En pratique ceci impose de faire des translations dindices
si par exemple on souhaite dnir une suite x
n
, n = 0, , N. Le terme x
0
de la suite
correspondra llment x(1) du vecteur et le terme x
N
llment x(N+1). Il est possible
de manipuler plusieurs lments dun vecteur simultanment. Ainsi les lments k l du
vecteur x sont dsigns par x(k :l). On peut galement manipuler facilement les lments
dun vecteur dont les indices sont en progression arithmtique. Ainsi si lon souhaite extraire
les lments k, k +p, k +2p, , k +Np = l on crira x(k :p :l). Plus gnralement, si K
est un vecteur de valeurs entires, X(K) retourne les lments du vecteur X dont les indices
sont les lments du vecteur K.
Reprenons lexemple prcdent.
Stphane Balac - Dbuter avec matlab 17
>> X(5)
ans =
5
>> X(4:10)
ans =
4 5 6 7 8 9 10
>> X(2:2:10)
ans =
2 4 6 8 10
>> K = [1 3 4 6]; X(K)
ans =
1 3 4 6
>>
Il est trs facile de dnir un vecteur dont les composantes forment une suite arith-
mtique. Pour dnir un vecteur x dont les composantes forment une suite arithmtique
de raison h, de premier terme a et de dernier terme b, on crira x = a :h :b. Si a b
nest pas un multiple de h, le dernier lment du vecteur x sera a + Ent((a b)/h) h o
Ent est la fonction partie entire. La commande linspace permet de dnir un vecteur x
de longueur N dont les composantes forment une suite arithmtique de premier terme a
et de dernier terme b (donc de raison (a b)/(N 1)). Les composantes du vecteur sont
donc linairement espacs. La syntaxe est x = linspace(a,b,N).
>> x = 1.1:0.1:1.9
x =
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>> x = 1.1:0.2:2
x =
1.1000 1.3000 1.5000 1.7000 1.9000
>> x = linspace(1.1,1.9,9)
ans =
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>>
2.3.2 Vecteurs spciaux
Les commandes ones, zeros et rand permettent de dnir des vecteurs dont les l-
ments ont respectivement pour valeurs 0, 1 et des nombres gnrs de manire alatoire.
Stphane Balac - Dbuter avec matlab 18
ones(1,n) : vecteur ligne de longueur n dont tous les lments valent 1
ones(m,1) : vecteur colonne de longueur m dont tous les lments valent 1
zeros(1,n) : vecteur ligne de longueur n dont tous les lments valent 0
zeros(m,1) : vecteur colonne de longueur m dont tous les lments valent 0
rand(1,n) : vecteur ligne de longueur n dont les lments sont gnrs de manire
alatoire entre 0 et 1
rand(m,1) : vecteur colonne de longueur m dont les lments sont gnrs de
manire alatoire entre 0 et 1
2.4 Les matrices
2.4.1 Dnir une matrice
On a dj vu que lon dnissait la matrice
A =
_
1 3
4 2
_
en tapant A = [ 1 3 ; 4 2 ].
Dune faon gnrale, on dnit une matrice en donnant la liste de ses lments entre
crochets. Signalons que matlab admet dautres faons dcrire les matrices. Les lments
dune ligne de la matrice peuvent tre spars au choix par un blanc ou bien par une virgule
(,). Les lignes quant elles peuvent tre spares au choix par le point-virgule ( ;) ou par
un retour chariot. Par exemple, on peut aussi crire la matrice A de la manire suivante,
>> A = [1,3;4,2]
A =
1 3
4 2
>> A = [1 3
4 2]
A =
1 3
4 2
>> A = [1,3
4,2]
A =
1 3
4 2
>>
Un lment dune matrice est rfrenc par ses numros de ligne et de colonne. A(i,j)
dsigne le i
e
lment de la j
e
ligne ligne de la matrice A. Ainsi A(2,1) dsigne le premier
lment de la deuxime ligne de A,
>> A(2,1)
ans =
4
>>
La commande size permet dobtenir les dimensions dune matrice A donne. On peut
soit obtenir de manire spare le nombre de lignes et de colonnes par les instructions
Stphane Balac - Dbuter avec matlab 19
size(A,1) et size(A,2) respectivement, soit obtenir le nombre m de lignes et le nombre
n de colonnes par linstruction [m,n] = size(A).
On peut construire trs simplement une matrice par blocs . Si A, B, C, D dsignent
4 matrices (aux dimensions compatibles), on dnit la matrice blocs
K =
_
A B
C D
_
par linstruction K = [ A B ; C D].
Voici un exemple de construction par blocs de la matrice
B =
_
_
_
_
_
_
_
_
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
_
_
_
_
_
_
_
_
>> A11 = [35 1 6; 3 32 7; 31 9 2];
>> A12 = [26 19; 21 23; 22 27];
>> A21 = [ 8 28 33; 30 5 34];
>> A22 = [17 10; 12 14];
>> B11 = [ A11 A12; A21 A22 ]
B11 =
35 1 6 26 19
3 32 7 21 23
31 9 2 22 27
8 28 33 17 10
30 5 34 12 14
>> B12 = [ 24 25 20 15 16];
>> B = [ B11 B12];
>> B21 = [ 4 36 29 13 18 11];
>> B = [ B ; B21]
B =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
2.4.2 Matrices spciales
Certaines matrices se construisent trs simplement grce des commandes ddies.
Citons les plus utilises :
Stphane Balac - Dbuter avec matlab 20
eye(n) : la matrice identit dans R
n,n
ones(m,n) : la matrice m lignes et n colonnes dont tous les lments valent 1
zeros(m,n) : la matrice m lignes et n colonnes dont tous les lments valent 0
rand(m,n) : une matrice m lignes et n colonnes dont les lments sont gnrs de
manire alatoire entre 0 et 1
Signalons que si les entiers m et n sont gaux on peut se contenter de ne spcier quune
seule valeur de dimension : ones(n) est la matrice carre de dimension n dont tous les
lments valent 1. Mentionnons enn la commande magic(n) qui permet dobtenir une
matrice magique de dimension n.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> ones(3,2)
ans =
1 1
1 1
1 1
>> zeros(2)
ans =
0 0
0 0
>> rand(2,3)
ans =
0.4565 0.8214 0.6154
0.0185 0.4447 0.7919
>> magic(6)
ans =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
2.4.3 Manipuler des matrices
Le symbole deux-points ( :) permet dextraire simplement des lignes ou des colonnes
dune matrice. Le j
e
vecteur colonne de la matrice A est dsign par A( :,j). Cest simple,
il sut de traduire le symbole deux-points ( :) par tout . Ainsi A( :,j) dsigne toutes
les lignes et la j
e
colonne de la matrice A. Bien entendu, la i
e
ligne de la matrice A est
dsigne par A(i, :).
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(1,:)
ans =
17 24 1 8 15
>> A(:,2)
ans =
24
5
6
12
18
>>
Si lon souhaite changer les colonnes 2 et 3 de la matrice A une premire possibilit
consiste excuter :
Stphane Balac - Dbuter avec matlab 21
>> v = A(:,2); A(:,2) = A(:,3); A(:,3) = v;
A =
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
>>
On peut galement extraire plusieurs lignes ou colonnes simultanment. Si J est un
vecteur dentiers, A( :,J) est la matrice issue de A dont les colonnes sont les colonnes de
la matrice A dindices contenus dans le vecteur J. De mme A(J, :) est la matrice issue
de A dont les lignes sont les lignes de la matrice A dindices contenus dans le vecteur J.
Dune faon plus gnrale, il est possible de nextraire quune partie des lments des
lignes et colonnes dune matrice. Si L et C sont deux vecteurs dindices, A(L,C) dsigne la
matrice issue de la matrice A dont les lments sont les A(i,j) tels que i L et j C.
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> L = [1 3 5]; C = [3 4];
>> A(L,C)
ans =
1 8
13 20
25 2
>> A(1:2:5,3:4)
ans =
1 8
13 20
25 2
>>
Dans la dernire instruction, on a utilis la forme spciale permettant de dnir un
vecteur dont les composantes sont en progression arithmtique, voir le paragraphe 2.3.
Une seconde possibilit pour changer les lignes 2 et 3 de la matrice A consiste
excuter :
>> J = [1 3 2 4]; A = A(:,J)
A =
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
Stphane Balac - Dbuter avec matlab 22
>>
Il existe des commandes matlab permettant de manipuler globalement des matrices.
La commande diag permet dextraire la diagonale dune matrice : si A est une matrice,
v=diag(A) est le vecteur compos des lments diagonaux de A. Elle permet aussi de crer
une matrice de diagonale xe : si v est un vecteur de dimension n, A=diag(v) est la
matrice diagonale dont la diagonale est v.
>> A=eye(3); diag(A)
ans =
1
1
1
>> v=[1:3]
v =
1 2 3
>> diag(v)
ans =
1 0 0
0 2 0
0 0 3
>>
On nest pas oblig de se limiter la diagonale principale . . .La commande diag admet
un second paramtre k pour dsigner la k
e
sur-diagonale (si k > 0) ou la k
e
sous-diagonale
(si k < 0).
>> A = [4 5 6 7 ; 3 4 5 6
2 3 4 5; 1 2 3 4]
A =
4 5 6 7
3 4 5 6
2 3 4 5
1 2 3 4
>> diag(A,1)
ans =
5
5
5
>> diag(A,-2)
ans =
2
2
>>
On construit laide de la commande diag trs simplement des matrices tridiagonales.
Par exemple la matrice correspondant la discrtisation par dirences nies du problme
de Dirichlet en dimension 1 sobtient ainsi
>> N=5;
>> A=diag(2*ones(N,1)) - diag(ones(N-1,1),1) - diag(ones(N-1,1),-1)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>>
On dispose galement de la commande tril permet dobtenir la partie triangulaire
infrieure (l pour lower) dune matrice. La commande triu permet dobtenir la partie
triangulaire suprieure (u pour upper) dune matrice.
Stphane Balac - Dbuter avec matlab 23
>> A = [ 2 1 1 ; -1 2 1 ; -1 -1 2]
A =
2 1 1
-1 2 1
-1 -1 2
>> triu(A)
ans =
2 1 1
0 2 1
0 0 2
>> tril(A)
ans =
2 0 0
-1 2 0
-1 -1 2
>>
Comme pour la commande diag, les commandes triu et tril admettent un second
paramtre k. On peut ainsi obtenir la partie triangulaire suprieure (ou infrieure) partir
de la k
e
diagonale. Ainsi,
>> tril(A,-1)
ans =
0 0 0
-1 0 0
-1 -1 0
>> tril(A,1)
ans =
2 1 0
-1 2 1
-1 -1 2
>>
On obtient la transpose de la matrice A coecients rels en tapant A. Si la matrice
est coecients complexes, A retourne la matrice adjointe de A.
>> A = [0 1 2; -1 0 1; -2 -1 0]
A =
0 1 2
-1 0 1
-2 -1 0
>> A
ans =
0 -1 -2
1 0 -1
2 1 0
2.5 La structure sparse
On appelle matrice creuse (le terme anglais est sparse matrix ) une matrice compor-
tant une forte proportion de coecients nuls. De nombreux problmes issus de la physique
conduisent lanalyse de systmes linaires matrice creuse. Lintrt de telles matrices
rsulte non seulement de la rduction de la place mmoire (on ne stocke pas les zros) mais
aussi de la rduction du nombre doprations (on neectuera pas les oprations portant
sur les zros). Par dfaut dans matlab une matrice est considre comme pleine (ou full
en anglais), cest--dire que tous ses coecients sont mmoriss. Si M est une matrice, la
commande sparse(M) permet dobtenir la mme matrice mais stocke sous la forme sparse.
Si lon a une matrice stocke sous la forme sparse, on peut obtenir la mme matrice stocke
sous la forme ordinaire par la commande full. Il est possible de visualiser graphiquement
la structure dune matrice grce la commande spy. Si M est une matrice, la commande
spy(M) ouvre une fentre graphique et ache sous forme de croix les lments non-nuls de
la matrice. Le numro des lignes est port sur laxe des ordonnes, celui des colonnes en
abscisse. On obtient galement le nombre dlments non-nuls de la matrice. La commande
nnz permet dobtenir le nombre dlments non-nuls dune matrice.
Stphane Balac - Dbuter avec matlab 24
Reprenons lexemple de la matrice tridiagonale issue de la discrtisation par dirences
nies du problme de Dirichlet en dimension 1.
>> N=5;
>> A=diag(2*ones(N,1)) - diag(ones(N-1,1),1) - diag(ones(N-1,1),-1)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>> nnz(A)
ans =
13
>> B = sparse(A)
B =
(1,1) 2
(2,1) -1
(1,2) -1
(2,2) 2
(3,2) -1
(2,3) -1
(3,3) 2
(4,3) -1
(3,4) -1
(4,4) 2
(5,4) -1
(4,5) -1
(5,5) 2
>> whos
Name Size Bytes Class
A 5x5 200 double array
B 5x5 180 sparse array
N 1x1 8 double array
Grand total is 39 elements using 388 bytes
>> spy(A)
>>
Pour les trs grosses matrices creuses, il nest bien entendu pas souhaitable dutiliser
une structure pleine (full) pour dnir la matrice avant de passer en stockage sparse.
La commande sparse permet de dnir une matrice creuse directement sous la forme
sparse. On lutilise de la faon suivante : A = sparse(is,js,s,n,m) pour dnir une
matrice A R
n,m
dont les coecients sont nuls (et donc non mmoriss) sauf les lments
a
is(l),js(l)
qui valent s(l) pour l variant de 1 L longueur du tableau s (L = length(s)).
>> N=5;
Stphane Balac - Dbuter avec matlab 25
Fig. 2 Rsultat de la commande spy(B).
>> s =[2*ones(1,N), -ones(1,N-1), -ones(1,N-1)]
s =
Columns 1 through 12
2 2 2 2 2 -1 -1 -1 -1 -1 -1 -1
Column 13
-1
>> is = [1:N,1:N-1,2:N]
is =
Columns 1 through 12
1 2 3 4 5 1 2 3 4 2 3 4
Column 13
5
>> js = [1:N,2:N,1:N-1]
js =
Columns 1 through 12
1 2 3 4 5 2 3 4 5 1 2 3
Column 13
4
>> B = sparse(is,js,s,N,N)
B =
(1,1) 2
(2,1) -1
(1,2) -1
(2,2) 2
(3,2) -1
(2,3) -1
(3,3) 2
(4,3) -1
(3,4) -1
(4,4) 2
Stphane Balac - Dbuter avec matlab 26
(5,4) -1
(4,5) -1
(5,5) 2
>> A = full(B)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>>
Les commandes spdiags, speye et sprand permettent de construire des matrices dia-
gonales, identits et des matrices dont les lments sont des nombres alatoires avec un
stockage sparse . Elles sutilisent de la mme manire que leur quivalent diag, eye et
rand pour les matrices pleines.
Toutes les mathmatiques de premire anne en un seul volume :
Algbre et Analyse, Cours de Mathmatiques
de Premire Anne avec Exercices Corrigs
Stphane Balac, Frdric Sturm
Collection Sciences Appliques de lINSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stphane Balac - Dbuter avec matlab 27
3 Calculer avec matlab
3.1 Les constantes
Les principales constantes sont :
pi : 3.1415926535897
i :

1
j :

1
eps : prcision numrique relative
realmin : plus petit nombre virgule ottante manipulable
realmax : plus grand nombre virgule ottante manipulable
inf : inni. Est obtenu quand on essaie dvaluer une expression dont le r-
sultat excde realmax
NaN : not-a-number. Est obtenu quand on essaie deectuer une opration non-
dnie comme 0/0
Les valeurs des constantes eps, realmin et realmax dpendent de la machine sur laquelle
matlab est install. Par exemple sur une station SUN Ultra 1 on a eps= 2.2204e 16,
realmin= 2.2251e 308 et realmax= 1.7977e + 308.
Les noms des constantes nest pas rserv, cest--dire quil est possible de dnir des
variables de mme nom. Dans ce cas, lidenticateur fera rfrence la variable dnie
par lutilisateur et non plus la constante matlab. On fera attention par exemple, si lon
utilise le type complex, ne pas crire de boucles ayant i ou j comme indices. Pour que
lidenticateur fasse nouveau rfrence la constante matlab, il sut de supprimer la
variable de mme nom de la mmoire par la commande clear.
>> pi = 0; cos(pi)
ans =
1
>> clear pi
>> cos(pi)
ans =
-1
>>
3.2 Oprations et fonctions portant sur les scalaires
Il est bien entendu possible dutiliser matlab pour faire de simples additions (-:. Si
x et y sont deux variables scalaires de type rel, x+y, x-y, x*y et x/y dsignent les 4
oprations usuelles entre les valeurs de x et y dans R. Si x et y sont deux variables scalaires
de type complexe, x+y, x-y, x*y et x/y dsignent les 4 oprations usuelles entre les valeurs
de x et y dans C. Lexponentiation sobtient grce au symbole (la syntaxe est xy).
La commande rem donne le reste (remainder) de la division entire de deux entiers (la
syntaxe est rem(m,n)). Les commandes lcm(m,n) et gcd(m,n) retournent respectivement
Stphane Balac - Dbuter avec matlab 28
le plus petit multiple commun et le plus grand commun diviseur deux entiers m et n. La
commande factor(n) permet dobtenir les termes de la dcomposition en facteurs premiers
de lentier n.
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 (sobtient aussi par x.0.5),
abs(x) : valeur absolue de x,
sign(x) : fonction valant 1 si x est strictement positif, 0 si x est nul et -1 si x est
strictement ngatif.
Lorsque la fonction est dnie sur C, largument peut tre de type complexe. On dispose
galement de fonctions spciques aux complexes :
conj(z) : le conjugu de z,
abs(z) : le module de z,
angle(z) : argument de z,
real(z) : partie relle de z,
imag(z) : partie imaginaire de z.
Les fonctions darrondis sont :
round(x) : entier le plus proche de x,
floor(x) : arrondi par dfaut,
ceil(x) : arrondi par excs,
fix(x) : arrondi par dfaut un rel positif et par excs un rel ngatif.
Les fonctions trigonomtriques et hyperboliques sont :
Stphane Balac - Dbuter avec matlab 29
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).
3.3 Oprations et fonctions portant sur les vecteurs
Une particularit de matlab est de permettre deectuer des oprations de manire
globale sur les lments dun vecteur de type rel ou complexe sans avoir manipuler
directement ses lments. Si k est une variable scalaire et x un vecteur, linstruction k*x
multiplie tous les lments de x par k. Si x et y sont deux vecteurs de longueur identique,
linstruction z = x+y (respectivement x-y) dnit le vecteur z dont les lments sont z(i)
= x(i) + y(i) (respectivement z(i) = x(i) - y(i)). On obtient un vecteur z dont la
i
e
composante est le produit (respectivement le quotient) de la i
e
composante du vecteur x
par la i
e
composante du vecteur y en eectuant linstruction z = x.*y (respectivement z
= x./y). Attention ne pas oublier le point !
La commande cross(x,y) permet de calculer le produit vectoriel des deux vecteurs x
et y. Il ny a pas de commande ddie pour calculer le produit scalaire de deux vecteurs.
Il sobtient grce linstruction sum(x.*y).
Les fonctions mathmatiques incorpores dcrites au paragraphe 3.2 peuvent tre utili-
ses avec un argument qui est un vecteur. La fonction est alors applique tous les lments
du vecteur en mme temps.
>> x = [1:10:100]; y=sqrt(x)
y =
Columns 1 through 7
1.0000 3.3166 4.5826 5.5678 6.4031 7.1414 7.8102
Columns 8 through 10
8.4261 9.0000 9.5394
>>
Il existe galement quelques fonctions spciques aux vecteurs
2
:
Stphane Balac - Dbuter avec matlab 30
sum(x) : somme des lments du vecteur x,
prod(x) : produit des lments du vecteur x,
max(x) : plus grand lment du vecteur x,
min(x) : plus petit lment du vecteur x,
mean(x) : moyenne des lments du vecteur x,
sort(x) : ordonne les lments du vecteur x par ordre croissant,
fliplr(x) : renverse lordre des lments du vecteur x.
>> x=[3 1 2];
>> sum(x)
ans =
6
>> prod(x)
ans =
6
>> max(x)
ans =
3
>> min(x)
ans =
1
>> sort(x)
ans =
1 2 3
>> fliplr(x)
ans =
2 1 3
>>
Citons enn quelques fonctions logiques. Les commandes all
2
et any
2
servent tester
si les lments dun 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 dirents 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 dirent de 0 et faux (0) si le vecteur est compos exclusivement de 0.
3.4 Oprations et fonctions portant sur les matrices
Si les oprandes sont des matrices, les oprations + (addition), - (soustraction), *
(multiplication), (exponentiation), sont alors les oprations matricielles usuelles. Ainsi
A*B dsigne le produit de la matrice A par la matrice B, A+B dsigne la somme de ces deux
matrices et A2 le carr de la matrice A.
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B = [1 1; 2 2; 3 3]
B =
1 1
2 2
3 3
>> C = A*B
C =
14 14
32 32
>> C^2
ans =
644 644
1472 1472
>>
2
Ces commandes peuvent galement tre utilises avec une matrice. Dans ce cas la commande porte
sur chaque vecteur colonne de la matrice.
Stphane Balac - Dbuter avec matlab 31
Si les dimensions des matrices A et B sont incompatibles avec lopration matricielle,
matlab renvoi un message derreur :
>> A+B
??? Error using ==> + Matrix dimensions must agree.
>>
En plus des oprations matricielles usuelles, il est possible deectuer des oprations
entre matrices lment par lment. Pour cela, il faut faire prcder loprateur dun
point (.). Ainsi si A et B sont 2 matrices de mme dimension, on obtient la matrice dont le
terme dindices (i, j) est le produit des deux termes dindices (i, j) des matrices A et B par
la commande A.*B. De mme la commande A.2 fournit la matrice dont les termes sont
les carrs des termes de la matrice A. Bien entendu les commandes A.+B et A+B donnent le
mme rsultat.
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B=[1 2 3; 1 2 3]
B =
1 2 3
1 2 3
>> A.*B
ans =
1 4 9
4 10 18
>> A.^2
ans =
1 4 9
16 25 36
>>
Les fonctions matricielles les plus courantes sont :
Stphane Balac - Dbuter avec matlab 32
det(A) : renvoie le dterminant de la matrice carre A.
eig(A) : renvoie les valeurs propres (eigenvalues) de la matrice carre A. Si lon
souhaite galement les vecteurs propres on excutera [V,D] = eig(A)
qui renvoie une matrice diagonale D forme des valeurs propres de A
et une matrice V dont les vecteurs colonnes sont les vecteurs propres
correspondant.
poly(A) : renvoie les coecients du polynme caractristique associ la matrice
carre A. On sera vigilant lordre dans lequel sont rangs les coecients :
le premier lment du vecteur est le coecient du monme de plus haut
degr. Ainsi dans lexemple suivant il faut lire p() =
3
6
2
7227,
>> A = [1 2 3 ; 4 5 6 ; 7 8 0]; p = poly(A)
p =
1 -6 -72 -27
inv(A) : renvoie linverse de la matrice carre A.
rank(A) : renvoie le rang de la matrice carre A.
trace(A) : renvoie la trace de la matrice A.
expm(A) : renvoie lexponentielle matricielle de A.
On peut obtenir les direntes normes dune matrice A grce la commande norm.
norm(A) : renvoie la norme 2 de la matrice A.
norm(A,2) : mme chose que norm(A).
norm(A,1) : norme 1 de la matrice A, A
1
= max
1jn

1in
|a
ij
| .
norm(A,inf) : norme inni de la matrice A, A

= max
1in

1jn
|a
ij
| .
norm(A,fro) : norme de Frobenius de la matrice A, A
fro
=


1i,jn
|a
ij
|
2
.
Ces fonctions matricielles incorpore de matlab peuvent tre utilises avec un argu-
ment qui est une matrice sparse . Les exceptions sont les fonctions rank, expm et norm qui
ncessitent de passer en stockage full (on excutera donc rank(full(B)) par exemple).
3.5 Rsolution de systmes linaires
La commande matlab \ (backslash) est la commande gnrique pour rsoudre un
systme linaire. Lalgorithme mis en uvre dpend de la structure de la matrice A du
systme. matlab utilise dans lordre les mthodes suivantes :
Si A est une matrice triangulaire, le systme est rsolu par simple substitution.
Si la matrice A est symtrique ou hermitienne, dnie positive, la rsolution est
eectue par la mthode de Choleski.
Si A est une matrice carre mais nentrant pas dans les deux cas prcdents, une
Stphane Balac - Dbuter avec matlab 33
factorisation LU est ralise en utilisant la mthode dlimination de Gauss avec
stratgie de pivot partiel.
Si A nest pas une matrice carre, la mthode QR est utilise.
Dans le cas des matrices stockes sous forme sparse, des algorithmes particuliers sont
mis en uvre. Chacune des mthodes prcdentes peut tre utilise de manire spcique
grce aux commandes chol, lu, qr. Il est galement possible dutiliser des mthodes itra-
tives. Les commandes cgs, bicg, bicgstab mettent par exemple en uvre des mthodes
de type gradient conjugu.
>> A=[1 2 ;3 4]; b=[1 1];
>> x= A\b
x =
-1
1
>> A*x
ans =
1
1
>>
3.6 Les polynmes
Sous matlab le polynme de degr n, p(x) = a
n
x
n
+ a
n1
x
n1
+ + a
1
x + a
0
est
dni par un vecteur p de dimension n+1 contenant les coecients {a
i
}
i=0,...,n
rangs dans
lordre dcroissant des indices. Cest--dire que lon a p(1) = a_n, . . ., p(n+1) = a_0.
La commande polyval permet dvaluer le polynme p (la fonction polynmiale) en
des points donns. La syntaxe est polyval(p,x) o x est une valeur numrique ou un
vecteur. Dans le second cas on obtient un vecteur contenant les valeurs de la fonction
polynmiale aux dirents points spcis dans le vecteur x. Utilise avec la commande
fplot, la commande polyval permet de tracer le graphe de la fonction polynmiale sur
un intervalle [x
min
, x
max
] donn. La syntaxe de linstruction est
fplot(polyval([ a_n, ..., a_0] , x) , [x_min , x_max]).
Voici par exemple comment dnir le polynme p(x) = x
2
1. Le graphe de la fonction
polynmiale est prsent la gure 3.
>> p = [ 1, 0, -1];
>> polyval(p,0)
ans =
-1
>> polyval(p,[-2,-1,0,1,2])
ans =
3 0 -1 0 3
>> fplot(polyval([ 1, 0, -1] , x) , [-3,3]), grid
>>
On obtient les racines du polynme p grce linstruction roots(p).
Stphane Balac - Dbuter avec matlab 34
3 2 1 0 1 2 3
1
0
1
2
3
4
5
6
7
8
Fig. 3 Graphe de la fonction polynmiale p(x) = x
2
1.
Linstruction poly permet dobtenir la reprsentation canonique p(x) = a
n
x
n
+a
n1
x
n1
+
+ a
1
x + a
0
dun polynme de degr n dont on connait les n racines {x
i
}
i=1,...,n
. Les
coecients {a
i
}
i=0,...,n
sont obtenus sous forme dun vecteur p et sont rangs dans lordre
dcroissant des indices. Cest--dire que p(1) = a_n, . . ., p(n+1) = a_0.
>> r = roots(p)
r =
-1.0000
1.0000
>> poly(r)
ans =
1.0000 0.0000 -1.0000
>>
Stphane Balac - Dbuter avec matlab 35
4 Les entres-sorties
4.1 Les formats dachage des rels
matlab dispose de plusieurs formats dachage des rels. Par dfaut le format est le
format court 5 chires. Les autres principaux formats sont :
format long : format long 15 chires.
format short e : format court 5 chires avec notation en virgule ottante.
format long e : format long 15 chires avec notation en virgule ottante.
matlab dispose galement des formats format short g et format long g qui utilise la
meilleure des deux critures virgule xe ou virgule ottante. On obtiendra tous les
formats dachage possibles en tapant help format.
On impose un format dachage en tapant linstruction de format correspondante dans
la fentre de contrle, par exemple format long. Pour revenir au format par dfaut on
utilise la commande format ou format short.
>> pi
ans =
3.1416
>> format long
>> pi
ans =
3.14159265358979
>> format short e
>> pi^3
ans =
3.1006e+01
>> format short g
>> pi^3
ans =
31.006
>> format short
>>
4.2 Achage simple, la commande disp
La commande disp permet dacher un tableau de valeurs numriques ou de carac-
tres. Lautre faon dacher un tableau est de taper son nom. La commande disp se
contente dacher le tableau sans crire le nom de la variable ce qui peut amliorer cer-
taines prsentations.
>> A = magic(4);
>> disp(A)
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A
A =
16 2 3 13
5 11 10 8
9 7 6 12
Stphane Balac - Dbuter avec matlab 36
4 14 15 1
>>
On utilise frquemment la commande disp avec un tableau qui est une chane de
caractres pour acher un message. Par exemple disp(Calcul du dterminant de la
matrice A). On utilise galement la commande disp pour acher un rsultat. Par
exemple disp([Le dterminant de la matrice A vaut , num2str(det(A))]). On re-
marque que lusage de la commande disp est alors un peu particulier. En eet un tableau
doit tre dun type donn, les lments dun mme tableau ne peuvent donc tre des chanes
de caractres et des valeurs numriques. On a donc recours la commande num2str (
number to string ) pour convertir une valeur numrique en une chane de caractres. Par
dfaut la commande num2str ache 4 dcimales mais il est possible de lui spcier le
nombre de dcimales souhait en second paramtre. De mme il est possible de lui spcier
un format dachage particulier de la valeur numrique ; on consultera la documentation
matlab pour plus de dtails. Attention, si la chane de caractres contient une apostrophe
il est impratif de doubler lapostrophe.
4.3 Lecture
La commande input permet de demander lutilisateur dun programme de fournir
des donnes. La syntaxe est var = input( une phrase ). La phrase une phrase est
ache et matlab attend que lutilisateur saisisse une donne au clavier. Cette donne
peut tre une valeur numrique ou une instruction matlab. Un retour chariot provoque
la n de la saisie. Une valeur numrique est directement aecte la variable var tandis
quune instruction matlab est value et le rsultat est aect la variable var. Il est
possible de provoquer des sauts de ligne pour arer le prsentation en utilisant le symbole
\n de la manire suivante : var = input( \n une phrase : \n ). Pensez mettre un
point virgule ( ;) la n de linstruction si vous ne souhaitez pas voir sacher var = .
Sous cette forme il est impossible davoir une donne de type chane de caractres dans
la mesure o matlab essaie dinterprter cette chane de caractres comme une instruction.
Si lon souhaite saisir une rponse de type chane de caractres on utilise la syntaxe var =
input( une phrase ,s). Signalons quun retour chariot (sans autre chose) initialise
la variable var au tableau vide []. Voici un exemple dutilisation de la commande input
(on suppose que la variable res contient une valeur numrique).
rep = input( Affichage du resultat ? o/n [o] ,s);
if isempty(rep), rep = o; end
if rep == o | rep == y
disp([Le resultat vaut , num2str(res)])
end
4.4 Impressions diriges par format
La commande sprintf permet limpression de variables selon un modle donn. Un
modle ddition se prsente sous la forme du symbole pourcent (%) suivi dindications
permettant de composer le contenu du champ imprimer, en particulier sa longueur en
nombre de caractres. Le modle ddition utilis par matlab est le modle ddition du
langage C.
Stphane Balac - Dbuter avec matlab 37
La syntaxe de la commande sprintf est :
sprintf(format, variables)
o
variables est le nom des variables imprimer suivant le modle ddition spci
dans format ;
format est le format ddition. Il sagit dune chane de caractres contenant les
modles dditions des variables imprimer.
Modle ddition de caractres
Un modle ddition de caractres est de la forme %Ls o % est le symbole de dbut
de format et s le symbole prcisant que la donne est de type chane de caractres. L est
un entier donnant la longueur total du champ (en nombre de caractres). Par dfaut le
champ est justi droite (si la longueur de la chane de caractres est plus petite que la
longueur L du champ, des espaces sont insrs avant la chane de caractres). Le symbole
(moins) juste aprs le symbole % permet de justier gauche. En labsence de lentier
L la longueur totale du champ est gale au nombre de caractres de la chane.
>> sprintf(%s, il fera beau a Brest)
ans =
il fera beau a Brest
>> temps = il fera beau a Brest; sprintf(%s,temps)
ans =
il fera beau a Brest
>> sprintf(%30s, temps)
ans =
il fera beau a Brest
>> sprintf(%-30s, temps)
ans =
il fera beau a Brest
>> sprintf(meteo : %s, temps)
ans =
meteo : il fera beau a Brest
>>
Modle ddition des rels
Un modle ddition de rel est de la forme %L.Dt, o % est le symbole de dbut de
format, L est un entier donnant la longueur total du champ (en nombre de caractres, point
virgule compris), D est le nombre de dcimales acher et t spcie le type de notation
utilise. Par dfaut le champ est justi droite (si la longueur de la variable est plus petite
que la longueur du champ L, des espaces sont insrs gauche). Le symbole (moins)
permet de justier gauche. Le symbole + (plus) provoque lachage systmatique dun
signe + devant les rels positifs.
Les principales valeurs possibles pour t sont les suivantes :
Stphane Balac - Dbuter avec matlab 38
d : pour les entiers
e : pour une notation virgule ottante o la partie exposant est dlimite
par un e minuscule (ex : 3.1415e+00)
E : mme notation mais E remplace e (ex : 3.1415E+00)
f : pour une notation virgule xe (ex : 3.1415)
g : la notation la plus compacte entre la notation virgule ottante et la
notation virgule xe est utilise
>> x = pi/3; y = sin(x);
>> sprintf(sin(%8.6f) = %4.2f, x,y)
ans =
sin(1.047198) = 0.87
>> sprintf(sin(%8.6f) = %4.2E, x,y)
ans =
exp(1.047198) = 8.66E-01
>>
Utilisations particulires
La commande sprintf est vectorielle : si la variable nest pas scalaire le format
dimpression est rutilis pour tous les lments du tableau, colonne par colonne.
>> x = [1:10];
>> sprintf( %d ,,x)
ans =
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
>>
Il est possible dutiliser les symboles suivant dans les chanes de caractres
\n : provoque le passage une nouvelle ligne
\t : insre une tabulation horizontale
\b : dcale limpression du champ suivant dun caractre vers la gauche
\r : saut horizontal
>> z =[]; x = [1:10]; for i=1:length(x), z = [z ,x(i), log(x(i))]; end;
>> s = sprintf(%4.1f | %8.6E \n , z )
ans =
1.0 | 0.000000E+00
2.0 | 6.931472E-01
3.0 | 1.098612E+00
4.0 | 1.386294E+00
5.0 | 1.609438E+00
6.0 | 1.791759E+00
7.0 | 1.945910E+00
Stphane Balac - Dbuter avec matlab 39
8.0 | 2.079442E+00
9.0 | 2.197225E+00
10.0 | 2.302585E+00
>>
Si lon a besoin dacher le caractre %, on le doublera %% pour quil ne soit pas
interprt comme le dbut dun format.
La commande fprintf est lanalogue de sprintf pour imprimer de variables selon un
modle donn dans un chier.
Stphane Balac - Dbuter avec matlab 40
5 Programmer sous matlab
5.1 Scripts et fonctions
Il est possible denregistrer une squence dinstructions dans un chier (appel un
M-le ) et de les faire excuter par matlab. Un tel chier doit obligatoirement avoir une
extension de la forme .m (do le nom M-le) pour tre considr par matlab comme un
chier dinstructions. On distingue 2 types de M-le, les chiers de scripts et les chiers de
fonctions. Un script est un ensemble dinstructions matlab qui joue le rle de programme
principal. Si le script est crit dans le chier de nom nom.m on lexcute dans la fentre
matlab en tapant nom. Mme si lon ne souhaite pas proprement parler crire de pro-
gramme, utiliser un script est trs utile. Il est en eet beaucoup plus simple de modier
des instructions dans un chier laide dun diteur de texte que de retaper un ensemble
dinstructions matlab dans la fentre de commande.
Les chiers de fonctions ont deux rles. Ils permettent lutilisateur de dnir des
fonctions qui ne gurent pas parmi les fonctions matlab incorpores ( built-in functions
) et de les utiliser de la mme manire que ces dernires (ces fonctions sont nommes
fonctions utilisateur ). Ils sont galement un lment important dans la programmation
dapplications o les fonctions jouent le rle des fonctions et procdures des langages de
programmation usuels.
On dnit la fonction fonc de la manire suivante :
function [vars
1
, . . . , vars
n
] = fonc(vare
1
, . . . , vare
m
)
squence dinstructions
o
vars
1
, . . . , vars
n
sont les variables de sortie de la fonction;
vare
1
, . . . , vare
m
sont les variables dentre de la fonction;
squence dinstructions est le corps de la fonction.
Le chier doit imprativement commencer par le mot-cl function. Suit entre crochets les
variables de sortie de la fonction, le symbole =, le nom de la fonction et enn les variables
dentre entre parenthses. Si la fonction ne possde quune seule variable de sortie, les
crochets sont inutiles. Il est impratif que la fonction ayant pour nom fonc soit enregistre
dans un chier de nom fonc.m sans quoi cette fonction ne sera pas visible par matlab.
Dans lexemple qui suit, on dnit une fonction modulo qui calcule la valeur de a modulo
n en prenant pour systme de rsidus 1, , n au lieu de 0, , n 1 (systme de rsidus
considr par la fonction incorpore mod). Les lignes qui suivent doivent tre enregistres
dans un chier de nom modulo.m.
function [r,q] = modulo(a,n)
% Calcule la valeur de a modulo n en prenant pour systeme de residus
% 1, ... , n au lieu de 0, ... , n-1.
%
% appel : [r,q] = modulo(a,n)
%
% Arguments de sortie :
% r : le residu
% q : le quotient
Stphane Balac - Dbuter avec matlab 41
q = floor(a./n);
r = a - n*q;
% si le reste de la division entiere vaut 0, le residu vaut par convention n
if r == 0, r = n; end
Les lignes prcdes du symbole % sont des lignes de commentaire. Les lignes de com-
mentaire situes entre la ligne function ... et la 1
re
ligne dinstructions sont aches si
lon demande de laide sur la fonction modulo.
>> help modulo
Calcule la valeur de a modulo n en prenant pour systeme de residus
1, ... , n au lieu de 0, ... , n-1.
appel : [r,q] = modulo(a,n)
Arguments de sortie :
r : le residu
q : le quotient
>>
Lappel dune fonction utilisateur seectue de la mme faon que lappel de nimporte
quelle fonction matlab :
>> b = 10 ; m = 4;
>> [r,q] = modulo(b,m)
r =
2
q =
2
>> modulo(10,5)
ans =
5
>>
Remarques :
Il ny a pas de mot-cl (par exemple end) pour indiquer la n de la fonction. La
fonction est suppose se terminer la n du chier. Il est toutefois possible de
provoquer un retour au programme appelant dans le corps de la fonction grce la
commande return.
On ne peut crire quune seule fonction par chier (qui doit porter le nom de cette
fonction). Toutefois dans la version 5 de matlab existe la notion de sous-fonction .
Une sous-fonction est une fonction crite dans le mme chier quune autre fonction
Stphane Balac - Dbuter avec matlab 42
(dite principale) et qui ne sera utilisable que par cette fonction principale (une sous-
fonction ne peut pas tre appele par un autre sous-programme que la fonction
principale).
Si le chier ne commence pas par le mot-cl function on a tout simplement crit un
script !
La gestion des variables dentre et de sortie est trs souple sous matlab. Si lon
nest intress que par le rsidu et pas par le quotient, on peut se contenter de ne mettre
quune seule variable de sortie, v = modulo(10,4). Dans cet appel la variable v contiendra
le rsidu (la premire variable de sortie). Par contre, mme si lon ne souhaite recueillir
que le quotient, on est oblig deectuer un appel de la forme [r,q] = modulo(10,4) et
donc de dnir une variable inutile. Aussi, dune manire gnrale, il est bon de ranger
les variables de sortie par ordre dimportance . Il est galement possible dappeler une
fonction donne avec moins de variables dentre que le nombre indiqu pour la dnition
de la fonction (il faut bien entendu que le corps de la fonction soit programm de sorte de
prvoir cette ventualit). Il existe deux fonctions matlab utiles pour grer cette situation :
nargin qui retourne le nombre de variables dentre utiliss lors de lappel et nargout qui
retourne le nombre de variables de sortie prvues lors de lappel. Voici un petit exemple
venant illustrer ces possibilits.
function [A,rang] = matale(T,m,n)
% Construit une matrice A de m lignes et n colonnes ayant des elements
% entiers generes de maniere aleatoire entre 0 et T.
% Calcule le rang de la matrice si lappel est effectue avec 2 arguments
% de sortie.
% Si la matrice est carree, le parametre n peut etre omis.
%
% Appels:
% [A,r] = Matale(T,m,n)
% [A,r] = Matale(T,m)
% A = Matale(T,m,n)
% A = Matale(T,m)
if nargin == 2
A = fix(T*rand(m));
else
A = fix(T*rand(m,n));
end
if nargout == 2
rang = rank(A);
end
Dans cet exemple, on gre les variables dentre de la fonction de sorte de ne pas avoir
besoin de donner lors de lappel le nombre de lignes et de colonnes si la matrice est carre.
On gre aussi les variables de sortie an de ne pas calculer le rang de la matrice si aucune
variable de sortie pour le rsultat nest prvue lors de lappel.
Stphane Balac - Dbuter avec matlab 43
>> [A,r] = matale(20,3,4)
A =
16 13 13 10
10 16 7 14
4 0 16 8
r =
3
>> [A,r] = matale(20,3)
A =
12 0 18
5 14 9
3 8 8
r =
3
>> A = matale(20,3)
A =
8 7 2
17 16 4
1 0 3
>>
Un point important concerne la gestion des variables entre le programme principal (ou
le workspace) et les fonctions de lutilisateur. Toutes les variables dnies lintrieur dune
fonction sont des variables locales cette fonction. La communication avec des variables
du programme principal (ou du workspace ) ou avec des variables dautres fonctions se
fait uniquement par les variables dentre et sortie de la fonction. Une alternative existe
toutefois : il est possible de dclarer certaines variables comme des variables globales. Une
variable globale peut tre partage entre un programme principal et plusieurs fonctions sans
quil soit besoin de la spcier parmi les variables dentre-sortie des direntes fonctions.
On dclare une variable globale grce au mot cl global. Par exemple pour dclarer la
variable numex globale on crit global numex. Attention, la dclaration global numex
doit tre reprise dans chaque fonction utilisant numex comme variable.
5.2 Oprateurs de comparaison et oprateurs logiques
Les oprateurs 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)
= : dirent de (x = y)
Les oprateurs logiques sont :
& : et (x & y)
| : ou (x | y)
: non ( x)
Les oprateurs de comparaison et les oprateurs logiques sont utiliss essentiellement dans
les instructions de contrle, voir le paragraphe 5.3.
Stphane Balac - Dbuter avec matlab 44
5.3 Instructions de contrle
Les instructions de contrle sous matlab sont trs proches de celles existant dans
dautres langages de programmation.
5.3.1 Boucle FOR : parcours dun intervalle
Une premire possibilit pour excuter une squence dinstructions de manire rpte
consiste eectuer une boucle pour les valeurs dun 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 dinstructions
end
o
indice est une variable appele lindice de la boucle ;
borne_inf et borne_sup sont deux constantes relles (appeles paramtres de la
boucle) ;
squence dinstructions est le traitement eectuer pour les valeurs dindices 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 dinstructions
est excut (borne_sup borne_inf + 1) fois, pour les valeurs de la variable indice gales
borne_inf, borne_inf + 1, , borne_sup 1, borne_sup. Si borne_inf est strictement
plus grand que borne_sup, on passe linstruction qui suit immdiatement linstruction
de n de boucle (end).
Remarque :
Lindice de boucle ne prend pas ncessairement des valeurs entires. Dautre part il nest
pas ncessaire que lindice de la boucle apparaisse dans le corps de la boucle ; par contre il
est interdit de modier sa valeur sil apparat. Il est possible dimbriquer 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 a bien grer la borne suprieure ! Voici un exemple (idiot) venant illustrer les
possibilits de variations de lindice 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
>>
Stphane Balac - Dbuter avec matlab 45
Voici un exemple dutilisation dune boucle pour calculer n!
3
>> n = 4;
>> nfac = 1;
>> for k = 1:n
nfac = nfac*k;
end
>> nfac
nfac =
24
>>
5.3.2 Boucle WHILE : tant que . . . faire
Une seconde possibilit pour excuter une squence dinstructions de manire rpte
consiste eectuer une boucle tant quune condition reste vrie. On arrte de boucler
ds que cette condition nest plus satisfaite. Ce processus est mis en uvre par la boucle
while .
Syntaxe :
while expression logique
squence dinstructions
end
o
expression logique est une expression dont le rsultat peut tre vrai ou faux ;
squence dinstructions est le traitement eectuer tant que expression logique est
vraie.
Interprtation :
Tant que expression logique est vraie le traitement squence dinstructions est excut sous
forme dune boucle. Lorsque expression logique devient faux, on passe linstruction qui
suit immdiatement linstruction de n de boucle (end).
Remarque :
expression logique est en gnral le rsultat dun test (par exemple i < Imax) ou le r-
sultat dune fonction logique (par exemple all(x)). Il est impratif que le traitement de
la squence dinstructions agisse sur le rsultat de expression logique sans quoi on boucle
indniment (-:.
Voici comment calculer n!
3
avec une boucle while :
>> n = 4;
>> k = 1; nfac = 1;
Stphane Balac - Dbuter avec matlab 46
>> while k <= n
nfac = nfac*k;
k = k+1;
end
>> nfac
nfac =
24
>>
5.3.3 Linstruction conditionne IF
On a parfois besoin dexcuter une squence dinstructions seulement dans le cas o
une condition donne est vrie au pralable. Direntes formes dinstruction conditionne
existent sous matlab.
Linstruction conditionne la plus simple a la forme suivante :
Syntaxe :
if expression logique
squence dinstructions
end
o
expression logique est une expression dont le rsultat peut tre vrai ou faux ;
squence dinstructions est le traitement eectuer si expression logique est vraie.
Interprtation :
la squence dinstructions nest excute que si le rsultat de lvaluation de lexpression
logique est vraie (cest--dire vaut 1). Dans le cas contraire on excute linstruction qui
suit le mot cl end. Dans le cas o lexpression logique est vraie, aprs excution de la
squence dinstructions on reprend le programme linstruction qui suit le mot cl end.
Remarque :
Contrairement certains langages de programmation, il ny a pas de mot cl then dans
cette instruction conditionne. Notez galement que la marque de n de bloc conditionn
est le mot cl end et non pas endif .
Il existe une squence conditionne sous forme dalternatives :
Syntaxe :
if expression logique
squence dinstructions 1
else
squence dinstructions 2
3
Le lecteur attentif sait calculer n! plus simplement . . .Comme par exemple en excutant prod([1 :n])
Stphane Balac - Dbuter avec matlab 47
end
o
expression logique est une expression dont le rsultat peut tre vrai ou faux ;
squence dinstructions 1 est la squence dinstructions excuter dans le cas o
expression logique est vraie et squence dinstructions 2 est la squence dinstructions
excuter dans le cas o expression logique est faux.
Interprtation :
Si expression logique est vraie la squence dinstructions 1 est excute, sinon cest la
squence dinstructions 2 qui est excute. Le droulement du programme reprend ensuite
la premire instruction suivant le mot cl end.
Il est bien entendu possible dimbriquer des squences dinstructions conditionnes (au
sens o la squence dinstruction conditionne contient des squences dinstructions condi-
tionne). Pour une meilleure lisibilit, il est recommand dutiliser des indentations an de
mettre en vidence limbrication des squences dinstructions conditionnes.
Il est possible deectuer un choix en cascade :
Syntaxe :
if expression logique 1
squence dinstructions 1
elseif expression logique 2
squence dinstructions 2
.
.
.
elseif expression logique N
squence dinstructions N
else
squence dinstructions par dfaut
end
Interprtation :
Si expression logique 1 est vraie la squence dinstructions 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 dinstructions 2 est excute et le programme reprend ensuite la
premire instruction suivant le mot cl end, etc. Si aucune des expressions logiques 1 N
nest vraie alors squence dinstructions par dfaut est excute.
Remarque :
Attention ne pas laisser despace entre else et if ; le mot cl est elseif.
Stphane Balac - Dbuter avec matlab 48
On utilise frquemment un choix en cascade lors dinitialisation de donnes. Par exemple,
on initialise une matrice A en fonction de la valeur dune variable numex (numro dexemple)
de la manire suivante :
if numex == 1
A = ones(n);
elseif numex == 2
A = magic(n);
elseif numex == 3 | numex == 4
A = rand(n);
else
error(numero dexemple non prevu ...);
end
5.3.4 Choix ventil, linstruction switch
Une alternative lutilisation dune squence dinstructions conditionnes pour eec-
tuer un choix en cascade existe. Il sagit de linstruction switch.
Syntaxe :
switch var
case cst_1 ,
squence dinstructions 1
case cst_2 ,
squence dinstructions 2
.
.
.
case cst_N ,
squence dinstructions N
otherwise
squence dinstructions par dfaut
end
o
var est une variable numrique ou une variable chane de caractres ;
cst_1, . . ., cst_N, sont des constantes numrique ou des constantes chane de carac-
tres ;
squence dinstructions i est la squence dinstructions excuter si var==cst_i.
Interprtation :
Si la variable var est gale lune des constantes cst_1, . . ., cst_N, (par exemple cst_i)
alors la squence dinstructions correspondante (ici squence dinstructions i) est excute.
Le programme reprend ensuite la premire instruction suivant le mot-cl end. Si la
Stphane Balac - Dbuter avec matlab 49
variable var nest gale aucune des constantes la squence dinstructions par dfaut est
excute.
Remarque :
La variable var doit bien entendu tre du mme type que les constantes cst_1, . . ., cst_N.
Il nest pas ncessaire de prvoir un cas par dfaut (bien que cela soit prfrable). Sil ny
a pas de cas par dfaut et si la variable var nest gale aucune des constantes cst_1, . . .,
cst_N, alors le programme continue la premire instruction suivant le mot-cl end.
Si la squence dinstructions excuter est la mme pour dirents cas il est possible de
les regrouper. La syntaxe est alors,
case { cst_k , cst_l , ...}
squence dinstructions commune
Reprenons lexemple o lon souhaite initialiser une matrice A en fonction de la valeur
prise par une variable numrique numex (numro dexemple). En utilisant un choix ventil
on obtient :
switch numex
case 1,
A = ones(n)
case 2,
A = magic(n);
case {3,4},
A = rand(n);
otherwise
error(numero dexemple 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(cest pourtant facile ...);
end
Stphane Balac - Dbuter avec matlab 50
5.3.5 Interruption dune boucle de contrle
Il est possible de provoquer une sortie prmature dune boucle de contrle. Linstruc-
tion break permet de sortir dune boucle for ou dune boucle while. Lexcution se poursuit
alors squentiellement partir de linstruction suivant le mot cl end fermant la boucle.
En cas de boucles imbriques, on interrompt seulement lexcution de la boucle intrieure
contenant linstruction break.
Linstruction return provoque un retour au programme appelant (ou au clavier). Les
instructions suivant le return ne sont donc pas excutes. Linstruction return est souvent
utilise conjointement avec une instruction conditionne par exemple pour tester dans le
corps dune fonction si les paramtres dentre ont les valeurs attendues.
Linstruction error permet darrter un programme et dacher un message derreur.
La syntaxe est error( message derreur ). Linstruction warning permet dacher
un message de mise en garde sans suspendre lexcution du programme. La syntaxe est
warning( message de mise en garde ). Il est possible dindiquer matlab de ne
pas acher les messages de mise en garde dun programme en tapant warning off dans
la fentre de commandes. On rtablit lachage en tapant warning on.
On peut ainsi amliorer la fonction matale de la manire suivante :
function [A,rang] = matale(T,m,n)
% Construit une matrice A de m lignes et n colonnes ayant des elements
% entiers generes de maniere aleatoire entre 0 et T.
% Calcule le rang de la matrice si lappel est effectue avec 2 arguments
% de sortie.
% Si la matrice est carree, le parametre n peut etre omis.
%
% Appels:
% [A,r] = Matale(T,m,n)
% [A,r] = Matale(T,m)
% A = Matale(T,m,n)
% A = Matale(T,m)
% si la fonction est appelee avec un nombre darguments dentree
% different de 2 ou 3, on arrete tout ...
if nargin ~= 2 & nargin ~= 3,
error( La fonction matale doit avoir 2 ou 3 arguments dentree );
end
if nargin == 2
A = fix(T*rand(m));
else
A = fix(T*rand(m,n));
end
if nargout == 2
rang = rank(A);
if nargin == 2,
rangx = m;
else
Stphane Balac - Dbuter avec matlab 51
rangx = min([m,n]);
end
if rang ~= rangx, warning( Le rang nest pas maximum ); end;
end
On obtient alors les messages suivants :
>> A = matale(3);
??? Error using ==> matale
La fonction matale doit avoir 2 ou 3 arguments dentree
>> A = matale(20,3)
A =
8 18 8
12 14 18
15 3 18
>> [A,r] = matale(20,3)
Warning: Le rang nest pas maximum
> In /home0/maths/balac/DOCMATLAB/matale.m at line 34
A =
1 4 3
10 15 11
3 12 9
r =
2
>>
La commande pause permet dinterrompre lexcution du programme. Lexcution nor-
male reprend ds que lutilisateur enfonce une touche du clavier. Linstruction pause(n)
suspend lexcution du programme pendant n secondes.
5.4 Un exemple complet
Une technique de construction de carrs magiques dordre impair a t propose par
Manuel Moschopoulos au dbut du XIV
e
sicle. Cette technique est dcrite dans [1].
Notons l(x) le numro de la ligne et c(x) le numro de la colonne du carr sur lequel se
trouve lentier x. Partant dun carr dordre impair n = 2k + 1, la technique de Moscho-
poulos peut se formuler comme suit :
- Initialisation de lalgorithme en plaant lunit dans la case immdiatement au dessous de
la case centrale, autrement dit lintersection de la (k +1)
e
colonne et de la (k +2)
e
ligne :
l(1) = k + 2;
c(1) = k + 1.
- Connaissant la position (l(x), c(x)) de lentier x, on place lentier x + 1 suivant les rgles
suivantes :
Stphane Balac - Dbuter avec matlab 52
si x nest pas un multiple de n, alors
l(x + 1) = 1 + l(x) ( modulo n),
c(x + 1) = 1 + c(x) ( modulo n);
si x est multiple de n, alors
l(x + 1) = 2 + l(x) ( modulo n),
c(x + 1) = c(x) ( modulo n).
Dans ces rgles pour la prise du modulo, le systme de rsidus que lon considre est
1, 2, . . . , n et non pas 0, 1, . . . , n 1.
La fonction magik met en uvre la mthode de Moschopoulos.
function M = magik(n)
%
% Calcule le carre magique dordre n selon la methode
% de Moschopoulous.
%
% Entree:
% n : ordre du carre (entier impair)
% Sortie:
% M : le carre magique
%
if rem(n,2) == 0,
msg = [la methode de Moschopoulous ne construit que des carres ...
, dordre impair];
error(msg)
end
k = (n-1)/2;
l(1) = k+2;
c(1) = k+1;
M(l(1),c(1)) = 1;
for x = 2:n.^2
[l(x),c(x)] = pos(x-1,l(x-1),c(x-1),n);
M(l(x),c(x)) = x;
% ou plus simplement M(pos(x,l(x-1),c(x-1))) = x;
end
function [ly,cy] = pos(x,lx,cx,n)
%
% Retourne la position (indice de ligne ly et indice de colonne cy)
% dans le carre magique dordre nde lentier y = x+1 selon la
Stphane Balac - Dbuter avec matlab 53
% regle de Moschopoulous.
%
% Entree:
% n : ordre du carre (entier impair)
% x : lentier considere
% lx : indice de ligne de lentier x dans le carre magique
% cx : indice de colonne de lentier x dans le carre magique
%
% Sortie:
% ly : indice de ligne de lentier y=x+1 dans le carre magique
% cy : indice de colonne de lentier y=x+1 dans le carre magique
%
if rem(x,n) == 0
ly = modulo(2+lx,n);
cy = modulo(cx,n);
else
ly = modulo(1+lx,n);
cy = modulo(1+cx,n);
end
Voici quelques exemples dutilisation de la fonction magik. On vrie que la somme
des lments des direntes lignes ainsi que la somme des lments des direntes colonnes
sont bien constantes. Pour calculer la somme des lments diagonaux cest un peu plus
compliqu. On remarque que le carr magique construit dire du carr magique retourn
par la fonction matlab incorpore magic.
>> magik(4)
??? Error using ==> magik
la methode de Moschopoulous ne construit que des carres dordre impair
>> magik(5)
ans =
11 24 7 20 3
4 12 25 8 16
17 5 13 21 9
10 18 1 14 22
23 6 19 2 15
>> sum(magik(5),1)
ans =
65 65 65 65 65
>> sum(magik(5),2)
ans =
65
65
65
65
65
>> magic(5)
Stphane Balac - Dbuter avec matlab 54
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Toutes les mathmatiques de premire anne en un seul volume :
Algbre et Analyse, Cours de Mathmatiques
de Premire Anne avec Exercices Corrigs
Stphane Balac, Frdric Sturm
Collection Sciences Appliques de lINSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stphane Balac - Dbuter avec matlab 55
6 Graphisme
6.1 Gestion des fentres graphiques
Une instruction graphique ouvre une fentre dans laquelle est ach le rsultat de
cette commande. Par dfaut, une nouvelle instruction graphique sera ache dans la mme
fentre et crasera la gure prcdente. On peut ouvrir une nouvelle fentre graphique par la
commande figure. Chaque fentre se voit aecter un numro. Ce numro est visible dans le
bandeau de la fentre sous forme dun titre. Le rsultat dune instruction graphique est par
dfaut ach 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 gure. La commande close permet de fermer
la fentre graphique active. On ferme une fentre graphique prcdemment ouverte en
excutant la commande close(n), o n dsigne le numro de la gure. Il est galement
possible de fermer toutes les fentres graphiques en tapant close all.
La gure 4 reprsente la fentre graphique numro 1 o est ach le graphe de la fonc-
tion cosinus entre 0 et 2, rsultat de la commande fplot(cos,[0 2*pi]). Lapparence
de la fentre graphique peut varier lgrement suivant le systme informatique utilis.
Fig. 4 Fentre graphique et rsultat de la commande fplot(cos,[0 2*pi]).
Stphane Balac - Dbuter avec matlab 56
6.2 Graphisme 2D
6.2.1 Tracer le graphe dune fonction ; la commande fplot
La commande fplot permet de tracer le graphe dune fonction sur un intervalle donn.
La syntaxe est :
fplot(nomf, [xmin , xmax])
o
nomf est soit le nom dune fonction matlab incorpore, soit une expression dnis-
sant une fonction de la variable x, soit le nom dune fonction utilisateur.
[xmin , xmax] est lintervalle pour lequel est trac le graphe de la fonction.
Illustrons par des exemples les trois faons dutiliser la commande fplot. On obtient
le graphe de la fonction incorpore sinus entre 2 et 2 par linstruction :
fplot(sin,[-2*pi 2*pi]).
Pour tracer le graphe de la fonction h(x) = x sin(x) entre 2 et 2, on peut dnir la
fonction utilisateur h dans le chier h.m de la manire suivante
4
:
function y=h(x)
y=x.*sin(x);
On obtient alors le graphe de la fonction h par linstruction :
fplot(h, [-2*pi 2*pi]).
Lautre faon de procder est dexcuter linstruction
5
:
fplot(x*sin(x), [-2*pi 2*pi]).
Dans les deux cas on obtient le dessin reprsent la gure 5.
Il est possible de tracer plusieurs fonctions sur la mme gure. Il faut pour cela utiliser
la commande fplot de la manire suivante :
fplot([nom_f1 , nom_f2 , nom_f3], [x_min , x_max]) o nomf_f1, nom_f2,
nom_f3 est soit le nom dune fonction matlab incorpore, soit une expression dnissant
une fonction de la variable x, soit le nom dune fonction utilisateur.
Il est galement possible de grer les bornes des valeurs en ordonnes. Pour limiter le
graphe aux ordonnes comprises entre les valeurs y_min et y_max on passera comme second
argument de la commande fplot le tableau [x_min , x_max , y_min , y_max ].
Voici un exemple dont le rsultat est ach la gure 6 :
>> fplot([sin(x)/x , cos(x)/x], [-5, 5, -1, 1])
>>
4
attention de bien lire x.*sin(x) et non pas x*sin(x)
5
l on a le choix entre crire x.*sin(x) ou x*sin(x)
Stphane Balac - Dbuter avec matlab 57
6 4 2 0 2 4 6
5
4
3
2
1
0
1
2
Fig. 5 Graphe de la fonction h(x) = xsin x entre 2 et 2.
On comprend trs vite lintrt de grer les bornes des valeurs en ordonnes si lon
excute la commande fplot(cos(x)/x, [-5, 5]) pour tracer le graphe de la fonction
cos(x)/x entre 5 et 5. La gure, qui nest pas vraiment esthtique, nest pas reproduite
ici (-:.
6.2.2 La commande plot
La commande plot permet de tracer un ensemble de points de coordonnes (x
i
, y
i
)
i = 1, , N. La syntaxe est plot(x,y) o x est le vecteur contenant les valeurs x
i
en
abscisse et y est le vecteur contenant les valeurs y
i
en ordonne. Bien entendu les vecteurs
x et y doivent tre de mme dimension mais il peut sagir de vecteurs lignes ou colonnes.
Par dfaut, les points (x
i
, y
i
) sont relis entre eux par des segments de droites.
Voici par exemple une autre faon de tracer le graphe de la fonction h(x) = x sin(x)
entre 2 et 2,
>> x=[-2*pi:0.01:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Essayez aussi
>> x=[-2*pi:1:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Stphane Balac - Dbuter avec matlab 58
5 4 3 2 1 0 1 2 3 4 5
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
sin(x)/x
cos(x)/x
Fig. 6 Graphe des fonctions sin(x)/x et cos(x)/x entre 5 et 5.
Dans cet exemple on a dni un vecteur x de valeurs qui-rparties entre 2 et 2
(avec un pas de 0.01 dans le premier cas et de 1 dans le deuxime cas) et on a calcul
limage par la fonction h de ces valeurs (vecteur y). On ache les points de coordonnes
(x(i), y(i)).
On peut spcier matlab quelle doit tre la couleur dune courbe, quel doit tre le
style de trait et/ou quel doit tre le symbole chaque point (x
i
, y
i
). Pour cela on donne
un troisime paramtre dentre la commande plot qui est une chane de 3 caractres de
la forme cst avec c dsignant la couleur du trait, s le symbole du point et t le style de
trait. Les possibilits sont les suivantes :
y jaune . point - trait plein
m magenta o cercle
:
pointill court
c cyan x marque x pointill long
r rouge + plus -. pointill mixte
g vert * toile
b bleu s carr
w blanc d losange
k noir v triangle (bas)
triangle (haut)
< triangle (gauche)
> triangle (droit)
p pentagone
h hexagone
Stphane Balac - Dbuter avec matlab 59
Les valeurs par dfaut sont c = b, s = . et t = - ce qui correspond un trait plein bleu
reliant les points entre eux. Il nest pas obligatoire de spcier chacun des trois caractres.
On peut se contenter den spcier un ou deux. Les autres seront les valeurs par dfaut.
La commande grid permet dobtenir un quadrillage de la gure, voir par exemple la
gure 4.
Il est possible de tracer plusieurs courbes sur la mme gure en spciant plusieurs
tableaux x1, y1, x2, y2, , comme paramtres de la commande plot. Si lon souhaite
que les courbes aient une apparence dirente, on utilisera des options de couleurs et/ou
de styles de traits distincts aprs chaque couple de vecteurs x, y.
Voici un exemple dont le rsultat est ach la gure 7. On trace sur lintervalle [5, 5]
la fonction x
2
cos x en trait plein bleu et la fonction xcos x en trait pointill rouge.
>> x = [-5:0.01:5];
>> y = x.^2.*cos(x); z = x.*cos(x);
>> plot(x,y,b-,x,z,r:);
>>
5 4 3 2 1 0 1 2 3 4 5
12
10
8
6
4
2
0
2
4
6
8
Fig. 7 Rsultat de la commande plot(x,y,b-,x,z,r :).
Voici un autre exemple amusant
6
.
>> N=200;
>> x = rand(1,N); y = rand(1,N);
>> plot(x,y,bd), whitebg
>>
6
La commande whitebg permet de passer la fentre graphique en inverse vido
Stphane Balac - Dbuter avec matlab 60
6.2.3 La commande loglog
Si x et y sont deux vecteurs de mme dimension, la commande loglog(x,y) permet
dacher le vecteur log(x) contre le vecteur log(y). La commande loglog sutilise de la
mme manire que la commande plot.
Voici un exemple dont le rsultat est ach la gure 8. Quelle est la pente de la
droite ?
>> x = [1:10:1000]; y = x.^3;
>> loglog(x,y)
>>
10
0
10
1
10
2
10
3
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
8
10
9
Fig. 8 Rsultat de la commande loglog(x,y).
6.3 Amliorer la lisibilit dune gure
6.3.1 Lgender une gure
Il est recommand de mettre une lgende une gure. La commande xlabel permet
de mettre un texte en lgende sous laxe des abscisses. La syntaxe est
xlabel( lgende )
pour obtenir le mot lgende en lgende. La commande ylabel fait de mme pour laxe
des ordonnes.
La commande title permet de donner un titre la gure. La syntaxe est
title( le titre )
pour obtenir comme titre le titre.
Stphane Balac - Dbuter avec matlab 61
On peut aussi crire un texte donn une position prcise sur la gure grce la
commande text. La syntaxe est text(posx,posy, un texte ) o posx et posy sont
les coordonnes du point (dans le systme associ au dssin) o doit dbuter lcriture du
texte un texte. La commande gtext permet quant elle de placer le texte une position
choisie sur la gure laide de la souris. La syntaxe est gtext( un texte ). Une mire,
que lon dplace en utilisant la souris, apparat. Il sut dun clic-souris pour que le
texte apparaisse la position slectionne.
Il est possible avec ces commandes dacher une valeur contenue dans une variable
au milieu de texte. Pour cela on construit un tableau de type chane de caractres en
convertissant la valeur contenue dans la variable en une chane de caractres grce la
commande num2str. Par exemple, supposons que la variable numex contienne le numro
de lexemple trait, disons 5. On obtiendra pour titre de la gure Exemple numero 5 par
linstruction : title([Exemple numero , num2str(numex)]).
Lexemple suivant dont le rsultat est ach la gure 9 illustre lutilisation des
direntes commandes permettant de lgender une gure.
>> P = 5;
>> t = [0:.01:2];
>> c = 12*exp(-2*t) - 8*exp(-6*t);
>> plot(t,c); grid
>> xlabel(temps en minutes)
>> ylabel(concentation en gramme par litre)
>> title([evolution de la concentration du produit , num2str(P), ...
au cours du temps ])
>> gtext(concentration maximale)
>>
6.3.2 Acher plusieurs courbes dans une mme fentre
Il est possible dacher plusieurs courbes dans une mme fentre graphique grce
la commande hold on. Les rsultats de toutes les instructions graphiques excutes aprs
appel la commande hold on seront superposs sur la fentre graphique active. Pour
rtablir la situation antrieure (le rsultat dune nouvelle instruction graphique remplace
dans la fentre graphique le dessin prcdent) on tapera hold off.
Voici un exemple dutilisation de la commande hold on. Le rsultat est prsent la
gure 10.
>> e = exp(1);
>> figure
>> hold on
>> fplot(exp,[-1 1])
>> fplot(log,[1/e e])
>> plot([-1:0.01:e],[-1:0.01:e])
>> grid
>> hold off
>>
Stphane Balac - Dbuter avec matlab 62
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
0
1
2
3
4
5
6
temps en minutes
c
o
n
c
e
n
t
a
t
i
o
n

e
n

g
r
a
m
m
e

p
a
r

l
i
t
r
e
evolution de la concentration du produit 5 au cours du temps
concentration maximale
Fig. 9 Exemple de lgendage dune gure.
On dispose donc de deux faons de superposer plusieurs courbes sur une mme gure.
On peut soit donner plusieurs couples de vecteurs abscisses/ordonnes comme argument
de la commande plot, soit avoir recours la commande hold on. Suivant le contexte on
privilgiera lune de ces solutions plutt que lautre.
Il est possible de dcomposer une fentre en sous-fentres et dacher une gure di-
rente sur chacune de ces sous-fentres grce la commande subplot. La syntaxe est
subplot(m,n,i)
o
m est le nombre de sous-fentres verticalement ;
n est le nombre de sous-fentres horizontalement ;
i sert spcier dans quelle sous-fentre doit seectuer lachage. Les fentres sont
numrotes de gauche droite et de haut en bas.
Lexemple suivant dont le rsultat apparat la gure 11 illustre lutilisation de la
commande subplot.
>> figure
>> subplot(2,3,1), fplot(cos,[0 4*pi]), title(cosinus), grid
>> subplot(2,3,2), fplot(sin,[0 4*pi]), title(sinus), grid
>> subplot(2,3,3), fplot(tan,[-pi/3 pi/3]), title(tangente), grid
>> subplot(2,3,4), fplot(acos,[-1 1]), title(arc-cosinus), grid
>> subplot(2,3,5), fplot(asin,[-1 1]), title(arc-sinus), grid
Stphane Balac - Dbuter avec matlab 63
0.5 1 1.5 2 2.5
1
0.5
0
0.5
1
1.5
2
2.5
3
y = exp(x)
y = x
y = log(x)
Fig. 10 Superposition de plusieurs courbes dans la mme fentre graphique.
>> subplot(2,3,6), fplot(atan,[-sqrt(3) sqrt(3)]), title(arc-tangente), grid
>>
6.3.3 Sauvegarder une gure
La commande print permet de sauvegarder la gure dune fentre graphique dans un
chier sous divers formats dimages. La syntaxe de la commande print est :
print -f<num> -d<format> <nomfic>
o
<num> dsigne le numro de la fentre graphique. Si ce paramtre nest pas spci,
cest la fentre active qui est prise en compte.
<nomfic> est le nom du chier dans lequel est sauvegarde la gure. Si aucune
extension de nom nest donne, une extension par dfaut est ajoute au nom du
chier en fonction du format choisi (.ps pour du PostScript, .jpg pour du jpeg, par
exemple).
<format> est le format de sauvegarde de la gure. Ces formats sont nombreux. On
pourra obtenir la liste complte en tapant help plot. Les principaux sont :
ps : PostScript noir et blanc
psc : PostScript couleur
eps : PostScript Encapsul noir et blanc
epsc : PostScript Encapsul couleur
jpeg : Format dimage JPEG
tiff : Format dimage TIFF
Stphane Balac - Dbuter avec matlab 64
0 5 10
1
0.5
0
0.5
1
cosinus
0 5 10
1
0.5
0
0.5
1
sinus
1 0 1
2
1
0
1
2
tangente
1 0 1
0
0.5
1
1.5
2
2.5
3
3.5
arccosinus
1 0 1
2
1
0
1
2
arcsinus
1 0 1
1.5
1
0.5
0
0.5
1
1.5
arctangente
Fig. 11 Fentre graphique dcompose en sous-fentres
6.4 Graphisme 3D
6.4.1 Tracer les lignes de niveau dune fonction de 2 variables
La commande contour permet de tracer les lignes de niveau dune fonction de 2 va-
riables relles. Cette fonction peut tre dnie par une expression matlab (par exemple
x.*exp(-x.2-y.2)), ou tre dnie comme une fonction utilisateur. Pour tracer les lignes
de niveau de la fonction g(x, y) pour x [x
min
, x
max
] et y [y
min
, y
max
] on procde de la
manire suivante :
cration dun maillage, de maille de longueur h, du domaine [x
min
, x
max
][y
min
, y
max
]
grce la commande meshgrid,
[X,Y] = meshgrid(x_min :h :x_max, y_min :h :y_max).
valuation de la fonction aux nuds de ce maillage, soit par appel la fonction
utilisateur dnissant la fonction,
Z = g(X,Y)
soit directement en dnissant la fonction par une expression matlab.
Achage des lignes de niveau grce la commande contour,
contour(X,Y,Z).
Ainsi pour tracer les lignes de niveau de la fonction (x, y) xe
(x
2
+y
2
)
sur le domaine
[2, 2] [2, 2] en prenant un maillage de maille de longueur h = 0.2, on excute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> contour(X,Y,Z)
>>
Stphane Balac - Dbuter avec matlab 65
On peut galement crire une fonction utilisateur g.m,
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
et excuter
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le rsultat prsent la gure 12.
2 1.5 1 0.5 0 0.5 1 1.5 2
2
1.5
1
0.5
0
0.5
1
1.5
2
Fig. 12 Exemple de visualisation des lignes de niveau par la commande contour.
Le nombre de lignes de niveau est dtermin de manire automatique partir des
valeurs extrmes prises par la fonction sur le domaine considr. Pour imposer le nombre n
de lignes de niveau acher, il sut dappeler la fonction contour avec la valeur n comme
quatrime paramtre, contour(X,Y,Z,n).
Il existe deux manires dacher les valeurs des lignes de niveau sur la gure. Si lon
souhaite acher les valeurs pour toutes les lignes de niveau, on utilise la commande clabel
de la manire suivante :
Stphane Balac - Dbuter avec matlab 66
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h)
Si lon souhaite acher uniquement les valeurs de quelques lignes de niveau, on utilise la
commande clabel de la manire suivante :
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h,manual)
On peut alors grce la souris slectionner les lignes de niveau pour lesquelles on
souhaite acher la valeur.
Ainsi pour tracer 30 lignes de niveau de la fonction (x, y) (x 1)
2
+ 10 (x
2
y)
2
sur le domaine [1, 1] [1, 1] et pour choisir laide de la souris les lignes de niveau pour
lesquelles lisovaleur doit tre ache, on excute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> [C,h] = contour(X,Y,Z,30);
>> clabel(C,h,manual)
>>
Le rsultat est prsent la gure 13.
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
1
.
4
1
9
4
2
.
8
3
8
7
4
.
2
5
8
1
4
.2
5
8
1
4
.2
5
8
1
7.0968
8.5161
3
5
.
4
8
3
9
2
1
.
2
9
0
3
1
5
.
6
1
2
9
2
6
.
9
6
7
7
Fig. 13 Exemple de visualisation des lignes de niveau par la commande contour.
Il est possible de modier la palette des couleurs en utilisant la commande colormap.
En tapant help graph3d dans la fentre de contrle matlab, vous obtiendrez toutes les
Stphane Balac - Dbuter avec matlab 67
palettes de couleurs disponibles. A vous de les tester pour obtenir le meilleur eet (-:.
La commande colormap(gray) permet dutiliser une palette en dgrad de gris, ce qui est
trs utile si lon souhaite une impression de la gure sur une imprimante noir et blanc.
La commande contourf sutilise de la mme manire que la commande contour. Elle
permet dacher, en plus des lignes de niveau, un dgrad continu de couleurs qui varie en
fonction des valeurs prises par la fonction. La gure 14 prsente un exemple dutilisation
de la commande contourf obtenu de la manire suivante :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> contourf(X,Y,Z,30);
>> colormap(cool);
>>
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
Fig. 14 Exemple de visualisation des lignes de niveau par la commande contourf.
Stphane Balac - Dbuter avec matlab 68
6.4.2 Reprsenter une surface dquation z = g(x, y)
La commande mesh permet de tracer une surface dquation z = g(x, y). La fonction
g peut tre dnie directement par une expression matlab ou tre dnie comme une
fonction utilisateur. Pour tracer la surface dquation z = g(x, y) pour x [x
min
, x
max
] et
y [y
min
, y
max
] on procde de la manire suivante :
cration dun maillage, de maille de longueur h, du domaine [x
min
, x
max
][y
min
, y
max
]
grce la commande meshgrid,
[X,Y] = meshgrid(x_min :h :x_max, y_min :h :y_max).
valuation de la fonction aux nuds de ce maillage, soit par appel la fonction
utilisateur dnissant la fonction,
Z = g(X,Y)
soit directement en dnissant la fonction par dune expression matlab.
Achage de la surface grce la commande mesh,
mesh(X,Y,Z).
Ainsi pour tracer la surface dquation z = xe
(x
2
+y
2
)
sur le domaine [2, 2] [2, 2]
avec un maillage de maillage de longueur h = 0.2, on excute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> mesh(X,Y,Z)
>>
Si la fonction est dnie comme une fonction utilisateur dans le chier g.m,
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
on excute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le rsultat prsent gure 15.
Par dfaut les valeurs extrmes en z sont dtermines automatiquement partir des
extremums de la fonction sur le domaine spci. Il est possible de modier ces valeurs (et
galement les valeurs extrmes en abscisses et ordonnes) par la commande axis dont la
syntaxe est axis(x_min x_max y_min y_max z_min z_max). Si vous ntes pas satisfait
du rsultat, linstruction axis auto restaure la gure originale. La gure 16 montre par
exemple le rsultat de linstruction axis([ -2 2 -2 2 -2 2]).
Il est galement possible de modier le point de vision grce la commande view. La
commande view a deux arguments qui sont langle de vision horizontal et langle de vision
vertical en degr. Par dfaut ces angles ont repectivement les valeurs 37.5
o
et 30
o
. La
gure 17 montre par exemple le rsultat de linstruction view(37.5,30).
Stphane Balac - Dbuter avec matlab 69
2
1
0
1
2
2
1
0
1
2
0.5
0
0.5
Fig. 15 Exemple de visualisation dune surface dquation z = g(x, y) grce la com-
mande mesh.
Les commandes meshc et meshz sutilisent de la mme manire que la commande mesh.
La commande meshc permet dacher des lignes de niveau sous la surface dans le plan
z = z
min
. La commande meshz permet de tracer une boite sous la surface. Un exemple
dutilisation de ces commandes est prsent la gure 18.
Stphane Balac - Dbuter avec matlab 70
2
1.5
1
0.5
0
0.5
1
1.5
2
2
1
0
1
2
2
1.5
1
0.5
0
0.5
1
1.5
2
Fig. 16 Exemple dutilisation de la commande axis
2
1
0
1
2
2
1
0
1
2
0.5
0
0.5
Fig. 17 Exemple de modication de langle de vision par la commande view.
Stphane Balac - Dbuter avec matlab 71
2
1
0
1
2
2
1
0
1
2
0.5
0
0.5
2
1
0
1
2
2
1
0
1
2
0.5
0
0.5
Fig. 18 Exemple de visualisation dune surface dquation z = g(x, y) grce au com-
mandes meshc et meshz.
Stphane Balac - Dbuter avec matlab 72
6.4.3 Reprsenter une surface paramtre
La commande surf permet de tracer une surface paramtre dquations,
(E)
_
_
_
x = g
1
(u, v),
y = g
2
(u, v),
z = g
3
(u, v).
La fonction G = (g
1
, g
2
, g
3
) peut tre dnie directement par une expression matlab ou
tre dnie comme une fonction utilisateur. Pour tracer la surface paramtre dquation
(E) pour u [u
min
, u
max
] et v [v
min
, v
max
] on procde de la manire suivante :
cration dun maillage de maille de longueur h du domaine de paramtrisation
[u
min
, u
max
] [v
min
, v
max
] grce la commande meshgrid,
[U,V] = meshgrid(u_min :h :u_max, v_min :h :v_max).
valuation de la fonction aux nuds de ce maillage, soit par appel la fonction
utilisateur dnissant la fonction
[X,Y,Z] = G(U,V)
soit directement en dnissant la fonction par dune expression matlab.
Achage de la surface grce la commande surf,
surf(X,Y,Z).
Ainsi pour tracer la surface paramtre dquations
_
_
_
x = v cos u,
y = v sin u,
z = 2u.
sur le domaine [0, 2] [0, 2] avec un maillage de maillage de longueur h = 0.2, on excute :
>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> X = V.*cos(U);
>> Y = V.*sin(U);
>> Z = 2*U;
>> surf(X,Y,Z)
Si la fonction est dnie comme une fonction utilisateur dans le chier G.m,
function [x1, x2, x3] = G(u,v)
x1 = v.*cos(u);
x2 = v.*sin(u);
x3 = 2*u;
on excute :
>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> [X,Y,Z] = G(U,V);
>> surf(X,Y,Z)
Dans les 2 cas on obtient le rsultat prsent gure 19.
Stphane Balac - Dbuter avec matlab 73
2
1
0
1
2
2
1
0
1
2
0
2
4
6
8
10
12
14
Fig. 19 Exemple de visualisation dune surface paramtre grce la commande surf.
Stphane Balac - Dbuter avec matlab 74
Rfrences
[1] Jean Luc Chabert, ed. Histoire dalgorithmes, du caillou la puce. Regards sur la
science, Belin, 1994.
[2] Kermit Sigmon, 1993. Matlab Tutorial.
http ://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html .
Toutes les mathmatiques de premire anne en un seul volume :
Algbre et Analyse, Cours de Mathmatiques
de Premire Anne avec Exercices Corrigs
Stphane Balac, Frdric Sturm
Collection Sciences Appliques de lINSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stphane Balac - Dbuter avec matlab 75
Index
==, 44
&, 44
=, 44
abs, 14, 29
acos, 30
acosh, 30
aide en ligne, 10
all, 31
angle, 14, 29
ans, 11
any, 31
argument, 29
arrondi, 29
asin, 30
asinh, 30
atan, 30
atanh, 30
axis, 69
boucle for, 45
boucle while, 46
break, 51
cd, 12
ceil, 29
choix ventil, 49
chol, 34
clabel, 66
clear, 8, 28
close, 56
colormap, 67
conj, 29
conjugu, 29
contour, 65
contourf, 68
cos, 30
cosh, 30
cross, 30
dterminant, 33
delete, 12
det, 33
diag, 23
diary, 10
dir, 12
disp, 36
division entire, 28
doc, 11
edit, 12
eig, 33
eps, 28
error, 51
exp, 29
expm, 33
exponentiation, 28, 31
exponentielle, 29
exponentielle matricielle, 33
eye, 21
facteurs premiers, 29
factor, 29
factorisation LU, 34
fentre graphique, 56
figure, 56
fix, 29
fliplr, 31
floor, 29
fonction utilisateur, 41
fonctions hyperboliques, 29
fonctions trigonomtriques, 29
for, 45
format, 36
formats dachage des rels, 36
fplot, 34, 57
fprintf, 40
full, 24
gcd, 28
grid, 60
gtext, 62
hold off, 62
hold on, 62
i, 14, 28
if, 47
imag, 14, 29
inf, 28
input, 37
instruction conditionne, 47
inv, 33
inverse, 33
76
ischar, 13
isempty, 15
islogical, 13
isreal, 13
j, 14, 28
lcm, 28
length, 16
lignes de niveau, 65
linspace, 18
load, 9
log, 29
log10, 29
logarithme, 29
loglog, 61
lookfor, 11
lu, 34
M-le, 41
mthode de Choleski, 33
mthode de gradient conjugu, 34
mthode QR, 34
magic, 21
matrice creuse, 24
matrice par blocs, 20
matrice tridiagonale, 23
max, 31
mean, 31
mesh, 69
meshc, 70
meshgrid, 65, 69, 73
meshz, 70
message derreur, 12, 51
message de mise en garde, 51
min, 31
mod, 41
modle ddition, 37
module, 29
NaN, 28
nargin, 43
nargout, 43
nnz, 24
norm, 33
norme, 33
num2str, 37, 62
ones, 18, 21
palette des couleurs, 67
partie imaginaire, 29
partie relle, 29
pause, 52
pi, 28
plot, 58
plus grand commun diviseur, 29
plus petit multiple commun, 29
poly, 33, 35
polynme, 34
polynme caractristique, 33
polyval, 34
print, 64
prod, 31
produit scalaire, 30
produit vectoriel, 30
qr, 34
quit, 7
racine carre, 29
racines dun polynme, 34
rand, 18, 21
rang, 33
rank, 33
real, 14, 29
realmax, 28
realmin, 28
rem, 28
return, 51
roots, 34
round, 29
sauvegarder une session, 9
save, 9
script, 41
sign, 29
sin, 30
sinh, 30
size, 19
sort, 31
sous-fonction, 42
sparse, 25
spdiags, 27
speye, 27
sprand, 27
sprintf, 37, 39
spy, 24
sqrt, 29
strcmp, 16
subplot, 63
Stphane Balac - Dbuter avec matlab 77
sum, 31
surf, 73
switch, 49
systme linaire, 33
tan, 30
tanh, 30
text, 62
title, 61
trace, 33
trace, 33
transpose, 24
tril, 23
triu, 23
type, 12
valeur absolue, 29
valeurs propres, 33
variables globales, 44
variables locales, 44
vecteur, 16
vecteurs propres, 33
view, 69
warning, 51
while, 46
whitebg, 60
who, 8
whos, 8
workspace, 8
xlabel, 61
ylabel, 61
zeros, 18, 21
Stphane Balac - Dbuter avec matlab 78

You might also like