Professional Documents
Culture Documents
Matlab
Matlab
Uvod u MATLAB
Sadržaj
1. Osnove rada u MATLAB-u 2
1.1 Šta je MATLAB? 2
1.2 Jednostavni matematički proračuni 3
1.2.1 Kompleksni brojevi 4
1.2.2 Osnovne matematičke funkcije 4
1.3 MATLAB-ov radni proctor 5
1.3.1 Čuvanje i ponovna upotreba podataka 6
2. Operacije sa matricama 7
2.1 Formiranje matrica 7
2.2 Pristupanje delu matrice 8
2.3 Osnovne matematičke operacije sa matricama 9
2.3.1 Operacije scalar-matrica 9
2.3.2 Operacije matrica -matrica 9
2.3.3 Operacije na elementima matrice 10
2.4 Dimenzije matrica I vektora 11
2.5 Rešavanje linearnih jednačina 12
3. Programi i funkcije u MATLAB-u 13
3.1 Skripti 13
3.2 Funkcijske M-datoteke 15
3.3 Petlje u uslovne strukture 16
3.3.1 for petlje 16
3.3.2 while petlja 17
3.3.3 if-else-end struktura 17
3.3.4 switch-case struktura 18
3.3.5 Posebne naredbe za definisanje toka programa 19
3.4 Tipovi podataka 19
3.4.1 Klasa polinoma 20
3.5 Tipovi funkcija 20
3.5.1 Prosleđivanje promenljivih 21
3.5.2 Interaktivan unos ulaznih promenljivih 21
3.6 Saveti za rad I programiranje u MATLAB-u 21
3.6.1 Greške u programima 22
3.6.2 Preporuke za razvoj MATLAB programa 22
4. Grafika 23
4.1 Tipična grafička sesija u MATLAB-u 23
4.2 Osnove grafike 24
4.2.1 Osnovne grafičke naredbe 24
4.2.2 Linijski prikaz podataka 24
4.2.3 Prikaz podataka pomoću tačaka 28
2
matematiku i proračune,
razvoj algoritama,
modeliranje, simulaciju, analizu,
analizu i obradu podataka, vizuelizaciju,
naučnu i inženjersku grafiku,
razvoj aplikacija, uključujući i izgradnju GUI (graphical user interface, interaktivni
korisnički grafički interfejs ).
MATLAB je i okruženje i programski jezik. Jedna od jačih strana MATLAB-a je činjenica da njegov
programski jezik omogućava izgradnju sopstvenih alata za višekratnu uporabu. Mogu se lako
samostalno kreirati sopstvene funkcije i programi (poznate kao M-datoteke) u kodu MATLAB-a.
S MATLAB-om dolazi nekoliko Toolbox-ova koji su i više od kolekcije korisnih funkcija; oni
predstavljaju rezultate istraživanja vrhunskih stručnjaka iz područja upravljanja, obrade signala,
identifikacije procesa, i drugih. Dakle uz pomoć MATLAB-a mogu samostalno da se razviju novi ili
adaptiraju postojeći Toolbox-ovi za rešavanje određenih problema (npr. iz mehanike leta aviona i
upravljanja letelicama, ili aerodinamike).
Naredbe za MATLAB se unose u komandni prozor, osnovni prozor MATLAB-a. Taj prozor je neka
vrsta terminala operacionog skupa i u njemu važe i osnovne terminalske operacione komande za
manipulaciju datotekama. Trenutni direktorijum se može promeniti poznatom naredbom cd, a mogu
se i izvršavati funkcije/naredbe koje su u path-u (naredba path). Pored toga uz MATLAB novije
verzije dolazi i sopstveni editor M-datoteka s debugerom.
Razvojna okolina.
Skup alata za lakšu uporabu MATLAB-a i njegovih funkcija. Mnogi od ovih alata (u verziji
6) su realizovani u grafičkom okruženju. To su MATLAB desktop, komandni prozor (engl.
Command Window), istorija naredbi (engl. command history), editor i debuger, kao i
pregledi help-a, radnog prostora (engl. Workplace), datoteka ili staza (path-a).
Biblioteka matematičkih funkcija.
Ogromna kolekcija algoritama za računanje.
Programski jezik.
MATLAB programski jezik je jezik matrično orjentisan u visokom stepenu, s naredbama
uslovnih struktura, funkcija, struktuisanim podacima, ulazom-izlazom i nekim svojstvima
objektno-orjentiranog programiranja. Ovaj programski jezik omogućava programiranje na
nižem stepenu (kao npr. za potrebe studenata) ali i za kompleksnije programe većih razmera.
Grafički alat.
MATLAB raspolaže velikim mogućnostima za grafički prikaz podataka, vektora i matrica,
kao i za prikaz i printanje tih dijagrama. Postoje funkcije visokog stepena za 2D i 3D
vizualizaciju podataka, obradu slika, animaciju itd. Takođe postoje i funkcije za izgradnju
grafičkih kombinacija za vaše MATLAB aplikacija.
Kombinacija programskih aplikacija.
Biblioteka (engl. Application Program Interface - API), koja omogućava razvoj C i Fortran
programa, koji mogu biti u interakciji s MATLAB-om.
U ovom dokumentu bit će pokazane samo osnovne funkcije MATLAB-a dovoljne za početak
samostalnog rada u MATLAB-u. Za sve daljnje informacije bi trebalo proučiti MATLAB-ov help ili
dodatna uputstva koja dolaze s instalacijom.
Ista pravila važe i za imenovanje datoteka s MATLAB programima. MATLAB ima sledeće specijalne
promenljive čiji su nazivi rezervisani: ans, pi, eps, inf, nan, i, j, nargin, nargout,
realmin, realmax .
-33.6901
>> 180/pi*atan2(-2,3)
ans =
-33.6901
>> 180/pi*atan2(2,-3)
ans =
146.3099
>> who
Your variables are:
a b d kmpl2 p_kmpl1 y
ans c kmpl1 kmpl3 x
>> whos
Name Size Elements Bytes Density Complex
a 1 by 1 1 8 Full No
ans 1 by 1 1 8 Full No
b 1 by 1 1 8 Full No
c 1 by 1 1 8 Full No
d 1 by 1 1 8 Full No
kmpl1 1 by 1 1 16 Full Yes
kmpl2 1 by 1 1 16 Full Yes
kmpl3 1 by 1 1 16 Full Yes
p_kmpl1 1 by 1 1 16 Full Yes
x 1 by 1 1 8 Full No
y 1 by 1 1 8 Full No
Grand total is 11 elements using 120 bytes
Ukoliko neku promenljivu želimo izbrisati iz radnog prostora koristimo naredbu clear na način:
>> clear p_kmpl1 x y ans
>> who
Your variables are:
a c kmpl1 kmpl3
b d kmpl2
Samom naredbom clear bez dodatnih opcija izbrisale bi se sve promenljive iz radnog prostora.
Ista mogućnost stoji na raspolaganju s prozorom radnog prostora – desnim klikom miša može se
odabrati Delete za brisanje odabrane promenljive (ili ikonicom za brisanje) kao i Clear
Workplace za brisanje svih promenljivih iz radnog prostora.
iz prozora radnog prostora – desnim klikom miša izborom Save Workplace as..., ili
ikonicom za čuvanje podataka.
naredbom u komandnom prozoru
» save ime
Osim binarnog formata za čuvanje se može korisitit i ASCII format, ali samo iz komandng prozora.
Tako s naredbom
Učitavanje željenih podataka iz spoljašnje datoteke ime.mat može se sprovesti na nekoliko načina:
Podatci zapisani u datoteci s ASCII formatom mogu se učitati u MATLAB-u primenom čarobnjaka
iz menija File|Import Data.... U komandnom prozoru ASCII datoteka se učitava naredbom
» load data.dat
Pri tome datoteka data.dat mora imati oblik matrice, tj. isti broj elemenata u svakoj vrsti (ti
elementi mogu biti odvojeni razmakom, zapetom ili tabulatorom). Ukoliko red započinje znakom %
taj se red ne učitava. MATLAB ovakvom naredbom u radni prostor učitava promenljivu (matricu)
imena data.
7
Ponovnim učitavanjem (ili definisanjem) promenljive s istim imenom promenljiva prima novu
vrednost.
2. Operacije s matricama
MATLAB je u osnovi namjenjen pojednostavljenju matričnog računa i linearne algebre koji se
pojavlju u mnogim primenama. Jedan od najčešćih problema je rešenje skupa linearnih jednačina.
Ovdje će se promatrati samo realne matrice, odnosno dvodimenzionalna polja podataka, kao i
vektori, tj. jednodimenzionalna polja podataka.
>> x=(0:0.1:1)
x =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
>> y=linspace(0,1,11)
y =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
U MATLAB-u postoje funkcije kojima se mogu definisati matrice čiji su svi elementi jednaki
jedinici ili nuli (nul matrica)
>> P=ones(3)
P =
1 1 1
1 1 1
1 1 1
8
>> Q=zeros(3)
Q =
0 0 0
0 0 0
0 0 0
>> R=zeros(3,2)
R =
0 0
0 0
0 0
Moguća je korekcija pojedinih elemenata (npr. želimo promeniti zadnju vrstu matrice A vektorom-
vrstom r)
>> A.^2
ans =
1 4 9
16 25 36
49 64 81
Pri tome korišćeno je '.^' da označi operaciju stepenovanja koja se odnosi na elemente.
>> A+B
ans =
2 6 10
6 10 14
10 14 18
>> 2*A-B
ans =
1 0 -1
6 5 4
11 10 9
Ukoliko matrice imaju odgovarajuće dimenzije (ako je broj kolona prve jednak broju vrsta druge)
moguće je izvršiti i operaciju množenja
>> A*B
10
ans =
14 32 50
32 77 122
50 122 194
>> C=[1 1;2 2;3 3]
C =
1 1
2 2
3 3
>> A*C
ans =
14 14
32 32
50 50
>> D=[1 1 1; 2 2 2]
D =
1 1 1
2 2 2
>> D*A
ans =
12 15 18
24 30 36
U prethodnom poglavlju (pogl. 3.1) navedeno je stepenovanje koje se odnosilo na elemente koje je
bilo naznačeno s '.^'. Stepenovanje koje bi se odnosilo na celu matricu je
>> A^2
ans =
30 36 42
66 81 96
102 126 150
što je ustvari
>> A*A
ans =
30 36 42
66 81 96
102 126 150
>> A./D
ans =
1.0000 2.0000 3.0000
2.0000 2.5000 3.0000
2.3333 2.6667 3.0000
>> D./A
ans =
1.0000 0.5000 0.3333
0.5000 0.4000 0.3333
0.4286 0.3750 0.3333
>> A.\D
ans =
1.0000 0.5000 0.3333
0.5000 0.4000 0.3333
0.4286 0.3750 0.3333
>> A.^D
ans =
1 2 3
16 25 36
343 512 729
1 2 3 x 366
1
4 5 6 x2 804 ,
7 8 0 x3 351
Ax b .
Kada je osigurana egzistencija rešenja sistema linearnih jednačina postoji nekoliko pristupa za
rešavanje takvog sistema: Gaussova eliminacija, LU faktorizacija ili direktnim izračunavanjem
inverzne matrice A 1 . Analitičko rešenje može se zapisati u obliku
x A 1 b .
Diskusija o analičkom i numeričkom rešenju sistema linearnih jednačina ovde neće biti dalje
razvijana, jer je ovde cilj da se pokaže kako MATLAB može da se primeni u rešavanju ovih
problema. Rešavanje gornjeg sistema pomoću inverzne matrice može se sprovesti na sledeći način:
>> A=[1 2 3;4 5 6;7 8 0]
A =
1 2 3
4 5 6
7 8 0
>> b=[366;804;351]
b =
366
804
351
>> x=inv(A)*b
x =
25.0000
22.0000
99.0000
Pored korišćenja inverzne matrice moguće je rešiti sistem primenom operacije deljenja s leve strane
korišćenjem Gaussove eliminacije
>> x=A\b
x =
25.0000
22.0000
99.0000
Ovaj drugi pristup određivanju rešenja češće se primenjuje iz nekoliko razloga. Jedan od osnovnih
je u tome što ima manje operacija od pristupa s inverznom matricom, što ga čini bržim. Za
rešavanje sistema velikih matrica drugi pristup daje tačnija rešenja. Osim toga za slučaj pre-
određenog sistema (ima više jednačina od nepoznatih) pristup deljenem s leve strane daje rešenje.
Takvo rešenje minimizira kvadrat greške izraza A x b .
>> det(A)
ans =
27
Od interesa mogu biti i sledeće naredbe nad matricama eig(A) (sopstvene vrednosti i sopstveni
vektori matrice), norm(A) (norma matrice), poly(A) (karakteristični polinom matrice), rank(A)
13
(rang matrice), trace(A) (trag matrice), kao i specijalne matrice eye(n) (jedinična matrica
dimenzije n ), ones(n,m) (matrica dimenzije n m sa elementima jednakim 1), zeros(n,m)
(matrica dimenzije n m sa elementima jednakim 0 - nul matrica).
Sve naredbe koje su do sada upoznate i primennjene direktno u komandnom prozoru MATLAB-a
mogu se primijeniti i u M-datotekama.
3.1 Skripti
Skripti su jednostavniji oblici M-datoteka, koji nemaju ulazne ni izlazne argumente, već rade s
podacima iz radnog prostora. Korisne su pri automatizaciji niza MATLAB-ovih naredbi, pogotovo
kada je potrebna njihova višestruka uporaba. MATLAB izvršava skript liniju po liniju koristeći pri
tome podatke koji se nalaze u radnom prostoru ili podatke koje kreira sam skript. Sve promenljive
generisane u skriptu ostaju u radnom prostoru i nakon izvršavanja skripta pa se mogu koristiti u
daljim izračunavanjima.
Sadržaj skripte je potrebno prvo napisati u nekom tekst editoru. Napomenimo, ponovo, da se sve
iza znaka '%' podrazumjeva kao komentar. Nakon što se skripta smesti u datoteku s ekstenzijom '.m'
može se izvršiti iz MATLAB-ovog komandnog prozora kao svaka druga naredba. Ovo će biti
pokazano na sledećem jednostavnom primjeru.
% ovo je skript test.m pomocu koga se crta
% 1/4 kruznice, jediničnog radijusa
x=(0:0.001:pi/2);
plot(cos(x),sin(x))
xlabel('cos(x)'); ylabel('sin(x)');
title('x=[0 do pi/2]')
disp('skript test.m uspesno izvrsen')
Najkraće rečeno path je promenljiva okoline, u ovom slučaju MATLAB-a, koja sadrži spisak
direktorijuma u kojima se nalaze izvršne datoteke. U MATLAB-u path je unapred podešen za sve
direktorijume u kojima se nalaze izvorne MATLAB-ove naredbe, ugrađene ili M-datoteke. Ukoliko
14
se želi dodati neki direktorijum u path odabere se iz menija File|Set Path ili u komandnom
prozoru za izvršenje sledeća naredba
>> path(path,'c:\tmp\matlab\');
Napomenimo da je u path-u i trenutni direktorjum (engl. Current Directory) komandnog prozora
MATLAB-a, pa se skript može izvršiti i ukoliko promenimo trenutni direktorijom u komandnom
prozoru naredbom
>> cd c:\tmp\matlab
ili u MATLAB desktopu unosom željenog direktorijuma u prozor Current Directory. Najzad,
posle promene promenljive path ili posle promene trenutnog direktorijuma s naredbom cd može
se izvršiti skript test.m
>> test
skript test.m uspesno izvrsen
Ovaj skript otvara novi prozor u MATLAB-u, Figure Window, u kome se prikazuje njegov rezultat
(slika 2). Skript je moguće izvršiti i direktno iz editora kroz meni Debug|Run ili kratko sa tastature
otkucavanjem F5.
function a = average(b)
% AVERAGE Srednja vrednost elemenata vektora.
% AVERAGE(B), gde je B vektor, predstavlja srednju
% vrednost elemenata vektora.
% Za ne-vektorski ulaz funkcija ispisuje gresku.
[m,n] = size(b);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error('Ulaz mora biti vektor!')
end
a = sum(b)/length(b); % proracun srednje vrednosti
16
>> y=average(x)
y =
0.7850
Uslovne strukture su moćan alat, budući da omogućavaju da pređašnje operacije algoritma utiču na
buduće. MATLAB pruža četiri oblika petlji, odnosno uslovnih struktura: for petlje, while petlje,
if-else-end strukturu i switch-case strukturu.
Pri izvršavanju ove strukture proverava se izraz1, pa izraz2, ... ukoliko je neki od tih izraza istinit
izvršavaju se pripadajuće naredbe - narebe1, naredbe2, naredbe3, ... . Ako nijedan od izraza
nije istinit izvršavaju se naredbe iza else. Završni deo strukture else ne mora se uvek primeniti.
Razmotrimo primer iz predhodnog poglavlja
>> EPS=1;
>> for num=1:1000
EPS=EPS/2;
if(1+EPS)<=1
EPS=EPS*2
break
end
end
EPS =
2.2204e-016
>> num
18
num =
53
Naredba break uzrokuje izlazak iz for petlje na prvu naredbu koja sledi. U ovom slučaju vraća se u
komandni prozor i prikazuje vrednost promenljive EPS .
Ovde izraz mora biti skalar ili znakovna promenljiva. Ukoliko je test_izraz1 isinit izvršavaju se
naredbe1, a ukoliko taj izraz nije istinit prelazi se na testiranje izraza test_izraz2 i ako je on
isinit izvršavaju se naredbe2, a ako ne (dakle nije istinit ni test_izraz1 ni test_izraz2)
izvršavaju se naredbe3. Pokažimo to na jednostavnom primeru
% primer za 'switch-case' strukturu
x=2.7; % velicina u [cm]
units='m' % zelim je pretvoriti u 'units'
switch units
case {'inch','in'}
y=x/2.54;
case {'feet','ft'}
y=x/(2.54*12);
case {'meter','m'}
y=x/100;
case {'milimeter','mm'}
y=x*10;
case {'centimeter','cm'}
y=x;
otherwise
disp(['Nepoznata jedinica:', units])
y=nan;
end
Izvršavanjem ovog primera dobija se konačna vrednost y=0.027.
- prekid i izlazak iz petlje (for ili while); takođe predstavlja naredbu za prekid izvršavanja
skripta;
return
Od tipova promenljivih navedenih na slici (4) za naprednijeg programera od interesa može biti tip
strukture (structure) i tip korisničke klase (user class) koja omogućava korisniku stvaranje
novih klasa, a nad njima i operacija (metoda) - time je moguća implementacija objektno orjentiranih
programa.
Još je bitno samo napomenuti da se svi proračuni u MATLAB-u sprovode u dvostrukoj preciznosti
(engl. double precision).
Za ovako definisanu klasu polinoma definisane su osnovne operacije, operacije koje se mogu vršiti
na polinomima. Počev od množenja i deljenja dva polinoma (conv i deconv), određivanja izvoda
polinoma (polyder), izračunavanja vrednosti polinoma u zadatim tačkama (polyval), određivanja
korena polinoma (roots), ... Posebno je zanimljiva naredba određivanja polinoma koji najbolje (u
smislu metode najmanjih kvadrata) opisuje diskretan niz podataka opisan vektorom x i vektorom y
koordinate: polyfit.
20
Pored oblika funkcije kroz M-datoteku postoji i tip promenljive - rukovanje funkcijom (engl.
function handle). Osnovne prednosti primene rukovanje funkcijom su: mogućnost rukovanje
funkcijom kao ulazne promenljive drugoj funkciji, prilagodljivost i odabir funkcije odgovarajućeg
tipa ulazne promenljive, mogućnost pristupa podfunkcijama i privatnim funkcijama, poboljšane
performanse kod uzastopnog izvršavanja. Funkcijska promenljiva definiše se dodavanjem znaka @
ispred naziva funkcije
Pored ovog načina moguće je primeniti naredbu evalin za prenos između memorije funkcije i
radne memorije ili memorije funkcije iz koje se poziva. Ovo predstavlja robustan način
prosleđivanja promenljivih. Uz njega se primenjuje i naredba persistent u kontekstu sličnom
naredbi global, ali su pri tome promenljive deklarisane kao persistent dostupne samo funkciji u
kojoj su definisane i ne menjaju vrednost između dva poziva razmatrane funkcije. Saglasno tome,
persistent promenljive se ne mogu promeniti u nekoj drugoj funkciji ili komandnom prozoru.
Sledeći oblik interakcije programa s korisnikom je pauziranje programa tokom njegovog izvršavnja
na mestu naredbe pause. Program će nastaviti izvršavanja nakon pritiskanja neke tipke s tastature.
Tako će se omogućiti korisniku da, na primer, pregleda dijagrame između njihovog iscrtavanja.
Ukoliko je potrebno da program pauzira izvršavanje tačno određeno vreme (n sekundi) poziva se
naredba pause(n).
Prilikom pisanja dugačkih linija prelazak u novi red ostvaruje se unosom ... što se može primeniti
u komandnom prozoru, ali i u programima. Ali, nastavak u novi red nije moguće izvršiti tokom
definisanja promenljive tipa karakter, unutar jednostrukih navodnika. Znak ; primjenjuje se pri
završavanju naredbe za koju ne želimo ispis u komandnom prozoru - njegova upotreba u
programima po pravilu se preporučuje uvek osim u slučaju kontrole rezultata i međurezultata. Pored
navedene funkcije znak ; ima i funkciju razdvajanja naredbi u istoj liniji.
>> y=average(x)
??? Undefined function or variable 'average'.
Ovo je bila poruka nakon starta funkcije average kada nije bila u pathu. MATLAB javlja da nije
našao ni funkciju ni promenljivu imena average. Naime MATLAB nakon unosa određene naredbe
(bilo u komandnom prozoru ili programu) ima u osnovi sledeća pravila prioriteta:
Sličnu poruku bi dobili ukoliko bi u funkciji average.m u zadnjem redu umesto naredbe za
sumiranje sum greškom stajalo sm:
>> y=average(x)
??? Undefined function or variable 'sm'.
Pored ove greške nekorektnih imena promenljivih (često s razlikom u velikom/malom slovu)
najčešća je greška operacije na matricama nekorektnih dimenzija ili sintaksna greška u zapisu
matematičkih izraza i to kada se ispusti zagrada kao na primer:
>> y=average(x)
??? Error: File: C:\MATLAB6p5\work\average.m Line: 10 Column: 20
")" expected, ";" found.
Koristiti help MATLAB-a za ispravan poziv funkcija: nema potrebe poznavati pozive
funkcija napamet kada na raspolaganju uvek stoji naredba help u komandnom prozoru. Za
detaljniji opis može se konsultovati html help ili pdf dokumentacija.
Komentarisanje kôda je dobra praksa za početnike u programiranju. To olakšava ponovnu
upotrebu/primenu programa. A i onome ko kontroliše lakše je takav kôd da prati i oceni.
Planiranje programa po njegovim delovima - podelom u manje zadatke olakšava njegovu
izradu. Ukoliko pojedini zadatak predstavljaja nezavisnu celinu, on se može zapisati u
posebnoj funkciji.
Pored izbora ispravnog algoritma nužno je napraviti i ispravan izbor odgovarajućeg tipa
promenljive.
Pisanje programa u manjim delovima (po liniju ili nekoliko linija) i njihovo testiranje,
umesto pisanja celog programa, će ubrzati otkrivanje grešaka. Isto važi i kod modifikovanja
postojećeg programa.
Prilikom pisanja programa se treba ograničiti na prvih 80 znakova u liniji - na taj način
zadržaće se preglednost pri čitanju, ali i pri ispisivanju (printanju) programa.
Potpuna vektorizacija algoritma, tamo gde je ona moguća, ubrzaće rad programa, ali ukoliko
je ista prekomplikovana, može se izazvati suprotan efekt. Tako se for petlje jednostavnijih
algoritama lako realiziraju u vetkorskoj verziji primenom operacija po elementima.
Upotreba standrdnih matrica ubrzava se rad programa, a i lakše je držati pod kontrolom
takve promenljive. To je posebno slučaj ako program nije pisan marično; primenom
verktorizacije. Upotreba standrdnih matrica je najjednostavnije izvršiti na početku programa
23
MATLAB ima mogućnost detaljne analize performansi programa i otkrivanja uskih grla primenom
Profiler-a, ali taj alat je zanimljiv za kompleksnije aplikacije tako se u ovom tekstu neće opisivati.
4. Grafika
Već su u prethodnom poglavlju korišćene neke grafičke mogućnosti MATLAB-a. U ovom poglavlju
će biti dat detaljniji prikaz osnovnih naredbi za grafičku prezentaciju podataka i kratki prikaz
naredbi za specijalnu i 3D grafiku.
1. priprema podataka,
2. odabir prozora, pozicije za dijagram,
3. crtanje podataka,
4. postavljanje karakteristika linija i markera,
5. postavljanje karakteristika osa dijagrama i mreže,
6. oznake na dijagramu,
7. eksportovanje grafike.
Određeni koraci se naravno, po potrebi, mogu i preskočiti. U ovom poglavlju biće date osnovne
naredbe za sprovođenje gore navedenih koraka. Prvi korak neće biti detaljnije opisivan budući da je
njegov sadržaj bio predmet prethodnih poglavlja. Ukoliko je grafika samo alat brze analize
rezultata, prva tri koraka mogu da budu dovoljna, ali ukoliko je potrebno rezultate grafički
prezentirati verovatno će biti potrebno odraditi sve korake.
semilogx
Sve ove funkcije imaju različitu sintaksu za različite potrebe korisnika. Detaljnije ćemo se upoznati
samo s naredbom plot, koja je i najčešća, naredbom semilogx (slika 6) i samo ukratko sa
naredbom plotyy zbog njene specifičnosti. Pored ovih naredbi postoje i mnoge naredbe za ostale
oblike dijagrama (polarne dijagrame, bar, pite, histograme, ruže, ...), crtanje poligona i tela ili izradu
animacija kao i prikaz bitmap grafike. Ali one ovde neće biti opisivane.
t=[0:2:360]*pi/180;
y=sin(t);
plot(t,y)
parametrom na x-osi. Tačke vektora su međusobno, u ovom difoltnom načinu poziva naredbe
plot(t,y) spojene punim plavim linijama.
Ukoliko se na istom dijagramu želi prikazati istovremeno više vektora primenjuje se kôd sa slike
(2). Pri tome je MATLAB opet primenio difoltni prikaz pune linije, ali je menjao boje i to po
preddefinisanom rasporedu (plava, zelena, crvena, ...).
y1=sin(t-pi/6);
y2=sin(t-pi*2/6);
plot(t,y,t,y1,t,y2)
Ako se želi promeniti oblik ili boja linije (primeri sa slika 2 I 3) potrebno je iza svake kombinacije x
i y koordinata dati šifru označenu jednostrukim znakom navoda: plot(t,cos(t),'r:'). Dakle
oznaka 'r:' predstavlja šifru za liniju tačkastog oblika : u crvenoj boji r. Od raspoloživih oblika
linija postoje puna, isprekidana, tačkasta i linija-tačka. Osnovne boje imaju svoje znakovne oznake,
a pored toga moguće je definisati bilo koju RGB boju. Više o samim oznakama može da se prouči
naredbom help plot.
plot(t,y,t,y1,':',t,y2,'-
')
26
figure
plot(t,y)
hold on
plot(t,cos(t),'r:')
Prolaskom kroz ove primere naredbe plot u komandnom prozoru MATLAB-a može da se zapazi da
je nakon izvršenja prve naredbe za crtanje otvoren novi prozor sa definisanim dijagramom.
Ponovljene naredbe za crtanje izvodile su se na tom istom prozoru ali na način što su prethodne
27
krive izbrisane. Ukoliko želimo da se zadrže prethodne krive i na dijagram dodamo nove potrebno
je aktivirati naredbu hold on (slika 4). Kada želimo da se u jednom trenutku izbrišu sve stare i
ostane samo zadnja kriva dovoljno je prethodno dati naredbu hold off. Ako želimo da izbrišemo
celi dijagram iz grafičkog prozora primenjujemo naredbu clf, a naravno možemo i jednostavno
zatvoriti grafički prozor - kao i svaki prozor u operacijskom prozoru ili naredbom close. Kada se
želi zadržati prvi grafički prozor i na novom grafičkom prozoru nacrtati novi dijagram dovoljno je
dati naredbu figure.
Naredbom figure otvara se novi grafički prozor (s oznakom redom sledećeg broja; slika 4). Ali
kako odrediti na koji grafički prozor MATLAB iscrtava našu krivu? Ona se iscrtava u onom prozoru
na kome je bio zadnji fokus (windows terminologijom: onaj koji je zadnji bio aktiviran – tastaturom
ili mišem). Fokus se može definisati i naredbom figure(1) koja će postaviti 1. grafički prozor za
aktivni prozor. Broj aktivnog prozora se može uvek proveriti naredbom gcf. Kod rada s većim
brojem grafičkih prozora korisna je i naredba close all koja zatvara sve grafičke prozore.
semilogx(y,t,'ko')
28
plot(t,y,'r:d', ...
'LineWidth',1.1, ...
'MarkerSize',10, ...
'MarkerFaceColor','y',
...
'MarkerEdgeColor','k')
hold on
plot(t,yy,'b--v', ...
'LineWidth',2.2, ...
'MarkerSize',6, ...
'MarkerFaceColor','g',
...
'MarkerEdgeColor','r')
30
plot(t,y)
xlabel('ugao')
ylabel('y=exp(2*cos(t))')
title('Uvod u Matlab')
text(-3,2,'rezultat')
gtext('y=f(x)')
grid on
34
Kod dijagrama sa dve y-ose nešto je komplikovanija procedura ali osnovni elementi su isti (slika
14). Sintaksa poziva naredbe za crtanje daje nam kao izlazni rezultat 3 promenljive, takozvane
handlove i to za osu dijagrama i dve krive. One su nam bitne kada dodajemo tekst na 1. y-osu
(promenljiva ha(1)) ili na 2. y-osu (promenljiva ha(2)).
Takođe, bitno je definisati razmeru odnosno odnos prikaza za x i y osu. Na slikama 15. i 16.
prikazane su krive oblika elipse
t=0:pi/20:pi;
plot(sin(t),2*cos(t))
a) b)
36
a) b)
Slika 16: Razmere: a) axis equal, b) axis equal tight
t=0:pi/20:2*pi;
figure
subplot 311
plot(t,sin(t))
ylabel('sin(ugao)')
title('Uvod u Matlab')
subplot 312
plot(t,cos(t))
ylabel('cos(ugao)')
subplot 313
plot(t,cos(t-pi/6),'r')
xlabel('ugao')
ylabel('cos(ugao-pi/6)')
Pri tome je od koristi naredba meshgrid koja transformiše domen iz zadatih vektora x i y u matrice
X i Y. Naredbom mesh generiše se žičani model površine pri čemu se definisane tačke spajaju
linijama koje mogu imati različite boje. Naredba surf iscrtava spojne linije, ali i površine između
tih linija u različitim bojama (slika 20). Na slikama 19. i 20. boja na površinama je definisana
vrednostima matrice Z. Sintaksom surf(X,Y,Z,C) matrica C definiše boju na površini i time
predstavlja dodatni parametar. Za promenu prikaza boja na površini primenjuje se kolormapa
(naredba colormap) koja je zapravo matrica sa tri kolone u kojoj je svaka vrsta jedna RGB boja. Na
slici 20. dat je primer na kome ose dijagrama nisu prikazane: naredba axis off (primenljiva i kod
2D dijagrama). Na slici 21 prikazana 3D kutija (box on) osa za razliku od primera sa slike 19.
surf(X,Y,Z)
axis off
colormap cool
axis on
40
box on
grid off
view(30,70)
Slika 22: Primer mogućnosti zapreminske vizuelizacije profila brzine strujanja na izlazu mlaznice
Drugi primer (slika 24) je prikaz vektora u tačkama 2D prostora. Naredbom quiver(X,Y,U,V) u
svakoj x-y koordinati (matrice X i Y) definisan je vektor sa svojim x i y koordinatama (matrice U i
V). Na slici 24. dat je istovremeno konturni prikaz matrice Z i gradijenta te funkcije.
[U,V] = gradient(Z,.2);
hold on
quiver(X,Y,U,V)
Slika 24: Konturni dijagram funkcije sa dve promenljive sa vektorskim prikazom gradijenta
funkcije
1. crtanje na printeru,
2. zapis u datoteku (Postscript datoteku),
3. eksportovanje u datoteku u odabranom grafičkom formatu,
4. eksportiovanje u Clipboard (za dalju uporabu u nekoj drugoj aplikaciji).
Zbog obima područja koje MATLAB prekriva i velikog broja naredbi u ovom tekstu su date
informacije samo o osnovnim naredbama koje bi trebale biti osnova za dalji rad.
Od Toolbox-ova za početak je bitno istaći statistiku, simbolički toolbox i Control System toolbox.
Kod analize sistema, sa stanovišta teorije upravljanja, veliku primenu našao je Simulink.
Literatura
1. Using MATLAB - Version 6. The MathWorks Inc., Natick, 2002.
2. Using MATLAB Graphics - Version 6. The MathWorks Inc., Natick, 2002.
3. MATLAB Documentation - Version 7. The MathWorks Inc., 2006.
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab.html