Vous êtes sur la page 1sur 88

1

Anas FATTOUH
Anne Universitaire 2004-2005
T.P. Identification, Commande
et Stabilit des Systmes

Matrise EEA

TP 1 : Description dun systme par quation dtat et dobservation (4H)

1. Introduction

Un systme linaire est dfini par un ensemble de n quations tablissant des relations
linaires entre les variables dtat regroupes au sein du vecteur dtat et lensemble des
variables dentres reprsentes par le vecteur de la forme suivante :
n x
u

( ) ( ) ( ) x t Ax t Bu t = + (1)

Des grandeurs de sortie, choisies en fonction des besoins dinformation sur lvolution du
systme, figurent dans le vecteur dobservation qui sexprime en fonction de ltat et de
lentre u par lquation dobservation suivante :
y x

( ) ( ) ( ) y t Cx t Du t = + (2)

, , , A B C D sont des matrices de coefficients constants. est un vecteur colonne contenant
les n variables reprsentant ltat du systme. Dans les systmes mono variables, et sont
des scalaires reprsentant respectivement la variable dentre et la variable de sortie. Les
matrices
x
u y
( ) A n n , ( ) 1 B n , et (1 C n ) ( ) 1 1 D dtermine les relations entre ltat du
systme et les variables dentres et de sorties.

2. Etude dun systme mono variable : la bille en suspension magntique

Soit le systme suivant :


Figure 1 : La bille en suspension magntique.

Le module de la force magntique applique sur la bille est donne par :
2
F Ki h = . Les
quations diffrentielles rgissant le systme sont donnes par :



1


( )
( )
2 2
2
quation mcanique
quation lectrique
d h Ki
m mg
dt h
di
V L Ri
dt
=
= +
(3)

Travail demand :

- Retrouver les deux quations en (3).
- Linariser ces quations autour du point de fonctionnement . Pour cela,
calculer tout dabord le courant nominal pour ce point de fonctionnement
0
0.01 h = m
0
i
( ) 0 dh dt =
- On considre maintenant ltude des variations ( ) i t et ( ) h t autour du point de
fonctionnement. Nous avons alors :

( ) ( )
( ) ( )
0
0
i t i t i
h t h t h
=
=
(4)
Ce qui donne :

( ) ( )
( ) ( )
0
0
i t i t i
h t h t h
= +
= +
(5)
Remplacer (5) dans (3) et liminer les termes dont la grandeur est ngligeable par
rapport dautre.
- A partir des quations linarises, retrouver les quations dtat et dobservation du
systme de la forme (1) et (2) en considrant les variables suivants :
( )
( )
( )
( )
( ) ( ) ( ) ( ) , ,
h t
x t h t u t V t y t h
i t


= = =

t (6)
- Calcul les ples du systme. Les ples correspondent aux valeurs propres de la
matriceA. Utilisez la fonction eig de Matlab. Conclure.
- En utilisant les fonctions lsim et plot de Matlab, calculer et visualiser lvolution de la
hauteur de la bille en fonction du temps (On prendra comme condition initiale
). Conclure. 0.005, 0, 0 h h = = =

i
- La simulation est elle en concordance avec les rsultats thoriques tablis ltape
prcdente?












2
3. Concevoir un retour dtat : placement des ples

Construisons maintenant un retour dtat pour ce systme. Le schma gnral dun tel
systme est le suivant :


Figure 2 : Systme retour dtat complet.

Travail demand :

- Montrer que le systme entre ( ) r t et ( ) y t a la forme suivante :
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
x t A BK x t Br t
y t C DK x t Dr t
= +
= +

(7)
- Utiliser la fonction place de Matlab pour calculer la matrice de retour dtat K afin
dobtenir les trois ples suivants :

1,2 3
10 10 , 50 p j p = =
Afficher de nouveau la rponse du systme des conditions initiales non nulles.
Conclusion ? Quelles caractristiques prsentent la rponse observe ? Quelle est
maintenant le comportement physique de la bille ? Calculez le dpassement et le temps
de monte ?
- Rpter la question prcdente pour les ples suivants pour le systme (7) :
1,2 3
20 20 , 100 p j p = =
- Comparer la matrice K et les rponses dans le deux cas. Conclure.
- Calculer et visualiser la rponse du systme un chelon de tension de
(utiliser les fonctions ones et size de Matlab pour construire le vecteur dentre). Que
remarquez vous concernant la position de la bille quand ? Donnez une
explication.
0.001 r V =
t
- Modifier le gain statique de systme de telle sorte que . Donner les
quations finales du systme. Calculer et visualiser la rponse du nouveau systme.
Conclure.
( ) lim
t
y t r

=









3
4. Etude similaire pour une balle roulant sur un plant inclin

Soit une balle place sur un plan inclin et pouvant rouler avec seulement un degr de
libert. Un bras de levier est attach lune de ses extrmits lextrmit du plan inclin et
un servomoteur son autre extrmit. Quand le servomoteur tourne dun angle , le levier
change langle du plan inclin. Quand langle change et donne une position incline au
plan, la gravit fait rouler la balle le long du plan. On se propose de concevoir un contrleur
permettant de manipuler la position de la balle.


: 0.015m,
: 0.03m,
-6 2
9.99 10 kgm ,
Figure 3 : La balle roulant sur un plan inclin.

Les quations de Lagrange sur le dplacement de la balle donnent lquation suivante :

( )
2
2
sin 0
J
m r mg mr
R


+ + =


(8)

En linarisant autour de 0 = , nous obtenons lapproximation linaire suivante du systme :

( )
2
sin
J
m r mg
R


+ =


(9)

Lquation qui relie langle du plan celui du servomoteur peut tre approxime comme
linaire par lquation suivante :

d
L
= (10)

En substituant ceci dans lquation de Lagrange linarise, on obtient :

2
J
m r mg
d
R L


+ =


(11)





4
Travail demand :

- Mettre le systme linaris sous la forme dquation dtat et dobservation. Pour cela,
on prendra la position r et la vitesse de la balle comme variables dtat et langle r
du servomoteur comme variable dentre unique.
- Oublions pour notre tude le systme du bras de levier et du servomoteur. Supposons
que nous contrlons uniquement lacclration angulaire du plan inclin par un
vrin pilot par un moteur et prenant appuie au centre du plan. Dans ce contexte, le
vecteur dtat est donc le suivant :
[ ]
T
x r r = . Retrouver dans ce cas les
quations dtat et dobservation suivante :

( )
[ ]
2 2
0 1 0 0
0
0 0 0 0
0
0 0 0 1
1
0 0 0 0
1 0 0 0
mgR J mR
x x u
y x




+


= +







=

(12)

- Calculer la rponse du systme en boucle ouverte un chelon dentre de 0.25m.
Utiliser la fonction step de Matlab qui trace la rponse temporelle dun systme
linaire soumis un chelon. Conclure sur lvolution de la balle.
- On dsire construire un contrleur permettant un dpassement infrieur 5% et un
temps de rponse infrieur 3s. Calculer la matrice K du contrleur afin de placer les
quatre ples aux valeurs suivantes :

1,2 3 4
2 2 , 20, 80 p j p p = = =

- Avec ce contrleur, calculer puis visualiser la rponse un chelon de 0.25m en
utilisant la commande lsim de Matlab.
- Modifier le gain statique du systmepour annuler lerreur statique observe. Mesurer
le temps de rponse et le dpassement du nouveau systme. Sont-ils conformes au
cahier des charges ?


[y,ty]=lsim(A,B,C,D,u,t,X0); calcule la rponse dun systme dfinit par (1)-(2) une entre dfinie par u o
t est le vecteur temps et X0 les conditions initiales.

5

TP 2 : Simulation de trajectoires de phase dun systme de deuxime ordre (4H)

1. Introduction

Dans ce TP nous allons tracer laide du logiciel Matlab diffrentes trajectoires de phases
dun systme du deuxime ordre pour diffrentes conditions initiales. Le TP se droule en
deux parties, la premire tudiera le systme linaire puis dans la seconde partie nous
introduirons un lment non linaire au systme linaire.

2. Cas du systme linaire

Soit le systme deuxime ordre suivant :


Figure 1 : Systme linaire du deuxime ordre.


Travail demand :

- Dcomposez le systme en Figure 1 pour faire apparatre des intgrateurs purs.
- Soit le vecteur dtat dont ses composantes sont les sorties des intgrateurs. Dfinissez
les quations dtat et dobservation de ce systme. Donnez les matricesA, B , et
en mettant les quations sous la forme :
C
D

( ) ( ) ( )
( ) ( ) ( )
x t Ax t Bu t
y t Cx t Du t
= +
= +

(1)

- Quels sont les points singuliers du systme ?
- Dterminez le J acobien en ces points puis laide de Matlab dduisez-en la stabilit.
(On rappel que la stabilit du systme en un point singulier donn peut tre dtermine
partir des valeurs propres du J acobien).
- Dterminez le type des isoclines et donnez lquation gnrale de ces courbes en
fonction du paramtre . m
- Les trajectoires de phases sont paramtres par le temps. Pour tracer les trajectoires il
faut donc avoir les valeurs du vecteur dtat pour chaque instant et ce partir des
conditions initiales. A laide de la fonction lsim de Matlab, calculez les valeurs du
vecteur dtat sur une dure de 10 secondes pour les conditions initiales ci-dessous
puis tracez les trajectoires de phases :

[ ] [ ] [ ] [ ] [ ]
1 2 3 4 5
0 1, 0 2 , 0 3 , 0 4 , 0 5 M M M M M = = = = =

- Ajoutez sur ce mme graphique lisocline correspondant 0 m= .
1
- Que remarquez-vous au niveau des points dintersections des courbes avec cette
isocline ?
- Tracez les courbes de la variable de sortie du systme en fonction du temps. Que
remarquez-vous ?
- Quen dduisez-vous sur le plan de phase ?

[y,ty]=lsim(A,B,C,D,u,t,X0); calcule la rponse dun systme dfinit par (1) une entre dfinie par u o t
est le vecteur temps et X0 les conditions initiales.

3. Cas du systme non linaire

Maintenant nous introduisons une non linarit de type produit dans la boucle de
retour. Le schma bloc devient :


Figure 2 : Systme du deuxime ordre avec non linarit.

Travail demand :

- Dcomposez le systme en Figure 2 pour faire apparatre des intgrateurs purs.
- Donnez le systme dquations dont les variables sont les sorties des intgrateurs purs.
- Quels sont les points singuliers du systme ?
- Dterminez le J acobien en ces points puis laide de Matlab dduisez-en la stabilit.
- Dterminez le type des isoclines et donnez lquation gnrale de ces courbes en
fonction du paramtre . m
- La fonction lsim de Matlab ne sapplique quaux systmes linaires. Pour avoir les
valeurs des variables il faut contourner le problme en utilisant la fonction ode23. A
laide de cette fonction, tracez les trajectoires de phases sur une dure de 10 secondes
pour les conditions initiales suivantes :

[ ] [ ] [ ] [ ] [ ]
1 2 3 4 5
2 3 , 2 2.5 , 1.8 1.5 , 0.6 1, 0.5 1 M M M M M = = = = =

- Indiquez le comportement (convergent ou divergent) du systme pour ces diffrentes
conditions initiales.
- Ajoutez sur ce mme graphique lisocline correspondant 0 m= .
- Que remarquez-vous au niveau des points dintersections des courbes avec cette
isocline ?
- Concluez sur lintrt de cette simulation.

[T,x]=ode23(fichier,t,X0); rsout les quations diffrentielles dfinies dans le fichier fichier.m sur le
temps t et pour les conditions initiales dfinies par X0.
Le fichier.m a la forme suivante :
function dxdt=fichier(t,x)
dxdt=[dx1/dt dx2/dt dxn/dt] ;
2
TP 3 : Application de la mthode des moindres carrs lestimation des
paramtres dun modle (4H)

1. Introduction

Dans ce TP nous allons appliquer la mthode des moindres carrs pour identifier les
paramtres dun systme. Le compte rendu devra comporter les diffrents paramtres
demands ainsi que les listings des programmes.

Considrons le modle gnral suivant identifier :

( )
( )
( )
( )
1
1
d
q B q
y t u t
A q

= (1)

o est lentre, u y est la sortie, est le retard du modle, d
1
q

est loprateur retard


( ) ( ) ( )
1
1 q x t x t

= et

( )
( )
1 1
1
1 1
1
1
1
A
A
B
B
n
n
n
n
A q a q a q
B q b q b q


= + + +
= + + +

(2)

Le systme (1) peut tre rcrit sous la forme suivante :

( ) ( ) (
( )
1 1
1 1

A B
n n
i i
i i
T
y t a y t i bu t d i
t
= =
+ = + + +
=

) 1
(3)

o est le vecteur de paramtres identifier et est le vecteur de mesures. Ces deux
vecteurs sont dfinis ainsi :

( ) ( ) ( ) ( ) ( )
1 1

1 1
A b
T
n n
T
A B
a a b b
t y t y t n u t d u t d n

=

= + +



(4)


Deux modles seront considrs dans ce TP pour identifier le systme considr :

( )
( )
( )
1 0
2
1 0
Modle 1 :
Y z b z b
G z
U z z a z a
+
= =
+ +
(5)

( )
( )
( )
0
2
1 0
Modle 2 :
Y z b
G z
U z z a z a
= =
+ +
(6)

A partir des donnes entres/sorties, deux mthodes seront appliques pour identifier
les paramtres de chaque modle : moindres carrs non rcursifs et moindres carrs rcursifs.
1

