Vous êtes sur la page 1sur 55

Introduction

Auteur : Serge Bedwani


Introduction MATLAB Auteur : Serge Bedwani
Page 1
Table des matires
1.0 Introduction..................................................................................... 3
2.0 Notions de base de MATLAB........................................................ 5
2.1 Aide dans MATLAB......................................................................... 5
2.2 Fichiers de commande....................................................................... 5
2.3 Fichiers de donnes........................................................................... 5
2.4 Fonctions......................................................................................... 5
2.5 Reprsentation graphique 2D (coordonnes cartsiennes)........................ 6
2.5.1 Courbes de fonctions..................................................................6
2.5.2 Courbes paramtriques............................................................... 8
2.5.3 Nuage de points........................................................................ 9
2.6 Reprsentation graphique 2D (coordonnes polaires).............................. 9
2.7 Reprsentation graphique 2D (diagrammes).......................................... 11
2.8 Reprsentation des Axes logarithmiques............................................... 13
2.9 Reprsentation graphique 3D.............................................................. 14
2.9.1 Courbes 3D.............................................................................. 14
2.9.2 Surfaces................................................................................... 15
3.0 Les bases de MATLAB................................................................... 16
3.1 Vecteurs.......................................................................................... 16
3.2 Matrices.......................................................................................... 16
3.2.1 Construction des matrices particulires......................................... 18
3.3 Nombres complexes.......................................................................... 18
3.4 Interpolation polynmiale...................................................................19
3.5 Interpolation linaires et non linaires.................................................. 20
3.6 Interpolation au sens des moindres carrs..............................................22
3.7 Fonctions MATLAB pour les quations et systmes diffrentiels..............24
4.0 La programmation avec MATLAB...............................................26
4.1 Oprateurs et caractres spciaux.........................................................26
4.2 Instructions et commandes structures.................................................. 27
4.2.1 Instruction for........................................................................... 27
4.2.2 Instruction while....................................................................... 27
4.2.3 Instruction if............................................................................. 28
4.2.4 Instruction de rupture de squence............................................... 28
4.3 Ralisation d'interfaces graphiques.......................................................29
Introduction MATLAB Auteur : Serge Bedwani
Page 2
5.0 Complment : Analyse de systmes dynamiques linaires
l'aide de la bote outils "control systems"................................31
5.1 Introduction de fonctions de transfert (transmittance)..............................31
5.1.1 Introduction sous forme polynmiale............................................31
5.1.2 Introduction sous forme de zros, ples et gain ("Evans")................ 31
5.2 Passage d'un modle l'autre.............................................................. 32
5.3 Construction de schmas fonctionnels.................................................. 33
5.3.1 Fonctions series, cloop............................................................... 33
5.3.2 Fonction feedback..................................................................... 35
5.4 Calcul et trac de rponse de systmes dynamiques linaires....................36
5.4.1 Rponse temporelle................................................................... 36
5.4.2 Rponse frquentielle.................................................................38
5.5 Analyse des proprits des systmes.................................................... 38
5.6 Calcul, affichage des marges de gain et de phase.................................... 39
5.7 Trac du lieu d'Evans.........................................................................39
5.8 Divers............................................................................................. 40
6.0 Applications (exemples).................................................................. 41
6.1 Ralisation d'une fonction qui affiche le lieu de Bode............................. 41
6.2 Rponse en frquence d'un filtre RLC.................................................. 47
6.3 Sous-chantillonnage d'une sinusode...49
6.4 Suite d'impulsions rectangulaires. 50
7.0 Rfrences bibliographiques.......................................................... 54
8.0 Services Internet..............................................................................54
Introduction MATLAB Auteur : Serge Bedwani
Page 3
1.0 Introduction
MATLAB est une abrviation de MATrix LABoratory. Ecrit lorigine, en Fortran,
par Cleve Moler, MATLAB tait destin faciliter laccs au logiciel matriciel.
La version actuelle, crite en C par The MathWorks Inc., existe en version
professionnelle et en version tudiant. Sa disponibilit est assure sur plusieurs
plates-formes : Sun, Bull, HP, IBM, compatibles PC, Macintosh, et plusieurs
machines parallles.
MATLAB est confort par une multitude de botes outils (toolboxes) spcifiques
des domaines varis. Un autre atout de MATLAB, est sa portabilit; la mme portion
de code peut tre utilise sur diffrentes plates-formes sans la moindre modification.
En complment de MATLAB, loutil additionnel SIMULINK est propos pour la
modlisation et la simulation de systmes dynamiques en utilisant une reprsentation
de type schmas-blocs.
Lenvironnement MATLAB se prsente sous la forme dun espace de travail
(Workspace)
o un interprteur de commande excute des oprations et fonctions MATLAB. Les
sources de celles-ci sont disponibles, crites en langage MATLAB, voir en C ou en
Fortran. Lutilisateur peut sa guise les modifier, mais en sen inspirant, il peut
surtout crer et rajouter ses propres fonctions.
MATLAB offre galement plusieurs fonctions destines la rsolution (numrique)
dquations diffrentielles linaires ou non-linaires par la mthode de Runge-Kutta
(ode23 et ode45), lintgration numrique, la recherche des solutions dquations
algbriques ou transcendantes, la cration et manipulation de polynmes (poly,
polyder, polyval, conv, deconv), la transforme de Fourier rapide (ffr, fft2, ifft).
Introduction MATLAB Auteur : Serge Bedwani
Page 4
Des fonctions propres au traitement de donnes, comme min, max, mean, cumsum,
sort, std, diff, ainsi que celles relatives linterpolation (polyfit, interp1) sont autant
doutils trs pratiques pour lingnieur analysant un problme.
Linterface graphique de MATLAB est sans conteste lun des points forts du logiciel
et facilite le trac de courbes et lobtention de graphiques 2D ou 3D de grande qualit.
Le langage MATLAB contient un minimum de structures de programmation
(structure itrative, structure conditionnelle, sous-routine) mais reste trs
rudimentaire.
Lavantage est quil est trs simple et trs rapide programmer, offrant une grande
tolrance (syntaxe simple, pas de dfinition de types, etc), ce qui permet un gain
apprciable en temps de mise au point. Lingnieur peut par ce moyen tre plus
efficace dans lanalyse dun problme, en concentrant ses efforts sur celui-ci et non
pas sur loutil servant le rsoudre.
Les botes outils (toolbox) ddies des domaines techniques spcifiques, sont :
Le traitement du signal
La rgulation automatique
Lidentification
Les rseaux de neurones
La logique floue
Le calcul symbolique
Et bien dautres encore. Ces botes outils sont simplement constitues dun
ensemble de fonctions spcialises programmes partir des fonctions de base de
MATLAB, permettant par exemple la synthse de filtres, le calcul de FFTs, la
simulation dalgorithmes flous ou encore le calcul de rponse harmoniques.
Simulink nest rien dautre quune bote outils de MATLAB permettant au moyen
dune interface graphique volue la construction rapide et aise ainsi que la
simulation de schmas fonctionnels complexes, contenant des systmes linaires, non
linaires voire non-stationnaires, y compris des oprateurs logiques, des outils
mathmatiques danalyse, etc.
Incontestablement, MATLAB est un formidable outil pour lingnieur, y compris
pour celui traitant des problmes pratiques. Avec sa bote outils Simulink, il est
maintenant une rfrence au niveau mondial, non seulement dans les universits et
instituts de recherche, mais aussi dans le milieu industriel.
Introduction MATLAB Auteur : Serge Bedwani
Page 5
2.0 Notions de base de MATLAB
2.1 Aide dans MATLAB
help <fonction ou commande> ou helpwin.: fournit de laide sur lutilisation de la
fonction ou de la commande indique.
Lookfor<mot-cl> : fournit la liste des fonctions et commandes contenant le mot-cl
spcifi dans la premire ligne de leur texte daide.
2.2 Fichiers de commande
Un fichier de commande est un fichier ASCII dextension .M contenant une suite de
commandes MATLAB. Il peut tre excut directement en tapant simplement son
nom dans lespace de travail MATLAB.
2.3 Fichiers de donnes
Il est possible dans MATLAB, de charger un fichier, contenant par exemple une srie
de mesure, par la commande suivante :
Load fichier.ext
Il en est de mme avec la sauvegarde. Par exemple, on dsire sauvegarder la variable
t qui est un vecteur, par lintermdiaire de la commande suivante :
Save fichier.ext t ASCII
2.4 Fonctions
De nouvelles fonctions peuvent tre ajoutes MATLAB par lutilisateur. Il suffit de
crer un fichier de nom nom_de_fichier.m contenant les commandes excuter et
dont len-tte a le format :
Function [liste des arguments de sortie] =
nom_de_fonction(liste des arguments dentre)
Exemple : la fonction suivante convertit la grandeur dentre x en dcibels et la
retourne dans y
function[y]=lin2dB(x)
% function [y]=lin2dB(x)
% conversion de x en dB
y=20*log10(x);
le fichier correspondant est sauv sous le nom lin2dB.m
Introduction MATLAB Auteur : Serge Bedwani
Page 6
Contrairement aux fichiers de commande, les variables intervenant dans les fonctions
sont locales.
Les commentaires documentant les fonctions peuvent tre insrs en les faisant
prcder du symbole %.
Lorsque lon tape dans lespace de travail help lin2dB , cela nous fourni une aide en
ligne de la fonction.
2.5 Reprsentation graphique 2D (coordonnes cartsiennes)
La commande plot dont la syntaxe est la suivante :
plot(x,y,s)
permet de tracer des graphiques (courbes ou nuages de points) de vecteurs de
dimensions compatibles (y en fonction de x). Le choix du type et de la couleur du
trac peut se faire avec le paramtre facultatif qui est une chane compose de 1 3
caractres parmi ce qui suit :
couleurs tracs discontinus tracs continus
(symboles)
y jaune . point - trait continu
m magenta o cercles : pointills
c cyan x croix -. trait-point
r rouge + plus -- trait-trait
g vert * toiles
b bleu
w blanc
k noir
Le type de trac est par dfaut le trait continu. De mme, MATLAB fixe une couleur
par dfaut si elle nest pas spcifie.
2.5.1 Courbes de fonctions
Le trac de la courbe dune fonction commence par le choix de lintervalle de
dfinition (ou du trac).
x=-10*pi:10*pi;
y=sin(x).*exp(-0.1*x);
plot(x,y,g)
Un quadrillage, ralis par la commande grid , donne plus de lisibilit au graphique.
La commande grid off supprime le quadrillage du graphique courant.
Introduction MATLAB Auteur : Serge Bedwani
Page 7
La commande title ajoute un titre au graphique de la fentre courante.
title(Trac de la courbe dune fonction)
Les commandes xlabel et ylabel permettent de dfinir des titres pour les axes
des abscisses et des ordonnes.
xlabel( x : axe des abscisses)
ylabel( y : axe des ordonnes)
Dans certains cas, un texte explicatif est ncessaire sur le graphique, ceci peut tre
ralis par la commande text comme suit :
text(x,y,texte explicatif)
x et y sont les coordonnes du dbut du texte.
Il es possible aussi de placer du texte un endroit quelconque du graphique
slectionn par lutilisateur laide de la souris, grce la commande gtext.
gtext(texte explicatif)
Remarque : avec la version 5.3 de MATLAB, des boutons sont intgrs dans la
fentre graphique, ce qui permet dinsrer entre autre du texte directement sur le
graphique, sans passer par les commandes vues ci-dessus.
Il est possible de tracer plusieurs courbes en utilisant une seule fois la fonction plot
comme suit :
plot(x1, y1, s1, x2, y2, s2, )
Si y reprsente un vecteur de nombres complexes, plot(y) trace les points images
des lments de y.
La commande figure(gcf) permet de passer de la ligne de commandes la
fentre graphique courante.
Lutilisation des commandes hold on ou hold off offre ou supprime la
posibilit de tracer plusieurs courbes dans la mme fentre graphique.
Exemple :
Dans lexemple qui suit, nous allons tracer des courbes reprsentant les fonctions
sinus cardinal et sinus amorti, dans une mme fentre graphique.
Introduction MATLAB Auteur : Serge Bedwani
Page 8
x=-4*pi:pi/10:4*pi;
% sinus cardinal en trait rouge continu
y1=sinc(x/2);
plot(x,y1,r)
hold on
% sinus amorti en pointills, couleur verte
y2=sin(x).*exp(-0.1*x)/3;
plot(x,y2,g:);
% documentation du graphique
xlabel(x)
ylabel(y)
title(Courbes sinus cardinal et sinus amorti)
-15 -10 -5 0 5 10 15
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
x
y
Courbes sinus cardinal et sinus amorti
sinus amorti
sinus cardinal
2.5.2 Courbes paramtriques
La procdure de trac de courbes paramtriques est identique celles de courbes de
fonctions.
t=-100:0.1:100;
x=(2*t)./(1+t.^4);
y=(2*t.^3)./(1+t.^4);
plot(x,y)
title(lemniscate de Bernouilli)
xlabel(x)
ylabel(y)
grid on
-1.5 -1 -0.5 0 0.5 1 1.5
-1.5
-1
-0.5
0
0.5
1
1.5
lemniscate de Bernouilli
x
y
Introduction MATLAB Auteur : Serge Bedwani
Page 9
2.5.3 Nuage de points
Le trac dun nuage de points se fait de la mme faon que celui dune courbe. On
prcisera dans la commande plot, le symbole (*, +, x, ., o) affecter aux
diffrents points.
Exemple: reprsentation graphique dun nuage de points alatoires
N=100;
x=rand(1,N);
y=rand(1,N);
plot(x,y,x);
grid on
title(Nuage de points alatoires)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Nuage de points alatoires
2.6 Reprsentation graphique 2D (coordonnes polaires)
Le trac de courbes en coordonnes polaires sera ralis par la fonction polar, qui
obit la syntaxe suivante :
polar(theta, rho, type)
Le type de courbe correspond la nature du trac (continu, discontinu, etc.) et sa
couleur. Les diffrentes possibilits sont identiques celles de la fonction plot.
Introduction MATLAB Auteur : Serge Bedwani
Page 10
Limaons
Un graphique qui a pour quation polaire
+ cos b a r ou + sin b a r
o a et b ne sont pas nuls, sappelle un limaon. La cardiode est un cas particulier du
limaon pour lequel b a .
theta=-pi:0.1:pi;
r=2+2*cos(theta);
polar(theta,r,r-.)
title(Cardiode)
Rosaces
Un graphique qui a pour quation polaire
n sin a r ou n cos r
o n est un entier positif suprieur 1 et a un nombre rel quelconque, est constitu
de boucles noues lorigine. Lorsque n est impair on obtient n boucles, et 2n
boucles si n est pair.
theta=-pi:0.1:pi;
r=3*cos(2*theta);
polar(theta,r,r-.)
title(Rosace quatre lobes)
1
2
3
4
30
210
60
240
90
270
120
300
150
330
180 0
Cardiode
1
2
3
30
210
60
240
90
270
120
300
150
330
180 0
Rosace quatre lobes
Introduction MATLAB Auteur : Serge Bedwani
Page 11
2.7 Reprsentation graphique 2D (diagrammes)
Le trac dhistogramme se fera laide de la commande hist.
hist(x,N) : trace lhistogramme des valeurs du vecteur x en N
classes
[n,x] = hist(y,N) : retourne des valeurs utiliser avec la fonction bar.
Comme exemple, nous gnrons un vecteur de taille 1000 dont les composantes sont
les valeurs dune variable alatoire gaussienne, centre et rduite. La reprsentation
des valeurs de lhistogramme sont rpartis en dix classes.
y=randn(1000,1);
hist(y,10);
grid on, title(Histogramme)
-3 -2 -1 0 1 2 3
0
50
100
150
200
250
Histogramme
Au lieu de spcifier directement le nombre de classes pour la commande hist, nous
pouvons indiquer un vecteur qui reprsente lintervalle du trac ainsi que la largeur
des classes.
x=-3:0.2:3;
hist(y,x), grid on
title(Histogramme)
-4 -3 -2 -1 0 1 2 3 4
0
10
20
30
40
50
60
70
80
90
100
Histogramme
Introduction MATLAB Auteur : Serge Bedwani
Page 12
La commande bar(x,y) dessine un diagramme sous forme de barres des valeurs de
y en fonction de celles de x.
x=-2*pi:pi/10:2*pi;
y=cos(x);
bar(x,y)
grid on
title(Diagramme des valeurs dune fonction)
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Diagramme des valeurs d'une fonction
La commande stairs(x,y) trace les valeurs discrtes de y en fonction de celles
de x sous forme bloque ou en marches descaliers.
stairs(x,y)
grid on
title(Trac en escalier de valeurs discrtes)
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Trac en escalier de valeurs discrtes
Introduction MATLAB Auteur : Serge Bedwani
Page 13
La fonction stem permet le trac dune squence de valeurs discrtes.
stem(x,y)
grid on, title(Diagramme en btons)
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Diagramme en btons
2.8 Reprsentation des Axes logarithmiques
semilogx(w,20*log10(A))
Reprsente A (ici en [dB]) en fonction de w, lchelle tant logarithmique.
(A et w doivent avoir le mme nombre dlments)
semilogx(w,phase)
Reprsente phase en fonction de w, lchelle tant logarithmique.
(phase et w doivent avoir le mme nombre dlments)
loglog(x,y)
Reprsente y en fonction de x, les chelles tant toutes deux logarithmiques.
(x et y dooivent avoir le mme nombre dlments)
Introduction MATLAB Auteur : Serge Bedwani
Page 14
2.9 Reprsentation graphique 3D
2.9.1 Courbes 3D
Le trac de courbes dans lespace se fera laide de linstruction plot3 qui obit
une syntaxe analogue celle de plot.
plot3(x,y,z,symb)
Le choix du type de courbe ainsi que la couleur du trac se fait avec le paramtre
facultatif symb.
Exemple : trac dune hlice circulaire dfinie par une quation paramtrique.
t=-3*pi:pi/10:3*pi;
x=4*sin(t);
y=4*cos(t);
z=2*t;
plot3(x,y,z)
title(Hlice circulaire)
grid
xlabel(x)
ylabel(y)
zlabel(z)
-4
-2
0
2
4
-4
-2
0
2
4
-20
-10
0
10
20
x
Hlice circulaire
y
z
Introduction MATLAB Auteur : Serge Bedwani
Page 15
2.9.2 Surfaces
Soit lexemple dune fonction 2 variables (sinus cardinal 3D) :
2 2
2 2
y x
) y x sin(
z
+
+

pour x et y variant de - avec un pas de /10.


x=-pi/2:pi/30:pi/2;
y=x;
On gnre deux matrices carres X et Y qui dfinissent le domaine de calcul de z, on
utilisera pour ceci la fonction meshgrid.
[X,Y]=meshgrid(x,y);
On value la fonction z et on stocke les donnes dans la variable Z.
Z=sinc(X.^2+Y.^2);
On dessine la surface reprsentative de la fonction.
mesh(Z)
Pour dautres exemples, je vous invite taper graf3d dans lenvironnement de
MATLAB, pour des exemples complmentaires.
Introduction MATLAB Auteur : Serge Bedwani
Page 16
3.0 Les bases de MATLAB
3.1 Vecteurs
Un vecteur ligne est introduit de la faon suivante :
V=[1,2,3,4]
Astuce : si lintroduction du vecteur est termine par un point-virgule, on vite
laffichage de celui-ci, il en est de mme avec les autres instructions.
Laccs aux composantes dun vecteur seffectue directement par des commandes du
genre :
V(2)
Attention : dans MATLAB, les indices des vecteurs et matrices doivent tre des
entiers positifs. Lindice zro nest donc pas plus admis que les indices
ngatifs.
3.2 Matrices
Une matrice peut tre construite de diffrentes manires :
m=[5,2,8,1;10,20,30,40;22,24,26,28]
ce qui nous donne dans lenvironnement MATLAB :
m=
5 2 8 1
10 20 30 40
22 24 26 28
ou encore, ayant dfini pralablement les vecteurs-lignes v1,v2,v3 :
v1=[5,2,8,1];
v2=[10,20,30,40];
v3=[22,24,26,28];
m=[v1;v2;v3]
Laccs un lment de la matrice seffectue par :
m(2,4);
et lon obtient : 40.
Introduction MATLAB Auteur : Serge Bedwani
Page 17
Le remplacement de 2 par : (deux points) permet dobtenir toute la colonne 4 :
m(:,4)
et lon obtient le vecteur-colonne :
1
40
28
De mme, laffichage dune sous-matrice sobtient par :
m(2:3,2:4)
et lon obtient :
20 30 40
24 26 28
Laccs aux colonnes 2 et 4 de la matrice m se ralise comme suit :
m(:,[2,4]);
ce qui produit :
2 1
20 40
24 28
Parmi les oprations matricielles qui ont une certaine importance pratique, signalons
loprateur de transposition :
m
ce qui produit dans notre cas :
5 10 22
2 20 24
8 30 26
1 40 28
Introduction MATLAB Auteur : Serge Bedwani
Page 18
3.2.1 Construction des matrices particulires
Les routines ones et zeros permettent de construire des matrices dont tous les
lments sont gaux 1 respectivement 0. Voir galement eye (matrice identit),
diag (matrice diagonale), linspace (vecteur dont les composantes sont espaces
linairement entre deux limites) et logspace (vecteur dont les composantes sont
espaces logarithmiquement entre deux limites).
Matrices alatoires :
On peut gnrer des matrices alatoires dont les lments sont distribus
normalement avec une moyenne nulle et une variance unit laide de la commande
randn(m,n). Pour une distribution uniforme, on utilisera la commande
rand(m,n). Les paramtres m et n dsignent respectivement le nombre de lignes et
de colonnes.
n=200;
A_norm=randn(n);
n_classes=50;
hist(A_norm(:),n_classes)
-5 -4 -3 -2 -1 0 1 2 3 4
0
500
1000
1500
2000
2500
3000
Distribution normale
3.3 Nombres complexes
Les vecteurs et matrices peuvent avoir des composantes complexes. Les nombres
complexes sont introduits comme suit :
X=a+j*b;
ou
X=a+i*b;
Introduction MATLAB Auteur : Serge Bedwani
Page 19
Lunit de laxe imaginaire est donc indiffremment i ou j. Des fonctions sont
prvues pour le calcul de la partie relle (real(x)), de la partie imaginaire
(imag(x)), du module (abs(x)), de largument (angle(x)) et du conjugu
complexe (conj(x)).
3.4 Interpolation polynmiale
Dans MATLAB un polynme p(x) est reprsent par la liste de ses coefficients dans
lordre des puissances dcroissantes.
Exemple : 27 x 72 x 6 x ) x ( p
2 3
est reprsent par :
p=[1 6 72 27]
Pour valuer le polynme p(x) en x = x
0
, on effectue :
polyval(p,x0)
Exemple : polyval(p,-1.7) , on obtient : ans = 73.1470
Pour obtenir le graphe de p(x) sur lintervalle [-2,3] on effectue :
x=-2:0.1:3;
y=polyval(p,x)
plot(x,y);
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3
-300
-250
-200
-150
-100
-50
0
50
100
x
y
Interpolation polynomiale
Introduction MATLAB Auteur : Serge Bedwani
Page 20
3.5 Interpolation linaires et non linaires
La commande interp1(x,y,z) retourne un vecteur de mmes dimensions que z
dont les valeurs correspondent aux images des lments de z dtermins par
interpolation sur x et y.
f = interp1(x,y,z,type)
La chane type spcifie un type dinterpolation parmi les suivants :
linear : interpolation linaire
spline : interpolation par splines cubiques
cubic : interpolation cubique
Si lon ne spcifie pas le type, linterpolation linaire est prise par dfaut.
Exemple : visualisation des diffrents types dinterpolations sur les valeurs discrtes
de la fonction cosinus.
% Code commun aux trois interpolations
x=0:10;
y=cos(x); %points interpoler
z=0:0.25:10; %le pas du vecteur z infrieur celui de x
%Interpolation linaire
figure(1)
f=interp1(x,y,z);
plot(x,y,o,z,f)
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
interpolation linaire
Introduction MATLAB Auteur : Serge Bedwani
Page 21
%Interpolation par
%splines cubiques
figure(2)
f=interp1(x,y,z,spline);
plot(x,y,o,z,f)
Linterpolation par splines cubiques peut tre aussi obtenue par invocation de la
commande spline(x,y,z).
%Interpolation par cubiques
figure(3)
f=interp1(x,y,z,cubic);
plot(x,y,o,z,f)
0 1 2 3 4 5 6 7 8 9 10
-1.5
-1
-0.5
0
0.5
1
interpolation par splines cubiques
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
interpolation par cubiques
Introduction MATLAB Auteur : Serge Bedwani
Page 22
3.6 Interpolation au sens des moindres carrs
La commande p=polyfit(x,y,n) retourne le polynme p de degr n permettant
dapprocher la courbe y=f(x) au sens des moindres carrs.
Afin den dduire lerreur entre la courbe expriementale et le modle obtenu, on
dispose de la fonction polyval(p,x) qui retourne la valeur du polynme p pour
toutes les composantes du vecteur ou de la matrice x.
Pour expliquer lapplication de ces fonctions, nous allons simuler une courbe
expriementale par une sigmode laquelle nous superposons un bruit gaussien.
%intervalle de dfinition et calcul de la sigmode
x=-5:0.1:5;
%fonction sigmode bruite
y=1./(1+exp(-x))+0.05*randn(1,length(x));
%trac de la sigmode bruite
plot(x,y)
title(fonction sigmode bruite)
%polynme dordre 1 dinterpolation
p=polyfit(x,y,1);
%valeurs du polynme dinterpolation
polyn=polyval(p,x);
%trac du polynme dinterpolation
hold on
plot(x,polyn,-.)
%calcul de lerreur dinterpolation
err=y-polyn;
%trac de la courbe de lerreur
plot(x,err,:)
grid
hold off
%affichage du polynme dinterpolation
disp(polynme dinterpolation)
p
var_err=num2str(std(err)^2);
disp([variance de lerreur dinterpolation : ,var_err])
On obtient les rsultats suivants :
polynme d'interpolation
p =
0.12926261594795 0.50178471754000
variance de l'erreur d'interpolation : 0.010239
Introduction MATLAB Auteur : Serge Bedwani
Page 23
-5 -4 -3 -2 -1 0 1 2 3 4 5
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
fonction sigmode bruite
mesures
erreur
modle
La fonction errorbar permet de tracer simultanment, la courbe que lon veut
estimer par un polynme et lerreur destimation.
figure(2)
err=y-polyn;
errorbar(x,y,err)
title(sigmode, polynme et erreur dinterpolation)
grid
-6 -4 -2 0 2 4 6
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
sigmode, polynme et erreur d'interpolation
Introduction MATLAB Auteur : Serge Bedwani
Page 24
3.7 Fonctions MATLAB pour les quations et systmes diffrentiels
MATLAB dispose des fonctions ode23 et ode45 pour la rsolution dquations et
de systmes dquations diffrentielles utilisant la mthode de Runge-Kutta.
La syntaxe des fonctions ode23 et ode45 est la suivante :
[x,y] = ode23(f, x0, xfinal, y0, tol, trace)
[x,y] = ode45(f, x0, xfinal, y0, tol, trace)
f : chane de caractres reprsentant le nom dun fichier M dans
lequel est dfinie lquation diffrentielle
x0, xfinal : valeurs initiale et finale de la variable x
y0 : vecteur colonne de valeurs initiales de la fonction y=f(x)
tol : prcision dsire(facultative), la valeur par dfaut est 10
-3
pour
ode23 et 10
-6
pour ode45
trace : affichage des rsultats intermdiaires (1 : oui, 0 : non), ce
paramtre est facultatif, sa valeur par dfaut est 0.
Les fonctions ode23 et ode45 utilisent la mthode de Runge-Kutta-Fehlberg avec
un calcul de pas automatique.
Le systme dquations diffrentielles doit tre reprsent dans un fichier fonction
sous la forme dun vecteur colonne o chaque ligne reprsente une quation du
systme.
Exemple : Pendule lastique amorti
Considrons un corps de masse m, accroch un ressort de constante de raideur k. La
rsistance de lair cre une force de frottement proportionnelle la vitesse avec un
coefficient f.
La position x de la masse est repre par rapport lorigine 0
correspondant la longueur naturelle du ressort. Par application
de la loi fondamentale de la dynamique, on obtient lquation
diffrentielle qui rgit lvolution de la position x.
g x
m
k
x
m
f
x +
Cette quation du second ordre peut tre transforme
en un systme de 2 quations du premier ordre.

+
u v
g v
m
k
u
m
f
u
'
'
k
0
x
Introduction MATLAB Auteur : Serge Bedwani
Page 25
Pour rsoudre ce systme diffrentiel, on utilisera la fonction ode45 prvue par
MATLAB. Cette fonction utilise la mthode de Runge-Kutta avec un calcul de pas
automatique.
Pour utiliser la fonction ode45, nous avons besoin de deux fichiers : un fichier
fonction dans lequel on dcrit le systme diffrentiel et un fichier script qui fait appel
la fonction ode45 et qui ralise le trac des courbes.
fichier rsprime.m
function sd=rsprime(t,s)
global k m f g
%systme diffrentiel
sd=[(-k*s(2)-f*s(1))/m+g;s(1)];
fichier rs_nl.m
global k m f g
k=10; m=0.2; f=0.1; g=9.81;
%conditions initiales
t0=0; tf=20; x0=0.1; v0=0;
[t,x]=ode45(rsprime,t0,tf,[x0,v0]);
%trac de la vitesse
subplot(211)
plot(t,x(:,1))
xlabel(temps)
ylabel(vitesse)
grid
%trac de la position
subplot(212)
plot(t,x(:,2))
xlabel(temps)
ylabel(position)
grid
0 2 4 6 8 10 12 14 16 18 20
-2
-1
0
1
2
temps
v
i
t
e
s
s
e
0 2 4 6 8 10 12 14 16 18 20
0
0.1
0.2
0.3
0.4
temps
p
o
s
i
t
i
o
n
Introduction MATLAB Auteur : Serge Bedwani
Page 26
4.0 La programmation avec MATLAB
4.1 Oprateurs et caractres spciaux
Le tableau suivant rsume les oprateurs que lon peut rencontrer dans MATLAB
ainsi quun certain nombre de caractres spciaux.
Symbole fonction
+ Addition de rels et de matrices
- Soustraction de rels et de matrices
* Produit de rels et de matrices
.* Produit lment par lment de matrices
^ lvation une puissance de rels et de matrices
.^ Puissance lment par lment de matrices
\ Division gauche de rels et de matrices
/ Division droite de rels et de matrices (division classique)
./ Division lment par lment de matrices
== galit
~= Diffrent
< Strictement infrieur
<= Infrieur ou gal
> Strictement suprieur
>= Suprieur ou gal
& ET logique (AND)
| OU logique (OR)
~ NON logique (NOT)
xor OU exclusif (XOR)
% Commentaires
= Affectation
Transpose de matrices et dlimiteur de chanes de caractres
! Commandes systme (chappement)
, Sparation dinstructions ou de rels dans une matrice
; Sparation dinstructions (pas daffichage de valeurs intermdiaires)
ou de lignes dune matrice
Symbole de continuation (pour terminer une instruction ou une
expression la ligne suivante)
. Point dcimal
.. Rpertoire parent du rpertoire en cours
[ ] Dfinition de vecteurs ou de matrices
( ) Utilisation dans des expressions ou des fonctions
Introduction MATLAB Auteur : Serge Bedwani
Page 27
4.2 Instructions et commandes structures
MATLAB dispose des instructions structures suivantes : for, while et if.
4.2.1 Instruction for
syntaxe
for variable = expression
instructions
end
Exemple :
n=7;
x=[];
for i=1:n,
x=[x, sqrt(i)];
end
Les boucles for peuvent tre imbriques entre elles et avec les autres instructions de
contrle.
4.2.2 Instruction while
syntaxe
while expression
instructions
end
Exemple :
n=0;
while (x^n <= Max)
n=n+1;
end
Introduction MATLAB Auteur : Serge Bedwani
Page 28
4.2.3 Instruction if
syntaxe
if expression
instructions I1
else
instructions I2
end
En cas dinstructions conditionnelles imbriques, un else est toujours associ au if
le plus proche. Dans le cas de slections multiples, on utilisera linstruction elseif.
Exemple :
if moy >= 5.5
mention = trs bien;
elseif moy >= 5
mention = bien;
elseif moy >= 4.5
mention = Assez bien;
elseif moy >= 4
mention = Passable;
else
mention = Ajourn(e);
end
4.2.4 Instructions de rupture de squence
break : Termine lexcution dune boucle. Si plusieurs boucles
sont imbriques, break permet de sortir de la boucle la
plus proche.
return : Cette instruction permet de revenir au fichier M ayant
appel le programme courant ou la ligne de commandes
MATLAB.
error(message) : Affiche le message spcifi, met un bip et interrompt
lexcution du programme.
Introduction MATLAB Auteur : Serge Bedwani
Page 29
4.3 Ralisation dinterfaces graphiques
Visualisons directement un exemple, pour expliquer la cration de menus, dans une
fentre MATLAB.
% Cration de la fentre graphique
figure(gcf) ;
% Dclaration des proprits de la fentre
set(gcf,'Resize','Off','Name','Exemple',...
'Menubar','None','NumberTitle','off',...
'Position',[120 120 600 420]);
% Dfinitions des menus
fichier=uimenu('Label','Fichier');
edition=uimenu('Label','Edition');
% Dfinitions des sous-menus
uimenu(fichier,...
'label','Imprimer',...
'callback','print -f');
uimenu(fichier,...
'label','Configuration de limpression',...
'callback','print -dsetup');
uimenu(fichier,...
'Label','Quitter',...
'separator','on',...
'Callback','close(gcf)');
uimenu(edition,...
'label','Copier au format Metafile',...
'callback','print -dmeta');
uimenu(edition,...
'label','Copier au format Bitmap',...
'callback','print -dbitmap');
Le rsultat obtenu est le suivant :
Introduction MATLAB Auteur : Serge Bedwani
Page 30
Il existe une autre faon de raliser une interface graphique depuis la version 5 de
MATLAB. Cette outil est destin ceux qui aiment travailler de faon visuelle
(mme principe que Delphi, Visual C++, Visual Basic).
Linvocation de lditeur se fera laide de la commande guide. Une fentre
principale contenant les outils de cration (panneau de contrle) et une fentre vierge
pour la cration de linterface sont alors prsentes lcran.
guide
Pour plus dexplication, lutilisateur peut consulter le livre intitul Apprendre et
Matriser MATLAB chapitre 5 La programmation oriente Objets, page 416.
Et pour plus de dtails sur la ralisation dinterfaces graphiques, au chapitre 10,
page 301.
Introduction MATLAB Auteur : Serge Bedwani
Page 31
5.0 Complment : Analyse de systmes dynamiques linaires laide de
la bote outils control systems
5.1 Introduction de fonctions de transfert (transmittances)
5.1.1 Introduction sous forme polynmiale
Lintroduction de fonctions de transfert seffectue en deux temps, les numrateurs et
dnominateurs doivent tre donns sparment. Le principe est simple : les
numrateurs et dnominateurs apparaissent sous forme de vecteurs-ligne, les
composantes desquels tant les coefficients des puissances dcroissantes de s
(systmes analogiques) ou de z (systmes numriques).
Soit par exemple la fonction de transfert
2 . 0 s 4 s 1
12 s 1
50
) s ( U
) s ( Y
) s ( G
2
+ +
+

Son introduction dans MATLAB se fait par les commandes :
numG=50*[12,1];
denG=[0.2,4,1];
Le coefficient de s
0
(ou z
0
pour les systmes numriques), quil soit nul ou non, doit
toujours tre donn. Ainsi, la fonction de transfert de lintgrateur :
s
4567 . 3
) s ( G
est introduite sous la forme :
numG=3.4567;
denG=[1,0];
Les noms donns aux numrateurs et dnominateurs sont libres. On aura toutefois
intrt tre organis et rigoureux dans les notations employes.
5.1.2 Introduction sous forme de zros, ples et gain (forme dEvans)
Il est galement possible dintroduire une fonction de transfert par le biais de ses
zros, ples et de son facteur dEvans k. Les zros et ples doivent apparatre sous
forme de vecteurs-colonne.
Introduction MATLAB Auteur : Serge Bedwani
Page 32
Soit par exemple la fonction de transfert :
( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( ) j 3 5 s j 3 5 s 11 s
j 7 3 s j 7 3 s
s
32 . 5
3 5 s 11 s
7 3 s
s
32 . 5
) s ( G
2 2
2 2
+
+

+ + +
+ +

La suite de commandes ncessaires est simplement :
zG=[-3+j*7,-3-j*7];
pG=[0,-11,-5+j*3,-5-j*3];
kG=5.32;
Il va sans dire que lon privilgiera cette forme lorsque le numrateur et dnominateur
de la fonction de transfert du systme G(s) ou G(z) ne sont pas directement
disponibles sous forme de polynmes.
5.2 Passage dun modle lautre
Les ples et zros des fonctions de transfert sont obtenus laide de la fonction
tf2zp(transfert function to zero pole) :
[zG,pG,kG]=tf2zp(numG,denG);
MATLAB place alors les zros et les ples dans les vecteurs-colonne zG et pG,
respectivement, et le facteur dEvans dans la variable kG. Les noms zG, pG et kG
sont arbitraires.
Remarque : un polynme est introduit sous la forme dun vecteur-ligne v dont les
composantes reprsentent les coefficients des puissances dcroissantes; ses racines
sont obtenues par la fonction roots(v)
Toute une catgorie de routines permettent de passer dun modle lautre :
Forme polynmiale forme en zros, ples et gain
[zG,pG,kG]=tf2zp(numG,denG);
Forme polynmiale modle dtat
[AG,BG,CG,DG]=tf2ss(numG,denG);
Forme en zros, ples et gain forme polynmiale
[numG,denG]=zp2tf(zG,pG,kG);
Introduction MATLAB Auteur : Serge Bedwani
Page 33
Forme en zros, ple et gain modle dtat
[AG,BG,CG,DG]=zp2ss(zG,pG,kG);
Modle dtat forme polynmiale
[numG,denG]=ss2tf(AG,BG,CG,DG);
Modle dtat forme en zros, ples et gain
[zG,pG,kG]=ss2zp(AG,BG,CG,DG);
Modle dtat autre modle dtat, avec matrice de
transformation T
[AG2,BG2,CG2,DG2]=ss2ss(AG,BG,CG,DG,T);
5.3 Construction de schmas fonctionnels
5.3.1 Fonctions series, cloop
Prenons par exemple le schma fonctionnel universel, dont on souhaite obtenir les
fonctions de transfert en boucle ouverte G
o
(s) et en boucle ferme G
w
(s). Pour ce
faire, il faut procder par tapes, comme indiqu par la figure ci-dessous :

w(t) e(t) u(t)


G (s)
c
G (s)
a
y(t)
-

w(t) e(t)
G (s)
o
y(t)
-
G (s)
w
w(t)
y(t)
Introduction MATLAB Auteur : Serge Bedwani
Page 34
1) Calcul de G
a
(s) par la mise en srie de G
a1
et G
a2
.
On fait usage de la fonction series :
[numGa,denGa]=series(numGa1,denGa1,numGa2,denGa2);
2) Calcul de G
o
(s) par la mise en srie de G
c
et G
a
On procde de mme quen 1) :
[numGo,denGo]=series(numGc,denGc,numGa,denGa);
3) Calcul de G
w
(s) par fermeture de la boucle (retour unitaire)
On fait usage de la fonction cloop comme suit :
[numGw,denGw]=cloop(numGo,denGo);
La rponse indicielle en boucle ferme peut alors tre calcule et trace par :
step(numGw,denGw);
Introduction MATLAB Auteur : Serge Bedwani
Page 35
de mme que la rponse harmonique en boucle ouverte par :
bode(numGo,denGo);
5.3.2 Fonction feedback
La fonction feedback est utile pour calculer la fonction de transfert quivalente du
systmes ayant pour schma fonctionnel :
[numGv,denGv]=feedback(numGa,denGa,numGc,denGc,signe);
Si le paramtre signe nest pas spcifi ou vaut 1, la transmittance G
c
(s) est en
contre-raction, alors quelle est ractionne pour une valeur de signe gale 1.

