Laborator 3. Afisarea si interpretarea rezultatelor cu ajutorul functiilor de plotare 2D si 3D. Scopul lucrării Scopul acestei lucrari este de a afisa si de a interpreta rezultatele unor instructiuni sau fuctii cu ajutorul graficelor pe care MatLab-ul le pune la dispozitia utilizatorilor. Vom putea reprezenta rezultatele in urma instructiunilor fie intr-un sistem de axe 2D sau 3D pe baza unor functii predefinite ale acestui soft. Aparatura necesară - Staţii de lucru care au instalat Orcad9.2. si MatLab 7.1 Consideraţii teoretice In urma rularii unei instructiuni sau a unei insiruiri de instructiuni se obtin rezultate care trebuiesc afisate si apoi interpretate. Cea mai simpla metoda de afisare si interpretare a rezultatelor este folosirea functiei imread studiata in primul laborator. Astfel vom importa o imagine din afara programului si afisand aceasta imagine vom putea analiza pe un sistem de axe ceea ce s-a obtinut. x=imread('poza.jpg'); image(x); grid on;
Grafica 2D Majoritatea rezultatelor pe care le vom obtine si apoi interpreta acestora o vom face pe un sistem cartezian de 2 axe X,Y. Pentru aceasta reprezentare, MatLab-ul pune la dispozitia utilizatorilor cateva functii predefinite. Functia ezplot plot plotyy loglog semilogx semilogy bar barh histogram polar
Proprietatea Plotare rapida Plotare in funcie de X,Y Plotare cu doua axe Y Plotare logaritmica pe X si pe Y Plotare logaritmica pe X Plotare logaritmica pe Y Afiseaza un grafic segmential (diagrame bara) Afiseaza un grafic segmential (diagrame bara) Afiseaza o histograma a unui grafic segmential Tabel 1
Functia ezplot, este o functie dupa cum ii sugereaza si numele de plotare rapida. Se caracterizeaza prin (‘functia de plotat’,’intervalul de calcul’). ezplot('x.^2/4+y.^2/5=15',[-15 15]); grid;
Fig. 1 Functia plot, este una din cele mai uzuale functii de plotare intr-un sistem 2D. Aceasta functie poate sa reprezinte grafic un rezultat in functie de cele 2 coordonate, X,Y. x=-5:0.1:4; %x este o valoare din intervalul [-5,4] cu increment de 0.1 y = x.^3; %y este x^3 plot(y); %afisam grafic y
Fig. 2 Reprezentarea grafica pe care am obtinut-o reprezinta rezolvarea ecuatiei y=x3 . Daca vizualizam atent figura observam ca pe axa x suntem intr-un interval de la 0 la 91.
Asta deoarece y are 91 de valori in intervalul x pe care l-am ales. (se scrie in linia de comanda length(y)). Pentru a reprezenta corect aceasta ecuatia vom scrie: x=-5:0.1:4; %x este o valoare din intervalul [-5,4] cu increment de 0.1 y = x.^3; %y este x^3 plot(x,y); %afisam grafic y
Fig. 3 In acest moment pe axa x avem exact intervalul pe care l-am stabilit initial. Se observa ca, curbele grafice sunt identice doar ca in reprezentarea a doua indeplineste conditiile initiale impuse. Daca adaugam comenzilor anterioare si comanda de caroiaj vom obtine un grafic usor de citit si interpretat. grid on;
%caroiaj
Fig. 4 De asemenea un grafic este usor interpretabil daca are un titlu, are specificatiile celor 2 axe, o legenda a graficelor in cazul in care in aceasi fereastra se suprapun mai
multe astfel de grafice, punctele de conjunctie ale functiei sunt vizibile, daca graficele au culori diferite sau alte elemente care pot usura vizualizarea unui asemenea grafic. Pentru toate aceste detali MatLab-ul ofera o serie de proprietati ale acestor functii de reprezentare grafica. Functia axis title xlabel ylabel text gtext color linestyle fontsize legend grid linewidth hold
Proprietatea Seteaza axele vizibile sau invizibile Afiseaza titlul graficului Afiseaza text pe axa X Afiseaza text pe axa Y Afiseaza text pe grafic Afiseaza text pe grafic la trecerea cu mousul asupra unui grafic Seteaza o culoare Forma liniilor cu care se face afisarea Dimensiunea caracterelor Permite inserarea unei legende Permite plasarea caroiajului Grosimea liniei Permite stoparea unui grafic pe axe Tabel 2
Pentru culorile cu care vom afisa graficele MatLab-ul recunoaste implicit urmatoarele culori: Culoarea
Numele
albastru Verde Rosu Galben Cyan Purpuriu Negru Alb
blue Green Red Yellow Cyan Magenta Black White Tabel 3
Prescurtarea b g r y c m k w
Pentru tipul liniei cu care realizam afisarea grafica putem sa alegem din tabelul urmator una din liniile recunoscute de functiile de plotare. Tipul liniei Linie continua Linie punctata Linie si punct
Prescurtarea
: -.
Linie intrerupta
-Tabel 4
Pentru a marca pe grafic punctele de conjuctie pe care functia le ploteaza putem utiliza urmatorul tabel: Simbol . o x + * s d v ^ < > p h
Tipul de Marker Punct Cerculet X Plus Steluta Patrat Romb Triunghi sus Triunghi jos Triunghi stanga Triunghi dreapta Stea cu 5 varfuri Stea cu 6 varfuri Tabel 5
Folosind fuctiile enumerate mai sus sa reprezentam grafic in acesasi sistem de axe 3 semnale sinusoidale defazate intre ele. f=50; %setam o frecventa T=1/f; %calculam o perioada t=0:0.001:4*T %alegem um interval de timp x=sin(2*pi*f*t); %calculam primul sinus x1=sin(2*pi*f*(t-T/3)); %calculam al doilea sinus x2=sin(2*pi*f*(t-T/2)); %calculam al 3 sinus plot(t,x,'-or'); %afisam primul sinus hold on; %il mentinem pe axe plot(t,x1,':db'); %afisam al doilea sinus hold on; %il mentinem pe axe plot(t,x2,'--Xg'); %afisam cel de-al treilea sinus grid on; title('Reprezentare sinus');%dam titlu graficului xlabel('timp [s]'); %scriem text pe axa x ylabel('Amplitudine [V]'); %scriem text pe axa y legend('x1','x2','x3'); %inseram o legenda
Rezultatul acestor instructiuni este : Reprezentare sinus 1 x1 x2 x3
0.8 0.6
Amplitudine [V]
0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
0
0.005
0.01
0.015
0.02 timp [s]
0.025
0.03
0.035
0.04
Fig. 5 Se observa in aceasta figura ca fiecare din cele 3 sinusuri au culorile diferite asa cum s-au setat, punctele de conjunctie apar clar pe grafic, este pus un titlu, specificatii pe cele 2 axe si o legenda. In codul scris apare functia hold on care are proprietatea de a mentine un grafic atunci cand un altul urmeaza sa fie plotat. Putea scrie cele trei sinusuri in aceasi functie plot deoarece baza de timp ale acestora este aceasi. plot(t,x,'-or',t,x1,':db',t,x2,'--Xg'); grid on;
Putem spune ca afisarea unui grafic cu ajutorul functiei plot este simpla indiferent daca datele de intrare sunt de forma unor vectori sau a unor matrici daca tinem cont de cateva reguli simple : plot(x) – daca x este un vector atunci vom genera un grafic in functie de valoarea lui x si pozitia acestuia in vector plot(x,y) – daca x si y sunt vectori de aceasi lungine atunci vom avea un grafic de y in functie de x Sa presupunem ca avem de afisat urmatorul set de date: x1 y1 x2 y2
= = = =
0:.1:20; x1.*sin(x1); 10:.2:25; 50*x2;
%x1 i-a o valoare in intervalul [0 20] %functia y1 %x2 i-a o valoare intre [10 25] %functia y2
Daca o reprezentam grafic cele 2 functi cu ajutorul plot vom obtine rezultatul din figura urmatoare:
Fig. 6 Nu pare deloc un grafic concludent, de aceea vom folosi functia plopyy, o functie cu ajutorul careia vom avea 2 axe y pentru reprezentare. [axeshandles,line1handle,line2handle]=plotyy(x1,y1,x2,y2); set(line1handle,'linestyle','-','color','red'); set(line2handle,'linestyle','--','color','g'); grid; title('y1 is the blue line, y2 is the green dashed line'); axes(axeshandles(1)); ylabel('y1=x.*sin(x)'); axes(axeshandles(2)); ylabel('y2=50*x','color','k'); xlabel('x');
Rezultatul se poate vizualiza in figura 7. 1300
15
1200
10
1100
5
1000
0
900
-5
800
-10
700
-15
600
-20
0
5
10
15 x
Fig. 7
20
500 25
y2=50*x
y1=x.*sin(x)
Reprezentare cu ajutorul plotyy 20
In analiza circuitelor electronice de multe ori v-a trebui sa reprezentam logaritmic rezultatele obtinute. Daca ne gandim la un filtru castigul e exprimat de tensiunea de iesire pe tensiunea de intrare in functie de frecventa. Frecventa 20 40 80 100 120 15000
Castig 5 10 30 32 34 10
Frecventa 2000 5000 8000 10000 12000 20000 Tabel 6
Castig 34 34 34 32 30 5
f=[20 40 80 100 120 2000,... % incarc vectorul frecventa 5000 8000 10000 12000 15000 20000]; g=[5 10 30 32 34 34 34 34 32 30 10 5]; % incarc vectorul castig semilogx(f,g,'-sr','linewidth',2); % afisez logaritmic pe x grid on; title('Reprezentare logaritmica'); xlabel('frecventa [Hz]'); ylabel('castigul [dB]');
Fig. 8 Similar se foloseste functia semilogy, doar ca acum y va fi logaritmic si x liniar. Daca se doreste o reprezentare grafica logaritmica atat pe x cat si pe y vom folosi functia loglog.
Fig. 9 Reprezentarea logaritmica are la baza trei functii cu ajutorul carora putem realiza logarea axelor: semilogx(x,y): - genereaza un grafic de log10(x) versus axa y liniara semilogy(x,y): - genereaza un grafic cu axa x liniara versus log10(y) loglog(x,y): - genereaza un grafic de log10(x) versus log10(y) O alta reprezentare 2D este aceea a diagramelor bara. Aceasta reprezentare se caracterizeaza prin funcia bar sau barh. x=1:3:33; y=[66 56 50 3 89 5 78 65 4 25 99]; bar(x,y); grid on;
Fig. 10
Daca am folosi functia barh am obtine:
Fig. 11 MatLab-ul permite de asemenea afisarea mai multor ferestre de grafice in aceasi figura. Pentru aceasta vom folosi functia subplot. Aceasta functie se caracterizeaza prin 3 valori pe care utilizatorul le poate alege dupa dorinta sa. subplot (a b c) , unde a – reprezinta numarul de ferestre pe verticala b – reprezinta numarul de ferestre pe orizontala c – pozitia in care vrem sa afisam.
Fig. 12
Fig. 13
In figura anterioara am pozitionat 9 astfel de sisteme de axe pentru reprezentari grafice. Un alt exemplu:
Fig. 14 Grafica 3D Un alt tip de reprezentare este cel in grafica 3D. Acum vom avea un sistem de 3 axe X,Y,Z, deci v-a fi nevoie de 3 parametri ai unei fucntii. Una din functiile care reprezinta grafica 3D este functia plot3. t = 0:pi/50:10*pi; subplot(221) plot(t,sin(t),'-r'); %reprezint 2D sinus grid on; subplot(223) plot(t,cos(t),'-g') %reprezint 2D cosinus subplot(122) plot3(sin(t),cos(t),t,':pb'); %reprezint 3D
Fig. 15
In figura 15 se observa reprezentarea 3D a funcitiilor sinus si cosinus pe un interval de timp. La fel ca si functia plot, plot3 permite anumite setari ale graficului reprezentat, legat de modul de aparitie. De cele mai multe ori prin grafica 3D se doreste sa se reprezinte grafic suprafete, mai mult decat simple curbe.In acest scop, Matlab ne-a pus la dispozitie doua functii speciale: surf si mesh. Mesh aceasta functie realizeaza un schelet al unei suprafete data de coordonatele x, y si z. [X, Y] = meshgrid(-pi:pi/10:pi); Z = sin (X) .* sin (Y); mesh (Z);
Fig. 16 Surf se foloseste pentru a vizualiza functii matematice intr-o suprafata rectangulara. [X, Y] = meshgrid(-pi:pi/10:pi); Z = sin (X) .* sin (Y); surf (Z);
Fig. 17
Meshgrid realizeaza o transformare a domeniului specificat de vectorii x, y in doua sau mai multe matrici, in functie de cati parametrii trebuie sa returneze, in acest caz x, y, care va fi folosita la reprezentarea acestora in grafica 3D.Liniile matricii de iesire vor fi copii ale vectorului x, iar coloanele matricii y vor fii copii ale vectorului y. Tema 1.Sa se analizeze toate functiile prezentate. 2.Sa se reprezinte graphic functia: f x
x 3 , x2 5
pentru x [-5,5]
3.Sa se reprezinte graphic functia:
f x
2e x
2
sin x 2
4. Se dau functiile m(t), c(t), si s(t) caracteristice unui sistem de comunicatii: m(t)=4cos(120pi*t)+ 2cos(240pi*t) c(t)= 10cos(10000pi*t) s(t)=m(t)*c(t) sa se reprezinte grafic cele 3 functii folosind functia subplot.