GRAFIČKI PODSUSTAV

 

Osim matričnog koncepta i pripadnog engine-a, druga uporišna točka Matlaba je izvrstan grafički podsustav. Osnovne grafičke funkcije, koje su odmah dostupne, omogućavaju relativno lako crtanje različitih slikovnih prikaza. S druge strane, moguće je i detaljno upravljanje svim aspektima prikaza (npr. veličina i položaj slike na papiru, položaj tikova na osima, položaj promatrača, polažaj i vrsta izvora svjetla, itd.) 

Ovdje ćemo se ograničiti na nešto detaljniji opis dviju osnovnih i najkorisnijih funkcija: plot i contour, od kojih prva služi za crtanje 2D-krivulja, a druga za crtanje izolinija. Postoji, dakako, i cijeli niz funkcija za 3-dimenzionalno crtanje, no s takvim prikazima valja biti suzdržan, jer su najčešce manje informativni od prethodna dva. Na kraju ćemo ukratko izložiti osnovnu strukturu i unutarnji ustroj grafičkog podsustava, poznavanje kojeg nije prijeko potrebno, ali je vrlo korisno za ugodan rad. 

Naredba plot se javlja u više varijanti: 

Značenje pojedinih slova u opisu krivulje vidi se iz donje tablice.

 

 

Naredba plot prima i matrične argumente.

Općenito, ako je argument kompleksna veličina, plot naredba crta samo realni dio. Imaginarni dio se, dakle, ignorira. Slučaj kada se zada samo jedan kompleksni argument je iznimka: 

Osim funkcije plot postoje i funkcije semilogy, semilogx, loglog za crtanje u logaritamskoj skali, te mnoge druge funkcije za crtanje posebnih vrsta dvodimenzionalnih grafova, npr. polar, bar, hist, quiver, compass. Navedimo neke jednostavne funkcije za opisivanje, te ako je potrebno, i doradu postojeće slike/grafa: 

Naknadnim pozivanjem neke grafičke funkcije (poput plot ili contour) postojeća slika će, u pravilu, biti obrisana i zamijenjena novom. Ako se, pak, želi crtati "preko" postojeće slike, treba koristiti naredbu hold on. Suprotan učinak ima naredba 
hold off.

Pomoću naredbe subplot lako se crta više grafova (axis) na jednoj te istoj slici (figure). Preciznije, subplot(m,n,i) će podijeliti sliku na m × n pravokutnika i smjestiti sljedeći graf u i-ti po redu pravokutnik, pri čemu se broji s lijeva u desno i odozgo na dolje.

Funkcija contour, koja crta izolinije funkcija dvije varijable, također se javlja u više različitih oblika. 

Oznake izolinija (labele) neće se automatski nacrtati, već treba upotrijebiti funkciju clabel. Na primjer: 

 

 

će nacrtati izolinije od Z zadane vektorom v, i potom označiti svaku drugu izoliniju. Posve analogno radi i funkcija contourf, s tim da se umjesto izvlačenja samih izolinija odgovarajućim bojama ispune prostori medju njima. 

Za potpuno razumijevanje gornjeg primjera (s clabel), a i šire, potrebno je malo zaviriti ispod površine. Grafički podsustav Matlaba organiziran je hijerarhijski u obliku stabla, prema donjem dijagramu. Glavni (najstariji) objekt je korijen (engl. root) koji predstavlja zaslon (ekran) računala. Njegova djeca su objekti tipa "Figure", tj. pojedini prozori koje Matlab otvara za prikaz grafičkih sadržaja. Svaki figure u pravilu sadrži više različitih tipova djece, od kojih je najvažniji objekt "axes", koji predstavlja jedan zaseban graf, odredjen trima osima, x, y i z. Svaki axes u pravilu posjeduje više djece raznih tipova od kojih su ponajvažniji objekti tipa "line" i "text". U svakom trenutku, i za svaki tip zna se koji je objekt aktivan. Tako će, npr. funkcija plot uzeti aktivni figure i, unutar njega, aktivni axes, te mu dodati (nacrtati) novo dijete, objekt tipa line. Ako u trenutku poziva ne postoji objekt tipa figure, bit će kreiran bez posebnog zahtjeva, a isto vrijedi i ako postojeći figure nema djece tipa axes.

 