2. Moindres carrs non rcursifs

Dans ce cas, les donnes entres/sorties sont traites par paquets obtenus sur un
horizon de temps. Lestimation ne peut pas donc tre faite en temps rel lors de lacquisition
de donnes ou lors de la lecture dun fichier de donnes.

Lestimation du vecteur est donne par :

( ) ( )
( ) ( )
1
1
1
1
1 1
N
i
N
T
i
F y i i
F i i


=

=
=

=

(7)
o est la taille de mesures. N

Travail demand :

- Rcrire les modles (5) et (6) sous la forme (3)-(4) en prcisant les vecteurs et .
- Ecrire une fonction de Matlab theta=nrls(U,Y) qui calcule lestimation de partir des
mesures ( ) , U Y selon la relation (7) pour les deux modles (5) et (6).
- Tlcharger les mesures contenues dans le fichier data.mat laide de la
fonction load de Matlab.
( , U Y)
- Estimer le vecteur de paramtres laide de la fonction nrls que vous avez crite.
- Calculer et tracer la sortie estime ( ) ( ) ( ) 1
T
y t t t =

et lerreur quadratique
moyenne ( ) ( )
2
1
1
N
i
y i y i
N

=
=


.
- Tracer sur la mme figure la sortie relle ( ) y t . Conclure.

3. Moindres carrs rcursifs

Dans ce cas, lestimation des paramtres se fait partir dune paire entres/sorties
chaque pas dchantillonnage. Donc, lestimation peut tre faite en temps rel lors de
lacquisition de donnes ou lors de la lecture dun fichier de donnes.

Lestimation du vecteur est donne par :

