Você está na página 1de 183

MATLAB

Matlab est un logiciel de calcul numrique. Matlab est dvelopp et commercialis par la socit amricaine The MathWorks. Voici une introduction qui vous suffira largement si vous utilisez les outils mathmatiques de faon ponctuelle. N.B. Ce qui suit a t test avec les versions 4.2. et 6.5. Site officiel de Matlab : www.mathworks.com Premire partie : Elments de base Utilisation de Matlab la manire dune calculatrice scientifique

1-Variables et constantes spciales ans rponse la plus rcente pi nombre pi inf plus l'infini -inf moins l'infini NaN (Not-a-Number) 2-Oprateurs mathmatiques + * / addition soustraction multiplication division

^ puissance >> (2 + 5.2)*10 / (5^3) ans = 0.5760 >> -2.52e3 ans = -2520 >> 2*pi ans =

6.2832 format long e affiche 16 chiffres : >> format long e >> 2*pi ans = 6.283185307179586e+000 format short (format par dfaut) affiche 5 chiffres : >> format short >> 2*pi ans = 6.2832

>> 1 / 0 Warning: Divide by zero ans = Inf >> -1 / 0 Warning: Divide by zero ans = -Inf >> 0 / 0

Warning: Divide by zero ans = NaN 3- Fonctions mathmatiques sin(X) sinus asin(X) sinus inverse cos(X) cosinus acos(X) cosinus inverse tan(X) tangente atan(X) tangente inverse avec X : argument en radians.

exp(X) log(X) log10(X) sqrt(X) abs(X) >> sin(2) ans = 0.9093 sinus (45) :

exponentielle logarithme naturel (base e) logarithme dcimal (base 10) racine carre valeur absolue

>> sin(45*pi/180) ans = 0.7071 >> 1 + exp(2.5) ans = 13.1825 4- Utilisation de variables >> 5*3 ans =

15 >> ans+4 ans = 19 >> a= 2 + log(15) a= 4.7081 >> b = - 45 b=

-45 >> a * b ans = -211.8623 >> c = a - sqrt(abs(b)) c= -2.0002


Calcul sur les nombres complexes Fonctions :

i j conj(X) real(X) imag(X) abs(X) angle(X) Exemples :

imaginaire pur imaginaire pur conjugu du nombre complexe X partie relle partie imaginaire module argument (en radians)

>> (4 - 2.5i)*(-2 + i)/(1 + i) ans = 1.7500 + 7.2500i

>> a = 1 + i a= 1.0000 + 1.0000i >> b = -2 + 3.5j b= -2.0000 + 3.5000i >> a + b ans = -1.0000 + 4.5000i

>> a * b ans = -5.5000 + 1.5000i >> a / b ans = 0.0923 - 0.3385i >> conj(a) ans = 1.0000 - 1.0000i

>> a * conj(a) ans = 2 >> real(a) ans = 1 >> imag(conj(a)) ans = -1

>> abs(a) ans = 1.4142 >> angle(a) ans = 0.7854 sqrt : fonction racine carre >> c = 2 - sqrt(3)*i c=

2.0000 - 1.7321i >> abs(c) ans = 2.6458 >> angle(c) ans = -0.7137 Argument en degrs : >> angle(c)*180/pi

ans = -40.8934

Calcul sur les matrices Fonctions : + * ^ addition de matrices soustraction de matrices produit de matrices puissance matrice unit (matrice identit) de taille n x n inverse de la matrice carre X

eye (n) Inv (X)

rank (X) rang de la matrice X (nombre de colonnes ou de lignes indpendantes) det (X) X' / \

dterminant de la matrice carre X transpose de la matrice X division droite : A / B est quivalent A * inv(B) division gauche : A \ B est quivalent inv(A) * B

Exemples :

Saisie d'une matrice carre de taille 3 x 3 : >> A = [ 2 4 5 ; 1 5 7 ; -3 3 1]

A= 245 157 -3 3 1 >> A(2 , 3) ans = 7 >> A(2 , 3) = 6 A=

