Sunteți pe pagina 1din 9

Introducere n MATLAB

1. Descrierea pachetului de programe MATLAB


1.1 Introducere
MATLAB este un mediu de programare destinat dezvoltrii de aplicaii matematice i reprezentrilor grafice evoluate. El este alctuit dintr-un kit de baz ce cuprinde un numr mare de funcii generale i o serie de pachete de programe auxiliare (toolbox-uri) destinate diferitelor tipuri de aplicaii: analiz numeric, prelucrarea semnalelor, simularea sistemelor dinamice, control i optimizare, prelucrri de imagine, reele neuronale artificiale etc. MATLAB este n esen un limbaj de programare de nivel nalt ce are ca element principal de lucru matricea; de fapt numele su provine de la expresia MATrix LABoratory, ceea ce justific afirmaia anterioar. El are numeroase modaliti de a rezolva o gam extrem de larg de probleme matematice prin intermediul notaiilor matriceale. Precizm astfel c un simplu numr, deci un scalar (de exemplu 15) este stocat n MATLAB ca o matrice 1x1, iar un vector este o matrice 1xN sau Nx1, unde N este numrul de elemente din vector. O matrice se poate stoca ca o variabil creia i se d un nume. De notat c numele variabilelor ce sunt utilizate n MATLAB trebuie s nceap cu o liter, urmat de litere, cifre i simbolul _ (underscore), pot cuprinde ntre unul i 31 de caractere (semnele de punctuaie, de exemplu punctul sau virgula, nu se folosesc, deoarece multe dintre ele au o semnificaie special n MATLAB). Reamintim c, uzual, pentru matrice se utilizeaz majuscule, iar pentru vectori minuscule. Prima fereastr care apare la invocarea programului este fereastra de comand (Command Window), promptul fiind simbolul >>. n aceast fereastr se poate introduce orice comand MATLAB; de obicei ns ea este utilizat doar pentru comenzi simple (urmate de apsarea tastei <Enter>), ca de exemplu modificarea directorului curent, investigarea spaiului de lucru (Workspace), comanda help, calcule elementare, sau vizualizarea unor rezultate numerice i/sau a mesajelor de eroare dup rularea unui program. Programele realizate de utilizator se scriu uzual folosind fiiere de tip script i folosind editorul ncorporat.

1.2 Fiiere script i funcii


MATLAB are dou modaliti de salvare a secvenelor de comenzi ca fiiere standard: script-uri i funcii. Un script execut o secven de comenzi MATLAB n acelai mod n care ele ar fi introduse direct n fereastra de comand. O funcie difer de un script prin faptul c primete intrri i ntoarce ieiri. a) Pentru a crea un fiier script, se deschide din meniul general fereastra de editare (de exemplu File, New, M-file). Recomandm ca prima linie din program s fie un comentariu (el este precedat n MATLAB de simbolul %), apoi pe urmtoarele dou linii s apar comenzile close all (se nchid astfel toate ferestrele grafice deschise anterior) i respectiv clear all (se terg toate variabilele i funciile existente n spaiul de lucru curent). Dup ce se ncheie editarea programului ce conine codul surs, fiierul se salveaz printr-un nume n directorul curent, folosind comenzile Save As... sau Save din meniul File. Fiierul astfel rezultat va avea extensia .m, iar rularea sa se poate face fie tastnd (doar) numele n fereastra de comand, fie folosind comenzile speciale din meniul editorului. Dup inspectarea rezultatelor din fereastra de comand sau a graficelor rezultate n urma rulrii, se poate reintra in editor i modifica astfel fiierul. 1

Observaie: dac vor exista cel puin dou fiiere cu acelai nume, se va executa cel ce apare primul n calea implicit de cutare din MATLAB. n interiorul fiierului script, se pot accesa variabile definite anterior n MATLAB. Toate variabilele din fiierul script sunt variabile globale, ceea ce nseamn c dup execuia fiierului script aceste variabile pot fi accesate i din linie de comand. b) Pentru a crea o funcie denumit, de exemplu, func, trebuie creat mai nti fiierul denumit func.m. Prima linie din acest fiier trebuie s fie: function <output> = func(<input>) unde <input> desemneaz setul de variabile de intrare, iar <output> reprezint variabilele de ieire. Restul fiierului funcie va conine secvena de comenzi dorit. Toate variabilele din interiorul funciei sunt variabile locale. Acest lucru va avea ca urmare, pe de-o parte, faptul c dup executarea funciei nu mai putem avea acces la variabilele sale interne, i pe de alt parte faptul c funcia nu poate accesa alte variabile create anterior n spaiul de lucru, dac acestea nu sunt oferite funciei ca intrri.