( ) ( ) ( ) ( ) ( )
( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
1 1
1
1
1 1
T
T
T
t t F t t t 1
F t t t F t
F t F t
t F t t
t y t t t




+ = + + +
+ =
+
+ = +

(8)

2
Remarquons que nous avons besoin de valeurs initiales de ( ) 0 t =

et pour
pouvoir dmarrer lalgorithme (8). De manire gnrale, le gain dadaptation initial
( 0 F t = )
( ) 0 F est
donne par :
( ) 0 F TI = (9)

o I est la matrice identit de taille approprie (peut tre gnre par la fonction eye de
Matlab) et T est un nombre quelconque suprieur 1 (valeur typique de T est 1000).

Travail demand :

- Ecrire une fonction de Matlab theta=rls(U,Y,T,theta_0) qui calcule lestimation de
partir des mesures ( selon les relations (8)-(9) pour les deux modles (5) et (6). )
)
, U Y
- Tlcharger les mesures contenues dans le fichier data.mat laide de la
fonction load de Matlab.
( , U Y
- Estimer le vecteur de paramtres laide de la fonction rls que vous avez crite pour
deux valeurs initiales de

: ( ) 0 0

et ( ) 0

est la solution de quatre premire


quations de (3)-(4) et pour 1000 T = .
- Comparez les rsultats obtenus avec ceux trouvs avec la mthode non rcursifs.
- Comparez la rapidit de la convergence de vecteur de paramtres pour chaque
initialisation.
- A partir de quelle itration les paramtres deviennent constants ?
- Estimer le vecteur de paramtres laide de la fonction rls pour ( ) 0 0

et diffrentes
valeurs deT . Comparer les rsultats obtenus et conclure.
3

TP 4 : Identification et commande dune rgulation en position angulaire
laide de logiciels WinPim, WinTrac et WinReg (4H)

1. Introduction

Le but de ce TP est la mise en uvre dun rgulateur numrique de type calcul
partir dun modle identifi du procd (Figure 1).
RST



Figure 1 : Rgulation numrique avec un rgulateur . RST

Le travail demand comprend les tapes suivantes :

Identifier un modle du procd (WinTrac et WinPim) :
Acquisition de donnes entres/sorties( ) , u y .
Traitement de donnes.
Choix du modle et estimation paramtrique.
Validation du modle.

Calculer un rgulateur nmatique (WinReg) : RST
Spcification de la dynamique dsire de poursuite
m m
B A .
Spcification de la dynamique dsire de rgulation (la dynamique ). p y
Calcul du rgulateur . RST

Mise en uvre du rgulateur calcul (WinTrac) :
Application du rgulateur sur le procd.
Calcul les paramtres de la rponse indicielle (gaine statique, temps de monte,
dpassement).
Comparaison des paramtres rels avec ceux dsirs utiliss pour calculer le
rgulateur.

Notations : dans le document qui suit les commandes slectionner sont notes en
police diffrente (ex : programme) et les valeurs rentrer manuellement au clavier sont notes
entre guillemets (ex : "5V").






1
2. Description du procd

On considre le systme compos dune embase sur laquelle est fix un moteur
solidaire dune couronne (Figure 2).


Figure 2 : Plate-forme Quanser SRV02.

La rgulation en position angulaire du processus est ralise par un ordinateur
connect la plate-forme par une carte dacquisition de donnes. Le schma bloc du systme
complet est donn en Figure 3.













WinPim
WinTrac
WinReg
C
a
r
t
e

d

a
c
q
u
i
s
i
t
i
o
n

d
e

d
o
n
n

e
s

Bote convertisseur
CAN
Ampli.
Plate
-
Forme
( ) u i
( ) y i
0 10V
5V

( )
m
u t
( )
m
t ( )
m
i
PC
Figure 3 : Schma bloc du systme.

3. Prise en main du matriel exprimental

- Vrifier que les diffrents lments du dispositif sont connects : ordinateur, botier
convertisseur, alimentation (Universal Power Module) et processus (Quanser SRV02).
- Allumer seulement lordinateur.
- Avant de mettre la maquette sous tension assurer vous denvoyer au moteur une
tension de commande de 5V (correspondant larrt du moteur). Pour cela :

Lancer dans
2

programme Advantech Driver for 95 and 98 test utility PCL-812 PG I/O=220H Select

Slectionner

Analog Output Chanel 0 Manual Output "5V" Out

Vous pouvez alors mettre sous tension tous les lments du dispositif
(alimentation et botier). En envoyant une tension de 4.5V (Manuel Output 4.5V) vous
ferez tourner le moteur dans un sens avec 5.5V vous le ferez tourner dans lautre sens.
Ne pas mettre des tensions plus loignes de 5V (risque de dcollage du dispositif sil
tourne trop vite). Revenir 5V et iconifier ce programme il vous servira arrter le
moteur en cas de fausse manuvre.

4. Identification du procd (WinTrac et WinPim)

4.1 Acquisition de donnes entres/sorties (WinTrac)

Lentre du processus est une tension ( ) u t et la sortie est une position angulaire ( ) t .
Le systme se compose donc dun premier ordre et dun intgrateur :

( )
( )
( ) ( ) 1
BO
p
K
H p
U p p Tp

= =
+
(1)

Compte tenu de la prsence de lintgrateur, lidentification en boucle ouverte est impossible
(drive). Le relev des mesures exprimentales va donc tre ralis partir du systme en
boucle ferme par un rgulateur donn ( ) 1 R S T = = = laide du logiciel WinTrac.

Lancer dans

Programme WinPimPlus WinTrac

Slectionner

Priode dchantillonnage "0.01"
Commande temps rel Editer Rgulateur R= "1" S= "1" T= "1"
Consigne SBPA Unit = "5"
Composante continue moyenne = "0"
Amplitude = "0.5"
Longueur du registre = "11"
Diviseur frquence = "5"
Temps rel Caractristiques Voie dacquisition "ADC0"
Nombre dchantillon "1028"
Nom de fichier "votre_nom.a01"
Caractristiques D/A Voie de commande "DAC1"
Echelle "OK"
Commande minimum "OK"
Initialisation nombre de priode
"20"
Condition finale commande finale
"valeur initiale"
Puis lancer la prise de mesure par dbuter.
3
En fin dexcution le fichier votre_nom.a01 contiendra la squence de consigne ( ) r k ,
de commande et de sortie du processus qui sont affiche lcran. ( ) u k ( ) y k

4.2 Traitement de donnes (WinPim)

La valeur moyenne des mesures faites ltape prcdente doit tre supprime avant
de lancer lidentification.

Lancer dans

Programme WinPimPlus WinPim

Slectionner

Priode dchantillonnage "0.01"
Gestion des fichiers de donnes Fichier lire donnes c:\wpimplus\donnes\ votre_nom.A01

Mettre la consigne comme entre par ( ) u i

n colonne contenant les sorties Y(i) "1"
n colonne contenant les entres u(i) "2"

Les courbes apparaissent lcran, liminer les composantes continues par

Filtrer Retrait de la composante continue

Les courbes filtres apparaissent lcran, les enregistrer partir de la fentre gestion des
donnes.

Slectionner

Fichier enregistrer donnes \ votre_nom_f.A01

4.3 Choix du modle et estimation paramtrique (WinPim)

Les valeurs successives des couples ( ) ( ) ( )
, u i y i enregistres vont tre employes
pour calculer le modle du systme par la mthode des moindres carrs.

Lancer lidentification par

Identification paramtrique
Fichier lire donnes c:\wpimplus\donnes\ votre_nom_f.A01
Editer structure structure n1
Moindres carrs rcursifs
Gain dcroissant
Retard = "0"
Degr de A = "2"
Degr de B = "2"

Puis lancer lidentification par Dbuter.
Vrifier que lerreur de prdiction obtenue nest pas trop importante.
4

Enregistrer le modle obtenu par

Enregistrer "votre_nom_mod.mod "

Noter les paramtres du modle qui devront figurer dans le compte rendu.

4.4 Validation du modle (WinPim et WinTrac)

Afin de vrifier que lidentification donne un "bon" modle, nous allons comparer les
rponses indicielles du processus et du modle. Tout dabord tracer la rponse indicielle du
modle.

Toujours dans WinPim slectionner

Simulation du systme
Fichier lire modle votre_nom_mod.mod
Commande Echelon Unit = "0"
Nombre dchantillons = "100"
Amplitude ="1"
Instant dapplication ="20"
Dbuter

Les courbes saffichent, les enregistrer partir de la fentre Simulation 1 par

Fichier Enregistrer courbe "votre_nom_sim.sim"

Puis tracer la rponse indicielle du processus.

Dans WinTrac Slectionner

Priode dchantillonnage "0.01"
Commande temps rel Editer Rgulateur R= "1" S= "1" T= "1"
Consigne Echelon Unit = "5"
Amplitude = "1"
Instant dapplication = "20"
Temps rel Caractristiques Voie dacquisition "ADC0"
Nombre dchantillon "100"
Nom de fichier "votre_nom_valid.A01"
Caractristiques D/A Voie de commande "DAC1"
Echelle "OK"
Commande minimum "OK"
Initialisation nombre de priode "20"
Condition finale commande finale "valeur initiale"

Puis lancer la prise de mesure par dbuter.

La courbe de la rponse indicielle apparat lcran, on lui superpose la rponse
simule partir de la fentre commande temps rel par

Graphique Lire courbe "votre_nom_sim.sim"

Si lidentification est acceptable les deux tracs doivent tre assez proches lun de
lautre. Lancer une impression de ces deux courbes qui devront figurer dans le compte rendu.
5

5. Calcul dun rgulateur nmatique (WinReg) RST

A partir du modle obtenu il sagit dexploiter le logiciel WinReg pour tablir le
correcteur du systme puis de caractriser les performances du systme corrig. RST

Comme le modle identifi est celui de systme en boucle ferme , trouver le
modle en boucle ouverte sachant que :
( )
BF
H z
( )
BO
H z

( )
( )
( ) 1
BO
BF
BO
H z
H z
H z
=
+

Ensuite, vous allez calculer un rgulateur pour le systme en boucle ouverte. Pour cela
lancer WinReg
RST

Priode dchantillonnage "0.01"
Calcul dun rgulateur Spcification du mode rentrer le modle en BO
Retard ="0"
deg A = "2" A(1 ) = "valeur de a1BO"
A(2 ) = "valeur de a2BO"
deg B = "2" B(1 ) = "valeur de b1BO"
B(2 ) = "valeur de b2BO"
Performances Poursuite : racines
0
= "100" = "0.7"
Rgulation : 0 partout
Pr Spcification : Sans intgrateur
Calculer

Le modle du rgulateur apparat, enregistrer dans "votre_nom_rst.reg" le modle et le
rgulateur. Noter les paramtres du rgulateur pour le compte rendu.

6. Mise en uvre du rgulateur calcul (WinTrac)

Il sagit de tester les performances du systme corrig par le rgulateur calcul.

Lancer WinTrac

Priode dchantillonnage "0.01"
Fichier ire rgulateur "votre_nom_rst.reg"
Commande temps rel Editer Rgulateur (les paramtres du rgulateur calcul saffichent)
Consigne Echelon Unit = "5"
Amplitude = "1"
Instant dapplication = "20"
Temps rel Caractristiques Voie dacquisition "ADC0"
Nombre dchantillon "100"
Nom de fichier "votre_nom_bf.A01"
Caractristiques D/A Voie de commande "DAC1"
Echelle "OK"
Commande minimum "OK"
Initialisation nombre de priode "20"
Condition finale commande finale "valeur initiale"

Puis lancer la prise de mesure par dbuter.

La rponse indicielle du systme corrig apparat lcran. Imprimer la courbe, comparer les
performances du systme corrig celles du systme en BF.
6
TP 5 : Identification non paramtrique dun bras liaison flexible (8H)

1. Introduction

Le but de ce TP est de mettre en pratique quelques mthodes didentification non
paramtrique dun systme exprimental constitu dune plate-forme surmonte dun bras
liaison flexible.
Le TP est dcompos en trois parties : La premire partie est consacre lanalyse des
rponses indicielle et impulsionnelle du systme. Les mthodes didentification non
paramtrique temporelle (la mthode de corrlation) et frquentielle (analyse par
transformation de Fourier et spectrale) seront appliques sur les donnes exprimentales en
deuxime et troisime parties.

2. Description du systme

Le systme considr est constitu dune plate-forme pose sur une base et surmonte
dun bras liaison flexible (Figure 1). La plate-forme est entrane dans un mouvement de
rotation par un moteur courant continu. Le couplage entre le moteur et la plate-forme est fait
de manire rigide laide de roues dentes. Le bras est rattach par son extrmit au centre de
la plate-forme. Lattache est conue de telle sorte que le bras puisse effectuer un mouvement
de rotation librement. Ce mouvement de rotation est cependant command par deux ressorts,
dont les extrmits sont attaches la plate-forme et au bras assurant ainsi une liaison flexible
entre les deux pices.


Figure 1 : Ensemble de plate-forme et un bras liaison flexible.

Deux grandeurs peuvent tre mesures laide de potentiomtres : Langle de rotation
de la plate-forme par rapport sa base ( ) t et langle de rotation du bras par rapport laxe
de la plate-forme ( ) t .
Par la suite nous nous intresserons langle de positionnement du bras par rapport
la base + . Cette grandeur constitue donc la sortie y du systme considry = + .
Le systme comporte une grandeur de commande . Celle-ci consiste en une tension gnre
par un ordinateur qui, avant dtre applique aux bornes du moteur courant continu, est
dabord amplifie par un amplificateur de puissance.
u
1
3. Modlisation du systme

Un modle du systme peut tre labor en considrant dune part les quations de
base qui dcrivent le comportement dun moteur courant continu, et dautre part les
quations de la dynamique de la plate-forme ainsi que du bras selon les lois de Newton. Un
schma fonctionnel du systme est reprsent en Figure 2.



Figure 2 : Schma fonctionnel du systme.

Le stator du moteur est compos daimants permanents qui fournissent un champ
magntique suppos constant, son affaiblissement en fonction du courant rotorique restant
faible. Selon cette hypothse, et en ngligeant linductance de lenroulement, la loi des
mailles de Kirchhoff donne :
( ) ( ) ( )
a m m m m
K u t R i t K t = +
`
(1)

O est la tension induite, est la position angulaire du moteur, est la constante
lectrique (ou constante de couple), est le gain damplification et
( ) u t ( )
m
t
m
K
a
K
m
R est la rsistance du
circuit.

Le couple dlivr par le moteur est galement proportionnel au courant qui le
traverse :
m
T
m
i
( ) ( )
m m m
T t K i t = (2)

Les quations dynamiques rgissant le mouvement de la plate-forme ainsi que du bras
sont de natures non linaires d la configuration gomtrique des ressorts. Ces quations
peuvent cependant tre linarises autour de langle dquilibre du bras 0 = qui nous donne
une constante de rigidit quivalente
s
K pour les mouvements rotatif. Le bilan de puissance
donne :
( ) ( ) ( ) ( )
m G m s
J t K T t B t K t =
`` `
(3)

o reprsente linertie de la plate-forme, est le rapport de multiplication de
lengrenage,
m
J
G
K
B est le coefficient de frottement visqueux et
s
K est la constante de rigidit
linarise des ressorts. Cette quation traduit simplement le fait que la variation du moment
cintique de la plate-forme est produite par la somme des moments appliqus. Ceux-ci tant le
moment de force provenant du moteur, un frottement proportionnel la vitesse angulaire de la
plate-forme, ainsi que le moment d la liaison flexible avec le bras. En outre, langle de
rotation de la plate-forme est directement proportionnel celui du moteur
m
:
2
( ) ( )
m G
t K t = (4)

De mme, lquation suivante est obtenue pour dcrire la dynamique du bras :

( ) ( ) ( ) ( )
Br s
J t t K + =
``
`` t (5)

Br
J tant linertie du bras. La variation du moment cintique du bras est gale au moment
transmis par la liaison flexible. Les frottements provenant du mouvement du bras sont
ngligs.

Quelques paramtres utiles sont fournis ci-dessous :

- Gain de lamplificateur de puissance 2.0
a
K = .
- Rsistance 2.6
m
R = .
- Constante de couple 0.00767
m
K N = m A.
- Rapport de lengrenage . 70
G
K =
- Inertie de la plate-forme
7 2
3.87 10
m
J kg m

= .

4. Analyse par les rponses indicielle et impulsionnelle

Dans cette partie, nous allons tudier le systme de la Figure 2 par ses rponses
indicielle et impulsionnelle (voir Figure 3).



Figure 3 : Principe de lanalyse par rponse indicielle.

La Figure 4 montre la rponse indicielle dun systme du deuxime ordre :

( )
2
2
2
s n
n n
K
H p
p p

2

=
+ +
(6)

Les relations entre les paramtres du systme et sa rponse indicielle sont les suivantes :

2
2 2
4
exp , 1 , ,
1 1
r n p m
n
n
D t

t

= = =



(7)

3

r

D :
Dpassement
0.95
s
K
s
K :
Gaine statique

0
m
t :
Temps de
monte
p
t :
Temps de
1
er
sommet




Figure 4 : Rponse indicielle dun systme du deuxime ordre.

Travail demand :

1. A partir des quations dynamiques du (1) (5), dterminer la fonction de transfert du
systme considr :


( )
( )
( ) ( )
( )
Y p p p
U p U p
+
= (8)

(Trouver dabord ( ) ( ) U p p et ( ) ( ) U p p ).
2. Peut-on simplifier cette fonction de transfert partir des valeurs numriques donnes ?
Si oui donner la forme de la fonction de transfert simplifie et commenter-la.
3. Montrer que la rponse impulsionnelle dun systme linaire est donne par la drive
de sa rponse indicielle pour des conditions initiales nulles (Notons que la fonction de
transfert est la transforme de Laplace de la rponse impulsionnelle ). ( ) H p ( ) h t
4. Calculer et tracer les rponses indicielle et impulsionnelle dun systme linaire du
deuxime ordre pour 20
n
rad s = et 0.6 = (utiliser les fonctions step et impulse de
Matlab).
5. A partir de la rponse indicielle, dterminer le dpassement, le gain statique et le
temps de monte. Comparer les valeurs trouves avec les valeurs thoriques (quation
(7)).
6. Rajouter un intgrateur au systme prcdent. Calculer et tracer ses rponses indicielle
et impulsionnelle (utiliser les fonctions step et impulse de Matlab).
7. Comparer les rponses de deux systmes.
4
8. Tlcharger le fichier data1.mat qui contient les vecteurs suivants : u lentre du
systme (8) en volt, la sortie bruit du systme (8) en rad/s et t le temps en seconde. y
9. Dterminer la priode dchantillonnage utilis ltape 8.
10. Tracer lentre et la sortie , que reprsente la sortie ? J ustifier. u y
11. Calculer et tracer la rponse impulsionnelle du systme partir des mesures u et
laide de la fonction diff de Matlab.
y
12. A partir de la rponse impulsionnelle du systme, estimer les paramtres dun modle
continu du systme (8).
13. Calculer et tracer la rponse du modle estim lentre laide de la fonction lsim
de Matlab.
u
14. Comparer les sorties estime et relle du systme en terme de la norme de lerreur
dfinie par :
( )
2
2
1
1
N
k
k
N

=
=

(9)

5. Analyse par les fonctions de corrlations

Dans cette partie, nous cherchons reconstruire la rponse impulsionnelle du systme
partir de lentre et la sortie ( ) h k ( ) u k ( ) y k du systme par la mthode de corrlation. Le
principe de cette mthode est montr dans la Figure 5.




( ) d k
( ) u k
( ) y k
( ) h k
( ) h k


Figure 5 : Principe de la mthode de corrlation.

La sortie du systme en Figure 5 est donne par :

(10) ( ) ( ) ( ) ( ) ( ) ( ) ( )
1
0
, 0,1,2, , 1
N
i
y k h k u k d k h i u k i d k k N

=
= + = + =



Dans le cas o ( ) 0 d k = , cest--dire pas de bruit de mesure, la rponse impulsionnelle
du systme peut tre calcule par dconvolution numrique. Pour cela, la relation (10)
peut tre rcrite sous une forme matricielle comme suit :

5
( )
( )
( )
( )
( )
( ) ( )
( ) ( ) ( )
( )
( )
( )
( )
( ) 1 1
0 0 0 0
1 1 0 0
1 1 2 0
B N A N N X N
y u h
y u u h
y N u N u N u h N




=




. . . . .

_ __
0
1
1

(11)

La solution de (11) est donc :


( )
1
T T
X A A A B

= (12)

Comme le bruit de mesure est invitable, donc ( ) 0 d k , lestimation (12) sera bruite.
Pour amliorer cette estimation, nous allons utiliser les fonctions de corrlation. Multiplier
les deux cots de (10) par donne : ( u k l + )

( ) ( ) { } ( ) ( ) ( ) { } ( ) ( ) { }
0
k
i
E y k u k l h i E u k i u k l E d k u k l
=
+ = + + +

(13)

Sachant que :

( ) ( ) ( ) { } ( ) ( )
1
0
1
lim
N
ab
N
i
R l E a k b k l a i b i l
N

=
= + =

+ (14)

o et sont des variables alatoire, nous obtenons partir de (13) : ( ) a k ( ) b k

( ) ( ) ( ) ( )
1
0
N
yu uu du
i
R l h i R i l R

=
= + +

l (15)

En supposant que et sont des variables alatoires indpendantes moyenne
nulle, alors
( ) u k ( ) d k
( ) 0
du
R l = et en utilisant les proprits suivantes de la fonction de
corrlation ( ) ( )
uy yu
R l R l = et ( ) ( )
uu uu
R i l R l i = nous obtenons :

(16)
( ) ( ) ( ) ( )
( ) ( )
( ) ( )
1
0
1
0
, 0,1,2, , 1

N
uy yu uu
i
N
uu
i
uu
R l R l h i R i l
h i R l i l N
h l R l

=
= =
= =
=



De (16) nous concluons que la rponse impulsionnelle du systme peut tre
estime partir des fonctions de corrlation
( ) h l
( )
uy
R l et ( )
uu
R l par dconvolution
numrique. Pour cela, la relation (16) peut tre rcrite sous une forme matricielle comme
suit :
6

( )
( )
( )
( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
( )
( )
( )
( )
( ) 1 1
0 0 1 1
1 1 0
1 1 2 0
uy uu uu uu
uy uu uu uu
uy uu uu uu
A N N X N B N
R R R R N h
R R R R N h
R N R N R N R h N




=




. . . . .

__ _
0
1
1






(17)

La solution de (17) est donc donne par (12).

Dans le cas particulier o lentre ( ) u l est un bruit blanc moyenne nulle, nous
avons :

( ) ( ) ( ) 0
uu uu
R l R l = (18)

o ( ) l est limpulsion de Dirac. De (16) et (18) nous obtenons :


( ) ( ) ( ) ( )
( ) ( )
0
0
uy uu
uu
R l R l h l
R h l
=
=
(19)

et donc :

( )
( )
( )
, 0,1,2, , 1
0
uy
uu
R l
h l l N
R
= = (20)

Un signal numrique symtrique moyenne nulle similaire un bruit blanc peur tre
gnr par un registre dcalage (Figure 6). Le signal gnr est appel Signal Binaire
Pseudo Alatoire (SBPA). Un signal SBPA ainsi que sa fonction de corrlation sont
montres dans la Figure 7. Les paramtres du SBPA sont la priode et
lamplitudea. Quatre paramtres sont donc choisir pour gnrer un signal SBPA : T ,
, et a.
( )
2 1
n
T =
n m




Figure 6 : Gnration dun signal SBPA.
7


Figure 7 : Un signal SBPA et sa fonction de corrlation.


Travail demand :

1. Ecrire une fonction pour Matlab r=intcor(u,y) qui calcule la fonction de corrlation entre
et selon lquation (14). u y
2. Ecrire une fonction pour Matlab u=sbpa(T,n,m,a,p) qui gnre et trace un signal SBPA
ainsi que sa fonction de corrlation o est le nombre de priodes du signal gnr
(utiliser la fonction intcor que vous avez crite, xor et stairs de Matlab). Notez que le
registre doit tre initialis avec des valeurs 0 et 1 arbitrairement.
p
3. Ecrire un fonction pour Matlab h=ricor(u,y) qui calcule la rponse impulsionnelle dun
systme partir des mesures ( ) , u y sur 2 N chantillons selon lquation (17) et (12).
4. Gnrer un signal SBPA avec les proprits suivantes : 1 T s = , , , 7 n = 1 m = 1 a = ,
. Le signal gnr est-il confirm la thorie (Figure 7) ? 3 p =
5. Calculer la rponse du systme Gd=tf([0 1 0.5],[1 -1.5 0.7],1) lentre gnre ltape
prcdente laide de la fonction filter de Matlab en utilisant que la premire priode
du signal SBPA.
6. Calculer et tracer la rponse impulsionnelle du systme Gd partir de ses
entres/sorties gnres dans les tapes 4 et 5 en utilisant la fonction ricor que vous
avez crite.
7. Tlcharger le fichier data2.mat qui contient les entres/sorties bruites du systme Gd
dont la priode dchantillonnage est 1 s.
8. Calculer et tracer la rponse impulsionnelle du systme Gd partir de ses
entres/sorties bruites en utilisant la fonction ricor.
9. Calculer et tracer la rponse impulsionnelle du systme Gd partir de ses
entres/sorties bruites en utilisant la dconvolution numrique (11)-(12).
10. Comparer les trois rponses impulsionnelles et conclure sur lavantage de lutilisions
des fonctions de corrlation.

8
6. Analyse frquentielle

Dans cette dernire partie, nous allons estimer la fonction de transfert du systme
( H j ) par la transforme de Fourier. Le principe de cette mthode est montr en Figure 8.



Figure 8 : Principe de lanalyse frquentielle.

La fonction de transfert du systme ( ) H j est donne par :


( )
( )
( )
Y
H j
U

= (21)

o ( ) U et ( ) Y sont les transform de Fourier de ( ) u t et ( ) y t respectivement :

(22)
( ) ( )
( ) ( )
j t
j t
U u t e
Y y t e

=
=

dt
dt

Comme nous ne pouvons pas intgrer de , il faut intgrer entre des bornes
temporelles finies [ ] , ce qui introduit une erreur de troncature. Pour rduire leffet de
cette erreur, nous pouvons multiplions le signal temporel par une fentre comme il le montre
la Figure 9.

Figure 9 : Utilisant de la fentre rectangle.
9
Le tableau suivant montre quelques fentres utiles o LLP reprsente la largeur du
lobe principal et HLS reprsente lhauteur relative entre le premier lobe et le secondaire.


Tableau 1 : Quelques fentres temporelles.

Comme nous avons vu dans lanalyse par des fonctions de corrlation, le bruit est
invitable dans la pratique. Dans ce cas lestimation (21)-(22) sera bruite. Afin damliorer
cette estimation, nous allons utiliser les fonctions de densit spectrale, cest pour cette raison
que cette mthode est appele la mthode danalyse spectrale. La fonction de transfert est
donc donne par :

( )
( )
( )
uy
uu
H j

(23)

o ( )
uy
et ( )
uu
sont les transformes de Fourier de la fonction dintercorrlation
( )
uy
R et de la fonctions dautocorrlation ( )
uu
R respectivement. Pour rduire leffet de
troncature, les fonctions de corrlation ( )
uy
R et ( )
uu
R doit tre multiplies par une fentre
temporelle avant dappliquer la transforme de Fourier.

Travail demand :

1. Tlcharger le fichier data2.mat qui contient la rponse bruit ( ) y k du systme
Gd=tf([0 1 0.5],[1 -1.5 0.7],1) lentre ( ) u k dont la priode dchantillonnage est 1 s.
2. A laide de la fonction fft de Matlab, calculer la rponse frquentielle du systme
( H j ) par lanalyse frquentielle (21)-(22) et lanalyse spectrale (23) en utilisant :
o Les mesures ( ) ( ) (
, u k y k
)
sans filtrage.
o Les mesures ( ) ( ) (
, u k y k
)
filtre par une fentre de Hann.
o Les mesures ( ) ( ) (
, u k y k
)
filtre par une fentre de Hamming.
10
3. A laide de la fonction frd de Matlab, gnrer un modle frquentiel du systme pour
chaque cas prcdent.
4. Comparer les modles obtenus avec Gd dans le demain frquentiel laide de la
fonction bode de Matlab. Commenter ces courbes.
11

Annexe : Gnralits sur Matlab

1. Lenvironnement Matlab

Matlab (MatrixLaboratory) est un environnement de calcul numrique matriciel. Aprs le lancement
de Matlab, une fentre de commande apparat qui permet lutilisateur de taper une commande
quelconque obissant la syntaxe de Matlab.

Saisir une
instruction
Lancer
Laide
de Matlab
Lancer
lditeur
de Matlab
Ouvrir
un fichier
Matlab
Lancer les
variables
observateur
Lancer
Simulink
Changer le
rpertoire de
travail
Figure 1 : Fentre de Matlab.
Le symbole >>apparaissant gauche de la fentre de Matlab indique que linterprteur est prt
recevoir une commande. 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.

Dans cette session on a dfini la matrice et l'on a calcul son carr. Chaque ligne
d'instructions doit se terminer par un retour chariot (touche Entre). La commande pour quitter Matlab
est quit.
1 3
4 2
A

=


1.1 Espace de travail

Comme tout langage de programmation, Matlab permet de dfinir des donnes variables. Les variables
sont dfinies au fur et mesure que l'on donne leurs noms (identificateur) et leurs valeurs numriques
ou leurs expressions mathmatiques. Matlab ne ncessite pas de dclaration de type ou de dimension
pour une variable. Les variables sont stockes dans l'espace de travail (ou workspace) et peuvent tre
utilises dans les calculs subsquents. Pour obtenir la liste des variables actives de l'espace de travail
1
on dispose des commandes who et whos. La commande who affiche le nom des variables actives. La
commande whos donne plus dinformations : le nom, la taille du tableau (nombre de lignes et de
colonnes) associ, l'espace mmoire utilis (en Bytes) et la classe des donnes (principalement double
array s'il s'agit d'un tableau de valeurs relles ou complexes et char s'il s'agit d'un tableau de
caractres). La commande clear permet de nettoyer l'espace de travail : toutes les variables sont
dtruites. Il est possible de ne dtruire qu'une 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
>>

Il est possible de sauvegarder une session Matlab dans un fichier pour une utilisation ultrieure.
L'instruction save nom-fic enregistre toutes les variables de l'espace de travail dans le fichier nom-
fic.mat. Si aucun nom de fichier n'est prcis, le fichier par dfaut est Matlab.mat. Il est possible de
ne sauver qu'une partie des variables (par exemple seulement la variable contenant le rsultat d'un
calcul) en utilisant l'instruction save nom-fic nom-var o nom-var est le nom de la (ou des)
variable(s) sauvegarder. Attention, seul le contenu des variables est sauvegard et non pas l'ensemble
des instructions effectues durant la session. Pour ramener dans l'espace de travail les variables
sauvegardes dans le fichier nom-fic.mat, taper load nom-fic. Dans l'exemple qui suit on calcule le
sinus et le cosinus de 2 pi/3 dans les variables y et z. On sauve ces rsultats dans un fichier toto.mat.
Aprs avoir quitt Matlab on peut vrifier que le fichier toto.mat existe bien mais qu'il ne s'agit pas
d'un fichier ascii. Si l'on relance Matlab et que l'on tape load toto, on peut vrifier 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
2
y =
0.8660
z =
-0.5000
>> save toto y z
>> quit