245 156 -3 3 1 >> A' ans = 2 1 -3 453 561

>> inv(A) ans = 1.0833 -0.9167 0.0833 1.5833 -1.4167 0.5833 -1.5000 1.5000 -0.5000 >> D = A * inv(A) D= 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000

0.0000 0.0000 1.0000 >> rank(A) ans = 3 >> det(A) ans = -12 >> eye(7) ans =

1000000 0100000 0010000 0001000 0000100 0000010 0000001 >> B = [ 1 1 0 ; 1 0 1 ; 0 1 1 ] B=

110 101 011 >> A + B ans = 355 257 -3 4 2 >> 2 + A

ans = 467 378 -1 5 3 >> 2 * A ans = 4 8 10 2 10 12 -6 6 2

>> A * B ans = 679 6 7 11 0 -2 4 >> B * A ans = 3 9 11 -1 7 6

-2 8 7 >> A*A*A ans = -88 304 262 -98 314 268 -18 18 10 >> A^3 ans = -88 304 262

-98 314 268 -18 18 10 Saisie d'une matrice coefficients complexes de taille 2 x 3 : >> C = [ 1 + i 0 0 ; 1 - i i 2] C= 1.0000 + 1.0000i 0 0 1.0000 - 1.0000i 0 + 1.0000i 2.0000

>> C * A ans = 2.0000 + 2.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i -4.0000 - 1.0000i 10.0000 + 1.0000i 7.0000 + 1.0000i

Rsolution dun systme dquations linaires Fonction : division gauche de matrices \

A \ B est quivalent : inv(A)*B Exemple n1 :

Soit rsoudre un systme de 3 quations 3 inconnues x1, x2 et x3 :

On saisit les diffrents coefficients dans une matrice 3 x 3 : >> A = [ 3 2 1 ; -1 5 2 ; 4 -2 3 ]

A= 321 -1 5 2 4 -2 3

On complte avec un vecteur colonne 3 x 1 : >> B = [ 4 ; -1 ; 3 ] B= 4

-1 3

La solution est donne sous la forme d'un vecteur colonne : >> A \ B ans = 1.3279 0.2951 -0.5738

Autre mthode : >> inv(A) * B ans = 1.3279 0.2951 -0.5738 >> format long e >> A \ B

ans = 1.327868852459016e+000 2.950819672131148e-001 -5.737704918032788e-001 >> X = A \ B X= 1.327868852459016e+000 2.950819672131148e-001 -5.737704918032788e-001

>> X(1) ans = 1.327868852459016e+000

>> X(2) ans = 2.950819672131148e-001

>> X(3) ans = -5.737704918032788e-001

Vrification : >> 3*X(1) + 2*X(2) + X(3) ans = 4 >> -X(1) + 5*X(2) + 2*X(3)

ans = -9.999999999999998e-001 >> 4*X(1) -2*X(2) + 3*X(3) ans = 3.000000000000000e+000

Exemple n2 :

Soit le systme d'quations paramtriques :

On cherche exprimer x1, x2 et x3 en fonction de b1, b2 et b3 :

>> A = [ -1 2 1 ; -1 1 2 ; 1 -2 1 ] A= -1 2 1 -1 1 2

1 -2 1

>> inv(A) ans = 2.5000 -2.0000 1.5000 1.5000 -1.0000 0.5000 0.5000 0 0.5000

>> format rational

>> inv(A) ans = 5/2 -2 3/2 3/2 -1 1/2 1/2 0 1/2

>> format short >> inv(A) ans =

2.5000 -2.0000 1.5000 1.5000 -1.0000 0.5000 0.5000 0 0.5000

Finalement :

Cration du fichier .m dune fonction y=f(x)

Fonction :

function

Exemple

Soit la fonction :

a) Commencez pour ouvrir un diteur de texte : Dans la fentre de commande de Matlab : File -> New -> M-file