1.3 Matrice i vectori


Observaie: toate exemplele din aceast seciune vor fi executate din linie de comand! Dup cum s-a artat n Seciunea 1.1, n MATLAB toate variabilele sunt definite, n principiu, ca matrice. Matricele i vectorii utilizeaz parantezele drepte pentru introducerea elementelor lor. Valorile de pe linii se separ prin spaii sau virgul, iar liniile se separ prin punct i virgul. Ex. 5 Introducei urmtoarele comenzi: A = [4 7; 5 8; 6 9] %se creeaza o matrice cu 3 linii si 2 coloane B = [1,2,3;4,5,6] a = [1; 2; 3] %se creeaza o matrice cu 2 linii si 3 coloane %se creeaza un vector coloana cu 3 elemente

b = [-5 4 0 34 1] %se creeaza un vector linie cu 5 elemente Aflai dimensiunile matricelor A i B i ale vectorilor a i b, utiliznd comenzile size i respectiv length. Indicii tablourilor n MATLAB ncep de la 1, i nu de la 0, ca de exemplu n limbajul C. Prin urmare, valoarea 1 din vectorul a reprezint elementul cu indice 1, iar valoarea 34 din vectorul b reprezint elementul cu indice 4. Pe lng utilizarea lor curent n funcii, parantezele rotunde sunt folosite i pentru a desemna elemente sau poriuni dintr-o matrice (vezi ex. 6). Simbolul : este utilizat pentru a descrie liste de numere succesive egal distanate, forma general fiind: start:pas:stop (dac valoarea pasului se omite, se consider implicit c acesta este 1). Aceasta reprezint practic a doua modalitate de a crea vectori n MATLAB, pe lng introducerea element cu element, aa cum a fost descris anterior (vezi ex. 6). Operaia de transpunere se realizeaz n MATLAB folosind simbolul (apostrof). Atunci cnd este utilizat un punct, . , nainte de un operator (ca de exemplu .* ), MATLAB va realiza operaia respectiv element cu element (de exemplu nmulind elementele corespunztoare, spre deosebire de nmulirea clasic a matricelor sau vectorilor). 2

Ex. 6 Introducei urmtoarele comenzi i interpretai rezultatele obinute: A(2,1) b(1) C = B(1:2,2:3) c = b(1:3) v1 = 1:3:20 v2 = 6:-2:1 v3 = 0:4 v3(1) v4 = 3:-3 v5 = 0.1:0.1:1.2 D = A d = v3 v6 = [1; 3; 5; 7; 9] %se creeaza un vector linie cu 5 elemente rezultat1 = b*v6 rezultat2 = b*v6 rezultat3 = b.*v6 rezultat4 = b.*v6 v7 = v3./2 v8 = v3.^2 %inmultire matriceala %inmultirea nu este posibila! interpretati %mesajul de eroare (tastati whos!) %inmultire element cu element %inmultirea nu este posibila! interpretati %mesajul de eroare (tastati whos!) %se imparte la 2 fiecare element din v3 %se ridica la patrat fiecare element din v3 %se copiaza in vectorul c primele trei %elemente din vectorul b %ultima valoare din v1 va fi 19, nu 20!

1.4 Structuri de control


Observaie: toate exemplele din aceast seciune vor fi executate din linie de comand! MATLAB utilizeaz patru tipuri de structuri de control a execuiei instruciunilor: ciclu cu contor, for; ciclu cu test iniial, while; structura de decizie, if-else-end; structura de selecie, switch-case. Ex. 7 Introducei urmtoarele comenzi i interpretai rezultatul obinut: n = 10; for j = 1:n x(j) = j^2; end x Ex. 8 Introducei urmtoarele comenzi i interpretai rezultatul obinut: for n = 1:5 for m = 5:-1:1 M(n,m) = n^2 + m^2; 3

end disp(n) end M help disp Ex. 9 Introducei urmtoarele comenzi i interpretai rezultatul obinut: k = 1; k = k/2; if k <= 0.0015 k = k*2 break end end num help break for num = 1:100

1.4 Grafice 2-D