6 flops.

Lancer Matlab:

>> load toto
>> who

Your variables are :

y z

>> y
y =
0.8660
>> z
z =
-0.5000
>> x
??? Undefined function or variable 'x'.
>>

La commande diary permet de sauvegarder l'ensemble d'une session dans un fichier ascii pour un
traitement ultrieur (insertion dans un document, impression, ...). Le fichier de sauvegarde par dfaut a
pour nom diary. On provoque la sauvegarde dans le fichier nom-fic, par l'instruction diarynom-fic.
Attention, c'est la commande diary qui dclenche 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 fichier toto, voici ce que vous verrez :

>> z=cos(x)
z =
-0.5000
>> diary off

1.2 Obtenir de laide

Dans une session Matlab, il est possible d'obtenir une aide en ligne sur une commande en tapant help
nom-commande. Par exemple,

>> help diary

3
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 reconnues,
mme si elles figurent en majuscules dans l'aide en ligne. On peut galement obtenir de l'aide
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
commentaires en entte des fonctions Matlab (ces lignes sont celles affiches par la commande
doc). L'instruction lookfor motcl recherche le mot-cl motcl dans la premire ligne de
commentaire de toutes les fonctions Matlab. L'instruction lookfor motcl -all recherche 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 l'crire entre guillemets (' '). La commande
lookfor retourne le nom la fonction Matlab (ou des fonctions) o le mot-cl figure dans la
premire ligne de commentaires. Elle retourne galement la ligne de commentaires o figure
le mot-cl. Si le mot-cl n'a t trouv dans aucune ligne de commentaires, Matlab rend la
main sans rien afficher.

>> lookfor determinant
DET Determinant.
>> lookfor 'tridiagonal matrix'
LESP Tridiagonal matrix with real, sensitive eigenvalues.
POISSON Block tridiagonal matrix from Poisson's 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.3 Syntaxe d'une ligne d'instructions

Si une instruction Matlab est suivie d'un point virgule, le rsultat de cette instruction n'est pas affich.
Pour rafficher un rsultat contenu dans une variable, il suffit 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
>>
4
Plusieurs instructions Matlab peuvent figurer sur une mme ligne. Il faut alors les sparer par une
virgule ou par un point virgule. D'autre 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 =
13 9
12 16
>> x = 1 + 2 + 3 + 4 + 5 + 6 ...
+7 + 8 + 9 + 10
x =
55
>>

Si la syntaxe de l'instruction soumise est errone ou si vous demandez Matlab d'excuter une
instruction illgale (qui n'a pas de sens mathmatique par exemple), vous obtiendrez un message
d'erreur. Ce message vous indique les sources d'erreurs 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'.
>>

Dans la premire instruction, on tente d'effectuer la somme de deux matrices aux dimensions
incompatibles. Dans le second exemple on tente de dfinir une matrice dont le nombre d'lments dans
chaque ligne diffre. Enfin la troisime instruction est inconnue de Matlab : il ne s'agit n'y d'une
fonction ni d'une variable incorpore ou utilisateur.
1.4 Gestion des fichiers du rpertoire de travail

Un certain nombre de commandes permettent de grer les fichiers du rpertoire de travail. La
commande dir donne la liste des fichiers du rpertoire de travail. La commande cd permet de changer
de rpertoire de travail. La commande type permet d'afficher le contenu d'un fichier. La commande
delete permet de dtruire un fichier. Ces commandes s'utilisent de la mme manire que les
commandes correspondantes du DOS. Enfin la commande edit permet d'ouvrir un diteur de texte. Le
choix de l'diteur a t effectu au moment de l'installation de Matlab sur votre machine, il est possible
de changer votre diteur favori dans les Preferences de Matlab. Il est galement possible d'excuter
des commandes DOS partir de Matlab en faisant prcder la commande d'un point d'exclamation (!).
Si vous avez effectu les exemples du paragraphe prcdent, deux fichiers toto et toto.mat existent
dans votre rpertoire de travail. Voici alors un exemple d'utilisation des commandes de gestion des
fichiers.

>> dir
. .. toto toto.mat
>> edit toto
>> !notepad toto
>>




5
2. Types de donnes et variables

Comme tout langage de programmation, Matlab permet de dfinir des donnes variables. Une variable
est dsigne par un identificateur qui est form d'une combinaison de lettres et de chiffres. Le premier
caractre de l'identificateur doit ncessairement tre une lettre. Attention, Matlab diffrencie
majuscules et minuscules! Ainsi X33 et x33 dsignent deux variables distinctes. Les variables sont
dfinies au fur et mesure que l'on donne leurs noms (identificateur) et leurs valeurs numriques ou
leurs expressions mathmatiques. L'utilisation de variables avec Matlab ne ncessite pas de dclaration
de type ou de dimension. Le type et la dimension d'une variable sont dtermins de manire
automatique partir de l'expression mathmatique ou de la valeur affecte 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 d'lments d'un type donn. Matlab diffrencie 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 l'on appelle variable scalaire,
vecteur ou matrice suivant la forme du tableau.
2.1 Les types de donnes
2.1.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 n'y a pas de type entier proprement parler. Le type logique est associ au rsultat de
certaines fonctions. Signalons qu'il est inutile (impossible) de dclarer le type d'une variable. Ce type
est tabli automatiquement partir des valeurs affectes la variable. Par exemple les instructions x =
2; z = 2+i; rep = 'oui'; dfinissent 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 dfinit pas de manire explicite le type d'une 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 est complexe partie imaginaire non nulle ou n'est pas un tableau de valeurs
relles ou de caractres).

>> ischar(rep)
ans =
1
>> ischar(x)
ans =
0
>> isreal(z)
ans =
0
>> isreal(x)
ans =
6
1
>> isreal(rep)
ans =
1
>>
2.1.2 Le type complexe
L'unit imaginaire est dsigne par i ou j. Les nombres complexes peuvent tre crits sous forme
cartsienne a+ib ou sous forme polaire r e
it
. Les diffrentes 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
l'argument de z. On fera attention au fait que les identificateurs i et j ne sont pas rservs. Aussi il est
possible que des variables de noms i et j aient t redfinies au cours d'un calcul antrieur et soient
toujours actives. Si c'est la cas, on peut soit dtruire ces deux variables (clear i j), i et j redeviennent
alors l'unit imaginaire, soit raffecter i ou j la valeur unit imaginaire par l'instruction i = sart(-1).
On se mfiera donc des boucles d'indices i et j dans lesquelles on manipule des variables de type
complexe. On fera galement attention ne pas laisser d'espace autour de l'unit imaginaire afin
d'viter 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.1.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 d'une suite de caractres encadre d'apostrophes 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 s'effectue selon les rgles de manipulation des tableaux. L'exemple suivant
prsente diffrentes manipulations d'une chane de caractres.

