Matlab
Matlab
Matlab
1
1 1 2 3 4 4 5 5 5 5
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6 7
8
8 8
11
11 13 15
16
16 16 17
19
19 20 20 21
7 Exercices
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 Rsolution d'un circuit lectrique . . . . . . . . . . . . . . . . . . . . . . . . Rponses frquentielle et temporelle d'un circuit . . . . . . . . . . . . . . . . Rponses frquentielle et temporelle d'un ltre . . . . . . . . . . . . . . . . Portance d'une aile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modlisation de la caractristique d'une diode . . . . . . . . . . . . . . . . . Chute libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saut l'lastique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Particule dans un champ lectromagntique
26
26 26 26 27 28 29 30 30
32
32 32 32 32 33 33 33 34 34 34 35 35 35 35 36 36 36 36 36 37 37 37 38 38 38 38 39 39 39 39 39 40 40 40 41 41 41 41
8.1.10 Instructions spciques . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions mathmatiques 8.2.1 8.2.2 8.2.3 8.3 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.4 8.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions lmentaires . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions trigonomtriques Fonctions prdnies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oprateurs sur les matrices
Textes et chanes de caractres 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.5.6 8.5.7 8.5.8 8.5.9 Graphiques 2D
Fonctions graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Annotation de graphiques . . . . . . . . . . . . . . . . . . . . . . . . Contrle des fentres graphiques Sauvegarde et copie graphique Animations
Objets 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apparence des graphiques . . . . . . . . . . . . . . . . . . . . . . . . Graphiques tridimensionnels . . . . . . . . . . . . . . . . . . . . . . . Oprations sur les objets graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 8.7
8.8
ii
. . . . . . . . . . . . . . . . . . . . . . . . . .
41 41 42 42 42 42 42 42
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optimisation et quations non linaires . . . . . . . . . . . . . . . . . . . . . 8.10.1 Construction d'un modle . . . . . . . . . . . . . . . . . . . . . . . . 8.10.2 Rponse temporelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10.3 Rponse frquentielle . . . . . . . . . . . . . . . . . . . . . . . . . . .
iii
Cette introduction Matlab est propose aux tudiants du dpartement d'lectricit et Informatique de l'eivd avant le dbut de leur deuxime anne de formation. Ce cours, donn pendant une journe, permet aux tudiants de travailler individuellement sur les exemples et exercices prsents ci-aprs. Par ce recueil d'exemples, on souhaite montrer que l'usage de l'outil Matlab dans le domaine de l'ingnierie est simple et ecace et ainsi inciter nos tudiants l'appliquer dans les cours et laboratoires qu'ils auront en deuxime et troisime anne. Les commandes Matlab sont prsentes dans des situations relles et susamment explicites pour que leur utilisation soit claire par elle-mme. Les dtails syntaxiques doivent tre recherch par les tudiants en recourant de manire intensive l'aide en ligne Matlab.
1 Informations prliminaires
Matlab est un systme interactif et convivial de calcul numrique et de visualisation graphique destin aux ingnieurs et scientiques. Il possde un langage de programmation puissant et simple utiliser avec lequel l'utilisateur peut eectuer des calculs en ligne ou par l'intermdiaire d'un chier de commandes [3], [4]. Le logiciel Matlab (Mat
rix
Lab
oratory )
les objets utiliss dans Matlab sont donc dnis au travers de matrices ou vecteurs dont les valeurs sont, par dnition, des grandeurs complexes. Il existe un trs grand nombre d'oprateurs et fonctions distribus dans le logiciel de base et dans des botes outils spcialises. A ceci peut s'ajouter un outil de programmation graphique, Simulink, essentiel pour la simulation de systmes dynamiques non linaires. L'environnement Matlab se prsente sous la forme d'un espace de travail dans lequel un interprteur de commandes excute les oprations demandes.
aa bb cc dd
= = = =
% % % %
nombre rel ngatif nombre rel positif nombre complexe son conjugu complexe
vcol = [20 ; 6 ; 43 ; 66 ; 70 ; 8] ;
En l'absence de point-virgule ( ;), il s'achera l'cran sous la forme :
>> vligne = 20 6 43
66
70
v = vligne ;
On accde la composante 4 en tapant :
fliplr
y = fliplr(v) >> y= 8 70 66 43
20
m = [ 2 4 6 8 ; 1 3 5 7 ; 11 13 17 19]
ou bien
m = [ 2 4 6 8 1 3 5 7 11 13 17 19]
ou bien
v1 v2 v3 m
= = = =
>> m = 2 4 1 3 11 13
6 8 5 7 17 19
m2 = m( :,2) >> m2 = 4 3 13
L'achage d'une sous-matrice est possible ; par exemple
mt >> 2 4 6 8
= m' mt = 1 3 5 7
11 13 17 19
minv = inv(m3) >> minv = 6.0 -5.5 -0.5 -8.5 7.0 1.0 3.5 -2.5 -0.5
Dans Matlab, les indices des vecteurs et matrices doivent tre des entiers positifs. L'indice 0 n'est donc pas admis.
v1 = [1 ; 2 ; 3] ; v2 = [1, 2, 3] ;
L'opration
v1*v2
v1
v2
et
y1 = v1*v2 >> y1 = 1 2 3 2 4 6 3 6 9
En croisant v1 et v2, on obtient le produit scalaire :
y2 = v2*v1 >> y2 = 14
Alors que si l'on veut eectuer le produit composante par composante, il faut utiliser l'oprateur de multiplication prcd d'un point (.*) :
y3 = v1'.*v2 >> y3 = 1 4 9
ones, zeros
help logspace
on obtient
LOGSPACE Logarithmically spaced vector. LOGSPACE(d1, d2) generates a row vector of 50 logarithmically equally spaced points between decades 10^d1 and 10^d2. If d2 is pi, then the points are between 10^d1 and pi. LOGSPACE(d1, d2, N) generates N points. See also LINSPACE, :.
.m.
ascii
fourni par Matlab. Une fois ce chier sauv dans votre rpertoire de travail, n'oubliez pas
.m
.m
function [module, argument] = rec2pol(x,y) ; % rec2pol(x,y) transforme les coordonnes rectangulaires (x,y) % en coordonnes polaires [module argument] % Remarque : l'argument est fourni en radians % Exemple d'utilisation : % [R A] = rec2pol(2,5) ; % Auteur : fmy / 26.10.2001 module = sqrt(x^2+y^2) ; argument = angle(x + j*y) ;
Ces quelques lignes seront sauves dans un chier dont le nom sera un rpertoire (d crez. On notera que les variables internes la fonction sont locales, contrairement celles d'un chier de commandes qui sont globales. De plus, les lignes prcdes du symbole % (lignes de commentaires) serviront d'aide en ligne lorsque l'on tapera :
:mesfonctions,
help rec2pol
ascii
ascii
load,
soit par
d'autres programmes. Le contenu de la fentre graphique courante peut tre imprim directement sur votre imprimante. On peut galement le sauver dans un chier pour tre ensuite intgr dans un document PostScript
Ug = 220 [V ], R2 = 3 [],
fg = 50 [Hz ], C = 10 [F ],
R1 = 10 [] L = 100 [mH ]
I1
R1
I3 I2
R2
Ug
I1 , I2 , I3
Ug = R1 I1 + 0 =
1 I2 jC
1 I2 + (R2 + jL) I3 jC 0 = I1 I2 I3
1 R1 jC 1 0 jC 1 1
0 I1 Ug R2 + jL I2 = 0 0 I3 1
La solution s'obtient en multipliant gauche les 2 membres de l'quation par l'inverse de la matrice dcrivant le circuit :
1 R1 jC I1 1 I2 = 0 jC I3 1 1
0 R2 + jL 1
Ug 0 0
circuit.m)
% Calcul d'un circuit electrique clear all ; close all ; format compact ; format short g ; % donnees fg = 50 ; w = 2*pi*fg ; Ug = 220 ; % Ug = 220 Veff R1 = 10 ; R2 = 3 ; L = 100e-3 ; C = 10e-6 ; % rappel des equations du circuit % R1 I1 + 1/jwC I2 + 0 I3 = Ug % 0 I1 - 1/jwC I2 + (R2+jwL) I3 = 0 % I1 I2 I3 = 0 % description matricielle du circuit Z = [ R1 +1/(j*w*C) 0 0 -1/(j*w*C) R2+j*w*L 1 -1 -1] ; U = [Ug ; 0 ; 0] ; % vecteur colonne % resolution du circuit I = inv(Z) * U ; % affichage des valeurs I Ieff = abs(I) PhaseI = angle(I) * 180 / pi % affichage sous forme matricielle Courants = [I Ieff PhaseI]
On lance l'excution de ces commandes en tapant simplement le nom du chier sans extension
circuit I = 2.1521 - 5.4723i -0.1719 + 0.6235i 2.3240 - 6.0959i Ieff = 5.8803 0.6468 6.5238 PhaseI = -68.5319
105.4142 -69.1310 Courants = 1.0e+002 * 0.0215 - 0.0547i -0.0017 + 0.0062i 0.0232 - 0.0610i
H (s) =
avec
0 =
Le calcul et traage des rponses frquentielle (g. 2a) et temporelle (g. 2b) se fait tout naturellement l'aide de Matlab comme le montre le chier ci-dessous.
0 |H| [dB]
20
40
60 3 10
10
10 frquence [Hz]
10
10
90 4 60 2 30
100
180
330 300
10 frquence [Hz]
Rponses temporelles dun filtre passebas dordre 2 1.5 x(t), yind(t) 1 0.5 0
10
12
14
16
18
20
2 x(t), ysin(t) 1 0 1 2 0 2 4 6 8 10 12 14 16 18 20
% calcul de trois rponses temporelles tmax = 10*L/R ; Npts = 1000 ; dt = tmax/Npts ; tt = 0 :dt :tmax-dt ; xti = ones(size(tt)) ; yti = lsim(num, den, xti, tt) ; xts = sin(2*pi*tt*f0) ; yts = lsim(num, den, xts, tt) ; xtc = sign(sin(2*pi*tt*f0)) ; ytc = lsim(num, den, xtc, tt) ; % traage de la rponse frquentielle figure ; subplot(2,1,1) ; semilogx(ff, Hdb) ; grid on ; axis([1e3, 1e7, -60, +20]) ; xlabel('frquence [Hz]') ; ylabel('|H| [dB]') ; title('Rponse frquentielle dun filtre passe-bas dordre 2') subplot(2,2,3) ; semilogx(ff, phi) ; grid on ; axis([1e3,1e7,-180,0]) ; xlabel('frquence [Hz]') ; ylabel('/H [deg]') ; subplot(2,2,4) ; polar(angle(Hjw), abs(Hjw)) ; print -depsc rep_freq_rlc.eps % tracage des rponses temporelles figure ; subplot(3,1,1) ; plot(tt*1e6, xti,'--') ; grid on ; hold on ; plot(tt*1e6, yti) ; axis([0, 20, 0, 1.5]) ; ylabel('x(t), y_{ind}(t)') ; title('Rponses temporelles dun filtre passe-bas dordre 2') subplot(3,1,2) ; plot(tt*1e6, xts,'--') ; grid on ; hold on ; plot(tt*1e6, yts) ; ylabel('x(t), y_{sin}(t)') ; subplot(3,1,3) ; plot(tt*1e6, xtc,'--') ; grid on ; hold on ; plot(tt*1e6, ytc) ; xlabel('temps [\mus]') ylabel('x(t), y_{sqr}(t)') ; print -depsc rep_temp_rlc.eps
10
5.0 1.1
6.0 2.0
7.0 3.2
8.0 3.9
9.0 4.6
10.0 5.8
11.0 7.0
12.0 8.3
13.0 9.0
14.0 9.5
+1/ 0.5
Dans ce qui suit, on souhaite : 1. Tracer le graphe de la force en fonction de la longueur avec les barres d'erreurs. 2. Mettre en valeur le graphe l'aide d'un titre et d'informations portes sur l'abscisse et l'ordonne. 3. Rechercher une loi polynomiale reprsentant au mieux cette caractristique ; celle d'un ressort est gnralement linaire, ventuellement cubique. 4. Mesurer la qualit des modles proposs pour reprsenter le ressort. 5. Acher les informations sur le graphe lui-mme.
% Exemple de traitement des donnees clear all ; close all ; format compact ; format short g ; % elongation d'un ressort : valeurs mesurees x = [4.2 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0] ; % [cm] force = [0.0 1.1 2.0 3.2 3.9 4.6 5.8 7.0 8.1 9.0 9.5] ; % [N] % vecteurs des erreurs
% abscisse plus fine (200 points) % valeurs du polynme d'ordre 1 % valeurs du polynme d'ordre 3
11
hold on ; grid on ; % maintien du graphe et pose d'une grille plot (xfit,F1, xfit,F3,'--') ; axis ([0 20 -5 13]) ; title('Force dun ressort') ; xlabel('x [cm]') ; ylabel('F(x) [N]') ; % affichage des infos texte = ['F_1(x) = ', num2str(coeff1(1),3), ' x texte = [texte, num2str(coeff1(2),3)] ; text(1,11, texte) ; texte = ['F_3(x) = ', poly2str(coeff3,'x')] ; text(2.1,-3, texte) ; + '] ;
% ecart type = sigma = mesure de la dispersion des ecarts F1 = polyval(coeff1, x) ; % valeurs du modele d'ordre 1 ecart1 = force - F1 ; eqm1 = sum(ecart1 .^ 2)/length(ecart1) ; sigma1 = sqrt(eqm1) ; text (1,10.2, ['\sigma _1 = ', num2str(sigma1,3), ' [N]']) ; F3 = polyval(coeff3, x) ; % valeurs du modele d'ordre 3 ecart3 = force - F3 ; eqm3 = sum(ecart3 .^ 2)/length(ecart3) ; sigma3 = sqrt(eqm3) ; text (2.1,-3.8, ['\sigma _3 = ', num2str(sigma3,3), ' [N]']) ; print -deps ressort.eps
Les rsultats sont prsents dans la gure 3.
Force dun ressort 12 F1(x) = 0.98 x + 3.91 10 = 0.197 [N]
1
6 F(x) [N]
4 0
10 x [cm]
12
14
16
18
20
12
ascii
40 Tempratures min et max : 37.3 / 47.3 [C] 35 0 500 1000 1500 2000 temps [sec] 2500 3000 3500 4000
Lors d'une exprience, on a enregistr l'volution du dbit et de la temprature d'un ux d'air au cours du temps. Les valeurs numriques ont t portes dans un chier comportant 3 colonnes : le temps exprim en secondes le dbit donn en litres par seconde la temprature mesure en degrs Celsius :
air.dat
2.3597495e+000 4.4197579e+001 2.3446581e+000 4.2045259e+001 2.3312441e+000 4.2574619e+001 2.2748863e+000 4.2438009e+001 2.2713996e+000 4.2516874e+001
% mesures de debit et temperature clear all ; close all ; format compact ; format short g ; % chargement des mesures
13
mesures = load('air.dat') ; temps = mesures( :,1) ; debit = mesures( :,2) ; degre = mesures( :,3) ; % pre-visualisation des mesures subplot(2,1,1) ; plot(temps, debit) ; subplot(2,1,2) ; plot(temps, degres) ; % recherche des valeurs min et max Qmin = min(debit), Qmax = max(debit) Tmin = min(degre), Tmax = max(degre) % calcul des valeurs moyennes DebitMoyen = mean(debit) DegreMoyen = mean(degre) % mesure de la dispersion des valeurs % std = ecart type = deviation standard BruitDebit = std(debit-DebitMoyen) BruitDegre = std(degre-DegreMoyen) % tracage du debit figure ; subplot(2,1,1) ; plot(temps,debit) ; axis([0 4000 2 2.6]) ; title('Dbit et temprature dun flux dair') ; ylabel('Dbit [l/sec]') ; % informations pour le graphe texte1 = ['Dbit moyen = ', num2str(DebitMoyen,2), ' [l/sec]'] ; texte2 = ['Ecart type = ', num2str(BruitDebit,2), ' [l/sec]'] ; text(200,2.51,[texte1 ' ' texte2]) ; texte = ['Dbits min et max : ', num2str(Qmin,3)] ; texte = [texte ' / ', num2str(Qmax,3), ' [l/sec]'] ; text(200,2.1, texte) ; % tracage de la temperature subplot(2,1,2) ; plot(temps,degre) ; axis([0 4000 35 50]) ; xlabel('temps [sec]') ; ylabel('Temprature [C]') ; % information pour le graphe texte1 = ['Temprature moyenne = ', num2str(DegreMoyen,2), ' [C]'] ; texte2 = ['Ecart type = ', num2str(BruitDegre,2), ' [C]'] ; text(200,48,[texte1 ' ' texte2]) ; texte = ['Tempratures min et max : ', num2str(Tmin,3)] ; texte = [texte ' / ', num2str(Tmax,3), ' [C]'] ; text(200,37, texte) ;
14
% preparation pour l'analyse spectrale % la longueur du signal analyse doit etre une puissance de 2 % inferieure ou egale a la longueur du signal original puissance = floor(log(length(debit))/log(2)) kmax = 2^puissance ; debit2 = debit(1 :kmax) ; degre2 = degre(1 :kmax) ; % suppression de la valeur moyenne debit2 = debit2-mean(debit2) ; degre2 = degre2-mean(degre2) ; % transformation de Fourier des signaux a valeur moyenne nulle Qf = fft(debit2) ; Tf = fft(degre2) ; % relations temps-frequence dt = temps(2)-temps(1) ; duree = kmax*dt ; fmin = 0 ; fmax = 1/dt ; df = 1/duree ; ff = fmin :df :fmax ; % preparation pour le tracage Qfdb = 20*log10(abs(Qf)) ; Tfdb = 20*log10(abs(Tf)) ; ff = ff(1 :kmax/2) ; % le spectre se repete au dela de kmax/2 Qfdb = Qfdb(1 :kmax/2) ; Tfdb = Tfdb(1 :kmax/2) ; % recherche d'un pic spectral eventuel sur le debit [pic kpic]= max(Qfdb) ; fpic = kpic*df ; texte = ['f_{pic} = ', num2str(fpic,2), ' [Hz]'] ; % tracage figure ; subplot(2,1,1) ; plot(ff,Qfdb) ; axis([0 0.1 -20 40]) ; grid ; text(1.1*fpic, 1.1*pic,texte) ; ylabel('Q(f) [dB]') ; title ('Spectres du dbit et de la temprature') ; subplot(2,1,2) ; plot(ff,Tfdb) ; axis([0 0.1 0 60]) ; grid ;
15
= 0.032 [Hz]
60 50 40 T(f) [dB] 30 20 10 0 0 0.01 0.02 0.03 0.04 0.05 0.06 frquence [Hz] 0.07 0.08 0.09 0.1
L'analyse spectrale complte par son graphe (gure 5) montre qu'il existe une raie spectrale sur le dbit situe en graphe temporel. bation priodique de priode
(t)
est petit, cette quation peut tre approche par une quation
par
16
variables
x1 (t), , xn (t)
Sous Matlab, la description du systme doit se faire dans un chier qui fournit les
drives sous la forme d'un vecteur colonne. Dans notre cas, cela donne :
chier EDpendule.m :
% Equation differentielle d'un pendule simple function dx = EDpendule(t, x) ; g = 9.81 ; longueur = 1.0 ; theta = x(1) ; ddtheta = -g/longueur*sin(theta)) ; dx = [dtheta ; ddtheta] ;
Dans une approche plus gnrale, les paramtres (g et direntielle. De plus, sachant que le vecteur comprendre). L'illustration en est donne dans le chier suivant crit pour l'approximation linaire du pendule :
dtheta = x(2) ;
L)
et
l'criture de
la fonction peut se faire dans une forme plus compacte (mais peut-tre moins vidente
chier EDpendlin.m :
% Equation differentielle lineaire function dx = EDpendlin(t, x, options, param) ; g = param(1) ; longueur = param(2) ; dx1 = x(2) ; dx2 = -g/longueur*x(1) ; dx = [dx1 ; dx2] ;
17
A l'appel de
ode45,
domaine temporel dsir pour la rsolution et les conditions initiales. On peut, si on le souhaite, modier les options de rsolution et fournir des paramtres :
ode45('fichierED.m',[tmin tmax],CI,options,param)
La rsolution du pendule simple est donne ci-dessous. Dans un but de comparaison, on y a ajout la solution linaire qui est trace en traitill dans la gure 6.
Pendule simple 60 40 (t) [deg] 20 0 20 40 60 0 2 4 6 8 10 12 14 16 18 20
2 (t) [rad/sec]
10 temps [sec]
12
14
16
18
20
% Analyse d'un pendule simple clear all ; close all ; format compact ; format short g ; % conditions initiales pos0 = 60*pi/180 ; % radians vit0 = 0 ; % domaine temporel t0 = 0 ; tmax = 20 ; % resolution numerique de l'equation non lineaire % sans passage de parametres [tt1, Xs1] = ode45('EDpendule.m',[t0 tmax],[pos0 vit0]) ; pos1 = Xs1( :,1)/pi*180 ; % degres vit1 = Xs1( :,2) ; % parametres g = 9.81 ; longueur = 1 ; param(1) = g ; param(2) = longueur ; % resolution numerique de l'equation lineaire
18
% avec passage de parametres [tt2, Xs2] = ode45('EDpendlin.m',[t0 tmax],[pos0 vit0],[],param) ; pos2 = Xs2( :,1)/pi*180 ; % degres vit2 = Xs2( :,2) ; % tracage figure ; subplot(2,1,1) ; plot(tt1,pos1,tt2,pos2,'--') ; title('Pendule simple') ; ; ylabel('\theta (t) [deg]') ; subplot(2,1,2) ; plot(tt1,vit1,tt2,vit2,'--') ; ylabel('\omega (t) [rad/sec]') ; xlabel('temps [sec]') ; print -deps pendule.eps
et
B
Z Y
q v
X
Les lois de Newton et de l'lectromagntisme [5] permettent alors de dcrire le mouvement de la charge
de masse
= qE +qvB F = m a = mv
Cette quation vectorielle s'crit galement sous la forme :
v x Ex vx Bx y = q Ey + q vy By m v v z Ez vz Bz
19
vy Bz vz By Ex v x y = q Ey + q vz Bx vx Bz m v vx By vy Bx Ez v z
On voit ainsi que le mouvement de la charge est dcrit par 3 quations direntielles couples d'ordre 1.
Xs
et sa drive
Xs v x y Xs = v v z
vx Xs = vy vz
l'quation du mouvement s'crit :
q m q m q m
Ex Ey 1 Ez
Une approche analytique du problme permet de montrer que la particule oscille sinusodalement avec une pulsation proportionnelle l'amplitude du champ magntique :
n =
q B m
X s = A Xs + B u Y = C Xs + D u
dans laquelle :
20
la sortie
Y. Xs (3, 1), A(3, 3), Y est constitu des 3 composantes C (3, 3) est alors une matrice unit de
Dans le cas de notre problme, les dimensions des vecteurs et matrices sont
B (3, 1)
et
matrice
% Mouvement d'une charge dans un champ electromagnetique clear all ; close all ; format compact ; % constantes q = 1.602e-19 ; m = 9.109e-31 ; Bx = 0.0 ; By = 0.01 ; Bz = 0.0 ; Ex = 1.0 ; Ey = 0.0 ; Ez = 0.0 ; % description d'etat : A = q/m * [ 0 -Bz +By +Bz 0 -Bx -By +Bx 0] ;
B = q/m*[Ex ; Ey ; Ez] ; % matrices de sortie : C = [1 0 0 0 1 0 0 0 1] ; D = zeros(3,1) ; % representation d'etat du systeme sys = ss(A,B,C,D) ;
21
% calcul de la reponse indicielle (=> u = 1) : tmax = 1e-8 ; kmax = 1000 ; dt = tmax/kmax ; tt = 0 :dt :tmax ; y = step(sys,tt) ; % extraction des 3 composantes de la vitesse Vx = y( :,1) ; Vy = y( :,2) ; Vz = y( :,3) ;
Comme le vecteur de sortie
que l'on dsire connatre sa trajectoire, il est possible de passer des vitesses aux positions par intgration numrique. Ce qui donne pour la coordonne
x(t)
x(t) =
0
vx (t) dt
x[n] =
k=0
vx [k ] t n = 0 Npoints
Dans Matlab, cette somme cumulative est ralise par la commande qu'il existe galement la fonction prcise) :
cumtrapz
cumsum(on
notera
% calcul des positions (integration d'ordre 0 => cumsum) xt = dt*cumsum(Vx) ; yt = dt*cumsum(Vy) ; zt = dt*cumsum(Vz) ; % tracage des positions figure ; subplot (3,1,1) ; plot (tt,xt) ; title('Dplacement de la particule') ; ylabel('x(t)') ; subplot (3,1,2) ; plot (tt,yt) ; ylabel('y(t)') ; subplot (3,1,3) ; plot (tt,zt) ; ylabel('z(t)') ; xlabel('temps [sec]') ;
Les rsultats obtenus sont prsents dans les gures 8 et 9. La visualisation 3D de la trajectoire est ralise simplement avec les commandes
22
0,'x').
Ex
et
By
avec la commande
quiver3(x,y,z, u,v,w,
Les commandes ayant servi au traage de la gure 9 sont donnes ci-dessous sans plus de commentaires :
figure ; plot3(xt,yt,zt) ; axis square ; grid ; hold on ; axis([-5e-8,15e-8,-1,1,0,1e-6]) ; h1=quiver3(5e-8,0,0, -5e-8,0,0, 0,'v') ; set(h1,'LineWidth',2) ; text(3.5e-8,-0.15,0, 'E_x') ; h2=quiver3(0,0.5,0, 0,-0.5,0, 0,'v') ; set(h2,'LineWidth',2) ; text(-2e-8,0.4,0, 'B_y') ; title('Trajectoire de la particule') ; print -deps qtraject.eps
15 10 x(t) 5 0 5 1 0.5 y(t) 0 0.5 1 1.5 1 z(t) 0.5 0 0 6 x 10 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 x 10 1
8
% tracage 3D % choix des axes % vecteur E = Ex % vecteur en trait gras % legende pour E % vecteur B = By % vecteur en trait gras % legende pour B
x 10
Dplacement de la particule
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9 x 10
1
8
0.1
0.2
0.3
0.4
0.6
0.7
0.8
0.9 x 10
1
8
E = (Ex ; 0; 0)
et
magntique
B = (0; By ; 0)
23
Trajectoire de la particule
x 10 1
0.8
0.6
0.4
0.2
0 1 0.5 0
By
Ex 10 5
15
0.5 1 5
x 10
E = (Ex ; 0; 0)
et
magntique
B = (0; By ; 0)
24
Rfrences
[1] D. M. Etter : Engineering problem solving with Matlab, Prentice Hall, 1993 27, 30 [2] W. J. Palm III : Introduction to Matlab for Engineers, WCB McGraw-Hill, 1998 [3] M. Etique : Introduction au logiciel Matlab, cours bloc, eivd, 2001 1 [4] M. Correvon :Introduction Matlab 5.2 et Simulink 2.2, Laboratoire de Systmes Electromcaniques, eivd, 2002 1 [5] E. Lambert : Cours de physique, eivd, 1999 16, 19 [6] www.mathworks.com : site ociel de Matlab [7] www.scientic.de : site europen de Matlab [8] www.sysquake.com : site d'un logiciel similaire Matlab dont la version dmonstration est gratuite [9] www-rocq.inria.fr/scilab/ : site d'un logiciel libre de la communaut Linux et comparable Matlab [10] www.math.siu.edu/Matlab/tutorials.html : site proposant des tutoriaux intressants et avancs illustrant les possibilits de Matlab
25
7 Exercices
7.1 Rsolution d'un circuit lectrique
tant donn le circuit de la gure 10, calculez les valeurs ecaces et phases des courants et la tension aux bornes de
R1
et
lorsque
Ug = 220 [V ], L = 1 [mH ],
R1 = 100 [], C1 = 10 [F ],
et que la frquence du gnrateur vaut 50Hz et 250Hz. Plutt que de modier la valeur de la frquence dans le chier, utilisez la commande
input :
Ug
C1
R2
les graphes similaires ceux des gures 2 et ??. Adaptez le domaine frquentiel celui du circuit. 4. Faites de mme pour les rponses temporelles (gure ??). Si ncessaire, modiez le domaine temporel.
26
Sachant que les cellules d'ordre 2 de type passe-bas sont gnralement dcrites comme suit :
HP B (j ) = Au 1+
o
1
1 Q0 j n
j 2 n
Au
est le gain,
Q0
le facteur de qualit et
d'ordre 2, on demande : 1. crivez la fonction de transfert de chaque cellule ralisant un ltre passe-bas d'ordre 6 sachant que a) les 3 cellules ont la mme pulsation caractristique b) les facteurs de qualit sont
n = 1000 [rad/sec] ;
et
Q03 = 1.9319.
2. Calculez la fonction de transfert globale en eectuant le produit des 3 fonctions de transfert ; achez le rsultat avec la commande 3. Tracez sur un mme diagramme de Bode : a) l'amplitude des rponses frquentielles de chaque cellule en traitill ; b) la rponse frquentielle du ltre complet en trait continu ; c) une droite horizontale situe au niveau 3dB en pointill. 4. Par programmation, recherchez la pulsation de coupure de ce ltre ; que vaut-elle ?
zpk.
(la pulsation de coupure correspond une amplitude diminue d'un facteur rapport sa valeur maximum). 5. Tracez la rponse indicielle du ltre.
par
Remarque :
ltre, dit de Butterworth, dont la rponse frquentielle est plate au maximum dans la bande passante.
-5 -2.80
0 1.08
5 5.00
10 8.80
15 11.9
17 12.4
19 12.4
21 11.8
1. Tracez le graphe de la portance. Mettez en valeur ce graphe l'aide d'un titre et d'informations sur l'abscisse et l'ordonne. 2. Recherchez une loi polynomiale reprsentant au mieux cette caractristique. Au lieu de modier l'ordre du polynme dans le chier lui-mme, utilisez la commande
input.
3. Sur un mme diagramme, tracez les points mesurs avec le symbole 'o' et en continu, la courbe polynomiale pour un angle compris entre -10 et + 25 degrs. 4. Sachant que la mesure de la force est entache d'une erreur de courbe polynomiale. 5. Quel est le polynme qui vous parat le mieux adapt pour reprsenter cette aile ?
0.5 [N ],
reprenez ce
diagramme et tracez les points mesurs avec les domaines d'erreur et, en continu, la
27
Id = Is eUd /nVT 1
avec :
Id Ud Is VT = kT /q n
courant traversant la diode tension mesure aux bornes de la diode courant de saturation inverse potentiel thermique valant 26 mV @ T = 300 K facteur technologique (1
Id = Is eUd /nVT
0.16
0.14 2 0.12
Courant Id [A]
0.1
0.08
0.06 8 0.04
0.02
10
On dit alors que le courant crot exponentiellement avec la tension applique la diode ou, de manire inverse, que la tension aux bornes de la diode crot logarithmiquement avec le courant :
Ud = n VT ln
Id Is
28
Lorsque le courant traversant une diode relle est lev, on doit encore tenir compte d'une chute de tension ohmique due la rsistance de liaison entre la diode idale et les ls de connexion. La chute de tension mesure aux bornes d'une diode relle est alors dcrite par :
Ud = n VT ln
Id Is
+ Rd Id
Sachant que l'on a mesur sur une diode les tensions et courants prsents dans le tableau suivant :
Ud [V ] Id Id
0.2 0.6 nA 1 nA
0.3 15 nA 10 nA
0.4 350 nA 10 nA
0.5 9.0 5
0.6 220 5
0.7 5.5 mA 5 mA
0.87 137 mA 5 mA
A A
A A
1. Avec Matlab, calculez et dessinez les graphes de la gure 11. 2. Indiquez les domaines d'erreur avec la commande 3. Ajustez successivement les paramtres traitill. 4. Achez sur le graphe la valeur des paramtres
errorbar.
Rd Rd
pour obtenir la courbe en
Is
et
Is , n
et
nalement trouvs.
5. Quelle(s) mthode(s) mathmatique(s) pourriez-vous utiliser pour trouver automatiquement ces paramtres ?
y (t)
oriente
v (t)
ou
y (t)
et son acclration
a(t)
ou
y (t).
la vitesse maximum atteinte est d'environ 200 [km/h], crivez un programme Matlab rpondant aux points suivants : 1. Sachant que le frottement de l'air compense exactement le poids du parachutiste lorsque la vitesse maximum est atteinte, calculez le coecient dynamique. 2. Rsolvez l'quation direntielle de l'volution du parachutiste et dterminez le temps et la hauteur ncessaires pour atteindre le 98% de la vitesse limite.
du frottement aro-
29
m = 80 [kg ] du sauteur, = 0.25 [N/(m/s)2 ] du frottement arodynamique la longueur L = 150 [m] de l'lastique, le coecient d'lasticit k = 10 [N/m] de l'lastique, le coecient de frottement interne = 7 [N/(m/s)] de l'lastique. y (t), la vitesse v (t) ou y (t), l'acclration a(t) ou y (t).
Felast (t) =
si y (t) L
crivez un programme Matlab rpondant aux points suivants : 1. Rsolvez l'quation direntielle en considrant un lastique sans frottements internes (
= 0).
2. Tracez les graphes de position, vitesse et acclration ; vous paraissent-ils raisonnables ? 3. Rsolvez l'quation direntielle prenant en compte les frottements de l'lastique. 4. Tracez les graphes ; quelle est l'importance des frottements internes ? 5. A quel instant et quelle vitesse, l'lastique commence-t-il se tendre ? 6. Que valent la vitesse maximum et l'acclration maximum ? A quels instants apparaissentelles ?
et
B.
30
x 10
x 10
Trajectoire z(x)
0 8
0 x 10
2
7
0 8
0 x 10
2
7
x 10 3 2 1 0 1 x 10
5
x 10
Trajectoire z(y)
0.5 0 1
1 0 x 10
0.2
0.4
0.6
0.8 x 10
1
5
31
32
33
1
Not a Number Nombre d'oprations ottantes par seconde Nombre d'arguments d'entre d'une fonction Nombre d'arguments de sortie d'une fonction Type du calculateur Date courante Horloge Dure d'excution Ache le dbut et la n d'excution Temps CPU coul
34
35
36
37
38
8.5.5 Objets 3D
sphere cylinder peaks
Gnration de sphres Gnration de cylindres Dmonstration
8.5.6 Animations
moviein getframe
movie Initialise l'espace mmoire pour l'animation Enregistre une image pour l'animation Joue l'animation
39
40
8.8.2 Interpolation
spline interp1 interp2 interpft griddata
Interpolation spline cubique Interpolation monodimensionnelle Interpolation bidimensionnelle Interpolation 1D par FFT Maillage de donnes
41
Cration d'une fonction de transfert Extraction du numrateur et du dnominateur d'une fonction de transfert Suppression des ples compenss par des zros (simplication algbrique) Frquence propre et amortissement/rsonnance Gain en continu Position des ples et zros dans le plan complexe Racines d'un polynme
42