MATLAB are un numr mare de unelte grafice puternice i performante pentru trasarea grafic i vizualizarea rezultatelor unor analize. Vom exemplifica n aceast seciune utilizarea de baz a comenzilor plot, stem i subplot. Comenzile plot i stem pot primi un numr variabil de argumente de intrare; pentru detalii introducei n linie de comand help plot i help stem. Comanda plot deschide o fereastr grafic (denumit Figure), scaleaz automat axele pentru o ncadrare optim, aeaz punctele i apoi traseaz graficul prin conectarea punctelor prin linii drepte (practic o interpolare liniar). Comanda stem acioneaz similar, dar creeaz un grafic format din bare verticale de mrimi egale cu valorile ordonatelor punctelor de analiz; ca atare, ea este extrem de util pentru reprezentrile grafice n domeniul discret. De notat c pentru pstrarea ultimului grafic i afiarea urmtorului ntr-o nou fereastr grafic, trebuie introdus comanda figure. Pe lng posibilitile de afiare simultan a mai multor diagrame ntr-o fereastr grafic unic (aa cum se va arta n laboratoarele urmtoare), este interesant faptul c MATLAB poate reprezenta mai multe grafice distincte ntr-o aceeai fereastr grafic, sub forma unei matrice de grafice de aceleai dimensiuni, folosind comanda subplot. Ea primete ca argumente numrul de linii i de coloane ale matricei de grafice, ca i numrul curent al graficului afiat i se poate utiliza cu oricare dintre funciile grafice disponibile n MATLAB. Ex. 10 Creai un fiier script cu numele ex10.m (dup indicaiile din Seciunea 1.2), care s cuprind urmtoarea succesiune de comenzi (utilizai help pentru a afla detalii despre toate comenzile noi din acest program): %Exemplul 10 (fisier script) %Reprezentarea functiei rationale y = x/(1+x^2); x >= -2, x <= 2 close all clear all

x = linspace(-2,2,50); y = x./(1+x.^2); plot(x,y,'r') title('Test1 - plot') axis([-2,2,-0.8,0.8]) xlabel('x') ylabel('y') grid figure stem(x,y,'b') title('Test2 - stem') axis([-2,2,-0.8,0.8]) xlabel('x') ylabel('y') grid figure subplot(2,1,1), plot(x,y,'r') title('Test3 - subplot') axis([-2,2,-0.8,0.8]) xlabel('x') ylabel('y') grid subplot(2,1,2), stem(x,y,'b') axis([-2,2,-0.8,0.8]) xlabel('x') ylabel('y') grid

2. Generarea i reprezentarea n domeniul timp a secvenelor discrete (semnale discrete n timp)


Observaie: O secven de date este un semnal discret n timp reprezentat printr-o succesiune de numere x, al n-lea numr fiind notat cu x (n), n Z . n prima parte a acestei discipline vom discuta despre secvene ca fiind semnale discrete n timp, cu amplitudine continu, gndind astfel de semnale ca fiind un caz limit al celor digitale i ignornd, deocamdat, efectul cuantizrii i codificrii amplitudinii semnalelor cu un numr finit de bii (acest efect va fi studiat separat). Dei semnalul discret n timp poate s nu provin din eantionarea unui semnal analogic, x (n) este denumit, prin convenie, eantionul numrul n al secvenei. Semnalele discrete n timp au n mod uzual ca variabil mrimea nTe , unde Te este perioada de eantionare a semnalului analogic. Totui, deoarece n multe calcule nu intervine efectiv intervalul temporal ntre dou eantioane, vom lucra deseori cu variabila general n Z , adimensional n aceast convenie, semnalul discret devenind astfel o secven abstract (acelai lucru se obine dac se consider o normare unitar a axei timpului, deci Te 1 ). n cazul n care vom dori punerea n eviden a dimensiunii timp, vom nlocui pe n cu nTe , variabila recptnd astfel unitatea de msur secund. 5