>> 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 =
7
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 affecter le caractre apostrophe (') une variable on devra crire '''', soit quatre
apostrophes.

>> rep = 'aujourd'hui'
??? rep = 'aujourd'hui
|
Missing operator, comma, or semi-colon.

>> rep = 'aujourd''hui'
rep =
aujourd'hui
>> apos = ''''
apos =
'
>>

La chane de caractres vide s'obtient par deux apostrophes ''. La commande isempty permet de tester
si une variable de type chane de caractres est vide ou non. La commande strcmp permet de tester si
deux chanes de caractres sont gales ou non.
2.1.4 Le type logique
Le type logique (logical) possde deux 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 l'exemple qui suit on
considre une variable x contenant la valeur 123 et une variable y dfinie par l'expression
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 affiche la phrase x est gal a y ou la phrase x est diffrent de y. Dans
l'exemple propos, compte tenu des erreurs d'arrondis 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
8
y =
1.229999999999999e+02
tst =
0
>> format, clear
>>

2.2 Les vecteurs
2.2.1 Dfinir un vecteur
On dfinit 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 dfinit un vecteur colonne en donnant la liste
de ses lments spars au choix par des points virgules (;) ou par des retours chariots. 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 dfinir la longueur d'un vecteur au pralable. Cette longueur sera
tablie automatiquement partir de l'expression mathmatique dfinissant le vecteur ou partir des
donnes. On peut obtenir la longueur d'un vecteur donn grce la commande length. Un vecteur peut
galement tre dfini 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 correspondantes), on dfinit le vecteur bloc (x
1
| x
2
| x
3
) par
l'instruction 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 d'un vecteur peuvent tre manipuls grce leur indice dans le tableau. Le k-ieme
lment du vecteur x est dsigne par x(k). Le premier lment d'un vecteur a obligatoirement pour
indice 1. En pratique ceci impose de faire des translations d'indices si par exemple on souhaite dfinir
une suite (x
0
, x
1
, ... , x
n
). Le terme x
0
de la suite correspondra l'lment x(1) du vecteur et le terme
x
N
l'lment x(N+1). Il est possible de manipuler plusieurs lments d'un vecteur simultanment.
9
Ainsi les lments k l du vecteur x sont dsigns par x(k :l). On peut galement manipuler facilement
les lments d'un vecteur dont les indices sont en progression arithmtique. Ainsi si l'on 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 l'exemple prcdent.

>> 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 dfinir un vecteur dont les composantes forment une suite arithmtique. Pour
dfinir 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 n'est 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 dfinir 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). Les composantes du vecteur sont donc
linairement espaces. 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.2.2 Vecteurs spciaux
Les commandes ones, zeros et rand permettent de dfinir des vecteurs dont les lments ont
respectivement pour valeurs 0, 1 et des nombres gnrs de manire alatoire.

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 gnres de
manire alatoire entre 0 et 1
10
rand(m,1)
: vecteur colonne de longueur m dont les lments sont gnrs de
manire alatoire entre 0 et 1
2.3 Les matrices
2.3.1 Dfinir une matrice
On a dj vu que l'on dfinissait la matrice en tapant A = [ 1 3; 4 2 ]. D'une faon
gnrale, on dfinit une matrice en donnant la liste de ses lments entre crochets. Signalons que
Matlab admet d'autres faons d'crire les matrices. Les lments d'une ligne de la matrice peuvent tre
spars au choix par un blanc ou bien par une virgule (
1 3
4 2
A

=

,). 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 d'une matrice est rfrenc par ses numros de ligne et de colonne. A(i,j) dsigne le i-ime
lment de la j-ime 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 d'obtenir les dimensions d'une matrice A donne. On peut soit obtenir de
manire spare le nombre de lignes et de colonnes par les instructions size(A,1) et size(A,2)
respectivement, soit obtenir le nombre m de lignes et le nombre n de colonnes par l'instruction [m,n] =
size(A).
On peut construire trs simplement une matrice par blocs. Si A, B, C, D dsignent quatre matrices (aux
dimensions compatibles), on dfinit la matrice bloc,

par l'instruction K = [A B ; C D]. Voici un exemple de construction par blocs de la matrice
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.3.2 Matrices spciales
Certaines matrices se construisent trs simplement grce des commandes ddies. Citons les plus
utilises :

eye(n)
: la matrice identit de dimension 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 spcifier qu'une seule valeur
de dimension : ones(n) est la matrice carre de dimension n dont tous les lments valent 1.
Mentionnons enfin la commande magic(n) qui permet d'obtenir une matrice magique de dimension n.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> ones(3,2)
12
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.3.3 Manipuler des matrices
Le symbole deux-points ( :) permet d'extraire simplement des lignes ou des colonnes d'une matrice.
Le j-ieme vecteur colonne de la matrice A est dsign par A( :,j). C'est simple, il suffit de traduire le
symbole deux-points ( :) par tout . Ainsi A( :,j) dsigne toutes les lignes et la j-ieme colonne de la
matrice A. Bien entendu, la i-ieme 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 l'on souhaite changer les colonnes 2 et 3 de la matrice A une premire possibilit consiste
excuter :

>> 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
>>

13
On peut galement extraire plusieurs lignes ou colonnes simultanment. Si J est un vecteur d'entiers,
A( :,J )est la matrice issue de A dont les colonnes sont les colonnes de la matrice A d'indices 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 d'indices contenus dans le vecteur J . D'une faon plus gnrale, il est possible de n'extraire qu'une
partie des lments des lignes et colonnes d'une matrice. Si L et C sont deux vecteurs d'indices,
A(L,C) dsigne la matrice issue de la matrice A dont les lments sont les A(i,j) tels que i soit dans L
et j soit dans 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 dfinir un vecteur dont les
composantes sont en progression arithmtique. 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
>>

Il existe des commandes Matlab permettant de manipuler globalement des matrices. La commande
diag permet d'extraire la diagonale d'une 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 fixe : 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
14
On n'est pas oblig de se limiter la diagonale principale. La commande diag admet un second
paramtre k pour dsigner la k sur-diagonale (si k>0) ou la k 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 l'aide de la commande diag trs simplement des matrices tridiagonales. Par exemple la
matrice correspondant la discrtisation par diffrences finies du problme de Dirichlet en dimension
1 s'obtient 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 d'obtenir la partie triangulaire infrieure (l pour
lower) d'une matrice. La commande triu permet d'obtenir la partie triangulaire suprieure (u pour
upper) d'une matrice.

>> 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 du k diagonal. Ainsi,

15
>> 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 coefficients rels en tapant A'. Si la matrice est
coefficients 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.3.4 La structure Sparse
On appelle matrice creuse (le terme anglais est sparse matrix) une matrice comportant une forte
proportion de coefficients nuls. De nombreux problmes issus de la physique conduisent l'analyse de
systmes linaires matrice creuse. L'intrt 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 d'oprations (on
n'effectuera pas les oprations portant sur les zros). Par dfaut dans Matlab une matrice est considre
comme pleine (ou full en anglais), c'est--dire que tous ses coefficients sont mmoriss. Si M est une
matrice, la commande sparse(M) permet d'obtenir la mme matrice mais stocke sous la forme
sparse. Si l'on 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
d'une matrice grce la commande spy. Si M est une matrice, la commande spy(M) ouvre une fentre
graphique et affiche sous forme de croix les lments non-nuls de la matrice. Le numro des lignes est
port sur l'axe des ordonnes, celui des colonnes en abscisse. On obtient galement le nombre
d'lments non-nuls de la matrice. La commande nnz permet d'obtenir le nombre d'lments non-nuls
d'une matrice. Reprenons l'exemple de la matrice tridiagonale issue de la discrtisation par diffrences
finies 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 =
16
(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)
>>




















Figure 2 : Rsultat de la commande spy(B).
Pour les trs grosses matrices creuses, il n'est bien entendu pas souhaitable d'utiliser une structure
pleine (full) pour dfinir la matrice avant de passer en stockage sparse. La commande sparse permet
de dfinir une matrice creuse directement sous la forme sparse. On l'utilise de la faon suivante : A =
sparse(is,js,s,n,m) pour dfinir une matrice A n lignes et m colonnes dont les coefficients 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;
>> s =[2*ones(1,N), -ones(1,N-1), -ones(1,N-1)]
s =
Columns 1 through 12
17
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
(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 diagonales, identits
et des matrices dont les lments sont des nombres alatoires avec un stockage sparse. Elles s'utilisent
de la mme manire que leur quivalent diag, eye et rand pour les matrices pleines.


3. Calculer avec Matlab

3.1 Les constantes

Les principales constantes sont :

pi
: 3.1415926535897
I
: i
2
=- 1
J
: j
2
=- 1
eps
: prcision numrique relative
realmin
: plus petit nombre virgule flottante manipulable
realmax
: plus grand nombre virgule flottante manipulable
18
inf
: infini. Est obtenu quand on essaie d'valuer une expression dont le rsultat excde
realmax
NaN
: not-a-number. Est obtenu quand on essaie d'effectuer une opration non-dfinie
comme 0/0

Les valeurs des constantes eps, realmin et realmax dpendent de la machine sur laquelle Matlab est
install. Par exemple sur un PC avec Windows XP on a eps = 2.2204e-16, realmin = 2.2251e-308
et realmax = 1.7977e+308. Les noms des constantes ne sont pas rservs, c'est--dire qu'il est
possible de dfinir des variables de mme nom. Dans ce cas, l'identificateur fera rfrence la variable
dfinie par l'utilisateur et non plus la constante Matlab. On fera attention par exemple, si l'on utilise
le type complexe, ne pas crire de boucles ayant i ou j comme indices. Pour que l'identificateur fasse
nouvelle rfrence la constante Matlab, il suffit 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 d'utiliser 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 quatre oprations usuelles entre les
valeurs de x et y dans . Si x et y sont deux variables scalaires de type complexe, x+y, x-y, x*y et x/y
dsignent les quatre oprations usuelles entre les valeurs de x et y dans . L'exponentiation s'obtient
grce au symbole ^ (la syntaxe est x^y).
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 le plus petit multiple
commun et le plus grand commun diviseur deux entiers m et n. La commande factor(n) permet
d'obtenir les termes de la dcomposition en facteurs premiers de l'entier 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 (s'obtient aussi par x.^0.5),
abs(x)
: valeur absolue de x,
sign(x)
: fonction valant 1 si x est positif ou nul et 0 sinon.
Lorsque la fonction est dfinie sur le corps des nombres complexes l'argument peut tre de type
complexe. On dispose galement de fonctions spcifiques aux complexes :
conj(z)
: le conjugu de z,
19
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 d'arrondis 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 :
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 d'effectuer des oprations de manire globale sur
les lments d'un vecteur de type rel ou complexe sans avoir manipuler directement ses
lments. Si k est une variable scalaire et x un vecteur, l'instruction k*x multiplie tous les
lments de x par k. Si x et y sont deux vecteurs de longueur identique, l'instruction z = x+y
(respectivement x-y) dfinit 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-eme composante est le produit
(respectivement le quotient) de la i-eme composante du vecteur x par la i-eme composante du
vecteur y en effectuant l'instruction 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 n'y
a pas dans la version 5.1 de commande ddie pour calculer le produit scalaire de deux
20
vecteurs. Il s'obtient grce l'instruction sum(x.*y). Dans les versions suivantes, la commande
dot(x,y) permet de calculer le produit scalaire des deux vecteurs x et y.
Les fonctions mathmatiques incorpores dcrites au paragraphe prcdent peuvent tre utilises 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 spcifiques aux vecteurs :

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)
: change la position 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 enfin quelques fonctions logiques. Les commandes all et any servent tester si les lments
d'un vecteur sont nuls ou non. Si v est un vecteur de valeurs numriques, all(v) retourne vrai (1) si tous
les lments du vecteur sont diffrents de 0 et faux (0) si au moins un lment vaut 0. any(v) retourne
vrai (1) si au moins un lment du vecteur est diffrent de 0 et faux (0) si le vecteur est compos
exclusivement de 0.


21
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 A^2 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
>>

Si les dimensions des matrices A et B sont incompatibles avec l'opration matricielle, Matlab renvoi un
message d'erreur :

>> A+B

??? Error using ==> + Matrix dimensions must agree.
>>

En plus des oprations matricielles usuelles, il est possible d'effectuer des oprations entre matrices
lment par lment . Pour cela, il faut faire prcder l'oprateur d'un point (.). Ainsi si A et B sont
deux matrices de mme dimension, on obtient la matrice dont le terme d'indices (i,j) est le produit des
deux termes d'indices (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
>>

22
Les fonctions matricielles les plus courantes sont :

det(A)
: renvoie le dterminant de la matrice carre A.
eig(A)
: renvoie les valeurs propres (eigenvalues) de la matrice carre A. Si l'on 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 coefficients du polynme caractristique associ la matrice carre A. On
sera vigilant l'ordre dans lequel sont rangs les coefficients : le premier lment du
vecteur est le coefficient du monme de plus haut degr. Ainsi dans l'exemple suivant il
faut lire p(x) =x
3
- 6 x
2
- 72 x -27 ,
>>A =[1 2 3 ; 4 5 6 ; 7 8 0]; p =poly(A)
p =
1 -6 -72 -27
inv(A)
: renvoie l'inverse 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 l'exponentielle matricielle de A.
On peut obtenir les diffrentes normes d'une 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, .
norm(A,inf)
: norme infini de la
matrice A, .
norm(A,'fro')
: norme de Frobenius de la
matrice A, .
Ces fonctions matricielles incorpores de Matlab peuvent tre utilises avec un argument 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.
L'algorithme mis en oeuvre dpend de la structure de la matrice A du systme. Matlab utilise dans
l'ordre les mthodes suivantes :
Si A est une matrice triangulaire, le systme est rsolu par simple substitution.
Si la matrice A est symtrique ou hermitienne, dfinie positive, la rsolution est effectue par
la mthode de Choleski.
Si A est une matrice carre mais n'entrant pas dans les deux cas prcdents, une factorisation
LU est ralise en utilisant la mthode d'limination de Gauss avec stratgie de pivot partiel.
Si A n'est pas une matrice carre, la mthode QR est utilise.
23
Dans le cas des matrices stockes sous forme sparse, des algorithmes particuliers sont mis en oeuvre.
Chacune des mthodes prcdentes peut tre utilise de manire spcifique grce aux commandes
chol, lu, qr. Il est galement possible d'utiliser des mthodes itratives. Les commandes cgs, bicg,
bicgstab mettent par exemple en oeuvre 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
n-1
x
n-1
+. . . +a
1
x +a
0
est dfini par un vecteur p
de dimension n+1 contenant les coefficients {a
i
}
{i=0,...,n}
rangs dans l'ordre dcroissant des indices.
C'est--dire que l'on a p(1) =a
n
, . . . , p(n+1) =a
0
. La commande polyval permet d'valuer le
polynme p (la fonction polynomiale) 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 polynomiale aux diffrents points spcifis dans le vecteur x. Utilise avec la commande
fplot, la commande polyval permet de tracer le graphe de la fonction polynomiale sur un intervalle
[x
min
, x
max
] donn. La syntaxe de l'instruction est : fplot('polyval([ a_n, ..., a_0] , x)' , [x_min ,
x_max]). Voici par exemple comment dfinir le polynme p(x) =x
2
-1. Le graphe de la fonction
polynomiale est prsent la figure 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
>>

