Avec la version 4.2. l'diteur de texte par dfaut est l'application "Bloc-notes". Avec la version 6.5. l'diteur de texte par dfaut est l'application "M-File Editor".

b) Donnez un nom cette fonction (dans cet exemple fonc) et saisissez son expression mathmatique :

Attention : il faut mettre un point devant les oprateurs multiplication, division et puissance : .* ./ .^ c) Sauvegardez le fichier dans votre rpertoire de travail (par exemple c:\USERS) Nom : fonc Extension : .m

d) Ajoutez le chemin du rpertoire o se trouve votre fichier fonc.m Avec la version 4.2. : >> path(path,'c:\USERS') Avec la version 6.5. : File -> Set Path -> Add Folder -> Save -> Close Remarque : Vous pouvez utiliser n'importe quel nom pour les variables. La fichier suivant donne le mme rsultat :

Evaluation d'une fonction

Calcul de y ( x = 0 ) : >> fonc(0) ans =

2 Calcul de y ( x = 5 ) : >> fonc(5) ans = 10.2010 >> fonc(-1) Warning: Divide by zero ans = Inf

Avec en argument un vecteur, la fonction retourne un vecteur : >> fonc( [0 1 2 3 4 5] ) ans = 2.0000 3.8415 3.9099 6.9121 8.1121 10.2010 >> x = 0 : 5 x= 012345

>> y = fonc(x) y= 2.0000 3.8415 3.9099 6.9121 8.1121 10.2010

Avec en argument une matrice, la fonction retourne une matrice : >> fonc( [ 1 2 3 ; 4 5 6] ) ans = 3.8415 3.9099 6.9121 8.1121 10.2010 11.2939

Cration du fichier .m dune fonction dfinie par morceaux y=f(x) Exemple :

Soit la fonction y = f(x) :

Le fichier f5.m associ cette fonction s'crit :

>> f5 (0)

ans = 0 >> f5 (1) ans = 0.5000 >>f5 (-10) ans = 0 >> f5 (3)

ans = 0.0556 >> fplot ( 'f5' , [ -2 4 ] ) >> grid on

Graphe en 2D (2 axes) Fonctions :

plot

trace point par point un graphe 2D

semilogx semilogy loglog grid xlabel ylabel title axis zoom gtext hold

identique plot mais avec chelle logarithmique pour des abscisses identique plot mais avec chelle logarithmique pour des ordonnes identique plot mais avec chelles logarithmiques pou deux axes ajoute une grille ajoute une lgende pour l'axe des abscisses ajoute une lgende pour l'axe des ordonnes ajoute un titre modifie les chelles des axes effectue un zoom place une lgende avec la souris ajoute un graphe dans la fentre courante

figure Exemple 1

cre une nouvelle fentre

Temps (heures)

0 2 4 6 8 10 12 14 16

Temprature 20 23 30 33 32 37 34 39 36 (C) >> temps = [0 2 4 6 8 10 12 14 16] temps = 0 2 4 6 8 10 12 14 16 >> temperature = [20 23 30 33 32 37 34 39 36]

temperature = 20 23 30 33 32 37 34 39 36 >> plot (temps , temperature) >> grid on >> xlabel ( 'temps (en heures)' ) >> ylabel ( 'temprature (en C)' ) >> title ( 'Suivi de temprature' ) >> axis ( [ 0 18 10 40 ] )

>> plot ( temps , temperature ,'+' )

>> plot ( temps , temperature , 'co' )

>> plot ( temps , temperature , ':' )

>> plot ( temps , temperature , '--' )

Autres options : y Jaune m Magenta

c Cyan r Rouge g Vert b Bleu w Blanc k Noir

. o x

+ * : -. -Exemple 2 : graphe dune fonction une variable

Cration du vecteur t : >> t = 0 : 0.01 : 1

t= Columns 1 through 7 0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 Columns 99 through 101 0.9800 0.9900 1.0000 Cration du vecteur y : Attention : ne pas oublier le point devant les oprateurs multiplication, puissance et division :