Slika 1: Djelomična struktura grafičkog podsustava 

 

Svaki objekt ovisno o tipu posjeduje niz svojstava (atributa) čije vrijednosti detaljno i potpuno odredjuju što će se i kako nacrtati. Grafičkom bjektu, odnosno njegovim atributima, pristupa se pomoću ručke (engl. handle), čija 
je vrijednost realni broj koji jednoznačno identificira zadani objekt. Obično se ručki pridjeli simboličko ime. Na primjer, naredba sl1 = figure otvara novi prozor (objekt tipa figure) s ručkom sl1, koji ujedno postaje aktivan. 
Naredba, pak, figure(sl1) će učiniti traženi prozor aktivnim i izbaciti ga u prvi plan na zaslonu. 
Primitivne naredbe (naredbe niže razine) za upravljenje atributima grafičkih objekata su set i get

Postoje tri simbolička imena povezana s ručkama trenutno aktivnih grafičkih objekata: 

 

 

Svrha im je omogućiti jednostavan pristup grafičkom objektu, bez da posebno imenujemo ili tražimo odgovarajuću ručku. Ispis slike ne papir moguć je, osim putem padajućeg menu-a, i naredbom print. Na primjer, 

Na kraju navodmo jedan primjer u kojem se crtaju dva grafa (axes), na istoj slici (figure). Prvi zauzima gornju četvrtinu slike, a sadrži graf funkcije 

y(x) = sin(2px) · exp( -x/2); 0<x<2 

punom linijom, te funkcije 2- y(x) iscrtan simbolima +. Drugi graf zauzima donju polovinu slike, a sadrži izolinije funkcije 

Z(x; y) = exp (x 2 + y 2 )/2 · sin(2px)  cos(2px), 0<x,y<2]: 

Naredba meshgrid iz vektora x i y priprema matrice X i Y, pogodne za računanje funkcije (matrice Z) korištenjem računskih operacija u smislu polja. Na taj način se funkcija Z(x,y) za sve parove (x, y) izračuna jednom jedinom 
naredbom, bez korištenja for petlje. 

 

% -- zadaje vektor-stupac x od 0 do 2 s korakom 0.01 
x = [0:1/100:2]'; 
% -- racuna vektor-stupac y 
y = sin(2*pi*x).*exp(-x/2); 
% -- priprema crtanje u gornjoj lijevoj cetvrtini 
subplot(2,2,1); 
% -- crta prvu krivulju 
plot(x,y); 
% -- cuva prvu krivulju i crta drugu, crnom bojom i simbolom + 
hold on; plot(x,2-y,'k+'); 
% -- oznacava osi 
xlabel('Ovo je x-os'); ylabel('Ovo je y-os'); 
% -- naslov 
title('Prvi graf'); 
% -- crta mrezu 
grid on; 
% -- eksplicitno postavlja raspon x-osi (na aktivnom grafu) 
set(gca,'XLim',[-0.5 2.5]); 
% -- priprema racunanje funkcije dvije varijable 
x1 = x; y1 = x1; 
[X Y] = meshgrid(x1,y1); 
Z = exp(-sqrt(X. ^2+Y. ^2)/2).* sin(2*pi*X).*cos(2*pi*Y); 
% -- priprema crtanje u donjoj polovici slike 
subplot(2,1,2); 
% -- crta izolinije i priprema labele 
[C h] = contour(X,Y,Z); 
% -- ispisuje trazene labele 
clabel(C,h,[-0.2 0 0.2]); 
% -- oznacava osi, itd. 
xlabel('Opet x-os'); ylabel('Opet y-os'); 
title('Drugi graf'); 
grid on; 
% -- postavlja 'tikove' na x-osi 
set(gca,'XTick',[0 0.5 1 1.5 2]); 
% -- maksimalno razvlaci sliku na papiru u 'portrait' orjentaciji 
orient tall 
% -- ispis u datoteku u postscript formatu 
print -deps2c uvod01.eps

 

Rezultat je sljedeća slika (prenesena ovdje iz Postscripta).