w(t)=0
v(t)
G (s)
c
G (s)
a2
y(t)
-
G (s)
a1

-
Introduction MATLAB Auteur : Serge Bedwani
Page 36
5.4 Calcul et trac de rponses de systmes dynamiques linaires
5.4.1 Rponse temporelle
Les fonctions impulse, step, lsim, et pour les systmes numriques,
dimpulse, dstep, dlsim sont disponibles. Leur signification est la suivante :
SYSTEMES ANALOGIQUES :
Rponse impulsionnelle :
impulse(numG,denG,t);
Rponse indicielle :
step(numG,denG,t);
Rponse une entre u quelconque dfinie par lutilisateur :
lsim(numG,denG,u,t);
Rponse du systme lorsque ses conditions initiales sont x0 :
initial(A,B,C,D,x0,t);
SYSTEMES NUMERIQUES :
Rponse impulsionnelle :
dimpulse(numH,denH,n);
Rponse indicielle :
dstep(numH,denH,n);
Rponse une entre u quelconque dfinie par lutilisateur :
dlsim(numH,denH,u);
Rponse du systme lorsque ses conditions initiales sont x0 :
dinitial(A,B,C,D,x0,n);
Introduction MATLAB Auteur : Serge Bedwani
Page 37
Les paramtres t, n et w sont optionnels et MATLAB les dtermine lui-mme par
dfaut. Si lon souhaite les fixer, on peut par exemple le faire selon les indications
suivantes :
t : (facultatif) vecteur-ligne de temps, spcifiant les instants o la rponse doit
tre calcule (ce paramtre est obligatoire si lon utilise lsim)
Exemple :
Cre un vecteur temps variant entre 0[s] et 0.2[s] par pas de 0.01[s].
t=[0:0.01:0.2];
ou
t=linspace(0,0.2,201);
n : (facultatif) nombre dchantillons dsirs
Exemple :
Seuls les 10 premiers chantillons de la rponse seront affichs.
n=10;
w : (facultatif) vecteur-ligne de pulsation, spcifiant les pulsations o la rponse
doit tre calcule.
Exemple :
Cre un vecteur pulsation de 100 points espacs logarithmiquement et
variant entre 10
2
[rad/s] et 10
5
[rad/s].
w=logspace(2,5,100);
u : vecteur-colonne de lentre simule du systme (ce paramtre est obligatoire
si lon utilise lsim ou dlsim)
Exemple :
Cre un vecteur u reprsentant une entre sinusodale damplitude 1.5
et de frquence 10[Hz]. u est calcul pour chaque instant dfini dans le
vecteur t.
u=1.5*sin(2*pi*10*t);
Lors du calcul de la rponse harmonique de systmes numriques, il convient de
spcifier la priode dchantillonnage h.
Introduction MATLAB Auteur : Serge Bedwani
Page 38
Il est souvent utile deffectuer ces calculs de rponse sans tracer celle-ci
immdiatement. Dans ce cas, on procde comme ci-dessus en spcifiant toutefois des
arguments de sortie dans lesquels MATLAB sauvera les rsultats de ses calculs :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
[y,x,t]=impulse(numG,denG,t); [y,x]=dimpulse(numH,denH,n);
[y,x,t]=step(numG,denG,t); [y,x]=dstep(numH,denH,n);
[y,x]=lsim(numG,denG,u,t); [y,x]=dlsim(numH,denH,u);
y est un vecteur-colonne contenant la rponse cherche et t un vecteur-ligne contenant
les instants auxquels elle a t calcule. x est une matrice contenant lvolution du
vecteur dtat systme dynamique.
5.4.2 Rponse frquentielle
Les fonctions bode, nyquist, nychols, et pour les systmes numriques,
dbode, dnyquist, dnychols sont disponibles. Leur signification est la
suivante :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
bode(numG,denG,w) Dbode(numH,denH,h,w)
Si les rsultats des calculs doivent tre sauvegards en vue dun traitement ultrieur,
on indique galement des arguments de sortie :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
[A,phi,w]=bode(numG,denG,w) [A,phi,w]=dbode(numH,denH,h,w)
A et phi sont des vecteurs-colonne contenant respectivement le gain et la phase et w
un vecteur-ligne contenant les pulsations correspondantes.
5.5 Analyse des proprits des systmes
Gain statique dun systme analogique :
dcgain(num,den);
Gain statique dun systme numrique :
ddcgain(num,den);
Taux damortissement , pulsation propre non-amortie
n
et ples dun systme
analogique ayant den pour dnominateur :
damp(den);
Introduction MATLAB Auteur : Serge Bedwani
Page 39
Taux damortissement , pulsation propre non-amortie
n
et ples dun systme
discret ayant den pour dnominateur :
ddamp(den);
5.6 Calcul ,affichage des marges de gain et de phase
Marges de phase et de gain dun systme analogique.
Si les arguments de sortie ne sont pas spcifis, trace le lieu de Bode et montre
graphiquement la valeur des marges.
[Am,phi_m]=margin(numGo,denGo);
5.7 Trac du lieu dEvans
Trace le lieu dEvans de la fonction de transfert. k est une option; cest un vecteur-
ligne contenant les diffrentes valeurs du facteur dEvans pour lesquelles le lieu doit
tre trac.
rlocus(num,den,k)
Affiche les courbes qui-amortissement des plans de s et de z respectivement. A
excuter immdiatement aprs rlocus.
sgrid
zgrid
Configuration ples-zros de la fonction de transfert.
pzmap(num,den)
Trac interactif du lieu dEvans. A excuter directement aprs rlocus et sgrid; une
croix est alors affiche, que lon peut dplacer avec la souris sur un point particulier
du lieu. En cliquant, on obtient alors dans k le facteur dEvans correspondant et dans
p lexpression du ple.
[k,p]=rlocfind(num,den)
Introduction MATLAB Auteur : Serge Bedwani
Page 40
5.8 Divers
Force la compensation ple-zro.
minreal(num,den)
Affiche les fonctions de transfert comme fractions rationnelles en s ou en z.
printsys(num,den,s)
printsys(num,den,z)
Runis le numrateur et le dnominateur en une seul variable compose dune
matrice.
G0=tf(num,den)
Linverse de la fonction prcdente, partant dune seul variable compose dun
vecteur en un numrateur et un dnominateur .
[num,den]=tfdata(G0,v)
Introduction MATLAB Auteur : Serge Bedwani
Page 41
6.0 Applications (exemples)
6.1 Ralisation dune fonction qui affiche le lieu de Bode
Pour tracer un lieu de Bode, il faut avoir au pralable la toolbox system control.
Mais nous allons raliser une fonction traant le lieu de Bode, sans toolbox!!!
De plus cette fonction est capable de dterminer la marge de phase
m
et de gain A
m
ainsi que les pulsations
co
et

