+ All Categories

matlab

Date post: 15-Nov-2015
Category:
Upload: dragosvoinea96
View: 13 times
Download: 4 times
Share this document with a friend
Description:
9
56
Elemente de practica programarii MATLAB
Transcript
  • Elemente de practica programarii

    MATLAB

  • Introducere n MATLAB

    n prezent utilizarea limbajelor de programare este fcut prin intermediul unor medii de programare, care ofer programatorului pe lng limbaj i posibiliti facile de lucru:- scrierea rapid a programului (un editor de texte);- utilizarea unor funcii speciale (biblioteci de programe);- verificarea sintaxei (prin compilare);- executarea programului (prin compilare i lansare n execuie);- testarea funcionrii corecte a programului (execuie sub control pas cu pas);

    Aceste avantaje fac din programare o activitate plcut i abordabil i de specialitii altor domenii de activitate dect cel al informaticii.

  • Un exemplu de astfel de mediu de lucru este MATLAB (MATrix LABoratory), un program interactiv pentru rezolvarea de probleme stiinifice. Aplicaiile includ: calcul matriceal; gsirea rdcinilor ecuaiilor polinomiale; analiza i prelucrarea numeric a semnalelor; reprezentri grafice att n dou ct i n trei dimensiuni; analiza i prelucrarea numeric a imaginilor;

    De la an la an firma productoare (MathWorks, 1984, SUA - http://www.mathworks.com/) adaug funcii noi, organizate n aa numitele Toolbox-uri, seciuni care grupeaz instrumente ce pot rezolva problemele specifice unui domeniu de activitate. Utilizatorului nu-i rmne dect sarcina de a studia posibilitile oferite i de a le aplica prin programe simple.

  • Fereastra de lucru in modul comanda:

  • Folosirea comenzii help

    help disp DISPDisplays a matrix as text. DISP(X) displays the matrix, without printing the matrix name. If X contains text, the text is displayed.n exemplul anterior sunt cerute informaii despre comanda de afiare disp. Remarcm explicaiile i faptul c dei am cerut informaii despre disp, ni s-au dat informaii despre DISP. Am putea trage concluzia c nu are importan cu ce fel de litere scriem. FALS, comenzile sunt case sensitive, i trebuie date cu litere mici. Help-ul a folosit litere mari pentru a fi distinse mai uor explicaiile de numele comenzii.

  • Folosirea comenzii help

  • Variabile MATLABPrin variabile nelege denumirea locaiilor de memorie n care sunt stocate mrimile ce sunt folosite de program. Acestea n general sunt definite de programator, n Matlab ns, pentru a fi uurat munca utilizatorului, apar i generri automate de variabile.

    Exemplu, tastm 2+3 i s acionm tasta enter. 2+3ans = 5Matlab-ul face calculul i ne afieaz rezultatul ca valoare a variabilei ans. Deci nici pentru calcule directe Matlab-ul nu renun la utilizarea variabilelor!

  • Definirea unui nume de variabilNumele de variabile nu trebuie s depeasc 19 caractere (ce este suplimentar nu este luat n considerare). Caracterele permise sunt literele alfabetului englez, cifrele de la 0 la 9 i semnul _ (subliniere).

    Atenie, numele de variabile sunt case senzitive! De exemplu, "VaRIAbiLa_V", "variabila_v", "VARIABILA_V" i "variabila_V" sunt considerate de Matlab variabile distincte!

  • Matricea, structura de baz a variabilelor Matlab

    S generm de exemplu variabila g: g=2; whos Name Size Elements Bytes Density Complex g 1 by 1 1 8 Full No Grand total is 1 elements using 8 bytes(Comanda whos este ne d informaii despre variabilele existente)

  • Fiind deja generat ca matrice (i neavnd specific o dimensiune fix) putem oricnd s-i nbogim numrul de elemente: g(2)=3g = 2 3 g(2,1)=1g = 2 3 1 0 whos Name Size Elements Bytes Density Complex g 2 by 2 4 32 Full No Grand total is 4 elements using 32 bytes

  • Exemplu, generarea matricei m de dimensiune 3 x 5:

    m=[11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35]m = 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35Dac ni se pare mai simplu, putem suplini caracterul separator de linii ; cu apsarea tastei enter. h=[11 12 13 14 1521 22 23 23 25]h = 11 12 13 14 15 21 22 23 23 25

  • Putem obine matrici noi i efectund calcule, ntre elementele similare (element cu element) ale unor matrici cu aceleai dimensiuni. Operatorii utilizai sunt:nmulire element cu element:.*mprire element cu element/Adunare element cu element+Scdere element cu element-Ridicare la putere element cu element .^Exemplu, matricea suma, obinut prin adunarea matricilor a i b: suma=a+bsuma = 11 13 15 17 19 21 23 25 27

  • Un caz particular de matrici sunt vectorii. Putem avea n elemente, dispuse ntr-un vector linie (orizontal), caz n care matricea corespunztoare este de dimensiune 1 x n, sau ntr-un vector coloana (vertical), pentru care matricea corespunztoare este de dimensiune n x 1.Exemplu de generare a unui vector linie: vector_linie=[1 2 3 4 5 6]vector_linie = 1 2 3 4 5 6Exemplu de generare a unui vector coloan: vector_coloana=[7; 8; 9; 10]vector_coloana = 7 8 9 10

  • Introducerea datelorn afar de definirea direct a valorilor variabilelor (prezentat anterior), Matlab-ul poate prelua valori din fiiere sau poate fi fcut s cear actualizarea valorilor unor variabile.Input comand prin care sunt introduse date de la tastaturSintaxvariabil=input('text explicativ') variabila indicat este actualizat numeric, de la tastaturSe pot tasta inclusiv expresii. Pentru a introduce o matrice se indic parantezele.Dac nu se tasteaz nimic nainte de enter, rezultatul este o matrice goal

  • Exemplu: d=input('introduceti matricea d ')introduceti matricea d [1 2 3; 4 5 6]d = 1 2 3 4 5 6

  • Prezentarea rezultatelor i afiarea de mesajeOrice variabil i prezint coninutul la simpla apelare a numelui ei. Numele aprut, urmat de coninut, nu este modul cel mai fericit de comunicare a unor rezultate, utilizatorul poate fi derutat i poate s ntrebe ce este cu valorile prezentate, ce reprezint variabila indicat. Situaii de acest gen trebuiesc evitate i fiecare mrime afiat pe ecran trebuie s fie nsoit de explicaii, succinte dar clare!disp funcie ce tiprete pe ecran, coninutul unei variabile, rezultatul unui calcul sau un text explicativ.Sintax disp(x)disp(sir caractere)disp(expresie numeric)

  • Exemple: disp('un exemplu de matrice 2 x 3 este: ')un exemplu de matrice 2 x 3 este: d=[ 1 2 3 4 5 6];

    disp(d) 1 2 3 4 5 6 disp(2+3*5) 17

  • Programarea in MATLAB Matlab-ul ne ofer varianta memorrii pe disc a succesiunii de comenzi, ntr-un fiier text, avnd extensia .m (numit i fiier M), care poate fi apoi lansat n execuie din fereastra de comenzi. Putem spune c n acest fel alctuim programe (script-uri M) scrise n limbajul Matlab.

  • Lansarea in executie a unui fisier .m

    O variant simpl de indicare a locului este folosirea comenzii cd, prin care ndreptm atenia Matlab-ului spre locul n care se afl fiierul nostru. Exemplu, am construit fiierul calcul.m pe discul d: n subdirectorul amatlab. Putem utiliza succesiunea de comenzi:cd d: cd amatlab calculn loc de tastarea numelui programului exist i o variant alternativ (bun mai ales atunci cnd nu tim precis numele), lansarea din meniul File a comenzii Run M-file.

  • Structuri de controlwhile Instruciune repetitiv, funcie de indeplinirea unei condiii logice se repet execuia unui grup de instruciuniSintaxwhile expresie grup de instruciuni end

    grup de instruciuni este executat atta timp ct expresie este adevrat.

  • Exemplu: Calculul sumei elementelor vectorului v n variabila suma:v=[2 1 5 3 6];n=length(v);suma=0;i=1;while i
  • for Instruciune repetitiv, un grup de instruciuni se execut de un numr cunoscut de oriSintaxfor index=expresie grup de instruciuni end

    grup de instruciuni este executat atta timp ct indexul parcurge expresie.

    De foarte multe ori index=expresie are forma:contor=valoare iniial: pas: valoare final

  • Exemplu:Acelai calcul, al sumei elementelor vectorului v n variabila suma:v=[2 1 5 3 6];n=length(v);suma=0;for i=1:n suma=suma+v(i);enddisp('suma elementelor vectorului este ');disp(suma);Produce efectul:suma elementelor vectorului este 17

  • If Instruciune condiional, funcie de indeplinirea unor condiii logice sunt executate anumite grupuri de instruciuniSintaxVarianta 1if expresie grup de instruciuni endgrup de instruciuni este executat doar dac expresie este adevrat, n caz contrar nu se execut nimic.

  • Varianta 2if expresie grup de instruciuni 1else grup de instruciuni 2endgrup de instruciuni1 este executat dac expresie este adevrat, n caz contrar se execut grup de instruciuni 2.

  • Varianta 3if expresie1 grup de instruciuni 1elseif expresie2 grup de instruciuni 2elseif expresie3 grup de instruciuni 3else grup de instruciuni 4 endgrup de instruciuni1 este executat dac expresie1 este adevrat.

    Dac expresie1 nu este adevrat i este adevrat expresie2 se execut grup de instruciuni 2

    Dac expresie1 nu este adevrat i este adevrat expresie3 se execut grup de instruciuni 3

    n cazul n care nu este ndeplinit niciuna din situaiile anterioare se execut grup de instruciuni 4.

  • Exemplu:

    %gasirea valorii v intr-un sir de numerev=input('indicati valoarea ce trebuie cautata ');sir=input('indicati sirul de nr. sub forma unui vector ');n=length(sir);g=0; % nr de gasirifor i=1:1:n if v==sir(i) disp('a fost gasit v in sir la pozitia '); i g=g+1; endendif g==0 disp('v nu a fost gasit in sir')else disp('numarul de gasiri a fost ') gend

  • Produce efectul: cautareindicati valoarea ce trebuie cautata 2indicati sirul de nr. sub forma unui vector [1 2 3 2 4 2 4 2]a fost gasit v in sir la pozitia i = 2a fost gasit v in sir la pozitia i = 4a fost gasit v in sir la pozitia i = 6a fost gasit v in sir la pozitia i = 8numarul de gasiri a fost g = 4

  • Operatori relaionali i expresii logiceOperatorii relaionali folosii n Matlab sunt:mai mic =

    identic ==

    diferit ~=

  • Forma sub care se utilizeaz operatorii relaionali este de regul:rezultat = (expresie1) operator relational (expresie2)

    n funcie de mrimile implicate n expresie1 sau expresie2, rezultat poate fi un scalar, un vector sau o matrice, compus din elementele zero i unu, dup cum n urma comparaiei acelorai ranguri a rezultat adevr sau fals. Atenie, valoarea de adevr a unei matrici este fals doar atunci cnd toale elementele sunt zero.

  • n construirea expresiilor logice sunt utilizai i operatorii logici:Operator logicSimbolPrioritateNU~1I&2SAU|3

  • Grafica MATLABMatlab-ul nu nseamn numai prelucrri numerice, calcule i rezolvri de ecuaii, deoarece ofer i instruciuni cu care s poat fi ntocmite grafice, att n dou dimensiuni ct i n trei dimensiuni. Mai mult chiar, imaginile pot fi i ele afiate i prelucrate, existnd un toolbox dedicat procesrii imaginilor.

  • Grafice 2 DMatlab-ul ne ofer o instruciune apropriat de definiiile de la matematic, n care ne este cerut un domeniu de definiie i o relaie prin care s se ajung la valorile funciei. Sintaxfplot(list funcii, limite, marcaj)list funcii descrie funcia de argument x sau funciile (tot de argument x, separate prin virgul) ce dorim s fie reprezentate. Exemple de descriere: sin(x), cos(x), 2*x+1, (x.^2) limite este un vector cu 2 sau 4 elemente, ce fixeaz prin primele 2 elemente, domeniul de definiie i prin valorile 3 i 4 domeniul de valori ale funciei. Exemple: [-1 1], [-1 1 2 6]marcaj este un parametru opional, cu care impunem forma curbei (putem pune suplimentar liniei continui i nite semne speciale pe curba funciei). Valorile admise sunt: '-+', '-x', '-o', '-*' (sau '+-', 'x-', 'o-', '*-') i suprapun peste curba funciei semnele +, x, o sau *.

  • Exemple:>>fplot ( 'x* sin(x)', [ 0 10*pi ] ) % pi este 3,1415

  • fplot('[tan(x), sin(x), cos(x)]', [-2*pi 2*pi -2*pi 2*pi])

  • fplot('sin(x)', [0 4*pi], '-+')

  • Pe lng fplot, Matlab-ul ofer i funcia plot, o alt instruciune pentru reprezentri grafice. Care este diferena? Fplot pleac de la o expresie i un domeniu de definiie, creaz o imagine interpolat a domeniului de valori. Plot pleac de la perechi valori pe care le consider coordonate x,y (abscis, ordonat), le reprezint i le unete cu drepte. SintaxVarianta 1 plot(x,y) sunt reprezentate perechile de puncte ce au abscisa n vectorul x i ordonata n vectorul y. Varianta 2 plot(y) sunt reprezentate perechile de puncte ce au abscisa numrul liniei i ordonata valorea corespunztoate de pe coloan. Pentru fiecare coloan se construiete un grafic.

  • q=[3 5 6 9 10]; w=[1 2 3 7 4]; plot(q,w)

  • e=[3 4 5 2; 1 0 3 4; 2 1 5 6]; plot(e)

  • Instruciunea plot(x,y,s) ofer i posibilitatea de a indica n ce culoare i sub ce form dorim s fie realizate segmentele ce unesc punctele, utiliznd parametrul s (un ir de cel mult 3 caractere):

  • Exemplu de grafic realizat cu stelue: q=[3 4 5 6 7 8 9];w=[7 2 3 5 4 6 1];plot(q,w,'*')

  • Atunci cnd se doresc reprezentri ale mai multor seturi de date, reprezentate prin triplete x,y,s, instruciunea plot poate avea forma: plot(x1,y1,s1, x2,y2,s2, x3,y3,s3,...)Exemplu: q=[3 4 5 6 7 8 9]; w=[7 2 3 5 4 6 1]; e=[4 6 8 9 10]; r=[10 6 7 4 8]; plot(q,w,'-',e,r,'--')

  • stem(y) face o reprezentare grafic cu segmente verticale de lungimea valorilor indicate n vectorul y. Fiecare segment se termin cu un cercule. Exemplu: c=[1 2 3 0 5 4 1]; stem(c)

  • stem(x,y) reprezint grafic, cu cerculee, n sistem cartezian, valorile ce au abscisa indicat n vectorul x i ordonata n vectorul y. Fiecare cerculet este unit cu axa x cu un segment vertical. Exemplu: x=-1:0.25:1; y=-(x.^2)+1; stem(x,y)

  • bar(y) realizez un grafic, n care valorile din vectorul v sunt reprezentate prin bare verticale.bar(x,y) realizez un grafic n care pentru fiecare coordonat x,y (definit prin vectorii x i y), se deseneaz o bar vertical. Vectorul x trebuie s aib componentele ordonate cresctor. Exemplu: x=25:5:75; y=x.^4; bar(x,y)

  • hist(y) reprezint grafic o histogram nprind n 10 intervale egal spaiate, valorile din vectorul y. Fiecare bar ne arat prin mrimea nlimii (ordonata), de cte ori este prezent n vectorul y volarea de pe ordonat. Se reprezint astfel distribuia elementelor vectorului y.Exemplu: x=25:5:75; y=x.^4; hist(y)

  • hist(y,n) variant a comenzii, n care numrul de intervale nu este 10 ci n. hist(y,v) variant a comenzii, n care prin vectorul v sunt centrate valorile din vectorul y, a cror distribuie este dorit.Exemplu: a=[1 1 1 1 2 2 2 5 2 3 1 4 0]; b=[1 2 5]; hist(a,b)

  • Controlul axelor, comentarii, titluri

    title('text') se folosete pentru indicarea de titluri, textul aprnd n partea de sus a graficului.xlabel('text') se folosete pentru indicarea unor explicaii i a unitilor de msur pe abscis, textul aprnd sub axa x.ylabel('text') se folosete pentru indicarea unor explicaii i a unitilor de msur pe ordonat, textul aprnd pe axa y.zlabel('text') se folosete la graficele n trei dimensiuni pentru indicarea unor explicaii i a unitilor de msur pe axa z.legend(text1,text2,text3, ...) adaug legend graficului, corespunztor fiecrui tip de linie cu care este construit graficul, sunt prezentate explicaiile text1, tex2,.... legend(tip-linie1, text1, tip-linie2, text2,...) adaug legend graficului, indicnd fiecrui tip de linie din comand, explicaiile text1, tex2,... (nu mai ine cont de ordinea n care au fost formate graficele). Tipurile de linie sunt n conformitate cu tipurile permise n comanda plot.

  • Exemplu: title('Text titlu') xlabel('text axa x') ylabel('texy axa y')

  • axis([XMIN XMAX YMIN YMAX]) se folosete pentru a scala axele graficului curent, axa x indicnd valori ntre XMIN i XMAX, iar axa y indicnd valori ntre YMIN i YMAX. axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) se folosete pentru a scala axele graficului tridimensional curent, axa x indicnd valori ntre XMIN i XMAX, axa y indicnd valori ntre YMIN i YMAX, iar axa z indicnd valori ntre ZMIN i ZMAX. axis('off') anuleaz afiarea att pentru axe ct i pentru inscripiile lor axis('on') readuce pe ecran desenul axelor ct i inscripiile lorgrid on instruciune cu care generm o reea de linii orizontale i verticale, cu care s putem citi corect mrimea valorilor pe graficgrid off instruciune cu care anulm efectul grid on

  • subplot(m,n,p) mparte matricial, n m x n zone, fereastra curent pentru grafice, n a p-a zon trgnd axele pentru urmtorul grafic. Pentru completarea ferestrei cu alte grafice, fiecare nou grafic trebuie precedat de o comand corespunztoare subplot. n situaia n care noul grafic se suprapune peste grafice existente, acestea dispar. Revenirea la varianta n care ferestra gzduiete un singur grafic se face cu comanda subplot(1,1,1). Exemple: subplot(3,3,1)

  • fplot('(x^3)', [0,1])

  • subplot(3,3,2) subplot(3,3,3) subplot(3,3,9)

  • Exemplu de grafic 2 Dt = linspace(0,8, 401);y = t.*exp(-t).*cos(2*pi*4*t);subplot(2,1,1)plot(t,y);xlabel(Timp (s));ylabel(Amplitudine)subplot(2,1,2)stem(t,y);axis([0 1 min(x) max(x)])xlabel(Timp (s) detaliu);ylabel(Amplitudine)


Recommended