Cours Matlab M1ASE
Cours Matlab M1ASE
Cours Matlab M1ASE
Outils de simulation
Partie : Matlab
Pierre Bonnet
Matlab/Simulink
I - Introduction
Matlab est un logiciel interprt (donc sans phase intermdiaire de compilation) qui excute les
oprations demandes squentiellement, avec possibilit de boucles, de test et de saut. Il ne manipule
que des donnes numriques et ne sait effectuer aucun calcul formel priori.
Ecran de base
L'cran de base comprend l'cran de contrle Command Window ainsi que des fentres
complmentaires permettant de suivre le fonctionnement gnral d'une application.
Les instructions frappes (ou colles) dans la Command Windows s'excutent directement.
Les commandes peuvent tre relances dans la fentre Matlab simplement en remontant la liste
par et en validant la ligne par Return .
L'excution d'une ligne provoque automatiquement l'affichage des rsultats sous forme d'une
liste de donnes numriques. Cette fonctionnalit peut tre bloque en mettant un ";" la fin de chaque
ligne de programme (prfrable lorsque le calcul concerne une matrice de grande dimension).
Matlab/Simulink
Programme Matlab
Il est toutefois prfrable de construire un programme avec un diteur de texte (Bloc-Notes sous
Windows, Open Office ou l'diteur intgr), de le sauver sur disque sous le nom monappli.m .
Le programme peut tre lanc depuis la fentre d'dition en appuyant sur le bouton
.
D'autres boutons permettent le dbogage des programmes avec points d'arrt et excution pas pas. A
noter que Matlab possde toutes les fonctionnalits d'un logiciel moderne de programmation.
Tout programme enregistr sous l'extension .m peut tre lanc depuis la Commande Windows
de Matlab, en frappant son nom (sous rserve que le chemin d'accs au fichier soit dclar sous Matlab
voir la commande Set Path du menu Fichiers - .
Aide sur Matlab
Il existe deux types d'aides sur Matlab 6 : l'aide intgre aux fonctions (existant sur les
prcdentes versions ) ou l'aide hypertexte.
La commande >> help ou >> help nom-de-fonction permet d'obtenir une aide sur le logiciel en
gnral, un Toolbox ou une fonction particulire. C'est pourquoi il n'est pas indispensable de connatre
le manuel complet de Matlab pour s'en servir !
L'aide hypertexte est d'une trs grande richesse. Elle inclut la description des fonctions, des
exemples, des dmonstrations en ligne, des rfrences bibliographiques. L'aide hypertexte est un
vritable cours ! Attention au volume total de la documentation fournie, qui reprsente l'quivalent
d'une encyclopdie (plus de 30 000 pages en 2003)
II - Variables Matlab
Les variables s'utilisent sans dclaration pralable de type, Matlab adoptant en interne l'objet
matrice pour toutes les variables (scalaires ou non, relle ou imaginaire, chane de caractres...) . Le
type (dimensionnement de la matrice) est donc gr automatiquement d'aprs l'usage (affectation) de la
variable. Des calculs ou application de fonctions entre types non cohrents seront signals par un
message d'erreur et blocage de l'excution du programme cette ligne.
Matlab/Simulink
Exemple de dclaration:
>> A = 1 <return>
A=
1
>> B = 2 + 3i <return>
B=
2.0000 + 3.0000 i
>> whos <return>
Name
Size
Elements
B
1 by 1
1
A
1 by 1
1
Bytes
16
8
Density Complex
Full
Yes
Full
No
Toute variable utilise est range dans l'espace mmoire appel workspace et y reste moins
d'effacer le workspace par la commande clear all ou commande au menu. Le contenu du workspace peut
tre affich par l'instruction who (nom seul des variables) ou whos (noms avec description du type). La
valeur d'une variable s'affiche en frappant simplement son nom (sans le ";" en fin de ligne!). Son
dimensionnement s'obtient par : >> size(variable)
Sur la version 6, le workspace est affich dans une fentre spcifique. En cliquant sur une
variable de la fentre, les valeurs apparaissent.
Certaines variables usuelles comme i , pi ou eps (epsilon de valeur 2-52 ) sont prdfinies
(attention, pi peut tre modifi !). Le nombre de variables utilisables n'est limit que par la place
mmoire. Les variables sont locales (sauf spcification contraire) et il n'y a aucun risque de modification
d'une variable par une fonction qui utiliserait une variable interne de mme nom.
Le langage Matlab manipule sans difficult toutes les variables usuelles.
Scalaires:
y = -99.25
theta = 1.60210E-20
u = 3 + 4*i
t = 1 + 3.14E-3i
w = r * exp(i*theta)
Il est possible de dfinir une variable partir d'autres, pourvu qu'elles aient une valeur
numrique, donc qu'elles aient t prcdemment dfinies :
Vecteurs et Matrices
Les vecteurs et matrices suivent l'criture naturelle, les lments tant des nombres ou des
variables prcdemment dfinies.
>>
>>
>>
>>
x1=
y1 =
y2 =
z=
[-1 0 1] ;
[-1 ; 0 ; 1 ]
[ -1 0 1 ] '
[1 2 3;4 5 6]
% vecteur ligne
% vecteur colonne
% ' signifiant "transposition"
% matrice 2 lignes x 3 colonnes
Matlab/Simulink
Les vecteurs ou matrices peuvent tre gnrs suivant une loi incrmentale:
>> x = 1 : 5 <return>
x=
12
3
4
>> y = 5 : -1 : 1 <return>
y
5
4
3
>> z = ( 0.0 : 0.2 : 1.0 )' ;
2
1
% vecteur colonne 6x1 par utilisation de la transposition
zeros(m, n) ;
ones (m,n) ;
randn() ;
eye() ;
linspace()
logspace(n1,n2)
Attention: les variables tant ventuellement des matrices, certaines oprations doivent tre
interprtes.
>> nb_scalaire = 3 ;
>> A = [ 1:5 ; 2 : 6 ] ;
>> B = A* nb_scalaire ;
Fonctions mathmatiques
L'utilisateur dispose de toutes les fonctions usuelles telles abs, sqrt (racine carre), real, imag,
conj, angle (phase d'un complexe) , sign, exp, log, log10 ,sin, cos, tan, asin, acos, atan, sinh ...
Ces fonctions s'appliquent tout type de variables ( scalaire, complexe ou matriciel)
>> x = [0 : 0.1 : 10] ;
>> alpha = 3 ;
>> y = alpha * (exp ( i * x ) exp( -i * x ))/ ( 2 * i );
% dfinition vecteur x
% y est un vecteur
Matlab/Simulink
Calculs Matriciels
B = [ 11 : 15 ] ;
C1 = A * B ;
C2 = B * A ;
C3 = A * A ;
% donne un scalaire
% donne une matrice 5x5
% calcul impossible (erreur de dimension)
Matlab vrifie les dimensions des calculs ; certaines erreurs seront ainsi dtectes mais il arrive
souvent que le calcul corresponde une expression calculable.
La division matricielle de deux matrices carres de mmes dimensions correspond la fonction
inverse de la multiplication:
>> C = A / B
>> C = B \ A
% quivalent C = A * inv(B)
% quivalent C = inv(B) * A
Les oprations propres au calcul matriciel sont gnralement dfinies en Matlab comme le
dterminant det(A), l'inversion inv(A), la diagonalisation diag(A) , les valeurs propres eig(A).
Le polynme caractristique P dfini par det I A d'une matrice peut tre extrait et
ses racines calcules.
>> A = [ 1 2 3 ; 3 1 2 ; 4 6 5 ] ;
>>
>>
>>
>>
>>
lambda = eig(A) ;
k = det(A) ;
P = poly (A) ;
R = roots(poly(A))
prodrac = prod(R)
Les oprations comme la racine carre, le logarithme demandent interprtation. Par dfaut,
l'opration usuelle s'applique aux lments de la matrice et donne un rsultat de mme dimension.
Pour la racine carre B d'une matrice A (qui satisfait l'quation B*B = A ), on dispose de la
fonction sqrtm(A) qui est diffrente de l'opration sqrt(A) qui donne la racine carre de ses lments.
Un certain nombre doprations sont tendues aux matrices non-carres comme la rsolution de
X = A \ B solution de A * X = B avec X vecteur qui fait appel la solution usuelle dfinie par les
moindres -carrs ( X = (ATA)-1ATB )
Calculs terme terme
Matlab permet aussi des oprations point par point (ou terme terme) c'est dire en
considrant les matrices comme des tableaux (array) et en n'utilisant pas les rgles du calcul matriciel.
Ces oprations sont notes avec un point pour signaler ce mode de calcul.
Les principales oprations point par point sont .* et ./
>> x = [0 : 0.1 : 10] ;
>> y = exp(- x / 10 ) .* sin ( x ) ;
% dfinition vecteur x
% y est un vecteur
Matlab/Simulink
Lun des points essentiels de Matlab est la reprsentation graphique des rsultats dans une
fentre graphique Windows ( qui peut tre imprime ou recopie dans le presse-papier et incluse dans
une autre application Windows). Les fonctions graphiques sont trs simples, avec une trs grande
souplesse dutilisation grce la possibilit dintroduction dun nombre de paramtres variable en
entre de fonction.
Les fonctions graphiques sont destines reprsenter des vecteurs ou des matrices vues comme
une juxtaposition de vecteurs.
Les graphiques 2D de base sont:
>> plot ( vecteur_y )
>> plot (matrice)
Matlab/Simulink
Rsultat graphique:
Matlab/Simulink
Le test suit les rgles usuelles des langages de programmation. La syntaxe des conditions est
celle du langage C :
if condition1
instruction1,
elseif condition2
instruction2,
else
instruction3;
end
La condition est construite autour d'un oprateur de relation du type == , > , < , >= etc .
La condition peut tre compose de plusieurs tests relationnels relis par "&" ou par " | " ;
chaque condition peut tre inverse par complmentation (signe " ~ ").
Exemple :
if (nombre > 10) & ~(nombre > 11 )
disp( 'nombre compris entre 10 et 11');
end
Boucle while
Boucle for
La boucle for a une structure naturelle. Le pas est optionnel; les boucles peuvent tre imbriques.
for i = valdeb : pas : valfin
instruction1, instruction2;
end
Exemple:
omega = 0.5 ;
delta_t = 0.1 ;
for k= 1:50
% debut de boucle
t(k) = k * delta_t ;
% construction du vecteur temps
y(k) = sin ( omega * t(k) );
% construction du vecteur de sortie
end
% fin de boucle
plot( t , y )
% trac graphique
Attention: dans ce cas, ne pas indicer une variable avec t dans la boucle (indice non-entier).
Matlab/Simulink
10
La programmation MATLAB repose sur des fichiers textes. Tout ensemble d'instructions peut
tre transform en fonction pour une meilleure criture et une rutilisation dans d'autres programmes.
Pour transformer un ensemble d'instruction dites sous le bloc-notes en fonction,
1) ajouter l'entte suivant au texte :
function [param_retour1, param_retour2,...] = ma_fonction ( param_entree1, param_entree2,...)
% Lignes de commentaires qui serviront de "help"
fin fonction
2) sauvegarder le texte avec le nom ma_fonction . m dans un rpertoire accessible Matlab.
Une fois sauvegarde, la fonction est utilisable dans tout programme, comme toute autre
fonction du noyau Matlab.
A la diffrence des langages usuels, le nombre de paramtres d'entre ou de sortie dans une
fonction peut tre variable, sans toutefois dpasser le nombre annonc. Le nombre de paramtre se teste
par les fonctions nargin et nargout . Cette fonctionnalit permet de dfinir un usage multiple d'une mme
fonction, selon le nombre de paramtres introduits l'appel de la fonction. Le type des paramtres
(scalaire, matrice...) n'est pas non plus prcis ce qui offre une grande souplesse. Par un test du type
pass (isnumeric, ischar, iscomplex...) l'intrieur mme de la fonction, il est possible de modifier le
comportement de la fonction selon le type.
Il est donc possible de crer des nouvelles fonctions trs facilement partir des fonctions
existantes pour constituer une bibliothque dans un domaine d'application appele Toolbox ( Signal
Processing Toolbox , Control Toolbox... ). Une bibliothque est donc un ensemble de fichier textes
modifiables ventuellement par l'utilisateur pour ses propres besoins. Elle peut comprendre aussi des
fonctions compiles dont la vitesse d'excution est plus grande .
b m pm bm1 p
m1
m1
.. . b0
a n p n a n1 p n1 .. . a 0
Cette fonction de transfert se dfini en Matlab sous forme de deux vecteurs ligne reprsentatifs
des coefficients des polynmes du numrateur et du dnominateur.
>> nume = [ bm bm1 .. . . b 0 ] et >> deno = [ a n a n1 .. . a 0 ]
Les noms utiliss pour la description sont gnriques (vous pouvez donner un autre nom au
numrateur ou au dnominateur)
La fonction TF permet de dfinir un systme partir de sa forme polynomiale
>> mon_systeme = TF(nume, deno).
USTL - Master ASE M1 Outils de simulation - 2008-2009
Matlab/Simulink
11
Le systme devient une entit objet qui pourra tre manipule directement.
Par dfaut, le systme est suppos reprsenter un systme continu de la variable 'p' ou 's' pour les
anglophones. La reprsentation supporte les systmes MIMO .
Systme retard pur
Il est frquent qu'un systme comporte physiquement un retard pur (par exemple coulement
d'un fluide dans un canal de transport) ; de plus, les modles de reprsentation usuels (Broda, Strejc)
font intervenir un retard pur dans la fonction de transfert. Matlab prend en compte un retard en
indiquant cette proprit dans la description du systme; cette proprit peut tre ajoute ds la
description initiale ou ultrieurement.
>> mon_systeme = TF(nume, deno, 'iodelay' , valeur_retard ).
ou
>> mon_systeme = TF(nume, deno)
Forme zros-ples
p z 1 . .. p z n
p p1 .. . p p n
Cette fonction de transfert se dfini en Matlab sous forme de deux vecteurs lignes reprsentatifs
des coefficients des polynmes du numrateur et du dnominateur.
>> mes_zeros = [ z 1 z 2 .. .. z n ] et >> mes_poles = [ p 1 p 2 .. . pn ].
L'entit systme se dfinit partir des zros et ples par la fonction ZPK :
mon_systeme = ZPK(mes_zeros, mes_poles, K)
. La fonction pzmap permet de reprsenter les ples et zros dans le plan complexe.
Forme tat
Dans cette reprsentation, le systme continu est dcrit par les matrices A,B,C et D :
X = A X B u
Y =C X Du
Matlab est tout particulirement adapt cette reprsentation. Il suffit donc de dfinir les
matrices caractristiques et de construire le systme avec la fonction ss :
mon_systeme_etat = SS ( A, B, C, D)
Changement de reprsentation
Les ples et zros d'un systme sont donns directement par zpkdata(sys)
Matlab/Simulink
12
Les mthodes proposes sont des approximations (Euler, trapze, Tustin..). Elles ne
correspondent pas au mthodes exactes dfinies dans les cours d'Automatique (exponentielle de la
matrice ou transforme en z)
. Rponse temporelle
La rponse temporelle est obtenue sur un systme quelconque par simulation. Les diffrentes
possibilits offertes par Matlab sont:
y=impulse(systeme,t )
y=step(systeme, t)
y=lsim(systeme,u,t)
Note: la dfinition du vecteur temps est optionnelle; en l'absence de vecteur temps, la fonction arrte le
calcul lorsque le rgime final est atteint.
Rponses frquentielles
nyquist(systeme,w)
nichols(systeme,w)
[margeGain,margePhase,Wcg,Wcp] =
margin(systeme)
systeme3 = parallel(systeme1,systeme2)
systemebf = cloop(systeme,sign)
systeme3 = feedback
(systeme1,systeme2,sign)
Matlab/Simulink
13
V - Simulink
Le Toolbox Simulink est une fonction lance depuis Matlab qui donne accs une description
graphique des problmes avec application au traitement du signal, lautomatique classique, la logique
floue...
La base est une description en schma-bloc hirarchique, chaque bloc tant une fonction dcrite
en langage Matlab ou partir dautres blocs. Pour lutilisateur, la description et lexcution de Matlab
est transparente dans les problmes usuels. Il ne se proccupe que de la construction graphique de son
problme avec ventuellement cration de nouveaux blocs pour les problmes avancs. La sauvegarde
des applications Simulink est un fichier texte d'extension m .
Pour dmarrer Simulink, frapper dans la fentre de commande :
>> simulink
Ds le lancement, Simulink propose dans une fentre la bibliothque des structures prdfinies
usuellement rencontres, ainsi que les objets graphiques dfinis dans les Toolbox.
Nouvelle feuille
Par appui sur File ->new, une fentre vide est ouverte pour construire le schma graphique. La
construction graphique se fait par "drag and drop" depuis les lments de la bibliothque. Un doubleclic sur un lment permet d'en faire apparatre les proprits.
USTL - Master ASE M1 Outils de simulation - 2008-2009
Matlab/Simulink
14
Menus
La liaison entre les blocs se fait par cblage la souris dont le fonctionnement est implicite en
labsence de toute slection souris. Les entres de bloc sont gnralement gauche et les sorties
droite, les liaisons tant orientes sortie-bloc-prcdent vers entre-bloc-suivant .
Un branchement (jonction) se fait en pointant la liaison sur laquelle le branchement se fait, puis
en maintenant la touche "control" du clavier enfonce, en dplaant la souris . L'amaorce du
branchement est alors faite.
multiplexeur et dmultiplexeur
C'est un bloc particulier; il permet de passer plusieurs signaux dans une mme liaison. Il est
indispensable pour certains blocs prdfinis (blocs entre ou sortie du type vecteur), utile pour
visualiser deux signaux sur le scope , ou passer simplement plusieurs paramtres vers Matlab.
Le dmultiplexeur excute la fonction inverse.
Lensemble de ces outils permettent de crer trs rapidement un schma de simulation
incluant des fonctions du 1er ordre, 2me ordre, des gains, des sommateurs des boucles. La simulation
elle-mme se lance par le menu simulation, aprs avoir dfini la mthode de rsolution des quations
diffrentielles caractrisant certains blocs ( Euler, Range-Kuta dordre 23 ou 45, Adams...) et la
prcision souhaite.
Exemple de construction d'un schma de simulation:
Lancement de
la simulation
Matlab/Simulink
15
La communication avec Matlab se fait avec des blocs workspace d'entre ou de sortie dans
lesquels l'utilisateur donne le nom du vecteur utilis sous Matlab .
Dans les versions actuelles, deux approches possibles (la deuxime est prfrable parce que plus
explicite et plus gnrale):
- placer un bloc in ou out dans le schma et paramtrer la simulation partir du menu
simulation --> parameters . La taille du workspace de sortie doit tre adapt au nombre de points de
calculs (fix par dfaut 1000, valeur presque toujours insuffisante). La mthode de simulation tant
gnralement pas variable, il est conseill de renvoyer le vecteur des instants de simulation (inutile si
ce vecteur a t donn en entre!).
- placer un bloc from workspace ou to workspace et le paramtrer. L'utilisateur retrouve dans le
workspace de sortie les valeurs issues du rsultat numrique de la simulation pour chaque instant, sous
forme d'un tableau (array) de rsultats de simulation. Le mode "structure" permet de retrouver le signal
par notation objet, en incluant les instants de simulation si ncessaire.
Pour retrouver les lments dans la structure de donnes, il suffit de parcourir l'arborescence de
l'objet. Dans l'exemple ci-dessus, la structure est la suivante :
sim_data =
Il est ainsi possible de mixer des calculs fait sous Matlab avec d'autres mens en simulation.
Parmi les nombreuses autres fonctionnalits utiles, il est possible de retrouver une reprsentation
de type tat ou transfert d'une simulation Simulink linarise autour d'un point de fonctionnement par
[num,den] = linmod('sys', x, u) o x est l'tat initial et u un vecteur d'entre amenant le systme un point
de fonctionnement donn.
Simulink offre aussi des perspectives de programmation classique, grce des fonctions de test
(bloc if et case), de boucle (blocs for et while )et de contrle de structure (bloc call ).