Ex. 11 a. S se genereze i s se reprezinte grafic o secven impuls-unitate, definit pe 11 eantioane, n [0, 10] (se va crea un fiier script). b. Aceleai cerine pentru secvena impuls-unitate ntrziat cu 4 eantioane. Rezolvare: %Exemplul 11 %Reprezentarea unor secvente impuls-unitate close all clear all n = 0:10; delta = [1 zeros(1,10)]; %help zeros %O alta modalitate (evident mai complicata): %delta = [1 0 0 0 0 0 0 0 0 0 0]; delta1 = [zeros(1,4) 1 zeros(1,6)]; subplot(2,1,1), stem(n,delta,'filled') axis([0 10 0 1.2]) title('Secvente impuls-unitate') xlabel('n') ylabel('delta(n)') subplot(2,1,2), stem(n,delta1,'filled') axis([0 10 0 1.2]) xlabel('n') ylabel('delta(n-4)') Ex. 12 a. S se genereze i s se reprezinte grafic o secven treapt-unitate, definit pe 21 eantioane n [0, 20] (se va crea un fiier script). b. Aceleai cerine pentru secvena treapt-unitate ntrziat cu 8 eantioane. Rezolvare: %Exemplul 12 %Reprezentarea unor secvente treapta-unitate close all clear all n = 0:20; treapta = ones(1,21); %help ones %Sau: %treapta = [ones(1,21)]; treapta1 = [zeros(1,8) ones(1,13)];

subplot(2,1,1), stem(n,treapta,'filled') axis([0 20 0 1.2]) title('Secvente treapta-unitate') xlabel('n') ylabel('u(n)') subplot(2,1,2), stem(n,treapta1,'filled') axis([0 20 0 1.2]) xlabel('n') ylabel('u(n-8)') Observaie: n orice moment al rulrii unui program, execuia acestuia se poate ntrerupe utiliznd combinaia de taste CTRLC (uneori, apsarea acestor taste trebuie fcut de mai multe ori pentru a iei din program!). Acest lucru poate fi necesar, de exemplu, dac s-a omis un ; la finalul unei comenzi ce genereaz un numr foarte mare de valori, dac programul a rmas ntr-o bucl infinit etc.

Ex. 13 S se genereze i s se reprezinte grafic o secven exponenial real, definit astfel: x ( n) e n , n [0, 15] (16 eantioane); se va crea un fiier script. Rezolvare: %Exemplul 13 %Reprezentarea unei secvente exponentiale reale close all clear all n = 0:15; x = exp(-n/3); %help exp stem(n,x,'filled') axis([0 16 0 1.2]) title('Secventa exponentiala reala') xlabel('n') ylabel('x')

Ex. 14 S se genereze i s se reprezinte grafic dou secvene sinusoidale, astfel: prima are frecvena fundamental de 50 Hz, faza 0 i amplitudinea 1, iar a doua are frecvena de 200 Hz, faza 0 i amplitudinea 1.5 (se va crea un fiier script). S se reprezinte cele dou secvene pe durata a 21 de eantioane; se cunoate faptul c frecvena de eantionare a semnalelor este 1 kHz. Problem: determinai prin calcul numrul de perioade ce va fi afiat n fereastra grafic pentru fiecare dintre cele dou sinusoide. Rezolvare: %Exemplul 14 %Reprezentarea unor secvente sinusoidale 7

close all clear all %Fe = 1 kHz; Te = 1/Fe = 1 ms (= 0.001 s) %durata = 20*0.001 = 0.02 s n = 0:.001:.02; s1 = sin(2*pi*50*n); s2 = 1.5*sin(2*pi*200*n); subplot(2,1,1), stem(n,s1,'filled') axis([0 .02 -1.5 1.5]) title('Secvente sinusoidale') xlabel('timp [s]') ylabel('s1') subplot(2,1,2), stem(n,s2,'filled') axis([0 .02 -1.5 1.5]) xlabel('timp [s]') ylabel('s2')

Ex. 15 S se genereze i s se reprezinte grafic dou secvene de tipul sinc, astfel: pentru prima secven se va utiliza funcia MATLAB sinc, graficul se va trasa pe un interval simetric n jurul originii axelor, folosind stem i apoi plot; a doua secven, de argument pozitiv, se va genera utiliznd definiia clasic a funciei sinc, se va folosi plot, apoi se va genera aceeai secven n modul. Se va crea un singur fiier script pentru toatele punctele problemei. Rezolvare: %Exemplul 15 %Reprezentarea unor secvente de tip sinc close all clear all xs = linspace(-4,4); ys = sinc(xs); %help linspace %help sinc

subplot(2,1,1), stem(xs,ys,'filled') grid subplot(2,1,2), plot(xs,ys) grid figure x = pi/100:pi/100:10*pi; y = sin(x)./x; 8

subplot(2,1,1), plot(x,y) grid subplot(2,1,2), plot(x,abs(y)) grid

%help abs

S-ar putea să vă placă și