Laborator 1-Teoria probabilitatilor si statistica matematica Sef lucrari dr.mat. Daniel N.Pop Departamentul de calculatoare si inginerie electrica 1 Prezentare generală Matlab 1.1 Help on-line 1. Limbajul MATLAB este mult mai simplu de învăţat dacă se renunţă la inspectarea aridă a listelor cu variabile, funcţii şi operatori şi se utilizează în schimb comenzile help, helpdesk, demo tastate direct de la prompterul MATLAB. 2. Pentru aflarea tuturor informaţiilor utile despre o comandă sau o funcţie se tastează help urmat de numele comenzii sau funcţiei respective. 3. Pachetul MATLAB dispune de asemenea de informaţii complete despre utilizare sub forma unei documentaţii tip.pdf. 4. În cazuri particulare se poate apela la INTERNET, existând o legătură la pagina Web a firmei producătoare. 5. Alte comenzi utile pentru aflarea de informaţii sunt: helpwin, lookfor, help help. 1.2 Opţiuni de salvare Pentru salvarea variabilelor curente cu care se lucrează în MAT- LAB la încheierea unei sesiuni de lucru se poate utiliza comanda save. Această comandă va salva toate variabilele curente generate de către utilizator într-un fişier numit matlab.mat. Dacă se doreşte se poate da un nume fişierului de date în care se salvează variabilele. 1
Spaţiul de lucru conţine un set de variabie (numite tablouri sau matrice) care pot fi manevrate din linia de comandă. Se pot folosi comenzile who şi whos pentru a vedea care sunt variabilele curente din workspace. Pentru ştergerea variabilelor din workspace se utilizează comanda clear. Lansarea in executie: dublu click pe iconul Matlab. Parasirea mediului de programare se face cu comanda >quit 1.3 Crearea fişierelor MATLAB (.m files) Deoarece este mult mai comod şi util decât introducerea comenzilor linie după linie la prompterul MATLAB, se lucrează cu fişiere text care conţin aceste linii program cu comenzile necesare. Aceste fişiere conţin cod în limbajul MATLAB şi sunt denumite.m files (sau M-files). Fişierele se creează utilizând un editor de text şi apoi se utilizează ca o comandă MATLAB obişnuită. Sunt două tipuri de fişiere.m: Fişiere Script, care nu acceptă argumente de intrare şi nu returnează argumente de ieşire. Aceste fişiere operează cu datele din spaţiul de lucru. Rutine (funcţii), care acceptă argumente de intrare şi returnează argumente de ieşire. Variabilele utilizate sunt variabile locale (interne) ale funcţiei. Pentru a vedea conţinutul unui fişier MATLAB, de exemplu nume.m, se foloseşte comanda: > type nume.m >clc% sterge ecranul Exemplul 1 : Următorul fişier creează o funcţie neliniară: Se alege din meniul New optiunea function si se salveaza cu numele humps function y = humps(x) y = 1./((x-.3).^2 +.01) + 1./((x-.9).^2 +.04) - 6; end Această funcţie poate fi evaluată pentru un set de puncte în intervalul 0 x 1 cu comanda: >x = 0:.002:1; >y = humps(x); şi apoi se poate reprezenta grafic funcţia cu comanda >plot(x,y) 2
Graficul arată că funcţia are un minim local la aproximativ x = 0.6. Dacă de exemplu utilizăm funcţia fminsearch putem găsi imediat valoarea exactă a lui x. Primul argument al funcţiei este chiar numele funcţiei pentru care calculăm minimul (al doilea parametru este o aproximare grosieră a localizării minimului). > x = fminsearch( humps,.5); > x x = 0.6370 O altă posibilitate este crearea la nivelul liniei de comandă a unui obiect inline prin folosirea unei expresii tip şir de caractere: > f=inline( 1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6 ); 1.4 Matrici si Polinoame Exemplul 2 : Polinoamele sunt descrise în MATLAB prin vectori linie ale căror elemente sunt de fapt coeficienţii polinoamelor în ordinea descrescătoare a puterilor. p(x) = x 3 + 5 x + 6 >p = [1 0 5 6] Un polinom poate fi evaluat pentru o valoare a lui x de exemplu x=1 cu ajutorul funcţiei polyval: >polyval(p,1) ans= 12 Se pot afla cu uşurinţă rădăcinile polinomului folosind funcţia roots astfel: > r=roots(p); > r r = 0.5000 + 2.3979i 0.5000-2.3979i -1.0000 Comanda care permite înmulţirea a două polinoame, şi anume conv: > p1=[1 3 5] p1 = 1 3 5 > p2=[2 0 1 0 5] p2 = 2 0 1 0 5 > p3=conv(p1,p2) 3
p3 = 2 6 11 3 10 15 25 Funcţia polyfit găseşte coeficienţii unui polinom (o curbă) care aproximează un set de date în sensul algoritmului celor mai mici pătrate: p = polyfit(x,y,n); Exemplu: > x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4]; > p = polyfit(x,y,3) Pentru plotarea rezultatului se utilizează mai întâi funcţia polyval pentru o trasare cât mai exactă a graficului polinomului şi apoi se plotează estimarea versus datele reale pentru comparaţii. > x2 = 1:.1:5; > y2 = polyval(p,x2); > plot(x,y, o,x2,y2) Funcţia residue se utilizează pentru descompunerea în fracţii simple. Se aplică în cazul raportului a două polinoame b şi a, b(s) a(s) = r 1 + r 2 +... + r n + k s s p 1 s p 2 s p n unde r este un vector coloană, p tot un vector coloană care conţine polii iar k un vector linie cu termenii direcţi. Exemplu: 4 + 8s 1 1 + 6s 1 + 8s 2 > b = [-4 8]; > a = [1 6 8]; >[r,p,k] = residue(b,a) r = -12 8 p = -4-2 k = [] Dacă se folosesc trei argumente de intrare (r, p, şi k), funcţia residue asigură conversia înapoi în forma polinomială. MATLAB-ul operează cu matricile cu aceeaşi uşurinţă cu care lucrează cu scalarii. Pentru adunarea a două matrici de exemplu se 4
foloseşte pur şi simplu semnul + ca la o adunare obişnuită. Bineînţeles că matricile trebuie să aibă aceleaşi dimensiuni pentru a putea fi adunate iar pentru inmulţire operatorul *. > A=[2 3;15-3] A = 2 3 15-3 > B=[11-21; 12 4] B = 11-21 12 4 > C=A+B C = 13-18 27 1 > D=A*B D = 58-30 129-327 > det(a) ans = -51 >inv(a); ans = 0.0588 0.0588 0.2941-0.0392 1.5 Interpolarea Interpolarea este un proces de estimare a valorilor dintre date (puncte) cunoscute. Aplicaţiile interpolării sunt numeroase în domenii cum ar fi procesarea numerică a semnalelor şi imaginilor. MATLAB-ul dispune de mai multe tehnici de interpolare, alegerea unei metode sau alteia făcându-se în funcţie de acurateţea necesară, de viteza de execuţie şi de gradul de utilizare a memoriei. Funcţiile de interpolare se află în directorul polyfun. Exemplu >[x,y] = meshgrid(-3:1:3); >z = peaks(x,y); > surf(x,y,z); Generarea unei suprafeţe mesh fine pentru interpolare: 5
[xi,yi] = meshgrid(-3:0.25:3); Interpolarea cu metoda celei mai apropiate vecinătăţi: zi1 = interp2(x,y,z,xi,yi, nearest ); Interpolarea cu metoda biliniară: zi2 = interp2(x,y,z,xi,yi, bilinear ); Interpolarea cu metoda bicubică: zi3 = interp2(x,y,z,xi,yi, bicubic ); 1.6 Plotarea funcţiilor Exemplu: trasarea graficului funcţiei humps pentru limitele [-5 5] ale axei x tastam in linia de comanda: >fplot( humps,[-5 5]); Dacă dorim şi precizarea limitelor de reprezentare pe axa y (realizarea unui zoom) folosim comanda: >fplot( humps,[-5 5-10 25]); Se poate realiza şi reprezentarea mai multor funcţii pe acelaşi grafic >fplot( [2*sin(x+3), humps(x)],[-1 1]); O plotare tri-dimensională a unei curbe poate fi obţinută cu >t = 0:0.1:3*pi; > plot3(sin(2*t),cos(t),t); Lungimea acestei curbe este dată de formula următoare: 3π 2 4 sin(2t)2 + cos(t) 2 + 1dt 0 Pentru calculul lungimii trebuie integrată numeric integrala de mai sus. Pentru aceasta se creează mai întâi o funcţie MATLAB care descrie integrandul pe care o numim fcurba: function f = fcurba(t) f = sqrt(4*cos(2*t).^2 + sin(t).^2 + 1); şi apoi se integrează cu ajutorul funcţiei quad: >lungime = quad( fcurba,0,3*pi) >lungime = 1.7222e+01 6