Documente Academic
Documente Profesional
Documente Cultură
Introducere n MATLAB
n cele ce urmeaz ne propunem s revedem cteva dintre comenzile MATLAB utile n prelucrarea numeric a
semnalelor. Programul MATLAB integreaz analiza numeric, calculul matriceal, procesarea semnalelor, reprezentrile
grafice 2D i 3D, realizarea interfeelor grafice.
MATLAB (MATrix LABoratory) este un program interactiv, destinat prelucrrii numerice a datelor furnizate
sub form vectorial sau matriceal. MATLAB-ul include i aplicaii specifice, strnse n TOOLBOX-uri. Acestea sunt
colecii extinse de funcii MATLAB (fiiere *.m) care dezvolt mediul de programare de la o versiune la alta, pentru a
rezolva probleme specifice.
va crea variabila var afind cele 6 elemente ale vectorului linie var, de la v(1)=0 la v(6)=5:
var =
Comenzile introduse anterior pot fi readuse n linia de comand prin folosirea sgeilor de la tastatur, i
(cutarea se face ca ntr-o list).
n afara modului de lucru n linia de comand, MATLAB-ul lucreaz cu programe coninute n fiiere. Fiierele
ce conin instruciuni MATLAB se numesc fiiere M (*.m). Un program MATLAB poate fi scris sub forma fiierelor script
sau a fiierelor function. Un fiier script este un fiier extern care conine o secven de comenzi MATLAB. Dup
execuia complet a unui fiier script, variabilele create de acest tip de fiier rmn n zona de memorie a aplicaiei.
Dac prima linie a fiierului conine cuvntul function, fiierul respectiv este fiier funcie, care se caracterizeaz prin
faptul c poate lucra cu argumente. La terminarea execuiei unei funcii, n memoria calculatorului nu rmn dect
variabilele de ieire ale acesteia.
astfel:
1.
2.
Meniul principal
Din meniul principal se pot seta anumite proprieti, legate de formatul dorit la afiare, fonturi i opiuni de copiere.
Pentru aceasta se selecteaz FilePreferences.
1
MATLAB-ul lucreaz cu dou tipuri de ferestre: o fereastr de comenzi i una de reprezentri grafice. La un moment
dat poate fi deschis numai o fereastr de comenzi. Fereastra grafic este utilizat n reprezentarea grafic a datelor; pot fi
deschise mai multe ferestre grafice n acelai timp. Selectarea ferestrei grafice se face n modul urmtor: FileNewFigure.
Pe monitor va apare o fereastr grafic ca n figura 4.
3. Fiiere MATLAB
Fiierele MATLAB *.m pot fi privite ca macro-uri ale comenzilor MATLAB salvate n fiiere cu extensia .m, adic
numefisier.m. Un fiier *.m poate fi o funcie cu variabile de intrare i ieire sau o list de comenzi.
MATLAB-ul cere ca fiierele *.m s fie salvate fie n directorul de lucru, fie ntr-un director care este specificat n lista
cilor din MATLAB. Pentru a putea accesa fiierul *.m dintr-un anumit director, trebuie s adugam directorul/fiierul la calea
MATLAB. Acest lucru se realizeaz astfel: se apas butonul Browse for folder, se caut directorul dorit, iar apoi se confirm cu
OK, ca n figura 5.
Figura 5.
Comanda addpath nume_director adaug directorul nume_director la calea curent din MATLAB. Aceast comand este
echivalent cu procedura prezentat anterior de adugare a unei noi ci.
Fiierele MATLAB pot utiliza variabile definite de utilizator, variabile definite cu comanda input. S presupunem c
dorim s rulm un fiier MATLAB pentru diferite valori ale unei variabile N. Atunci, n fiierul MATLAB, se utilizeaz urmtoarea
comand:
N = input(N=)
4. Definirea variabilelor
Variabilelor li se atribuie valori numerice, tiprindu-se direct expresia numeric. Dac se tasteaz n linia de comand:
>> var1=1+2;
Unei variabile i se poate atribui o formul ce utilizeaz operatorii aritmetic definii n MATLAB (vezi tabel 1), i una sau
mai multe mrimi definite anterior chiar n cadrul comenzii curente. De exemplu, presupunnd c var1 este definit anterior:
va returna valoarea:
var2=
81
Semnificaie
Adunare
Scdere
nmulire
nmulire ntre dou matrici (sau vectori) element cu element
mprire
mprire ntre dou matrici (sau vectori) element cu element
Ridicare la putere
Ridicare la putere a unei matrici (sau vector) element cu element
Transpunere i conjugare
Transpunere
Specificarea ordinii de evaluare a operaiilor
Tabel 1. Operatori aritmetici n MATLAB
n MATLAB exist variabile predefinite acestea nu pot fi declarate i sunt accesibile global n orice fiier *.m. Aceste
variabile speciale sunt introduse n mod obinuit n construciile funciilor MATLAB, ele returnnd valorile scalare utile. Cteva
dintre variabilele i constantele speciale sunt:
ans variabil creat automat n care este returnat rezultatul unui calcul, atunci cnd expresia nu a avut asignat
un nume;
Dac se tasteaz direct n fereastra de comand:
4
obinem
ans =
3
>> x = 2
x=
2
eps variabil permanent n care este memorat eroarea relativ pentru calculele efectuate n virgul mobil.
Valoarea implicit este 2.2204e-016, dar poate fi redefinit la orice alt valoare;
pi variabil permanent care are asignat valoarea = 3.141592653589 ;
i=
NaN variabil folosit pentru reprezentarea lui Not-a-Number, n aritmetica IEEE, rezultat al mpririi
nedefinite 0.0 0.0 .
Utilizatorul poate defini i alte variabile, cu ajutorul unor funcii predefinite.
p = pi;
% nu se va afia valoarea p (dar exist n memorie).
q = pi/2
% va afia valoarea q.
% r = pi/4
% nu se ia n considerare aceast linie.
v = r/2
% va rezulta o eroare deoarece nu l cunoate pe r.
s = 1+2+3+... enter % instruciunea se continu i pe linia urmtoare.
4+5+6
1.
2.
3.
4.
sin sinus;
cos cosinus;
cot cotangenta;
sec secanta;
csc cosecanta.
asin arcsinus;
acos arccosinus;
atan arctangenta;
atan2 arctangenta pentru argument complex;
acot arccotangenta;
asec arcsecanta;
acsc arccosecanta.
2
>> A = [1, 2, 3; 4, 5, 6]
A=
1 2 3
4 5 6
>> A = [1 2 3; 4 5 6]
A=
1 2 3
4 5 6
>> A = [1 2 3 enter
4 5 6]
A=
1 2 3
4 5 6
>> B = [7 8 9]
Sintaxe:
M(i, j );
M(i);
v(i);
>> A(1, 3)
ans =
3
>> A(2)
ans =
4
Pentru o matrice M:
% reprezint elementul din matricea M corespunztor liniei i i coloanei j;
% reprezint elementul i din matrice, numrarea elementelor fcndu-se pe coloane.
Pentru un vector v:
% reprezint elementul de pe poziia i din vector.
Pentru A, B i C definite anterior verificai:
Dac dorim s schimbm elementele unei matrici sau s adugm alte elemente, fr a rescrie ntreaga matrice, se
procedeaz astfel:
>> A(1, 3) = 0
A=
1 2 0
4 5 6
>> A(3, 3) = -2
A=
1 2 0
4 5 6
0 0 -2
>> C(3) = 1
C=
-1
-2
1
Se pot construi matrici de dimensiuni mai mari pornind de la matrici de dimensiuni mai reduse. Pentru exemplificare,
vom folosi matricea A i vectorii B i C n ultima lor form (A 3 3 , B 1 3 , C 3 1 ):
>> D = [A; B]
D=
1 2 0
4 5 6
0 0 -2
7 8 9
>> E = [A, C]
E=
1 2 0 -1
4 5 6 -2
0 0 -2 1
Verificai sintaxele de mai sus folosind matricea A i vectorii B i C din exemplele anterioare sau construind alte matrici i
vectori.
Sintaxe:
>> v = 1:10:40
v=
1 11 21 31
>> u = 2:8
u=
2 3 4 5 6 7 8
>> d = 20:-2:2
d=
20 18 16 14 12 10
>> l = linspace(4, 16, 4)
l=
4 8 12 16
>> q = linspace(pi, -pi, 3)
2.
Matricea goal
Sintax:
x = []
>> x = []
x=
[]
3.
Matricea unitate
Sintaxe:
ones(n);
ones(m, n);
ones(size(M));
>> ones(2)
ans =
1 1
4.
Matricea zero
Sintaxe:
zeros(n);
zeros(m, n);
zeros(size(M));
zeros(4)
zeros(1, 3)
>> zeros(5, 2)
ans =
0 0
0 0
0 0
0 0
0 0
zeros(3, 1)
zeros(size(D))
5.
Matricea diagonal
Dac v este un vector (linie sau coloan) i M este o matrice, atunci avem urmtoarele sintaxe:
% returneaz o matrice ptrat diagonal, cu elementele vectorului v pe diagonala principal;
% returneaz o matrice ptrat cu elementele vectorului v pe diagonala k deasupra celei
% principale, dac k>0, sau sub cea principal dac k<0;
% restul elementelor sunt 0.
diag(M);
% returneaz un vector coloan ce conine elementele de pe diagonala principal a matricii M;
diag(M, k);
% returneaz un vector coloan ce conine elementele din matricea M de pe diagonala k
% deasupra celei principale, dac k>0, sau sub cea principal, dac k<0.
diag(v);
diag(v, k);
cu urmtoarele semnificaii:
function cuvnt cheie care declar fiierul ca fiier funcie (obligatoriu);
nume numele funciei; reprezint numele sub care se salveaz fiierul *.m (extensia .m nu face parte din nume);
acest nume nu poate fi identic cu cel al unui fiier *.m deja existent;
parametrii_iesire reprezint parametrii de ieire ai funciei; trebuie separai prin virgul i cuprini ntre
paranteze drepte; dac funcia nu are parametri de ieire, parantezele drepte i semnul egal nu mai au sens;
parametrii_intrare reprezint parametrii de intrare ai funciei; trebuie separai prin virgul i cuprini ntre
paranteze rotunde; dac funcia nu are parametri de intrare, parantezele rotunde i semnul egal nu mai au sens.
9
Exerciiu: Realizai o funcie care calculeaz media aritmetic a elementelor unui vector. Apelai aceast funce din linia de
comand.
Sintaxe:
if expresie_logica
grup_instructiuni
end
if expresie_logica_1
grup_instructiuni_A
else
grup_instructiuni_B
end
% dac expresie_logica_1 este adevrat, se execut grup_instructiuni_A dintre
% instruciunea if i clauza else;
% dac expresie_logica_1 este fals, se execut grup_instructiuni_B dintre clauza
% else i instruciunea end;
Dac funcia de calculat are mai multe nivele de instruciuni if-else, este dificil determinarea expresiei logice
adevarate, care selecteaz grupul de istruciuni ce urmeaz a fi executat. n acest caz se folosete clauza elseif.
Sintax:
if expresie_logica_1
grup_instructiuni_A
elseif expresie_logica_2
grup_instructiuni_B
elseif expresie_logica_3
grup_instructiuni_C
end
% dac expresie_logica_1 este adevrat, se execut numai grup_instructiuni_A;
% dac expresie_logica_1 este fals i expresie_logica_2 este adevrat, se execut
% numai grup_instructiuni_B;
% dac expresie_logica_1 este fals i expresie_logica_2 este de asemenea fals, iar
% expresie_logica_3 este adevrat, se execut doar grup_instructiuni_C;
% dac mai multe expresii logice sunt adevrate, prima instruciune logic adevrat
% determin care grup de instruciuni este executat prima dat;
% dac toate expresiile logice sunt false, nu se execut nici un grup de instruciuni din
% structura if;
2.
Sintax:
Instruciunea for permite repetarea unui grup de instruciuni (din corpul buclei) de un anumit numr de ori.
final initial
% cu n
=
+ 1 , unde prin [ ] s-a notat valoarea ntreag a numrului;
pas
La utilizarea buclei for trebuie respectate urmtoarele reguli: indexul buclei for trebuie s fie o variabil; dac expresia
este o matrice goal, bucla nu se execut. Se va trece la urmtoare instruciune dup instruciunea end; dac expresia este un
scalar, bucla se execut o singur dat, cu indexul dat de valoarea scalarului; dac expresia este un vector linie, bucla se
execut de un numr de ori egal cu numrul elementelor din vector, de fiecare dat indexul avnd valoarea egal cu urmtorul
element din vector; dac expresia este o matrice, indexul va avea la fiecare iteraie valorile coninute n urmtoarea coloan a
matricii; la terminarea ciclurilor for, indexul are ultima valoare utilizat.
10
Instruciunea while este o structur care se folosete pentru repetarea unui set de instruciuni, att timp ct o condiie
specificat este adevrat.
Sintax:
while expresie
grup_instructiuni
end
4.
Instruciunea break
Instruciunea break se utilizeaz pentru a iei dintr-o bucl nainte ca aceasta s se fi terminat. Se recomand utilizarea
acesteia la detectarea unei condiii de eroare n interiorul buclei. Instruciunea break nceteaz execuia ciclurilor for i while. n
cazul unor cicluri imbricate, break comand ieirea din ciclul cel mai interior.
Sintax:
break
5.
n cadrul unui algoritm, de multe ori este necesar o selecie a grupului de instruciuni ce urmeaz a fi executate,
condiionat de valoarea de adevr a unei expresii. Instruciunile condiionale folosesc operatori relaionali i operatori logici.
n MATLAB exist ase operatori relaionali utilizai pentru a compara dou matrici de dimensiuni egale (vezi tabelul
2).
Operatori relaionali
Semnificaie
<
mai mic
<=
mai mic sau egal
>
mai mare
>=
mai mare sau egal
==
identic
~=
diferit
Tabel 2. Operatori relaionali n MATLAB
Operatorii relaionali compar dou matrici sau dou expresii matriceale, element cu element. Acetia returneaz o
matrice cu dimensiunea egal cu acea a matricilor care se compar, cu elementele
1 dac relaia este ADEVRAT;
0 dac relaia este FALS.
Pentru combinarea a dou sau mai multor expresii logice se folosesc operatorii logici din tabelul 3.
Operatori logici
Semnificaie Prioritate
~
NU
1
&
I
2
|
SAU
3
Tabel 3. Operatori logici n MATLAB
9. Reprezentri grafice
1.
Sintaxe:
Dac x i y sunt doi vectori de aceeai lungime i N este o matrice de aceeai dimensiune cu matricea M:
% se vor reprezenta grafic elementele vectorului y n funcie de elementele vectorului x;
% dac lungimea vectorului x nu este egal cu lungimea vectorului y reprezentarea nu este
% posibil.
plot(x, M);
% dac lungimea vectorului x este egal cu numrul de linii al matricii M, atunci se vor
% reprezenta pe acelai grafic coloanele matricii M n funcie de elementele vectorului x;
% dac lungimea vectorului x este egal cu numrul de coloane al matricii M atunci se vor
% reprezenta pe acelai grafic liniile matricii M n funcie de elementele vectorului x;
% dac lungimea vectorului x nu este egal cu una dintre dimensiunile matricii M, atunci
plot(x, y);
11
plot(M, N);
Pentru reprezentarea mai multor grafice n aceeai fereastr, utiliznd o singur comand, folosim:
Se pot folosi diverse linii, markere i culori pentru reprezentarea graficelor (vezi tabelul 4).
-:
-.
Tip linie
continu
ntrerupt
punctat
linie-punct
Tip marker
Culoare
r rou
plus
g verde
cerc
b albastru
stelu
c cyan
punct
m magenta
cruce
y galben
ptrat
k negru
romb
w alb
triunghi orientat cu vrful n sus
triunghi orientat cu vrful n jos
triunghi orientat cu vrful spre dreapta
triunghi orientat cu vrful spre stnga
stea cu cinci vrfuri
stea cu ase vrfuri
Tabel 4. Linii, markere i culori pentru reprezentarea grafic n MATLAB
+
o
*
.
x
cross sau s
diamond sau d
^
v
>
<
pentagram sau p
hexagram sau h
Observaie: Funcia stem realizeaz o reprezentare n form discret a datelor. Vezi help stem.
2.
Dac dorim ca fereastra grafic s conin mai multe reprezentri grafice se poate folosi funcia subplot (mparte
fereastra grafic n mai multe subferestre - n fiecare dintre acestea putnd fi plasat cte un grafic). Fereastra grafic este
privit astfel sub forma unei matrici cu m linii i n coloane, deci n total mxn subferestre [13]. Numrarea acestor subferestre
se face pe linii. Dac vrem s mprim fereastra grafic n 3 3 =
9 subferestre vom avea:
1
4
7
Sintax:
subplot(m, n, p);
3.
2
5
8
3
6
9
% mparte fereastra grafic ntr-o matrice mxn (mxn subferestre) iar p reprezint numrul
% fiecrei subferestre n matricea grafic respectiv (numrarea se face pe linii);
% sintaxa respectiv este urmat de comanda propriu- zis de afiare a graficului, care poate
% fi oricare din cele prezentate (stem, plot, loglog, semilogx, semilogy).
Dac se dorete vizualizarea numai a unei anumite poriuni dintr-un grafic, corespunztoare unor anumite intervale
pe abscis i ordonat, se va folosi comanda axis.
Sintax:
axis([x0 x1 y0 y1]);% pe abscis se va vizualiza ntre valorile x0 i x1, iar pe ordonat ntre y0 i y1;
% aceast sintax se plaseaz dup comanda de reprezentare grafic.
4.
Precizarea titlului graficului i a etichetelor axelor. Trasarea unei reele pe grafic. Plasarea unui text pe grafic
Sintaxe:
title(text);
xlabel(text);
ylabel(text);
grid;
gtext(text);
12
Dac dorim s reinem graficul curent i s adugm n aceeai fereastr grafic urmtoarele reprezentri grafice se
poate folosi funcia hold.
Sintaxe:
hold on;
% reine graficul curent i adaug n aceeai fereastr grafic urmtoarele reprezentri grafice;
hold off;
% dac se dorete n continuare reprezentarea n ferestre grafice separate (dezactiveaz comanda hold on).
Dac se dorete n cadrul unui program reprezentarea mai multor grafice n ferestre separate, fiecare comand grafic
va trebui s fie precedat de un nume de forma figure(n), unde n este numrul figurii respective. n caz contrar, la sfritul
execuiei programului va aprea numai ultima reprezentare grafic (se va folosi o singur fereastr grafic ce va fi tears de
fiecare dat la ntlnirea unei noi comenzi grafice).
Exerciiu: S se reprezinte grafic funcia f ( t ) = sin ( 2 0.2t ) , cu culoarea albastr i linie-plus i g ( t ) = 1 f ( t ) cu linie-stelu
de culoare roie. S se scrie titlul f(t) = sin(2 \pi 0.2 t) si g(t) = 1 - f(t) pe axa x s se scrie timp, iar pe axa y s se scrie
Amplitudine. Pentru reprezentarea grafic se vor folosi att funcia plot (subfereastra 211), ct i funcia stem (subfereastra
212).
>> t = 0:0.1:5;
f = sin(2*pi*0.2*t);
g = 1-f;
figure(1); subplot(211); plot(t, f, '-+b', 'LineWidth', 1.5);
hold on
plot(t, g, '-*r', 'LineWidth', 2);
hold off; grid;
l1 = legend('f(t)', 'g(t)', 0);
title('f(t) = sin(2 \pi 0.2 t) si g(t) = 1 - f(t)');
ylabel('Amplitudine');
subplot(212); stem(t, f, 'ob', 'LineWidth', 1.5);
hold on
stem(t, g, '^r', 'LineWidth', 2);
hold off; grid;
l2 = legend('f(t)', 'g(t)', 0);
xlabel('timp'); ylabel('Amplitudine');
13