.* .^ ./ >> y = t.*(1 + t.^2)./10 y= Columns 1 through 7 0 0.0010 0.0020 0.0030 0.0040 0.0050 0.0060 Columns 99 through 101

0.1921 0.1960 0.2000 >> plot ( t , y ) >> grid on

Remarque : il est plus efficace dutiliser la fonction fplot

Exemple 3 : quations paramtriques d'une ellipse x = 4cos(t) y = sin(t) >> t = 0 : pi/100 : 2*pi >> x = 4*cos(t) >> y = sin(t) >> plot ( x , y )

Graphe dune fonction une variable y = f (x) Fonctions trace point par point le graphe d'une fonction ajoute une grille ajoute une lgende pour l'axe des abscisses

fplot grid xlabel

ylabel title axis zoom gtext hold figure

ajoute une lgende pour l'axe des ordonnes ajoute un titre modifie les chelles des axes effectue un zoom place une lgende avec la souris ajoute un graphe dans la fentre courante cre une nouvelle fentre

Premire mthode :

On veut tracer le graphe de la fonction : >> fplot('1+ 2*x + sin(x*x)', [ 1 5 ])

Remarque : la variable doit ncessairement s'appeler x

>> fplot('1+ 2*x + sin(x*x)', [ 2 3 2 10 ])

>> grid on

>> grid off >> xlabel('axe des abscisses') >> ylabel('axe des ordonnes') >> title('y=f(x)')

>> zoom on click droit : zoom arrire click gauche : zoom avant click gauche et gliss : zoom dune zone

>> zoom off Pour tracer plusieurs graphes dans la mme fentre : >> fplot('[1+ 2*x + sin(x*x) , 1+ 2*x - sin(x*x) ]', [ -2 2.5 ])

>> gtext('fonction 1')

>> gtext('fonction 2')

Deuxime mthode :

Nous allons crer le fichier .m de la fonction :

>> fplot('f2', [ 0 10])

>> hold on >> fplot('sin(x) ', [ 0 10 ] ,'b')

>> hold off >> [X Y] = fplot ( 'sin(x) ' , [ 0 10 ] ) X= 0

0.0200 0.0600 ... 9.8700 9.9350 10.0000 Y= 0 0.0200

0.0600 ... -0.4307 -0.4884 -0.5440 >> fplot ( 'sin(x) ' , [ 0 10 ] , '.' )

Autres options : y Jaune c Cyan . x

m Magenta o

r Rouge g Vert b Bleu w Blanc k Noir Graphe en 3D (3 axes)

+ * : -. --

Fonctions plot3 grid trace point par point un graphe 3D ajoute une grille

xlabel ylabel zlabel title hold figure view

ajoute une lgende pour l'axe des abscisses ajoute une lgende pour l'axe des ordonnes ajoute une lgende pour l'axe des z ajoute un titre ajoute un graphe dans la fentre courante cre une nouvelle fentre ajuste l'angle de vue

Exemple 1

>> x = [ 1 2 3 4 ] x=

1234 >> y = [ 2 4 6 7] y= 2467 >> z = [ 3 8 5 6 ] z= 3856 >> plot3 (x , y , z ,'r*') >> grid on

>> xlabel('axe des x') >> ylabel('axe des y') >> zlabel('axe des z') >> title('plot3')

Exemple 2 : quations paramtriques

x = cos (t)

y = sin (t) z=t >> t = 0 : pi/100 : 5*pi >> plot3 (cos(t) , sin(t) , t)

Graphe dune fonction deux variables z = f (x , y) Fonctions