Figure 3 : Graphe de la fonction polynomiale p(x) =x
2
-1.
24
On obtient les racines du polynme p grce l'instruction roots(p).
L'instruction poly permet d'obtenir la reprsentation canonique p(x) =a
n
x
n
+a
n-1
x
n-1
+. . . +a
1
x +a
0

d'un polynme de degr n dont on connat les n+1 racines {x
i
}
{i=0,...,n}
. Les coefficients {a
i
}
{i=0,...,n}
sont
obtenus sous forme d'un vecteur p et sont rangs dans l'ordre dcroissant des indices. C'est--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
>>

4. Les entres-sorties

4.1 Les formes daffichage des rels

Matlab dispose de plusieurs formats d'affichage des rels. Par dfaut le format est le format court
cinq chiffres. Les autres principaux formats sont :

format long
: format long 15 chiffres.
format short e
: format court 5 chiffres avec notation en virgule flottante.
format long e
: format long 15 chiffres avec notation en virgule flottante.
Matlab dispose galement des formats format short g et format long g qui utilise la meilleure des
deux critures virgule fixe ou virgule flottante. On obtiendra tous les formats d'affichage possibles
en tapant help format. On impose un format d'affichage en tapant l'instruction 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
>>



25
4.2 Affichage simple, la commande disp

La commande disp permet d'afficher un tableau de valeurs numriques ou de caractres. L'autre faon
d'afficher un tableau est de taper son nom. La commande disp se contente d'afficher le tableau sans
crire le nom de la variable ce qui peut amliorer certaines 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
4 14 15 1
>>

