Escolar Documentos
Profissional Documentos
Cultura Documentos
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 =
imaginaire pur imaginaire pur conjugu du nombre complexe X partie relle partie imaginaire module argument (en radians)
>> 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
>> 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
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 :
>> 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 =
-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
A= 321 -1 5 2 4 -2 3
-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
Vrification : >> 3*X(1) + 2*X(2) + X(3) ans = 4 >> -X(1) + 5*X(2) + 2*X(3)
Exemple n2 :
>> 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
Finalement :
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 :
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
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
>> f5 (0)
ans = 0 >> f5 (1) ans = 0.5000 >>f5 (-10) ans = 0 >> f5 (3)
plot
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
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 ] )
. o x
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
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
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 :
>> 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 ])
Deuxime mthode :
0.0600 ... -0.4307 -0.4884 -0.5440 >> fplot ( 'sin(x) ' , [ 0 10 ] , '.' )
m Magenta o
+ * : -. --
Fonctions plot3 grid trace point par point un graphe 3D ajoute une grille
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')
x = cos (t)
y = sin (t) z=t >> t = 0 : pi/100 : 5*pi >> plot3 (cos(t) , sin(t) , t)
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
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
>> 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
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)
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 :
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
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 :
>> 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
Affichage de textes :
>> disp(['Mohammed' 'Ali' 'Fatima']) MohammedAliFatima La commande BLANKS(n) affiche n espaces : >> disp([' Mohammed ' blanks(1) ' Ali ' blanks(1) ' Fatima ']) Mohammed Ali Fatima
>> 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.
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 :
5 25 % scrip3_1.m n=input('Nombre de boucles = ? '); for i=1:n, disp(i); end >> scrip3_1 Nombre de boucles = ? 4 1
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
| ~ % script7.m note=-1;
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
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
8-2- Rsolution d'une quation du 2me degr (dans C, espace des nombres complexes)
>> trinome1 Calcul dans C des racines de ax+bx+c=0 a=? 2+i b=? -5
n=input('n = ? ') ; fact=1; for i=1:n, fact=fact*i; end disp([num2str(n) '!=']); format long e; disp(fact); % (C) Fabrice Sincre
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
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