correpondantes.
Tout dabord, il sagit de crer un fichier fonction, avec des paramtres dentres, tels
que le numrateur et le dnominateur, donns dans le domaine de s, de la fonction de
transfert que lon dsire tracer.
function[]=bode_sbe(num,den,w_min,w_max,titre,nb_pts)
Nous traiterons ensuite les erreurs et les valeurs par dfaut avec la commande
nargin.
Il ne faut pas oublier que les variables dfinies dans une fonction, ne sont pas vues de
lextrieur! Do lemploi de global.
La suite consiste crer la fentre graphique avec ses menus, tel que dcrit au
chapitre 4.3.
Algorithme du lieu de Bode :
Cration dun espacement logarithmique avec logspace.
logspace(d1,d2,N)
qui gnre N valeurs espaces dun pas logarithmique entre 10
d1
et 10
d2
, si N est
omis sa valeur par dfaut est 50.
Cration de la rponse frquentielle complexe dans un vecteur.
h=freqs(num,den,w)
Lamplitude du diagramme de Bode est dtermin par lextraction du module du
nombre complexe.
mag=abs(h)
Pour la phase, cela devient un petit peu plus compliqu, vu que larctangente, ne traite
pas des angles au-del de 180 . Nous allons donc fabriquer un algorithme capable
de grer la phase 360 .
Introduction MATLAB Auteur : Serge Bedwani
Page 42
Il ne faut pas oublier de transformer les radians en degr la fin, puisque MATLAB
travail en radian.
La phase suivante est le trac de lamplitude et de la phase.
Pour cela nous utiliserons la commande subplot, qui divise la fentre graphique en
plusieurs zones.
subplot(m,n,p)
avec m, qui dsigne le nombre de lignes et n le nombre de colonnes et trace le
graphique qui suit cette instruction dans la zone de numro p (la numrotation se fait
de gauche droite et ligne par ligne).
Pour laffichage de lamplitude, le graphique aura ses chelles en logarithmique.
loglog(f,mag)
Pour laffichage de la phase, lchelle de la pulsation sera logarithmique, mais pas
celle de la phase.
semilogx(f,phase)
Et pour finir, il est intressant de voir, quil est possible de modifier les proprits
dun objet graphique. Dans notre cas, nous allons modifier la couleur des courbes en
rouges.
line(f,mag,color,r)
line(f,phase,color,r)
Exemple de trac du lieu de Bode :
10
-2
10
0
10
2
10
4
10
6
-150
-100
-50
0
50
LIEU DE BODE
g
a
i
n