On utilise frquemment la commande disp avec un tableau qui est une chane de caractres pour
afficher un message. Par exemple disp('Calcul du dterminant de la matrice A'). On utilise
galement la commande disp pour afficher un rsultat. Par exemple disp(['Le dterminant de la
matrice A vaut ', num2str(det(A))]). On remarque que l'usage de la commande disp est alors un peu
particulier. En effet un tableau doit tre d'un type donn, les lments d'un 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 affiche quatre dcimales mais il est possible de lui spcifier le nombre
de dcimales souhait en second paramtre. De mme il est possible de lui spcifier un format
d'affichage 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
l'apostrophe.
4.3 Lecture

La commande input permet de demander l'utilisateur d'un programme de fournir des donnes. La
syntaxe est var = input(' une phrase '). La phrase une phrase est affiche et Matlab attend que
l'utilisateur saisisse une donne au clavier. Cette donne peut tre une valeur numrique ou une
instruction Matlab. Un retour chariot provoque la fin de la saisie. Une valeur numrique est
directement affecte la variable var tandis qu'une instruction Matlab est value et le rsultat est
affect 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 fin de l'instruction si vous ne souhaitez pas voir s'afficher var =.
Sous cette forme il est impossible d'avoir une donne de type chane de caractres dans la mesure o
Matlab essaie d'interprter cette chane de caractres comme une instruction. Si l'on souhaite saisir une
rponse de type chane de caractres on utilise la syntaxe var = input(' une phrase ','s'). Signalons
qu'un retour chariot (sans autre chose) initialise la variable var au tableau vide []. Voici un exemple
d'utilisation 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

26
4.4 Impressions diriges par format
La commande sprintf permet l'impression de variables selon un modle donn. Un modle d'dition se
prsente sous la forme du symbole pourcent (%) suivi d'indications permettant de composer le contenu
du champ imprimer, en particulier sa longueur en nombre de caractres. Le modle d'dition utilis
par Matlab est le modle d'dition du langage C. La syntaxe de la commande sprintf est :
sprintf(format, variables)
o
variables est le nom des variables imprimer suivant le modle d'dition spcifi dans format;
format est le format d'dition. Il s'agit d'une chane de caractres contenant les modles
d'ditions des variables imprimer.
4.4.1 Modle d'dition de caractres
Un modle d'dition 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 justifi droite (si la longueur de la
chane de caractres est plus petite que la longueur L du champ, des espaces seront insrs aprs la
chane de caractres). Le symbole - (moins) juste aprs le symbole % permet de justifier gauche. En
l'absence de l'entier L la longueur totale du champ est gale au nombre de caractres de la chane.

>> sprintf('%s', 'il fera beau a Metz')
ans =
il fera beau a Metz
>> temps = 'il fera beau a Metz'; sprintf('%s',temps)
ans =
il fera beau a Metz
>> sprintf('%30s', temps)
ans =
il fera beau a Metz
>> sprintf('%-30s', temps)
ans =
il fera beau a Metz
>> sprintf('meteo : %s', temps)
ans =
meteo : il fera beau a Metz
>>

4.4.2 Modle d'dition des rels
Un modle d'dition de rel est de la forme %+- L.D t, 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 afficher et t spcifie le type de notation utilise. Par dfaut le champ est justifi
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 justifier gauche. Le symbole + (plus) provoque
l'affichage systmatique d'un signe + devant les rels positifs. Les principales valeurs possibles pour t
sont les suivantes :

d
: pour les entiers
e
: pour une notation virgule flottante 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 fixe (ex : 3.1415)
27
g
: la notation la plus compacte entre la notation virgule
flottante et la notation virgule fixe 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
>>

4.4.3 Utilisations particulires
La commande sprintf est vectorielle : si la variable n'est pas scalaire le format d'impression 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 d'utiliser les symboles suivant dans les chanes de caractres

\n
: provoque le passage une nouvelle ligne
\t
: insre une tabulation horizontale
\b
: dcale l'impression du champ suivant d'un 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
8.0 | 2.079442E+00
9.0 | 2.197225E+00
10.0 | 2.302585E+00
>>

Si l'on a besoin d'afficher le caractre % on le doublera %% pour qu'il ne soit pas interprt comme le
dbut d'un format. La commande fprintf est l'analogue de sprintf pour imprimer de variables selon un
modle donn dans un fichier.






28
5. Programmer sous Matlab

5.1 Scripts et fonctions

Il est possible d'enregistrer une squence d'instructions dans un fichier (appel un M-file) et de les faire
excuter par Matlab. Un tel fichier doit obligatoirement avoir une extension de la forme .m (d'o le
nom M-file) pour tre considr par Matlab comme un fichier d'instructions. On distingue deux types
de M-file, les fichiers de scripts et les fichiers de fonctions. Un script est un ensemble d'instructions
Matlab qui joue le rle de programme principal. Si le script est crit dans le fichier de nom nom.m on
l'excute dans la fentre Matlab en tapant nom. Mme si l'on ne souhaite pas proprement parler
crire de programme, utiliser un script est trs utile. Il est en effet beaucoup plus simple de modifier
des instructions dans un fichier l'aide d'un diteur de texte que de retaper un ensemble d'instructions
Matlab dans la fentre de commande.
Les fichiers de fonctions ont deux rles. Ils permettent l'utilisateur de dfinir des fonctions qui ne
figurent pas parmi les fonctions incorpores de Matlab (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 d'applications o les fonctions jouent le rle des fonctions et
procdures des langages de programmation usuels.
On dfinit la fonction fonc de la manire suivante :
function [vars1, ..., varsm] = fonc(vare_1, ..., varen)
squence d'instructions
o
vars1, ..., varsm sont les variables de sortie de la fonction;
vare1, ..., varen sont les variables d'entre de la fonction;
squence d'instructions est le corps de la fonction.
Le fichier 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 enfin les variables d'entre entre
parenthses. Si la fonction ne possde qu'une seule variable de sortie, les crochets sont inutiles. Il est
impratif que la fonction ayant pour nom fonc soit enregistre dans un fichier de nom fonc.m sans
quoi cette fonction ne sera pas visible par Matlab.
Dans l'exemple qui suit, on dfinit une fonction modulo qui calcule la valeur de a modulo n en prenant
pour systme de rsidus {1, 2, ..., n} au lieu de {0, 1, ..., n-1} (systme de rsidus considr par la
fonction incorpore mod). Les lignes qui suivent doivent tre enregistres dans un fichier 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

q = floor(a./n);
29
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 commentaire situes
entre la ligne function et la 1ere ligne d'instructions sont affiches si l'on demande de l'aide 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

>>

L'appel d'une fonction utilisateur s'effectue de la mme faon que l'appel de n'importe quelle fonction
Matlab :

>> b = 10 ; m = 4;
>> [r,q] = modulo(b,m)
r =
2
q =
2
>> modulo(10,5)
ans =
5
>>
Remarques :
1. Il n'y a pas de mot-cl (par exemple end) pour indiquer la fin de la fonction. La fonction est
suppose se terminer la fin du fichier. Il est toutefois possible de provoquer un retour au
programme appelant dans le corps de la fonction grce la commande return.
2. On ne peut crire qu'une seule fonction par fichier (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 fichier qu'une autre fonction (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).
3. Si le fichier ne commence pas par le mot-cl function on a tout simplement crit un script!
La gestion des variables d'entre et de sortie est trs souple sous Matlab. Si l'on n'est intress que par
le rsidu et pas par le quotient, on peut se contenter de ne mettre qu'une 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 l'on ne souhaite recueillir que le quotient, on est oblig d'effectuer un appel de la
forme [r,q] = modulo(10,4) et donc de dfinir une variable inutile. Aussi, d'une manire gnrale, il
est bon de ranger les variables de sortie par ordre d'importance. Il est galement possible d'appeler une
fonction donne avec moins de variables d'entre que le nombre indiqu pour la dfinition 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
30
nombre de variables d'entre utiliss lors de l'appel et nargout qui retourne le nombre de variables de
sortie prvues lors de l'appel. Voici un petit exemple venant illustrer ces possibilits.
function [A,r] = 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 l'appel 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
r = rank(A);
end

Dans cet exemple, on gre les variables d'entre de la fonction de sorte de ne pas avoir besoin de
donner lors de l'appel le nombre de lignes et de colonnes si la matrice est carre. On gre aussi les
variables de sortie afin de ne pas calculer le rang de la matrice si aucune variable de sortie pour le
rsultat n'est prvue lors de l'appel.

>> [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 l'utilisateur. Toutes les variables dfinies l'intrieur d'une fonction sont des
variables locales cette fonction. La communication avec des variables du programme principal (ou
du workspace) ou avec des variables d'autres fonctions se fait uniquement par les variables d'entre 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
31
et plusieurs fonctions sans qu'il soit besoin de la spcifier parmi les variables d'entre-sortie des
diffrentes 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)
~ =
: diffrent 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.
5.3 Instructions de contrle

Les instructions de contrle sous Matlab sont trs proches de celles existant dans d'autres langages de
programmation.
5.3.1 Boucle FOR : parcours d'un intervalle
Une premire possibilit pour excuter une squence d'instructions de manire rpte consiste
effectuer une boucle pour les valeurs d'un indice, incrment chaque itration, variant entre deux
bornes donnes. Ce processus est mis en oeuvre par la boucle for.
Syntaxe :
For indice=borne_inf :borne_sup
squence d'instructions
end
o
indice est une variable appele l'indice de la boucle;
borne_inf et borne_sup sont deux constantes relles (appeles paramtres de la boucle);
32
squence d'instructions est le traitement effectuer pour les valeurs d'indices variant entre
borne_inf et borne_sup avec un incrment de 1. On parle du corps de la boucle.

Interprtation :
Si borne_inf est plus petit ou gal borne_sup, le traitement squence d'instructions est excut
borne_sup - borne_inf fois, pour les valeurs de la variable indice gales borne_inf, borne_inf+1, ...,
borne_sup. Si borne_inf est strictement plus grand que borne_sup, on passe l'instruction qui suit
immdiatement l'instruction de fin de boucle end.
Remarque :
L'indice de boucle ne prend pas ncessairement des valeurs entires. D'autre part il n'est pas ncessaire
que l'indice de la boucle apparaisse dans le corps de la boucle; par contre il est interdit de modifier sa
valeur s'il apparat. Il est possible d'imbriquer des boucles mais elles ne doivent pas se recouvrir. On
peut utiliser un incrment (pas) autre que 1 (valeur par dfaut). La syntaxe est alors borne_inf : pas :
borne_sup. Le pas peut tre ngatif. Attention bien grer la borne suprieure! Voici un exemple
venant illustrer les possibilits de variations de l'indice de la boucle.
>> for r=1.1 :-0.1 :0.75
disp(['r = ', num2str(r)]);
end
r = 1.1
r = 1
r = 0.9
r = 0.8
>>

Voici un exemple d'utilisation d'une boucle pour calculer n! (le lecteur attentif sait calculer n! plus
simplement, par exemple en excutant prod([1 :n])).

>> 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 d'instructions de manire rpte consiste
effectuer une boucle tant qu'une condition reste vrifie. On arrte de boucler ds que cette condition
n'est plus satisfaite. Ce processus est mis en oeuvre par la boucle while.
Syntaxe :
while expression logique
squence d'instructions
end
33
o
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions est le traitement effectuer tant que expression logique est vraie.

Interprtation :
Tant que expression logique est vraie le traitement squence d'instructions est excut sous forme
d'une boucle. Lorsque expression logique devient faux, on passe l'instruction qui suit
immdiatement l'instruction de fin de boucle end.
Remarque :
expression logique est en gnral le rsultat d'un test (par exemple i < Imax) ou le rsultat d'une
fonction logique (par exemple all(x)). Il est impratif que le traitement de la squence d'instructions
agisse sur le rsultat de expression logique sans quoi on boucle indfiniment.
Voici comment calculer n! avec une boucle while :
>> n = 4;
>> k = 1; nfac = 1;
>> while k <= n
nfac = nfac*k;
k = k+1;
end
>> nfac
nfac =
24
>>
5.3.3 L'instruction conditionne IF
On a parfois besoin d'excuter une squence d'instructions seulement dans le cas o une condition
donne est vrifie au pralable. Diffrentes formes d'instruction conditionne existent sous Matlab.
L'instruction conditionne la plus simple a la forme suivante :
Syntaxe :
If expression logique
squence d'instructions
end
o
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions est le traitement effectuer si expression logique est vraie.



34
Interprtation :
La squence d'instructions n'est excute que si le rsultat de l'valuation de l'expression logique
est vraie (c'est--dire vaut 1). Dans le cas contraire on excute l'instruction qui suit le mot cl end.
Dans le cas o l'expression logique est vraie, aprs excution de la squence d'instructions on
reprend le programme l'instruction qui suit le mot cl end.
Remarque :
Contrairement certains langages de programmation, il n'y a pas de mot cl then dans cette
instruction conditionne. Notez galement que la marque de fin de bloc conditionn est le mot cl end
et non pas endif .
Il existe une squence conditionne sous forme d'alternatives :
Syntaxe :
If expression logique
squence d'instructions 1
else
squence d'instructions 2
end
o
expression logique est une expression dont le rsultat peut tre vrai ou faux;
squence d'instructions 1 est la squence d'instructions excuter dans le cas o expression
logique est vraie et squence d'instructions 2 est la squence d'instructions excuter dans
le cas o expression logique est faux.

Interprtation :
Si expression logique est vraie la squence d'instructions 1 est excute, sinon c'est la squence
d'instructions 2 qui est excute. Le droulement du programme reprend ensuite la premire
instruction suivant le mot cl end.
Il est bien entendu possible d'imbriquer des squences d'instructions conditionnes (au sens o la
squence d'instruction conditionne contient des squences dinstructions conditionnes). Pour une
meilleure lisibilit, il est recommand d'utiliser des indentations afin de mettre en vidence
l'imbrication des squences d'instructions conditionnes.
Il est possible d'effectuer un choix en cascade :
Syntaxe :
If expression logique 1
squence d'instructions 1
35
elseif expression logique 2
squence d'instructions 2
...
elseif expression logique N
squence d'instructions N
else
squence d'instructions par dfaut
end
Interprtation :
Si expression logique 1 est vraie la squence d'instructions 1 est excute et le programme reprend
ensuite la premire instruction suivant le mot cl end, sinon si expression logique 2 est vraie la
squence d'instructions 2 est excute et le programme reprend ensuite la premire instruction
suivant le mot cl end, etc. Si aucune des expressions logiques 1 N n'est vraie alors squence
d'instructions par dfaut est excute.
Remarque :
Attention ne pas laisser d'espace entre else et if; le mot cl est elseif.
On utilise frquemment un choix en cascade lors d'initialisation de donnes. Par exemple, on initialise
une matrice A en fonction de la valeur d'une variable numex (numro d'exemple) 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 d''exemple non prevu ...');
end
5.3.4 Choix ventil, l'instruction switch
Une alternative l'utilisation d'une squence d'instructions conditionnes pour effectuer un choix en
cascade existe. Il s'agit de l'instruction switch.
Syntaxe :
switch var
case cst1,
squence d'instructions 1
case cst2,
36
squence d'instructions 2
...
case cstN,
squence d'instructions N
otherwise
squence d'instructions par dfaut
end
o
var est une variable numrique ou une variable chane de caractres;
cst1, ..., cstN, sont des constantes numrique ou des constantes chane de caractres;
squence d'instructions i est la squence d'instructions excuter si le contenu de la variable
var est gal la constante csti (var==csti).
Interprtation :
Si la variable var est gale l'une des constantes cst1, ..., cstN, (par exemple csti) alors la squence
d'instructions correspondante (ici squence d'instructions i) est excute. Le programme reprend
ensuite la premire instruction suivant le mot-cl end. Si la variable var n'est gale aucune des
constantes la squence d'instructions par dfaut est excute.
Remarque :
La variable var doit bien entendu tre du mme type que les constantes cst1, ..., cstN.
Il n'est pas ncessaire de prvoir un cas par dfaut (bien que cela soit prfrable). S'il n'y a pas de cas
par dfaut et si la variable var n'est gale aucune des constantes, alors le programme continue la
premire instruction suivant le mot-cl end.
Il est possible de regrouper plusieurs cas si la squence d'instructions excuter est la mme pour ces
diffrents cas. La syntaxe est alors,
case{ cstk , cstl , ...}
squence d'instructions commune
Reprenons l'exemple o l'on souhaite initialiser une matrice A en fonction de la valeur prise par une
variable numrique numex (numro d'exemple). En utilisant un choix ventil on obtient :
function A = initA(n,numex)

switch numex
case 1,
A = ones(n)
case 2,
A = magic(n);
case {3,4},
A = rand(n);
otherwise
37
error('numero d''exemple non prevu ...');
end

Voici un exemple de choix ventil portant sur une variable de type chane de caractres.

rep = input('Votre reponse (oui, non, chepas) :');

switch rep
case {'oui','o'},
disp('bravo ...');
case {'non','n'}
disp('perdu ...');
case 'chepas'
disp('c''est pourtant facile ...');
end
5.3.5 Interruption d'une boucle de contrle
Il est possible de provoquer une sortie prmature d'une boucle de contrle. L'instruction break
permet de sortir d'une boucle for ou d'une boucle while. L'excution se poursuit alors squentiellement
partir de l'instruction suivant le mot cl end fermant la boucle. En cas de boucles imbriques, on
interrompt seulement l'excution de la boucle intrieure contenant l'instruction break. L'instruction
return provoque un retour au programme appelant (ou au clavier). Les instructions suivant le return
ne sont donc pas excutes. L'instruction return est souvent utilise conjointement avec une
instruction conditionne par exemple pour tester dans le corps d'une fonction si les paramtres d'entre
ont les valeurs attendues.
L'instruction error permet d'arrter un programme et d'afficher un message d'erreur. La syntaxe est
error(' message d''erreur '). L'instruction warning permet d'afficher un message de mise en garde
sans suspendre l'excution du programme. La syntaxe est warning(' message de mise en garde '). Il
est possible d'indiquer Matlab de ne pas afficher les messages de mise en garde d'un programme en
tapant warning off dans la fentre de commandes. On rtablit l'affichage en tapant warning on.
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 l'appel 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 d'arguments d'entree
% different de 2 ou 3, on arrete tout ...
if nargin ~= 2 & nargin ~= 3,
error(' La fonction matale doit avoir 2 ou 3 arguments d''entree ');
end

if nargin == 2
A = fix(T*rand(m));
else
A = fix(T*rand(m,n));
end
38

if nargout == 2
rang = rank(A);
if nargin == 2,
rangx = m;
else
rangx = min([m,n]);
end
if rang ~= rangx, warning(' Le rang n''est 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 d'entree

>> A = matale(20,3)
A =
8 18 8
12 14 18
15 3 18
>> [A,r] = matale(20,3)

Warning : Le rang n'est 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 d'interrompre l'excution du programme. L'excution normale reprend
ds que l'utilisateur enfonce une touche du clavier. L'instruction pause(n) suspend l'excution du
programme pendant n secondes.
5.4 Un exemple complet

Une technique de construction de carrs magiques d'ordre impair a t propose par Manuel
Moschopoulos au dbut du XIV sicle. Cette technique est dcrite dans [Histoire d'Algorithmes, du
caillou la puce, J .L. Chabert diteur, Belin 1994].
Notons l(x) le numro de la ligne et c(x) le numro de la colonne du carr sur lequel se trouve l'entier
x. Partant d'un carr d'ordre impair n=2k+1, la technique de Moschopoulos peut se formuler comme
suit :
Initialisation de l'algorithme en plaant l'unit dans la case immdiatement au dessous de la
case centrale, autrement dit l'intersection de la (k+1) me colonne et de la (k+2) me ligne :
l(1) = k + 2
c(1) = k + 1
Connaissant la position (l(x), c(x)) de l'entier x, on place l'entier x+1 suivant les rgles
suivantes :
39
si x n'est 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 un 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 l'on considre est 1, 2, ..., n et non
pas 0, 1, ..., n-1.
La fonction magik met en oeuvre la mthode de Moschopoulos.
function M = magik(n)
%
% Calcule le carre magique d'ordre 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' ...
,' d''ordre 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

La fonction utilise la fonction pos. Cette dernire fonction peut soit tre crite la suite de la fonction
magik si l'on dispose de la version 5 de Matlab (dans ce cas il s'agira d'une sous-fonction qui ne sera
visible que de la fonction magik) soit tre sauvegarde dans un fichier pos.m.

function [ly,cy] = pos(x,lx,cx,n)
%
% Retourne la position (indice de ligne ly et indice de colonne cy)
% dans le carre magique d'ordre n de l'entier y = x+1 selon la
% regle de Moschopoulous.
%
% Entree :
% n : ordre du carre (entier impair)
% x : l'entier considere
% lx : indice de ligne de l'entier x dans le carre magique
% cx : indice de colonne de l'entier x dans le carre magique
40
%
% Sortie :
% ly : indice de ligne de l'entier y=x+1 dans le carre magique
% cy : indice de colonne de l'entier 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 d'utilisation de la fonction magik. On vrifie que la somme des lments des
diffrentes lignes ainsi que la somme des lments des diffrentes colonnes sont bien constantes. Pour
calculer la somme des lments diagonaux c'est un peu plus compliqu. On remarque que le carr
magique construit diffre du carr magique retourn par la fonction Matlab incorpore magic.
>> magik(4)
??? Error using ==> magik
la methode de Moschopoulous ne construit que des carres d'ordre 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)
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


6. Graphisme

6.1 Gestion des fentres graphiques

Une instruction graphique ouvre une fentre dans laquelle est affich le rsultat de cette commande.
Par dfaut, une nouvelle instruction graphique sera affiche dans la mme fentre et crasera la figure
prcdente. On peut ouvrir une nouvelle fentre graphique par la commande figure. Chaque fentre se
voit affecter un numro n. Ce numro est visible dans le bandeau de la fentre sous forme d'un titre. Le
rsultat d'une instruction graphique est par dfaut affich dans la dernire fentre graphique ouverte
qui est la fentre graphique active. On rend active une fentre graphique prcdemment ouverte en
excutant la commande figure(n), o n dsigne le numro de la figure. La commande close permet de
41
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 figure. Il est galement possible de
fermer toutes les fentres graphiques en tapant close all. La figure 4 reprsente la fentre graphique
numro 1 o est affich le graphe de la fonction cosinus entre 0 et2 , rsultat de la commande
fplot('cos',[0 2*pi]). L'apparence de la fentre graphique peut varier lgrement suivant le systme
informatique utilis.



















Figure 4 : Fentre graphique et rsultat de la commande fplot('cos',[0 2*pi]).

6.2 Graphisme 2D

6.2.1 Tracer le graphe dune fonction ; la commande fplot
La commande fplot permet de tracer le graphe d'une fonction sur un intervalle donn. La syntaxe est :
fplot('nomf', [xmin , xmax])
o
nomf est soit le nom d'une fonction Matlab incorpore, soit une expression dfinissant une
fonction de la variable x, soit le nom d'une fonction utilisateur.
[xmin , xmax] est l'intervalle pour lequel est trac le graphe de la fonction.

Illustrons par des exemples les trois faons d'utiliser la commande fplot. On obtient le graphe de
la fonction incorpore sinus entre 2 et 2 par l'instruction :
fplot('sin',[-2*pi 2*pi]).
Pour tracer le graphe de la fonction h(x) =x sin(x) entre 2 et2 , on peut dfinir la fonction
utilisateur h dans le fichier h.m de la manire suivante (attention de bien lire x.*sin(x) et non pas
x*sin(x)) :
function y=h(x)

y=x.*sin(x);

42
On obtient alors le graphe de la fonction h par l'instruction : fplot('h', [-2*pi 2*pi]).
L'autre faon de procder est d'excuter l'instruction (l on a le choix entre crire x.*sin(x) ou
x*sin(x)) : fplot('x*sin(x)', [-2*pi 2*pi]). Dans les deux cas on obtient le dessin reprsent la figure
5.


















Figure 5 : Graphe de la fonction h(x) = x sin x entre 2 et2 .

Il est possible de tracer plusieurs fonctions sur la mme figure. Il faut pour cela utiliser la commande
fplot de la manire suivante :
fplot('[nomf_1 , nomf_2 , nomf_3]', [xmin , xmax])
o nomf_1, nomf_2, nomf_3 est soit le nom d'une fonction Matlab incorpore, soit une expression
dfinissant une fonction de la variable x, soit le nom d'une fonction utilisateur.
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
]. Une autre possibilit pour grer les bornes des valeurs en
ordonnes est d'utiliser la commande axis aprs utilisation de la commande fplot. La syntaxe est
axis([xmin, xmax, ymin, ymax]). Voici un exemple dont le rsultat est affich la figure 6 :
>> fplot('[sin(x)/x , cos(x)/x]', [-5, 5, -1, 1])
>>

On comprend trs vite l'intrt de grer les bornes des valeurs en ordonnes si l'on excute la
commande fplot('cos(x)/x', [-5, 5]) pour tracer le graphe de la fonction cos(x)/x entre -5 et 5. La
figure, qui n'est pas vraiment esthtique, n'est pas reproduite ici.









43



















Figure 6 : Graphe des fonctions cos(x)/x et sin(x)/x entre -5 et 5.


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 s'agir 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 et2 ,

>> 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)
>>