meshgrid (voir l'exemple) mesh (voir l'exemple) meshc (voir l'exemple) meshz (voir l'exemple) contour (voir l'exemple) view ajuste l'angle de vue grid ajoute une grille xlabel ajoute une lgende pour l'axe des abscisses ylabel ajoute une lgende pour l'axe des ordonnes zlabel ajoute une lgende pour l'axe des z title ajoute un titre hold ajoute un graphe dans la fentre courante

figure

cre une nouvelle fentre

Exemple 1

>> x = -2 : 2 x= -2 -1 0 1 2 >> y = -3 : 3 y=

-3 -2 -1 0 1 2 3 >> [X , Y] = meshgrid(x , y) X= -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2

-2 -1 0 1 2 Y= -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 00000 11111 22222 33333

>> Z = sqrt (X.^2 + 2.*Y.^2) Z= 4.6904 4.3589 4.2426 4.3589 4.6904 3.4641 3.0000 2.8284 3.0000 3.4641 2.4495 1.7321 1.4142 1.7321 2.4495 2.0000 1.0000 0 1.0000 2.0000 2.4495 1.7321 1.4142 1.7321 2.4495 3.4641 3.0000 2.8284 3.0000 3.4641 4.6904 4.3589 4.2426 4.3589 4.6904

>> mesh (X , Y , Z) >> grid on

Pour une meilleure rsolution : >> x = -2 : 0.1 : 2 >> y = -3 : 0.1 : 3 >> [X , Y] = meshgrid(x , y) >> Z = sqrt (X.^2 + 2.*Y.^2) >> mesh (X , Y , Z)

>> meshc (X , Y , Z)

>> contour (x , y , Z)

>> meshz (X , Y , Z)

>> mesh (X , Y , Z) >> grid on

>> view(-80 , 10)

Remarque : view (-37.5 , 30) par dfaut

Exemple 2

z = f (x , y ) = y.exp( - x - y ) >> x = -2 : 0.1 : 2 >> y= -2 : 0.1 : 2 >> [X , Y] = meshgrid(x , y) >> Z = Y.*exp ( -X.^2 - Y.^2) >> mesh (X , Y , Z)

>> meshc (X , Y , Z)

>> contour (x , y , Z)

Calcul sur les polynmes o Racines d'un polynme o Dtermination des coefficients dun polynme partir des ses racines

Produit de polynmes o Fractions rationnelles : Dcomposition en lments simples o Reprsentation graphique Recherche du minimun dune fonction f(x) Recherche de racines ; Equation non linaire une inconnue f(x)=0 Drive d'une fonction f '(x) Calcul dintgrale Equation diffrentielle Diagramme de Bode
o

Fonctions :

Log10 : logarithme dcimal

Semilogx : identique la fonction plot mais avec une chelle logarithmique pour laxe des abscisses Loglog : identique la fonction plot mais avec une chelle logarithmique pour laxe des abscisses et des ordonnes

Premier exemple

Considrons un filtre passe-bas du 2me ordre, de fonction de transfert :

avec : K = 10, f1 = 1 kHz et f2 = 10 kHz. Il faut commencer par crer le fichier t4.m de la fonction de transfert :

Valeur de la fonction de transfert pour f = 0 Hz (rgime continu) : >> t4(0) ans = 10 Valeur de la fonction de transfert pour f = 100 Hz : >> t4(100) ans = 9.8901 - 1.0890i

Le module donne l'amplification : >> abs(t4(100)) ans = 9.9499 L'argument donne le dphasage (en radians) : >> angle(t4(100)) ans = -0.1097

Etudions la fonction de transfert sur la gamme de frquence 100 Hz 100 kHz : >> log10(100) ans = 2 >> log10(100000) ans = 5 Nous allons crer un vecteur logf :

>> logf = 2 : 0.01 : 5 >> f = 10.^logf f est un vecteur qui nous donne 300 points uniformment rpartis de 100 Hz 100 kHz (compte tenu de lchelle logarithmique).

G est un vecteur qui nous retourne le gain (en dB) pour les frquences prcdentes : >> G = 20.*log10 (abs (t4(f)) )

>> semilogx ( f , G ) >> ylabel ( 'gain (dB)' ) >> xlabel ( 'frquence (Hz)' ) >> title ( 'diagramme de Bode du gain' ) >> grid on

Dphasage en degrs :

>> dephasage = angle(t4(f))*180/pi >> semilogx ( f , dephasage ) >> grid on

Deuxime exemple : systme du deuxime ordre

Fichier de dfinition de la fonction t2 :

>> logpulsation = 3 : 0.01 : 6 >> pulsation = 10.^logpulsation

>> G = 20.*log10(abs(t2(pulsation))) >> semilogx ( pulsation , G ) >> grid on

>> dephasage = angle(t2(pulsation))*180/pi >> semilogx ( pulsation , dephasage )

>> grid on

>> amplification = abs(t2(pulsation)) >> loglog ( pulsation , amplification) >> grid on >> xlabel ( 'pulsation(rad/s)' ) >> ylabel ( 'amplification' ) >> title ( 'Diagramme de Bode' )

Exemple : Soit un filtre passe-bas du deuxime ordre dont voici la fonction de transfert :

>> bode Ce script Matlab permet de tracer les diagrammes de Bode. Il ncessite le fichier trans.m (fichier de dfinition de la fonction de transfert). Gamme de frquences : f min (en Hz)=? 100 f max (en Hz)=? 100000 Nombre de points =? 1000

Figure 1 -> gain en fonction de la frquence Figure 2 -> dphasage en fonction de la frquence

Scalaires, vecteurs, matrices et tableaux Calcul numrique, calcul littral et calcul formel

- Premier script : Graphe d'une fonction une variable Au lieu de taper la srie de commandes qui permet de tracer le graphe de la fonction y(x) =100x/((50+x)2) : >> fplot('100*x/((50+x)^2)',[0 200]) >> grid on >> xlabel('R (en ohms)') >> ylabel('P (en watts)')

>> title('Courbe P(R)') vous pouvez une fois pour toute, crire un script. Pour cela, il vous faut un diteur de texte (le bloc-notes par exemple) :

Le signe % signifie que le reste de la ligne est un commentaire. Pour excuter le script, il suffit de taper son nom dans la fentre de commande : >> script1

La commande ECHO ON permet d'afficher l'cran, les commandes excutes par le script : >> echo on >> script1 % script1.m fplot('100*x/((50+x)^2)',[0 200]); grid on; xlabel('R (en ohms)'); ylabel('P (en watt)');

title('Courbe P(R)'); >> echo off 2- Affichage l'cran : fonction DISP Cette fonction permet d'afficher proprement des valeurs numriques ou bien du texte (chane de caractres) l'cran. Affichage de nombres : >> a=15; >> disp(a) 15

>> b=[1 8 9]; >> disp(b) 189 >> disp([17 -25.36 sqrt(6)]) 17.0000 -25.3600 2.4495 >> disp([17 ; -25.36 ; sqrt(6)]) 17.0000 -25.3600 2.4495

>> a=12; >> disp([17 a sqrt(a+13)]) 17 12 5

Affichage de textes :

>> c='Bonjour'; >> disp(c) Bonjour >> disp('Bonjour') Bonjour

>> disp(['Mohammed' 'Ali' 'Fatima']) MohammedAliFatima La commande BLANKS(n) affiche n espaces : >> disp([' Mohammed ' blanks(1) ' Ali ' blanks(1) ' Fatima ']) Mohammed Ali Fatima

Affichage combin de textes et de nombres :

La fonction NUM2STR convertit un nombre en une chane de caractres.

>> disp(['Il est ' num2str(12) ' heures']) Il est 12 heures >> a=18; >> disp(['Il est ' num2str(a) ' heures ' num2str(58)]) Il est 18 heures 58 3- Saisie au clavier : fonction INPUT Cette fonction effectue la saisie de valeurs numriques ou bien de textes.

Saisie de nombres :

% script2.m disp('Bonjour!'); x0=input('Taper la valeur de R min : '); x1=input('Taper la valeur de R max : '); disp(['R min =' num2str(x0)]); disp(['R max =' num2str(x1)]); fplot('100*x/((50+x)^2)',[x0 x1]) ; grid on ; xlabel('R (en ohms)') ;

ylabel('P (en watt)') ; title('Courbe P(R)') disp('Au revoir.'); >> script2 Bonjour! Taper la valeur de R min : 20 Taper la valeur de R max : 100 R min =20 R max =100

Au revoir.

Saisie de textes : % scrip2_1.m nom=input('Taper votre nom : ','s');

prenom=input('Taper votre prnom : ','s'); age=input('Taper votre ge : '); disp([nom blanks(1) prenom]); disp(['Age : ' num2str(age)]); >> scrip2_1 Taper votre nom : Abounaouass Taper votre prnom : Mohammed Taper votre ge : 21 Abounaouass Mohammed

Age : 21 4- Boucle FOR Cette instruction permet de rpter un bloc d'instructions, un nombre dtermin de fois. Synthaxe : for expression , bloc d'instructions ; end Exemples :

% script3.m for i=1:5, disp([i i*i]); end >> script3 11 24 39 4 16

5 25 % scrip3_1.m n=input('Nombre de boucles = ? '); for i=1:n, disp(i); end >> scrip3_1 Nombre de boucles = ? 4 1

2 3 4 % script4.m for i=1:2:10, disp(i); end >> script4 1

3 5 7 9 % script5.m for i=1:3, for j=1:6, a(i,j)=i+10*j ; end

end disp(a); >> script5 11 21 31 41 51 61 12 22 32 42 52 62 13 23 33 43 53 63 5- Boucle WHILE Synthaxe : while condition ,

bloc d'instructions ; end Le programme teste la condition : Si la condition est fausse, le programme saute l'instruction qui suit END. Si la condition est vraie, le bloc d'instructions est excut, puis le programme teste nouveau la condition ... Attention aux bugs de programmation ! si la condition est toujours vraie, la boucle s'excute indfiniment : le programme est "plant".

Oprateurs de comparaison : == > < >= <= ~= Exemples : % script6.m n=0 ; gal suprieur infrieur suprieur ou gal infrieur ou gal diffrent

while (n<10), n=n+1; disp(n); end La boucle est excute tant que n est infrieur 10 : >> script6 1 2 3

4 5 6 7 8 9 10 Oprateurs logiques : & ET logique (AND)

| ~ % script7.m note=-1;

OU logique (OR) NON logique

while ((note<0) | (note>20)), note=input('taper la note (0 20) : '); end disp(['note = ' num2str(note)]);

La boucle est excute tant que la note est infrieure 0 ou bien suprieure 20. Cela permet de saisir une note forcment comprise entre 0 et 20 : >> script7 taper la note (0 20) : 30 taper la note (0 20) : 17 note =17 6- Instructions IF ELSE ELSEIF Synthaxe :

IF

if condition , bloc d'instructions ; end Le bloc d'instructions est excut si la condition est vraie. Autrement, il est ignor. IF ELSE if condition , bloc d'instructions 1 ;

else bloc d'instructions 2 ; end Le bloc d'instructions 1 est excut si la condition est vraie. Sinon, c'est le bloc d'instructions 2 qui est excut. IF ELSE IF if condition1 , bloc d'instructions 1 ; else if condition2 ,

bloc d'instructions 2 ; end Le bloc d'instructions 1 est excut si la condition 1 est vraie. Sinon, si la condition2 est vraie, le bloc d'instructions 2 est excut. % script8.m note=-1; while ((note<0) | (note>20)), note=input('Taper la note (0 20) : ');

if (note<0), disp ('Valeur invalide (note < 0)'); end if (note>20), disp ('Valeur invalide (note > 20)'); end end disp('note = '); disp(note);

>> script8 Taper la note (0 20) : -5 Valeur invalide (note < 0) Taper la note (0 20) : 25 Valeur invalide (note > 20) Taper la note (0 20) : 12 note = 12 7- Instruction BREAK

L'instruction BREAK permet de sortir d'une boucle FOR ou d'une boucle WHILE. % script11.m for i=1:10, if i==5, break; end disp(i); end

>> script11 1 2 3 4 % script12.m i=0; while 1, i=i+1;

if i>5, break; end disp(i); end La condition while 1 est toujours vraie. Le seul moyen de sortir de la boucle est d'utiliser l'instruction BREAK. >> script12

1 2 3 4 5 8- Exemples de scripts 8-1- Rsolution d'une quation du 2me degr (dans R) 8-2- Rsolution d'une quation du 2me degr (dans C) 8-3- Calcul de la factorielle n!

8-4- Diagrammes de Bode d'un filtre analogique H(p) 8-5- Diagrammes de Bode d'un filtre numrique H(z) 8-1- Rsolution d'une quation du 2me degr (dans R, espace des nombres rels) % trinome.m disp('Calcul dans R des racines de ax+bx+c=0'); choix='Y'; while (choix~='N' & choix~='n'), a=0;

while (a==0), a=input('a=? '); if (a==0), disp ('Valeur non valide !'); end end b=input('b=? '); c=input('c=? '); delta=b*b-4*a*c;

if (delta<0), disp('Pas de racine relle.'); end if (delta==0), disp('Une racine double :'); racine=-b/(2*a); disp(racine); end if (delta>0),

disp('Deux racines :'); racine1=(-b+sqrt(delta))/(2*a); racine2=(-b-sqrt(delta))/(2*a); disp(racine1); disp(racine2); end choix=input('Un autre calcul (O/N)? ','s'); end

>> trinome Calcul dans R des racines de ax+bx+c=0 a=? 0 Valeur non valide ! a=? 1 b=? 2.36 c=? -4.5 Deux racines : 1.2474

-3.6074 Un autre calcul (O/N)? n

8-2- Rsolution d'une quation du 2me degr (dans C, espace des nombres complexes)

% trinome1.m disp('Calcul dans C des racines de ax+bx+c=0'); p(1)=input('a=? ');

p(2)=input('b=? '); p(3)=input('c=? '); disp('Racines :'); disp(roots(p));

>> trinome1 Calcul dans C des racines de ax+bx+c=0 a=? 2+i b=? -5

c=? 1.5-5i Racines : 0.8329 + 0.6005i -0.2079 - 0.6005i

8-3- Calcul de la factorielle n!

% facto.m disp('Calcul de la factorielle') ;

n=input('n = ? ') ; fact=1; for i=1:n, fact=fact*i; end disp([num2str(n) '!=']); format long e; disp(fact); % (C) Fabrice Sincre

>> facto Calcul de la factorielle n = ? 134 134!= 1.992942746161518e+228

8-4- Diagrammes de Bode d'un filtre analogique H(p)

Exemple : Soit un filtre passe-bas du deuxime ordre dont voici la fonction de transfert :

>> bode Ce script Matlab permet de tracer les diagrammes de Bode. Il ncessite le fichier trans.m (fichier de dfinition de la fonction de transfert).

Gamme de frquences : f min (en Hz)=? 100 f max (en Hz)=? 100000 Nombre de points =? 1000 Figure 1 -> gain en fonction de la frquence Figure 2 -> dphasage en fonction de la frquence

Tlcharger le script Complments

8-5- Diagrammes de Bode d'un filtre numrique H(z)

Exemple : Soit un filtre numrique rcursif passe-bande dont voici la fonction de transfert en z :

>> bodenum Ce script Matlab permet de tracer les diagrammes de Bode d'un filtre numrique.

Il ncessite le fichier transnum.m (fichier de dfinition de la fonction de transfert en z). Gamme de frquences : Fe : frquence d'chantillonnage

f min / Fe =? 0.001 f max / Fe =? 0.5 Nombre de points =? 1000 Figure 1 -> Diagramme de Bode du gain Figure 2 -> Diagramme de Bode du dphasage Figure 3 -> Amplification en fonction de la frquence Figure 4 -> Dphasage en fonction de la frquence

Você também pode gostar