[
d
B
]
10
-2
10
0
10
2
10
4
10
6
-100
-50
0
50
pulsation [rad/s]
p
h
a
s
e

[
d
e
g
r

]
Introduction MATLAB Auteur : Serge Bedwani
Page 43
Fichier Source :
(bode_sbe.m)
%/*
%****************************************************************************
% bode_sbe.M
%****************************************************************************
%
% Lieu de Bode sans TOOLBOX !!!!!!
%
%****************************************************************************
%****************************************************************************
%Version Date Auteur Motif
% 0 28/04/00 SBE Creation
%
%****************************************************************************
%*/
% Trace le lieu de Bode
% ATTENTION, la phase de la fonction de transfert n'est valable
% que dans l'intervalle de +-360
%
% function [] = bode_sbe(num,den,w_min,w_max,titre,nb_pts)
%
% num : numrateur de la fonction G(s)
% den : dnominateur de la fonction G(s)
% w_min : borne infrieur du diagramme de bode 10^w_min
% w_max : borne suprieur du diagramme de bode 10^w_max
% titre : titre du diagramme, donner entre guillemets simples
% nb_pts : nombre de points calculer
function[]=bode_sbe(num,den,w_min,w_max,titre,nb_pts)
nargs = 6;
if nargin < nargs, nb_pts=1000; end
if nargin < nargs-1, titre='LIEU DE BODE'; end
if nargin < nargs-2, w_max=6; end
if nargin < nargs-3, w_min=-1; end
if nargin < nargs-4,
error('Il manque le numrateur et le dnominateur');
end
% Variables externes
global hZoomOn hZoomOff hZoomreset
% Variables internes
quadrant=1;
previous_quadrant=1;
quadrant_III_to_II=0;
quadrant_II_to_III=0;
close all;
figure(gcf)
set(gcf,'Resize','Off','Name','Lieu de Bode',...
'Menubar','None','NumberTitle','off',...
'Position',[120 120 600 420]);
fichier=uimenu('Label','Fichier');
sauver=uimenu(fichier,...
'label','Sauvegarde');
uimenu(sauver,...
'label','Sauvegarder au format BMP',...
'callback','print -dbitmap bode');
uimenu(sauver,...
'label','Sauvegarder au format Metafile',...
'callback','print -dmeta bode');
uimenu(sauver,...
'label','Sauvegarder au format postcript',...
'callback','print -deps bode');
Introduction MATLAB Auteur : Serge Bedwani
Page 44
impression=uimenu(fichier,...
'label','Impression');
uimenu(impression,...
'label','Imprimer Lieu de Bode',...
'callback','print -f');
uimenu(impression,...
'label','Configuration de l''impression',...
'callback','print -dsetup');
uimenu(fichier,...
'Label','Quitter',...
'separator','on',...
'Callback','close(gcf)');
edition=uimenu('Label','Edition');
uimenu(edition,...
'label','Copier au format Metafile',...
'callback','print -dmeta');
uimenu(edition,...
'label','Copier au format Bitmap',...
'callback','print -dbitmap');
hZoom=uimenu('Label','Zoom');
hZoomOn=uimenu(hZoom,...
'label','Enclenchement du zoom',...
'callback',['type_zoom=1;','gest_opt']);
hZoomOff=uimenu(hZoom,...
'label','Dclenchement du zoom',...
'callback',['type_zoom=2;','gest_opt']);
hZoomreset=uimenu(hZoom,...
'label','Zoom Reset',...
'separator','on',...
'callback',['type_zoom=3;','gest_opt']);
set(hZoomOff,'checked','on');
uimenu('Label','Quitter','Callback','close(gcf)');
w=logspace(w_min,w_max,nb_pts);
h=freqs(num,den,w);
f=w/(2*pi);
mag=abs(h);
i=1;
while i~= length(h)+1
reel=real(h(i));
imaginaire=imag(h(i));
if (imaginaire>=0)
if ((reel>=0)&(quadrant_II_to_III==0))
quadrant=1;
phase(i)=atan2(imaginaire,reel)*(180/pi);
else
if (quadrant_II_to_III==0)
quadrant=2;
if (previous_quadrant==3)
quadrant_II_to_III=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
else
phase(i)=atan2(imaginaire,reel)*(180/pi);
end
else
if (reel>=0)
quadrant=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
else
quadrant=2;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
end
end
end
else
if ((reel>=0)&(quadrant_III_to_II==0))
quadrant=4;
phase(i)=atan2(imaginaire,reel)*(180/pi);
else
if (quadrant_III_to_II==0)
quadrant=3;
if (previous_quadrant==2)
Introduction MATLAB Auteur : Serge Bedwani
Page 45
quadrant_III_to_II=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
else
phase(i)=atan2(imaginaire,reel)*(180/pi);
end
else
if (reel>=0)
quadrant=4;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
else
quadrant=3;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
end
end
end
end
if (abs(phase(i))>=359)
warning('ATTENTION, la phase de la fonction de transfert dpasse 360');
end
previous_quadrant=quadrant;
i=i+1;
end
subplot(2,1,1),loglog(f,mag);
line(f,mag,'color','r');
title(titre)
ylabel('gain [dB]')
grid on
subplot(2,1,2),semilogx(f,phase);
line(f,phase,'color','r');
xlabel('pulsation [rad/s]')
ylabel('phase [degr]')
grid on
clc;
% Recherche de la marge de phase et de gain
k=2;
while k~=length(mag)
if ((20*log10(mag(k))<0)&(20*log10(mag(k-1))>0))|(20*log10(mag(k))==0)
position_zero=k;
break
else
k=k+1;
end
end
if exist('position_zero')
pulsation_wco=f(position_zero);
marge=180-abs(phase(position_zero));
marge_phase=phase(position_zero);
magnitude=mag(position_zero);
if marge<=0
phi_m=0;
else
phi_m=marge;
end
fprintf('Marge de phase : %f[]\n', phi_m)
fprintf('Pulsation wco : %f[rad/s]\n', pulsation_wco)
else
warning('Attention, pas de marge de phase, le gain ne passe pas par 0[dB]')
pulsation_wco=0;
marge_phase=0;
magnitude=0;
end
fprintf('\n')
k=2;
while k~=length(phase)
if ((phase(k)<-180)&(phase(k-1)>-180))|(phase(k)==-180)
position_phase=k;
break
else
k=k+1;
end
end
Introduction MATLAB Auteur : Serge Bedwani
Page 46
if exist('position_phase')
pulsation_wpi=f(position_phase);
am=mag(position_phase);
if am<1
am=-am;
end
fprintf('Marge de gain : %f[dB]\n',am)
fprintf('Pulsation wpi : %f[rad/s]\n',pulsation_wpi)
else
warning('Attention, pas de marge de gain, la phase ne passe pas par -180')
end
magdb = 20*log10(mag);
subplot(2,1,1),semilogx(f,magdb,pulsation_wco,magnitude,'o');
line(f,magdb,'color','r');
title(titre)
ylabel('gain [dB]')
grid on
subplot(2,1,2),semilogx(f,phase,pulsation_wco,marge_phase,'o');
line(f,phase,'color','r');
xlabel('pulsation [rad/s]')
ylabel('phase [degr]')
grid on
(gest_opt.m)
global hZoomOn hZoomOff hZoomreset
set(hZoomOn,'checked','off');
set(hZoomOff,'checked','off');
set(hZoomreset,'checked','off');
if type_zoom == 1
set(hZoomOn,'checked','on');
zoom on;
elseif type_zoom == 2
set(hZoomOff,'checked','on');
zoom off;
elseif type_zoom == 3
set(hZoomOff,'checked','on');
zoom out;
zoom off;
end
Introduction MATLAB Auteur : Serge Bedwani
Page 47
6.2 Rponse en frquence dun filtre RLC
Nous allons maintenant raliser un filtre RLC, et tracer son lieu de Bode avec la
fonction que nous venons de crer dans lexemple prcdent.
Schma lectrique :
C L
R
Equation correspondante :
R
sC
1
sL
R
) s ( V ) s ( V
in out
+ +

Ce qui nous donne comme fonction de transfert :
( ) ( )
(
(
,
\
,
,
(
j
+
+

(
(
,
\
,
,
(
j
+

+ +

1
LC 4 RC RC
LC 2
s 1
LC 4 RC RC
LC 2
s
sRC
1 sRC LC s
sRC
) s ( V
) s ( V
) s ( H
2 2
2
in
out
Rappel : le numrateur et le dnominateur doivent tre dclars avec les puissances
de s dcroisssantes.
Bien sr qu'il est plus appropri de donner le dnominateur sous la forme de Bode,
pour la comprhension, mais cela devient plus compliqu exprimer.
Si cela avait t le cas, comme le dnominateur est du second ordre, il aurait t
judicieux d'utiliser la convolution, comme suit :
den=conv([T1 1],[T2 1])
Fichier Source :
(rlc.m)
% Fichier : rlc.m
% Auteur : Serge Bedwani
% Date : 04.05.00
% But : Rponse en frquence d'un filtre RLC
L=5; % Self [H]
C=1.25e-6; % Condensateur [F]
R1=10000; % Rsistance [Ohm]
R2=100; % Rsistance [Ohm]
numG1=[C*R1 0];
denG1=[L*C C*R1 1];
numG2=[C*R2 0];
denG2=[L*C C*R2 1];
Introduction MATLAB Auteur : Serge Bedwani
Page 48
% Diagramme de Bode
bode_sbe(numG1,denG1,0,4,'Rponse pour R=10k'); pause;
bode_sbe(numG2,denG2,0,4,'Rponse pour R=10k'); pause;
% Forme de Bode
racine1=sqrt((R1*C)^2-(4*L*C));
numB1=[C*R1 0];
denB1=conv([((2*L*C)/((R1*C)-racine1)) 1],[((2*L*C)/((R1*C)+racine1)) 1]);
bode_sbe(numB1,denB1,0,4,'Rponse pour R=10k sous forme de Bode');
pause;
racine2=sqrt((R2*C)^2-(4*L*C));
numB2=[C*R2 0];
denB2=conv([((2*L*C)/((R2*C)-racine2)) 1],[((2*L*C)/((R2*C)+racine2)) 1]);
bode_sbe(numB2,denB2,0,4,'Rponse pour R=0.1k sous forme de Bode');
Diagramme de Bode obtenu avec R = 10k :
10
-1
10
0
10
1
10
2
10
3
10
4
-40
-30
-20
-10
0
Rponse pour R=10k
g
a
i
n

[
d
B
]
10
-1
10
0
10
1
10
2
10
3
10
4
-100
-50
0
50
100
pulsation [rad/s]
p
h
a
s
e

[
d
e
g
r

]
Diagramme de Bode obtenu avec R = 0.1k :
10
-1
10
0
10
1
10
2
10
3
10
4
-80
-60
-40
-20
0
Rponse pour R=0.1k
g
a
i
n

[
d
B
]
10
-1
10
0
10
1
10
2
10
3
10
4
-100
-50
0
50
100
pulsation [rad/s]
p
h
a
s
e

[
d
e
g
r

]
Introduction MATLAB Auteur : Serge Bedwani
Page 49
6.3 Sous-chantillonnage d'une sinusode
Considrons un signal sinusodal x(t) de frquence f
o
= 10kHz que l'on chantillonne
avec une frquence f
e
= 8kHz.
Frquence de repliement :
kHz 2 kHz 8 kHz 10 f f nf f f
e o e r

Fichier Source :
(sousech.m)
% Fichier : sousech.m
% Date : 9.05.00
% But : Sous-chantillonnage d'une sinusode
% paramtres
fo=10e3; % frquence du signal sinusodal
fe=8e3; % frquence d'chantillonnage
To=1/fo; % priode du signal sinusodal
Te=1/fe; % priode d'chantillonnage
fa=fo-fe; % frquence apparente
tmax=10*To;
% Calcul de x(t)
t=0:tmax/200:tmax;
xt=sin(2*pi*t/To);
% Calcul du signal apparent
xta=sin(2*pi*t*fa);
% Echantillonnage de x(t)
tn=0:Te:tmax;
xn=sin(2*pi*tn/To);
% Traage des courbes
plot(t,xt,tn,xn,'o',t,xta,'-');
title('Sous-chantillonnage d''une sinusode');
xlabel('Temps [s]');
Signal sinusodal de frquence f
o
et signal sinusodal d au sous-chantillonnage :
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x 10
-3
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Sous-chantillonnage d'une sinusode
Temps [s]
Introduction MATLAB Auteur : Serge Bedwani
Page 50
6.4 Suite d'impulsions rectangulaires
La suite d'impulsions rectangulaires (SIR) est un signal particulirement important car
elle apparat dans de nombreuses applications telles que l'chantillonnage, la
modulation d'impulsions, etc.
Evaluons donc la srie de Fourier complexe de la SIR x(t). Par dfinition des
coefficients complexes X(jk), on a:



2 / T
2 / T
) t f 2 jk (
dt e ) t ( x
T
1
) jk ( X
o
avec f
o
= 1/T
En tenant compte de la dfinition de la SIR, il vient :

+



2 / t
2 / t
) t f 2 jk (
dt e
T
A
) jk ( X
o
]
]
]
,

)
2
t
f 2 jk ( )
2
t
f 2 jk (
o
o o
e e
f 2 jk
1
T
A
) jk ( X
Les relations d'Euler permettent de passer de la diffrence des exponentielles un
sinus et d'crire ces coefficients sous une forme plus simple :
t f k
) t f k sin(
T
t
A ) jk ( X
o
o

Fichier Source :
(sir.m)
% Fichier : sir.m
% Date : 9.05.00
% But : Echantillonnage d'une SIR
clear all;close all;
% paramtres
T = 1e-3; % priode
delta = T/4; % priode/4
fo = 1/T; % frquence SIR
fe = 20*fo; % frquence chantillonnage
Te = 1/fe; % priode chantillonnage
A = 4; % amplitude en Volt
% signal temporel xt = x(t)
Nmax = 500;
t=-T/2:T/Nmax:T/2;
lt0=round((Nmax/T)*((T-delta)/2));
lt1=(Nmax/T)*delta;
x0=zeros(1,lt0);
x1=A*ones(1,lt1);
xt=[x0,x1,x0];
Introduction MATLAB Auteur : Serge Bedwani
Page 51
% echantillonnage xtn = x(nTe)
tn=-T/2:Te:+T/2;
Nmax=ceil(T/Te); % arrondi >= (T/Te)
lt0=round((Nmax/T)*((T-delta)/2));
lt1=(Nmax/T)*delta;
x0=zeros(1,lt0);
x1=A*ones(1,lt1);
xtn=[x0,x1,x0];
% traage des signaux temporels
figure(gcf);
plot(t,xt,tn,xtn,'o');
title('Signaux xa(t) et xe(t)');
xlabel('temps [s]');
% spectre original
f=-fe:fo:fe;
xf=(A*(delta/T))*sinc(f*delta);
% spectre en +fe et -fe
xfp1=sinc((f-fe)*delta);
xfm1=sinc((f+fe)*delta);
% traage des spectres
figure(gcf+1);
subplot(3,1,1);
plot(f,xf);stem(f,xf);
title('Spectre original');
subplot(3,1,2);
stem(f,xfp1);
title('Spectre d +fe');
subplot(3,1,3);
stem(f,xfm1);
title('Spectre d -fe');
xlabel('frquence [Hz]');
% effet du repliement spectral
figure(gcf+1);
subplot(1,1,1);
plot(f,xf,'x');
hold on;
stem(f,xf+xfp1+xfm1);
title('Effet du repliement spectral: x = Xa(jf), o = Xe(jf)');
xlabel('frquence [Hz]');
hold off;
Prenons un exemple :
SIR d'amplitude 4V de priode T = 1msec et de largeur t = T/4 que l'on chantillonne
avec T
e
= T/20.
Introduction MATLAB Auteur : Serge Bedwani
Page 52
Signaux temporels, x(t) et x(nTe) :
-5 -4 -3 -2 -1 0 1 2 3 4 5
x 10
-4
0
0.5
1
1.5
2
2.5
3
3.5
4
Signaux xa(t) et xe(t)
temps [s]
T=1msec
delta=T/4
Spectres :
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre original
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre d +fe
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre d -fe
frequence [Hz]
Introduction MATLAB Auteur : Serge Bedwani
Page 53
Effet du repliement spectral :
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Effet du repliement spectral: x = Xa(jf), o = Xe(jf)
frequence [Hz]
Introduction MATLAB Auteur : Serge Bedwani
Page 54
7.0 Rfrences bibliographiques
Introduction au logiciel MATLAB
Cours & exercices
Auteur : Michel Etique, EIVD
Laboratoire danalyse numrique
Auteur : Louis Chassot, EIVD
Apprendre et Matriser MATLAB
Versions 4&5 et SIMULINK
Auteurs : M.Mokhtari & A.Mesbah
Edition Springer
ISBN 3-540-62773-1
Applications de MATLAB 5 et SIMULINK 2
Auteurs : M.Mokhtari & M.Marie
Edition Springer
ISBN 2-287-59651-8
Electronics and circuit analysis using MATLAB
John O. Attia
Editeur : CRC BIRKHAUESER
ISBN 0-8493-1176-4
8.0 Services Internet
Site The MathWorks : http://www.mathworks.com
Site SCIENTIFIC SOFTWARE : http://www.ssg.fr
Fournisseur Suisse :
Scientific Computers SC AG
Schrmattstrasse 6+8
3073 Gmligen
Homepage : www.scientific.ch

Vous aimerez peut-être aussi