Dans cet exemple on a dfini un vecteur x de valeurs qui-rparties entre 2 et2 (avec un pas de
0.01 dans le premier cas et de 1 dans le deuxime cas) et on a calcul l'image par la fonction h de ces
valeurs (vecteur y). On affiche les points de coordonnes (x(i), y(i)).
On peut spcifier Matlab quelle doit tre la couleur d'une 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 d'entre
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 type 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
44
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
Les valeurs par dfaut sont c =b, s =. et t =- ce qui correspond un trait plein bleu reliant les points
entre eux. Il n'est pas obligatoire de spcifier chacun des trois caractres. On peut se contenter d'en
spcifier un ou deux. Les autres seront les valeurs par dfaut. La commande grid permet d'obtenir un
quadrillage de la figure, voir par exemple la figure 6.
Il est possible de tracer plusieurs courbes sur la mme figure en spcifiant plusieurs tableaux x1, y1,
x2, y2, ..., comme paramtres de la commande plot. Si l'on souhaite que les courbes aient une
apparence diffrente, 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 affich la figure 7. On trace sur l'intervalle [-5, 5] la fonction x
cos(x) en trait plein bleu et la fonction x cos(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 :');
>>



















Figure 7 : Rsultat de la commande plot(x,y,'b-',x,z,'r :').


45
Voici un autre exemple amusant (la commande whitebg permet de passer la fentre graphique en
inverse vido).
>> N=200;
>> x = rand(1,N); y = rand(1,N);
>> plot(x,y,'bd'), whitebg
>>
6.2.3 La commande loglog
Si x et y sont deux vecteurs de mme dimension, la commande loglog(x,y) permet d'afficher le vecteur
log(x) contre le vecteur log(y). La commande loglog s'utilise de la mme manire que la commande
plot. Voici un exemple dont le rsultat est affich la figure 8. Quelle est la pente de la droite?

>> x = [1 :10 :1000]; y = x.^3;
>> loglog(x,y)
>>


















Figure 8 : Rsultat de la commande loglog(x,y).

6.3 Amliorer la lisibilit d'une figure
6.3.1 Lgender une figure
Il est recommand de mettre une lgende une figure. La commande xlabel permet de mettre un texte
en lgende sous l'axe des abscisses. La syntaxe est xlabel(' lgende ') pour obtenir le mot lgende en
lgende. La commande ylabel fait de mme pour l'axe des ordonnes. La commande title permet de
donner un titre la figure. La syntaxe est title(' le titre') pour obtenir comme titre le titre. On peut
aussi crire un texte donn une position prcise sur la figure 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 dessin) o doit dbuter l'criture du texte un texte. La commande gtext permet quant elle de
placer le texte une position choisie sur la figure l'aide de la souris. La syntaxe est gtext(' un texte
'). Une mire, que l'on dplace en utilisant la souris, apparat. Il suffit d'un clic-souris pour que le texte
apparaisse la position slectionne.
Il est possible avec ces commandes d'afficher 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,
46
supposons que la variable numex contienne le numro de l'exemple trait, disons 5. On obtiendra pour
titre de la figure Exemple numero 5 par l'instruction : title(['Exemple numero ', num2str(numex)]).
L'exemple suivant dont le rsultat est affich la figure 9 illustre l'utilisation des diffrentes
commandes permettant de lgender une figure.
>> 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')
>>




















Figure 9 : Exemple de lgende d'une figure.

6.3.2 Afficher plusieurs courbes dans une mme fentre
Il est possible d'afficher 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
d'une nouvelle instruction graphique remplace dans la fentre graphique le dessin prcdent) on tapera
hold off. Voici un exemple d'utilisation de la commande hold on. Le rsultat est prsent la figure
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
>>
47



















Figure 10 : Superposition de plusieurs courbes dans la mme fentre graphique.
On dispose donc de deux faons de superposer plusieurs courbes sur une mme figure. 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 l'une de ces solutions plutt
que l'autre.
Il est possible de dcomposer une fentre en sous-fentres et d'afficher une figure diffrente 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 spcifier dans quelle sous-fentre doit s'effectuer l'affichage.
Les fentres sont numrotes de gauche droite et de haut en bas. L'exemple suivant dont le rsultat
apparat la figure 11 illustre l'utilisation 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
>> subplot(2,3,6), fplot('atan',[-sqrt(3) sqrt(3)]), title('arc-tangente'), grid
>>
48


















Figure 11 : Fentre graphique dcompose en sous fentres.

6.3.3 Sauvegarder une figure
La commande print permet de sauvegarder la figure d'une fentre graphique dans un fichier
sous divers formats d'images. 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 n'est pas spcifi, c'est la
fentre active qui est prise en compte.
<nomfic> est le nom du fichier dans lequel est sauvegarde la figure. Si aucune extension de
nom n'est donne, une extension par dfaut est ajoute au nom du fichier en fonction du
format choisi (.ps pour du PostScript, .jpg pour du jpeg, par exemple).
<format> est le format de sauvegarde de la figure. 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 d'image J PEG
tiff
: Format d'image TIFF
6.4 Graphisme 3D
6.4.1 Tracer les lignes de niveau d'une fonction de deux variables
La commande contour permet de tracer les lignes de niveau d'une fonction de deux variables relles.
Cette fonction peut tre dfinie par une expression Matlab (par exemple x.*exp(-x.^2-y.^2)), ou tre
dfinie comme une fonction utilisateur. Pour tracer les lignes de niveau de la fonction g(x,y) pour
x
min
<x <x
max
et y
min
<y <y
max
on procde de la manire suivante :

49
cration d'un maillage, de maille de longueur h, du domaine [x
min
, x
max
] x [y
min
, y
max
] grce
la commande meshgrid : [X,Y] = meshgrid(xmin :h :xmax, ymin :h :ymax).
valuation de la fonction aux noeuds de ce maillage, soit par appel la fonction utilisateur
dfinissant la fonction : Z = g(X,Y) soit directement en dfinissant la fonction par une
expression Matlab.
Affichage des lignes de niveau grce la commande contour : contour(X,Y,Z).

Ainsi pour tracer les lignes de niveau de la fonction f(x,y) =x e
-(x2+y2)
sur le domaine [-2 , 2] x [-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)
>>
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 deux cas on obtient le rsultat prsent la figure 12.





















Figure 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
afficher, il suffit d'appeler la fonction contour avec la valeur n comme quatrime paramtre,
contour(X,Y,Z,n).
Il existe deux manires d'afficher les valeurs des lignes de niveau sur la figure. Si l'on souhaite afficher
les valeurs pour toutes les lignes de niveau, on utilise la commande clabel de la manire suivante :
50
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h)

Si l'on souhaite afficher 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
afficher la valeur. Ainsi pour tracer 30 lignes de niveau de la fonction z =(x -1)
2
+10 (x
2
-y)
2
sur le domaine [-1 , 1] x [-1 , 1] et pour choisir l'aide de la souris les lignes de niveau pour
lesquelles l'iso valeur doit tre affiche, 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 figure 13.



















Figure 13 : Exemple de visualisation des lignes de niveau par la commande contour.

Il est possible de modifier la palette des couleurs en utilisant la commande colormap. En tapant help
graph3d dans la fentre de contrle Matlab, vous obtiendrez toutes les palettes de couleurs
disponibles. A vous de les tester pour obtenir le meilleur effet (La commande colormap(gray) permet
d'utiliser une palette en dgrad de gris, ce qui est trs utile si l'on souhaite une impression de la figure
sur une imprimante noir et blanc.
La commande contourf s'utilise de la mme manire que la commande contour. Elle permet
d'afficher, en plus des lignes de niveau, un dgrad continu de couleurs qui varie en fonction des
valeurs prises par la fonction. La figure 14 prsente un exemple d'utilisation de la commande contourf
obtenu de la manire suivante :
>> [X,Y] = meshgrid(-2 :.2 :2, -2 :.2 :2);
51
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> contourf(X,Y,Z,30);
>> colormap(cool);
>>



















Figure 14 : Exemple de visualisation des lignes de niveau par la commande contourf.

6.4.2 Reprsenter une surface d'quation z=g(x,y)
La commande mesh permet de tracer une surface d'quation z=g(x,y). La fonction g peut tre dfinie
directement par une expression Matlab ou tre dfinie comme une fonction utilisateur. Pour tracer la
surface d'quation z=g(x,y) pour x
min
<x <x
max
et y
min
<y <y
max
on procde de la manire suivante :
cration d'un maillage, de maille de longueur h, du domaine [x
min
, x
max
] x [y
min
, y
max
] grce
la commande meshgrid : [X,Y] = meshgrid(xmin :h :xmax, ymin :h :ymax).
valuation de la fonction aux noeuds de ce maillage, soit par appel la fonction utilisateur
dfinissant la fonction : Z = g(X,Y) soit directement en dfinissant la fonction par d'une
expression Matlab.
Affichage de la surface grce la commande mesh : mesh(X,Y,Z).
Ainsi pour tracer la surface d'quation z =x e
-(x2+y2)
sur le domaine [-2 , 2] x [-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 dfinie comme une fonction utilisateur dans le fichier 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)
>>
52

Dans les deux cas on obtient le rsultat prsent figure 15.



















Figure 15 : Exemple de visualisation d'une surface d'quation z=g(x,y) grce la commande mesh.

Par dfaut les valeurs extrmes en z sont dtermines automatiquement partir des extremums de la
fonction sur le domaine spcifi. Il est possible de modifier ces valeurs (et galement les valeurs
extrmes en abscisses et ordonnes) par la commande axis dont la syntaxe est axis(xmin xmax ymin ymax
z_min z_max). Si vous n'tes pas satisfait du rsultat, l'instruction axis auto restaure la figure
originale. La figure 16 montre par exemple le rsultat de l'instruction axis([ -2 2 -2 2 -2 2]).



















Figure 16 : Exemple d'utilisation de la commande axis.
Il est galement possible de modifier le point de vision grce la commande view. La commande view
a deux arguments qui sont l'angle de vision horizontal et l'angle de vision vertical en degr. Par dfaut
ces angles ont respectivement les valeurs -37.5
o
et 30
o
. La figure 17 montre par exemple le rsultat de
l'instruction view(37.5,30).

53




















Figure 17 : Exemple de modification de l'angle de vision par la commande view.

Les commandes meshc et meshz s'utilisent de la mme manire que la commande mesh. La
commande meshc permet d'afficher 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 d'utilisation de ces
commandes est prsent aux figures 18 et 19 respectivement.



















Figure 18 : Exemple de visualisation d'une surface d'quation z=g(x,y) grce au commandes meshc.


54






















Figure 19 : Exemple de visualisation d'une surface d'quation z=g(x,y) grce au commandes meshz.

6.4.3 Reprsenter une surface paramtre
La commande surf permet de tracer une surface paramtre d'quations,

La fonction G =(g
1
, g
2
, g
3
) peut tre dfinie directement par une expression Matlab ou tre dfinie
comme une fonction utilisateur. Pour tracer la surface paramtre d'quation (E) pour u
min
<u <u
max
et
v
min
<v <v
max
on procde de la manire suivante :
cration d'un maillage, de maille de longueur h, du domaine [x
min
, x
max
] x [y
min
, y
max
] grce
la commande meshgrid : [U,V] = meshgrid(umin :h :umax, vmin :h :vmax).
valuation de la fonction aux noeuds de ce maillage, soit par appel la fonction utilisateur
dfinissant la fonction : [X,Y,Z] = G(U,V) soit directement en dfinissant la fonction par une
expression Matlab.
Affichage de la surface grce la commande surf : surf(X,Y,Z).
Ainsi pour tracer la surface paramtre d'quations :

55
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 dfinie comme une fonction utilisateur dans le fichier 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 deux cas on obtient le rsultat prsent figure 20.






















Figure 20 : Exemple de visualisation d'une surface paramtre grce la commande surf.


Rfrences :
1. http://www.mathworks.com/access/helpdesk/help/helpdesk.html
2. http://maths.insa-lyon.fr/~balac/matlab/matlab.html
56

Vous aimerez peut-être aussi