You are on page 1of 43

1

МОДЕЛИРАЊЕ ДИНАМИЧКИХ СИСТЕМА


Школске 2013. – 2014. године
Наставу изводи:
Др Драган Милосављевић, редовни професор

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

4.2.4 Kombinacija linijskog I prikaza pomoću tačaka 29


4.2.5 Linijski prikaz matrice 31
4.2.6 Prikaz kompleksnih brojeva 32
4.2.7 Linijski prikaz sa dve y ose 33
4.2.8 Podešavanje parametara na dijagramu 34
4.2.9 Više dijagrama na jednom grafičkom prozoru 38
4.3 Vizuelizacija podataka u 3D 39
4.3.1 Zapreminska vizuelizacija 42
4.3.2 Specijalni oblici 2D grafičkih prilaza 43
4.4 Crtanje i eksportovanje grafike 44
Literatura 45

1. Osnove rada u MATLAB-u


1.1 Šta je MATLAB?
MATLAB (Matrix Laboratory) je high-performance programski jezik namenjen za tehničke
proračune. Objedinjava računanje, vizuelizaciju i programiranje u lako upotrebljivoj okolini u kojoj
su problem i rešenje definisani poznatom matematičkom notacijom. Uobičajena je upotreba
MATLAB-a za

 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.

Skup specijalizovanih M-datoteka za rad na određenoj klasi problema naziva se Toolbox.

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.

Osnovni elementi programskog paketa MATLAB su


3

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.

1.2 Jednostavni matematički proračuni


MATLAB može poslužiti kao vrhunski, linijski kalkulator, ali krenimo od osnovnih funkcija
>> 4*25+3
ans =
103
U radnom prostoru MATLAB-a (pogl. 3) mogu se definisati promenljive:
>> a=4
a =
4
>> b=25;
>> c=3;
>> d=a*b+c
d =
103
Primetimo da ukoliko naredbu završimo s ';' MATLAB ne ispisuje rezultat te naredbe. Pored toga ;
služi za razdvajanje više naredbi u jednom redu. Ukoliko je naredba predugačka za jedan red
dodavanjem na kraju tog reda ... ista se nastavlja u sledećem redu.
Kao i kod svih računarskih jezika i ovde postoje neka osnovna pravila kod imenovanja promenljivih
(ispravnost imena promenljive, kao i imena MATLAB programa, može se proveriti naredbom
isvarname). Neka od pravila su:
4

 potrebno je razlikovati upotrebu velikih i malih slova,


 maksimalni broj znakova je 63,
 prvi znak mora biti slovo.

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 .

1.2.1 Kompleksni brojevi


Jedna od pogodnosti MATLAB-a je jednostavnost izvršavanja operacija s kompleksnim brojevima.
Možemo ih formirati na više načina, a operacije s komplesnim brojevima analogne su operacijama s
realnim brojevima
>> kmpl1=2-3i
kmpl1 =
2.0000 - 3.0000i
>> kmpl2=6+sin(pi/3)*i
kmpl2 =
6.0000 + 0.8660i
>> kmpl3=(kmpl1-kmpl2*2)*kmpl1
kmpl3 =
-34.1962 +20.5359i
Takođe moguća je jednostavna konverzija između različitih zapisa kompleksnih brojeva
A  eθi - polarne koordinate
a  ib - Dekartove pravougle koordinate
pomoću funkcija real, imag, abs, angle:
>> p_kmpl1=abs(kmpl1)*exp(angle(kmpl1)*j)
p_kmpl1 =
2.0000 - 3.0000i
>> real(p_kmpl1)
ans =
2
>> imag(p_kmpl1)
ans =
-3

1.2.2 Osnovne matematičke funkcije


MATLAB-podržava osnovne matematičke funkcije (kao npr. abs(x), acos(x), sqrt(x),
sin(x),tan(x), asin(x), atan(x), ...).
>> x=sqrt(2)/2
x =
0.7071
>> y=asin(x)
y =
0.7854
>> y_s=y*180/pi
y_s =
45.0000
Zanimljiv je primer funkcije arkus tangensa za koju, pored funkcije atan, postoji i funkcija atan2
koja ima domen u sva četiri kvadranta:
>> 180/pi*atan(-2/3)
ans =
5

-33.6901
>> 180/pi*atan2(-2,3)
ans =
-33.6901
>> 180/pi*atan2(2,-3)
ans =
146.3099

1.3 MATLAB-ov radni prostor


Dok se radi u komandnom prozoru, MATLAB pamti promenljive koje su korišćene.
Promenljive koje su u radnom prostoru (MATLAB workspace) se mogu videti u prozoru
radnog prostora (prozor Workplace) ili u komandnom prozoru primenom naredbe who (koja
ispisuje promenljive) i whos (detaljniji ispis promenljivih). Na bilo koji od ovih načina
možemo doći do informacija o tipu određene promenljive, njenoj veličini i dimenziji.

Tako je u našem primeru (u komandom prozoru):

>> 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.

1.3.1 Čuvanje i ponovna upotreba podataka


Sadržaj radnog prostora može se čuvati s binarnim formatom u željenoj datoteci ime.mat i to na
nekoliko načina:

 iz menija File|Save Workspace as...


6

 iz prozora radnog prostora – desnim klikom miša izborom Save Workplace as..., ili
ikonicom za čuvanje podataka.
 naredbom u komandnom prozoru
» save ime

Opis upotrebe svake naredbe/funkcije u komandnom prozoru u MATLAB-u može se dobiti na


sledeći način

>> help save


SAVE Save workspace variables on disk.
SAVE fname saves all workspace variables to the binary "MAT-file"
named fname.mat. The data may be retrieved with LOAD. Omitting the
filename causes SAVE to use the default filename "matlab.mat".
SAVE fname X saves only X.
SAVE fname X Y Z saves X, Y, and Z.
SAVE fname X Y Z -ascii uses 8-digit ASCII form instead of binary.
SAVE fname X Y Z -ascii -double uses 16-digit ASCII form.
SAVE fname X Y Z -ascii -double -tabs delimits with tabs.
If fname is "stdio", SAVE sends the data to standard output.
The binary formats used in MAT-files depend upon the size and type of
each matrix. Small matrices and matrices with any noninteger entries
are saved in floating point format requiring 8 bytes per real element.
Large, integer matrices may be saved in compact formats requiring
only 1, 2 or 4 bytes per element. See the External Interface Library
for more details, including C and Fortran routines to read and write
MAT-files from external programs.
See also LOAD, DIARY, FWRITE, FPRINTF, IMWRITE.
Ukoliko se žele sačuvati samo neke promenljive u datoteci data.mat odgovarajuća naredba je
>> save data kmpl1 kmpl2 kmpl3
tada je datoteka sačuvana u trenutnom direktorijumu.

Osim binarnog formata za čuvanje se može korisitit i ASCII format, ali samo iz komandng prozora.
Tako s naredbom

>> save data.dat kmpl1 kmpl2 kmpl3 -ascii


Snimaju se željene promenljive iz popisa u ASCII datoteci data.dat.

Učitavanje željenih podataka iz spoljašnje datoteke ime.mat može se sprovesti na nekoliko načina:

 iz menija File|Load Workspace...


 iz prozora radnog prostora – desnim klikom miša i izborom Import Data...ili ikonicom za
otvaranje.
 naredbom u komandnom prozoru
» load ime

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.

2.1 Formiranje matrica


Krenimo za početak od zapisa matrica u MATLAB-u. Elementi matrice se unose između srednih
zagrada [ ]:
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> B=[1 2 3;4 5 6;7 8 9]
B =
1 2 3
4 5 6
7 8 9
Vektor, odnosno jednodimenzionalno polje može se zapisati na sledeći način
>> x=[1 2 3]
x =
1 2 3
Dakle razdvajanjem elemenata s razmacima ili zapetama definišu se elementi u različitim
kolonama, dok razdvajanjem s ; ili novim redom <enter> definišu se elementi u različitim vrstama.

Moguće je i automatizirano formiranje vektora

>> 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

2.2 Pristupanje delu matrice


Pojedini element matrice može se ispisati definisanjem njegove vrste ili kolone (npr. element
matrice A u prvoj vrsti i drugoj koloni)
>> A(1,2)
ans =
2
Ukoliko želimo videti prve dve vrste matrice A
>> A(1:2,:)
ans =
1 2 3
4 5 6

Moguća je korekcija pojedinih elemenata (npr. želimo promeniti zadnju vrstu matrice A vektorom-
vrstom r)

>> r=[101 102 103];


>> A(3,:)=r
A =
1 2 3
4 5 6
101 102 103
ili dopuna matrice (npr. želimo matricu B proširiti s dodatnom vrstom jednakom vektoru-vrsti r)
>> B=[B;r]
B =
1 2 3
4 5 6
7 8 9
101 102 103
Ukoliko bi se kod matrice A definisao element u drugoj vrsti i šestoj koloni
>> A(2,6)=1
A =
1 2 3 0 0 0
4 5 6 0 0 1
101 102 103 0 0 0
matrica se proširuje na potrebnu dimenziju dodajući na novodefinisanim mestima nule. Ukoliko se
deo matrice izjednači s praznom matricom [ ] isti deo se briše čime se početna matrica svodi na
ostatak:
>> A(:,4:5)=[ ]
A =
1 2 3 0
4 5 6 1
101 102 103 0
9

2.3 Osnovne matematičke operacije s matricama


2.3.1 Operacije skalar - matrica
Matrici možemo dodati i/ili oduzeti skalar pri čemu rezultat zadržava izvornu dimenziju
>> A=[1,2,3;4,5,6;7,8,9];
>> A-1
ans =
0 1 2
3 4 5
6 7 8
>> 2*A-1
ans =
1 3 5
7 9 11
13 15 17

Takođe je definisana operacija stepenovanja matrice skalarom na sledeći način

>> 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.

2.3.2 Operacije matrica - matrica


Za početak će biti pokazano kako se dobija transponovana matrica
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> B=A'
B =
1 4 7
2 5 8
3 6 9

Za matrice jednakih dimenzija moguće je definisati operaciju sabiranja

>> 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

2.3.3 Operacije na elementima matrica


Ovde su opisane operacije koje se sprovode po odgovarajućim elementima matrica. Ukoliko su
matrice jednakih dimenzija moguće je primeniti operacije množenja ('.*'), djeljenja ('./' s desne i
'.\' s leve strane) i stepenovanja ('.^') po elementima
>> A,D
A =
1 2 3
4 5 6
7 8 9
D =
1 1 1
2 2 2
3 3 3
>> A.*D
ans =
1 2 3
8 10 12
21 24 27
11

>> 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

2.4 Dimenzije matrica i vektora


Već je ranije (pogl. 3.) opisano kako dobiti informaciju o određenoj promenljivoj. Tako se
dimenzija podatka iz radnog prostora može videti u prozoru radnog prostora ili iz komandnog
prozora
>> whos
Name Size Elements Bytes Density Complex
A 3 by 3 9 72 Full No
B 3 by 3 9 72 Full No
C 3 by 2 6 48 Full No
D 3 by 3 9 72 Full No
P 3 by 3 9 72 Full No
Q 3 by 3 9 72 Full No
ans 1 by 1 1 8 Full No
r 1 by 3 3 24 Full No
total is 55 elements using 440 bytes
Kada je potrebna dimenzija određene matrice u nekim algoritmima mogu se koristiti sledeće
funkcije
>> R=[1 2 3 4;5 6 7 8]
R =
1 2 3 4
5 6 7 8
>> [vrsta,kolona]=size(R)
vrsta =
2
kolona =
4
>> length(R)
ans =
4

2.5 Sistem linearnih jednačina


Već je spomenuto da je problem rešavanja sistema linearnih jednačina jedan od najčešćih problema
linearne algebre. Razmotrimo na primer sledeći sistem jednačina
12

1 2 3  x  366
   1  
4 5 6   x2   804 ,
     
7 8 0  x3  351

Ax  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 .

Zanimljivo je ovde navesti i funkciju kojom se može odrediti determinanta matrice

>> 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).

3. Programi i funkcije u MATLAB-u


MATLAB ima i mogućnost razvoja algoritama u sopstvenom programskom jeziku. Datoteke s
takvim algoritmima nazivamo M-datoteke, a zapisuju se s ekstenzijom '.m'. Pri tome se mogu
razlikovati dve vrste M-datoteka: skripti i funkcije. Skripti su skup naredbi koje se prenose i
izvršavaju u komandnom prozoru (adekvatno glavnom programu). Funkcije su na neki način crne
kutije kojima dajemo određeni ulaz i dobijamo traženi izlaz.

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')

Slika 1: Primer skripta


Pokrene se prvo MATLAB-ov editor: File|New...|M-File i u njemu unese kôd sa slike 1. Posle
toga se skript smesti u datoteku pod imenom test.m u radni direktorijum (neka to na primer bude
c:\tmp\matlab\). Sledeći korak je pokrenuti taj skript jednostavnim zadavanjem naredbe u
komandnom prozoru:
>> test
??? Undefined function or variable test.

Da bi se dati skript izvršio potrebno je da direktorijum u kome je smešten (c:\tmp\matlab\) bude


u MATLAB-ovom path-u. Pojasnimo ovde pojam path-a.

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.

Slika 2: Rezultat skripta test.m


Osnovno pravilo pri pisanju skripti je da se u prvi red (tj. prve redove) postavlja komentar kojim se
opisuje skript. Ukoliko se primeni komanda help uz opciju test dobiće se sledeće
>> help test
ovo je skript test.m pomocu koga se crta
1/4 kruznice, jediničnog radijusa
dok je stanje u radnom prostoru nakon izvršavanja ovog skripta
>> whos
Name Size Elements Bytes Density Complex
x 1 by 1571 1571 12568 Full No

Grand total is 1571 elements using 12568 bytes

Dakle interna promenljiva x skripta test.m dostupna je i nakon izvršavanja programa.


15

3.2 Funkcijske M-datoteke


Kod funkcijskih datoteka promenljive su lokalne, i nema ih u radnom prostoru, pa se zato
može reći da je funkcija na neki način crna kutija. Funkcijska datoteka komunicira s radnim
prostorom samo preko promenljivih ulaza i promenljivih izlaza. Funkcije ne koriste radnu
memoriju (engl. base workspace) već je područje dosega memorije funkcije ograničeno -
one imaju svoju vlastitu memoriju, engl. workspace. Prosleđivanje promenljivih iz radne
memorije u memoriju funkcije je najsigurnije preko ulazno-izlaznih promenljivih. Postoje i
drugi načini o kojima će biti više reči kasnije.
Osnovna forma funkcijske M-datoteke data je na slici (3).
function [izl1,izl2,...] = imedatoteke
(ul1,ul2,...)
% ovo je kratak opis funkcijske m-datoteke
% komentar za dokumentaciju...
% sve ono sto je iza '%' je komentar
% ovaj komentar se vidi u komandnom prozoru ako
% se ukuca help imedatoteke
% ova funkcija je smeštena u datoteci:
% imedatoteke.m
% ...
...

Slika 3: Propisana forma funkcijske M-datoteke


Glavni element je prva linija u kojoj se definše funkcija sa svojim imenom (to ime određuje i ime
datoteke u kojoj je smeštena funkcija), ulaznim i izlaznim promenljivima. Posle nje sledi niz
komentar linija, koje predstavljaju help funkcije, i pri tome je prva od njih (naziva se H1 linija)
posebna, jer se ona pretražuje naredbom lookfor i uobičajeno je da sadrži ime i kratki opis
funkcije. Posle komentar linija sledi samo telo funkcije.

Uz pretpostavku da je funkcijska M-datoteka (imedatoteke.m) smeštena u MATLAB-ovom path-u


funkcija se izvršava pozivom u MATLAB-ovom komandnom prozoru (ili u nekoj drugoj M-datoteci)
na sledeći način:

>> [izl1,izl2,...] = imedatoteke(ul1,ul2,...)

pri čemu su ul1,ul2,... ulazne promenljive, a izl1,izl2,... izlazne. Izvršavanje funkcijske .m


datoteke se ne preporučuje direktno iz editora, budući da se nema kontrola nad ulaznim
promenljivim.

Funkcijske M-datoteke će se analizirati na primeru funkcije average.m, koja određuje srednju


vrednost za elemente jednog vektora. Pri tome ulazna promenljiva ne sme biti skalar ili matrica.

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

U komandnom prozoru funkciju pozivamo na sledeći način

>> y=average(x)
y =
0.7850

3.3 Petlje i uslovne strukture


Ukoliko čitaoac nije od ranije upoznat s mogućnostima kontrole toka i strukture algoritama, koje
pružaju razni programski jezici, ovo poglavlje mu moze biti komplikovano, pa je, u tom slučaju,
potrebno preći ga pažljivo.

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.

3.3.1 for petlje


for petlje omogućavaju da se grupa naredbi ponavlja unapred određeni broj puta. Opšti oblik for
petlje je
for x = array
naredbe...
end
naredbe između for i end izvršavaju se jednom za svaku kolonu u array. Na primer
>> for n=1:10
x(n)=sin(n*pi/10);
end
>> x
x =
Columns 1 through 7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
Columns 8 through 10
0.5878 0.3090 0.0000
Osim automatski generisanog polja 1:10 može se primeniti bilo koje polje, npr.
>> data=[3 9 45 6; 7 16 -1 5];
>> for n=data
y=n(1)-n(2)
end
y =
-4
y =
-7
y =
46
y =
1
Pored ovih mogućnosti for petlje mogu biti ubačene jedna u drugu.

3.3.2 while petlja


Kod while petlje naredbe između while i end izvršavaju se sve dok su svi elementi izraz-a
istiniti:
>> while izraz
naredbe...
end
17

Razmotrimo sledeći primer


>> num=0;EPS=1;
>> while (1+EPS)>1
EPS=EPS/2;
num=num+1;
end
>> num
num =
53
>> EPS=2*EPS
EPS =
2.2204e-016
>> eps
eps =
2.2204e-016
Ovaj primer prikazuje jedan od načina određivanja vrednosti najmanjeg broja (EPS) kome može biti
dodato 1 tako da je rezultat tog zbira (1  EPS  1 ) koristeći konačnu preciznost. Definisana
promrnljiva EPS jr upoređena sa specijalnom funkcijom MATLAB-a - eps. Šta se zapravo dešava u
ovoj petlji. Vrednost EPS se stalno smanjuje od početne vrednosti ( EPS  1 ) pri svakom prolazu
kroz petlju. Budući da MATLAB koristi 16 značajnih cifara pri predstavljanju brojeva logično je
očekivati da EPS (odnosno eps ) bude oko 10 16 . Tako je uslov ( 1  EPS  1 ) neistinit (false,
jednak nuli) i petlja se prekida. Na kraju se EPS množi sa 2, jer se u zadnjem prolazu kroz petlju
stvarna vrednost EPS podelila sa 2.

3.3.3 if-else-end struktura


Često je potrebno izvrštiti neke operacije ako su zadovoljeni određeni uslovi. To omogućuje if-
else-end struktura. Forma ove strukture u opštem slučaju je
if izraz1
naredbe1 ... izvršene ako je izraz1 istinit
else if izraz2
naredbe2 ... izvršene ako je izraz2 istinit
elseif izraz3
naredbe3 ... izvršene ako je izraz3 istinit
elseif ...
naredbe4 ... izvršene ako je izraz4 istinit
...
else
naredbe ... izvršene ako nijedan izraz nije istinit
end

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 .

3.3.4 switch-case struktura


Ova je struktura pogodna u slučaju kada je potrebno više puta ispitivati istinitost izraza a na osnovu
jednog argumenta. Forma ove strukture je
switch izraz
case test_izraz1
naredbe1...
case test_izraz2
naredbe2...
otherwise
naredbe3
end

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.

3.3.5 Posebne naredbe za definisanje toka programa


Posebne naredbe kojima se u programima, skriptima ili funkcijama, može uticati na tok programa
su:
continue

- prelazak na sledeću iteraciju petlje (for ili while);


break

- prekid i izlazak iz petlje (for ili while); takođe predstavlja naredbu za prekid izvršavanja
skripta;
return

- prekid izvršavanja funkcije i vraćanje kontrole pozivnoj funkciji/skirpti.


19

3.4 Tipovi podataka


U MATLAB-u postoji 15 osnovnih tipova (klasa) podataka (slika 4). Svi su tipovi u formi polja i
podržavaju osnovne operacije na poljima.

Slika 4: Tipovi podataka u MATLAB-u

Za potrebe ovog kursa od interesa su samo numerička polja (jednodimenzionalna - vektori,


dvodimenzionalna - matrice i naravno skalari - MATLAB ih prikazuje kao polja dimenzije 1x1) kao
i polja karaktera (char). Pored navedenih, već smo se susreli i sa promenljivim logičkog tipa koje
dobijaju vrednost 1 za true ili 0 za false.

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).

3.4.1 Klasa polinoma


Primer klasa u MATLAB-u je klasa polinoma: ona polinome predstavlja kao vektore u obliku vrste
tako da su elementi vektora koeficijenti polinoma poređani po opadajućim stepenima. Tako bi se
polinom
p  2s 3  s  3
(s)
u MATLAB-u definsao kao
>> p=[2 0 -1 3];

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

3.5 Tipovi funkcija


U predhodnom poglavlju upoznate su osnovni tipovi MATLAB funkcija, koji su definisani M-
datotekama. Tako definisana funkcija može biti različitog tipa: osim primarnog tipa, koji je
razmotren; podfunkcije (definisane unutar primarnih funkcija i ne vide se iz spoljašnjosti), interne
(vidljive samo određenim funkcijama), funkcije s preopterećenjem (engl. overloaded functions,
funkcije koje zavisno od tipa ulaza pozivaju različite funkcije), umetnute funkcije (engl. nested) i
MATLAB ugrađene funkcije (engl. built-in). Ovde su ovi tipovi funkcija samo informativno
navedeni i o njima neće biti više detalja.

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

>> fhandle = @average;

Evaluacija funkcije fhandle može se sprovesti upotrebom funkcije feval


>> feval(fhandle,0:0.1:1);
>> average(0:0.1:1);
Pri tome gornje naredbe daju isti rezultat. Pored ovog primera postoje funkcije koje kao ulazne
promenljive imaju funkcijske promenljive, npr. za određivanje minimuma i nule funkcije,
optimizaciju, numeričku integraciju i za obične diferencijalne jednačine.

3.5.1 Prosleđivanje promenljivih


Ukoliko je potrebno određene promenljive upotrebiti u nekoliko funkcija, a želi se izbegavanje
njihovog pojavljivanje u popisu ulaznih promenljivih tih funkcija, dovoljno je takve promenljive
deklarisati kao globalne. Tako je u svakoj funkciji u koju želimo preneti određene promenljive (npr.
Sref, ca) potrebno kao prvu naredbu (tela) funkcije staviti
global Sref ca
Istu naredbu potrebno je staviti i u skript (i opet kao prvu naredbu) ako se npr. u njoj, kao glavnom
programu, definišu te promenljive.

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.

3.5.2 Interaktivan unos ulaznih promenljivih


Kao u većini drugih programskih jezika, i u MATLAB-u je moguće od korisnika zatražiti određeni
ulaz. Osnovni je oblik unos ulaza preko tastature komandom input, kao na primer
>> m=input('unesi vrednost za promenljivu m [kg]: ')
nakon čega MATLAB daje poziv za unos ulaza i očekuje numeričku vrednost ulaza, pa ga potom
ispisuje (budući da naredba nije završila sa znakom ;) - kao na primer:
21

unesi vrednost za promenljivu m [kg]: 1088


m =
1088

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).

3.6 Saveti za rad i programiranje u MATLAB-u


Osnovni savet koji će olakšati rad u komandnom prozoru MATLAB-a odnosi se na brži unos
naredbi. Pregled ranije izvršenih naredbi (engl. command history) u komandnom prozoru
jednostavno se ostvaruje tipkom ``strelica gore'' ili ``strelica dole'', a unosom prvih slova i
navedenih tipki pretražuje se popis ranije izvršenih naredbi koji počinju s unesenim prvim slovima.
Pored toga od koristi može biti i tipka ``tab'' s kojom se kompletira započeti naziv funkcije ili
promenljive. Brisanje sadržaja komandnog prozora, što ne podrazumjeva i brisanje memorije
radnog prostora, izvršava se naredbom clc.

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.

Format ispisa rezultata ostvaruje se preko podešavanja odgovarajuće postavke iz menija


File|Preferences|Command Window|numeric format; ili iz komandnog prozora naredbom
format. Usnovni format je short koji ispisuje 4 značajna decimalna mesta. To se može promeniti
izborom opcije long ili naredbom format long.

3.6.1 Greške u programima


Ukoliko pri izvršenju programa dođe do neočekivanih uslova - greške, MATLAB nas upozorava
porukom u komandnom prozoru i prekida dalje izvršavanje programa. Ukoliko dođe do
neočekivanih uslova pri izvršavanju određenog programa, ali ne kritičnih da bi se prekinulo njegovo
izvršavanja MATLAB nam daje upozorenje.

Bitno je napomenuti da se za prve korake u MATLAB-u korektnom analizom poruke greške iz


komandnog prozora može brže napredovati u radu. Tako je npr. poruka pri grešci koju smo već sreli
bila:

>> 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:

1. proverava da li postoji promenljiva imena average u radnom prostoru,


2. proverava da li postoji podfunkcija tog imena,
22

3. proverava da li postoji privatna funkcija istog imena,


4. pretražuje trenutni direktorijum s funkcijom average.m,
5. pretražuje direktorijume u path-u s funkcijom average.m, ili MATLAB ugrađene funkcije.

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'.

Error in ==> C:\MATLAB6p5\work\average.m


On line 10 ==> a = sm(b)/length(b); % izracunavanje srednje vrednosti

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.

U MATLAB-u postoje alati za upravljanje greškama - prekidima programa kojima je moguće


proveriti uslove zbog kojih je došlo do određene greške ili, zavisno od situacije, primeniti
odgovarajući algoritam (npr. try-catch petlja). Pored toga MATLAB ima ugrađen debuger kojim

3.6.2 Preporuke za razvoj MATLAB programa


Veština programiranja može da se izgradi samo -- programiranjem. Ali poznata su osnovna pravila
odnosno preporuke za efikanije programiranje u MATLAB-u.

 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

(svakako pre uporabe određene promenljive) njenim definsanjem i određivanjem njene


dimenzije na primer naredbom zeros.
 Globalne promenljive bi trebalo koristiti oprezno, jer se mogu provući i neželjene vrednosti.
Za brisanje globanih promenljive iz radnog prostora potrebno je primeniti naredbu clear
global.

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.

4.1 Tipična grafička sesija u MATLAB-u


Procedura pri grafičkoj prezentaciji podataka u MATLAB-u, bilo da se radi u komandom prozoru s
podacima iz radnog prostora ili u M-datoteci s definisanim podacima ima sledeće korake:

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.

4.2 Osnove grafike


Ovde će se kroz kratke primere koji slijede prezentirati naredbe, uz njihov grafički rezultat, i kraći
komentar postupka. Operacije izmene izgleda i parametara samih dijagramima moguće je izvesti i
preko grafičkih rutina - Edit Plot Mode grafičkih prozora, ali oni ovde neće biti opisani iz razloga
što je njegovo savladavanje posle ovog poglavlja vrlo intuitivno. Osim toga pristup s naredbama
ima prednost, jer se može zapisati i ponovo izvršavati iz M-datoteke.

4.2.1 Osnovne grafičke naredbe


Ovo su najčešće naredbe koje se primenjuju za grafički prikaz podataka u MATLAB-u kao funkcije
jedne promenljive:
plot

- naredba za crtanje dijagrama linearne razmere za obe ose,


loglog

- naredba za crtanje dijagrama logaritamske razmere za obe ose,


24

semilogx

- naredba za crtanje dijagrama logaritamske razmere za x-osu i linearne razmere za y-osu,


semilogy

- naredba za crtanje dijagrama logaritamske razmere za y-osu i linearne razmere za x-osu.


plotyy
- dijagram sa dve y-ose (levo i desno).

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.

4.2.2 Linijski prikaz podataka

Primer najjednostavnijeg prikaza elemenata vektora y=sin(t) dat je na slici (1).

t=[0:2:360]*pi/180;
y=sin(t);
plot(t,y)

Slika 1: Linijski prikaz podataka - vektora


Dakle u ovoj osnovnoj sintaksi naredbe plot ulazne promenljive su dva vektora sa x i y
koordinatama. Na primeru plot(t,y) želimo prikazati diskretnu funkciju jedne promenljive:
potrebna su nam dva vektora: t - vektor s vrednostima x koordinata svake tačke i y - vektor s
vrednostima y koordinata svake tačke. Jasno je da ta dva vektora moraju imati isti broj elemenata,
jer u suprotnom MATLAB javlja grešku. Ukoliko se kao ulazni parametar da samo jedan vektor kao
promenljiva: plot(y) grafički rezultat takve naredbe je prikaz vektora, ali s brojem elemenata kao
25

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)

Slika 2: Linijski prikaz grupe podataka - 3 vektora

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

Slika 3: Linijski prikaz grupe podataka - 3 vektora

figure
plot(t,y)
hold on
plot(t,cos(t),'r:')

Slika 4: Linijski prikaz: dve krive - primena naredbe hold on

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.

4.2.3 Prikaz podataka tačkama


Kada želimo elemente vektora prikazati kao tačke određenim znakom (markerom) ponovo
primenjujemo istu sintaksu naredbe plot, ali dodatne opcije definišu umesto linije odabrani znak:
npr. plot(t,y,'r*'). Dostupni oblici znakova mogu se pregledati naredbom help plot.
t=[0:10:360]*pi/180;
y=exp(2*cos(t));
plot(t,y,'r*')

Slika: Prikaz podataka tačkama

semilogx(y,t,'ko')
28

Slika: Prikaz podataka tačkama sa x-osom u logaritamskoj razmeri

4.2.4 Kombinacija linijskog i prikaza tačkama


Sličnim varijacijama navedenih opcija naredbe plot može se postići željena kombinacija oblika
linije, znaka i boje za svaku krivu na dijagramu (slika 7). Za one zahtevnije postoje i veće
mogućnosti pri podešavanju parametara krive: debljine linije, veličine znaka, ivične boje i sredine
znakova (slika 8).
y=exp(2*cos(t));
yy=exp(2.3*cos(t))+1;
plot(t,y,'r:d',t,yy,'g-
-v')
29

Slika 7: Osnovni primer kombinovanja linijskog i prikaza tačkama

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

Slika 8: Kombinacija linijskog i prikaza tačkama - napredne postavke

4.2.5 Linijski prikaz matrice


Do sada smo imali prikaz vektora u zavisnosti od jedne promenljive. Ali matlab može prikazati i niz
vektora - matricu u zavisnosti od jedne promenljive. Tako će se svaka vrsta matrice y (slika 9)
prikazati kao posebna kriva i to s vektorom t kao parametrom. Pri tome je nužno da svaka vrsta
matrice y ima isti broj elemenata kao i vektor t. Budući da nema posebnih specifikacija primenjen
je preddefinisani raspored boja s punim oblikom linija.
t=[0:2:360]*pi/180;
for i=1:12
y(i,:)=cos(t-(i-
1)*pi/12);
end
plot(t,y)
31

Slika 9: Prikaz matrice

4.2.6 Prikaz kompleksnih brojeva


Kompleksne brojeve je uobičajno prikazivati u kompleksnoj ravni, realni deo na x-osi, imaginarni
na y-osi (slika 10). Takav rezultat dobija se sa najjednostavnijom sintaksom naredbe
plot(Zk,'rs'). Kompleksne varijable Zk u ovom primeru predstavljaju korene polinoma 9. reda
ćiji su koeficijenti slučajno generisani brojevi po normalnoj distribuciji - vektor od 10 elemenata.
Zk=roots(randn(10,1));
% koren polinoma 9. reda
plot(Zk,'rs')
hold on
plot(real(Zk),imag(Zk),'b+')
32

Slika 10: Prikaz kompleksnih brojeva u realno-imaginarnoj ravni

4.2.7 Linijski prikaz sa dve y-ose


Za slučaj kada na istom dijagramu želimo prikazati dve krive, ali tako da svaka ima svoju y-osu
primjenjuje se naredba plotyy prema primeru sa slike 11. Prva y-osa je sa leve strane i u plavoj
boji (kao i sama kriva) dok je druga y-osa sa desne strane dijagrama i u zelenoj boji.
xs=[0:2:360]; %ugao u stepenima
x=xs*pi/180; %ugao u radijanima
y=sin(t);
plotyy(x,xs,x,y)

Slika 11: Linijski prikaz dva vektora na dijagramu sa dve y-ose


33

4.2.8 Podešavanje parametara na dijagramu


Na kraju finalno uređivanje grafičkog prikaza: definisanje x-y domena dijagrama (naredba axis);
crtanje mreže (grid on); dodavanje teksta - na ose dijagrama (xlabel, ylabel), u zaglavlje
(title) i u samom dijagramu (text i gtext); dodavanje legende (legend). Za primere ovih
naredbi bi trebalo proučiti slike 12. i 13.
t=-pi:pi/20:pi;
y=exp(2*cos(t));
plot(t,y)
axis([-1.5 1.5 5
10])

Slika 12: Definisanje domena prikaza za dijagram

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

Slika 13: Dodavanje tekstualnih oznaka na dijagram

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)).

xs=[0:2:360]; %ugao u stepenima


x=xs*pi/180; %ugao u radijanima
y=sin(t);
[ha,h1,h2]=plotyy(t,ts,t,y);
axes(ha(1)) % aktiviram 1. y-osu
ylabel('ugao [deg]')
set(h1,'linestyle','--')
axes(ha(2)) % aktiviram 2. y-osu
ylabel('sin(ugao)')
xlabel('ugao [rad]')
35

Slika 14: Dodavanje tekstualnih oznaka na dijagram sa dve y-ose

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))

za različite razmere x i y ose definisane varijacijama naredbe axis.

a) b)
36

Slika 15: Razmere: a) axis normal, b) axis square

a) b)
Slika 16: Razmere: a) axis equal, b) axis equal tight

4.2.9 Više dijagrama na jednom grafičkom prozoru


Već je navedeno kako napraviti više dijagrama odnosno više grafičkih prozora, ali potrebno je
definisati kako na jednom grafičkom prozoru napraviti više dijagrama. Odgovor je primenom
naredbe subfigure. Ulazni parametar za ovu naredbu (može se dati i bez zagrada za razliku od
klasičnog poziva funkcije s parametrima) jeste broj sa tri cifre. Prve dve definišu dimenziju matrice
dijagrama koju želimo prikazati na aktivnom grafičkom prozoru. Zadnja brojka definiše koji je
aktivni dijagram na tom prozoru. Npr. subfigure 312 definiše matricu 3x1 (dakle tri dijagrama u
jednom stupcu) i kao aktivni dijagram (onaj na koji će crtati krive) postavlja 2. po redu dijagram (u
opštem slučaju broji se od gornjeg levog dijagrama pa na desno i na dole).
37

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)')

Slika 17: Nekoliko dijagrama unutar jednog grafičkog prozora

4.3 Vizualizacija podataka u 3D


U osnovi MATLAB može prikazati krivu u prostoru (plot3), površinu u prostoru (mesh i surf) ili
površinu u prostoru s dodatnim parametrom (prezentiran bojom) ili površinu sa teksturom. Kada se
radi o krivoj u prostoru, potrebna su tri vektora koji definišu x, y, i z koordinate (slika 18).
t=linspace(0,10*pi);
plot3(sin(t),cos(t),t)
xlabel('sin(t)'),
ylabel('cos(t)')
zlabel('t'), title('3D
Helix')
38

Slika 18: Linijski 3D prikaz


Površine u MATLAB-u predstavljaju 3D prikaz matrice. Osnovna sintaksa prikladne naredbe je
mesh(Z). Za prikaz funkcije sa dve promenljive potrebno je definisati matrice sa x i y koordinatama
- domenom nad kojom je definisana promenljiva Z: mesh(X,Y,Z) (slika 19).
x=-7.5:.5:7.5;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z)

Slika 19: Mrežni 3D oblik


39

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

Slika 20: Prikaz površine: naredba surf

axis on
40

box on
grid off
view(30,70)

Slika 21: Prikaz površine: promena parametara prikaza


Kod 2D prikaza ova je naredba difoltno aktivna, ali linije koje uokviruju crtež (izuzev samih osa x i
y) se mogu ugasiti naredbom box off. Naredbe za definisanje parametara dijagrama (npr. axis) i
dodavanje teksta (xlabel, zlabel, title, text, ...) primenljive su i kod 3D dijagrama. Ali kod 3D
dijagrama vrlo je zanimljiva naredba kojom se definiše ugao pogleda na dijagram. Na primer
view(30,70) menja ugao pogleda na dijagram (slika 21) - ugao azimuta je prva promenljiva (30°),
a ugao elevacije je druga (70°). Definicije ovih uglova date su na slici 21.

4.3.1 Zapreminska vizuelizacija


Pod pojmom zapreminske vizuelizacije podrazumeva se grafički prikaz podataka definisanih na 3D
mreži - višedimenzionalnih polja sa skalarnim ili vektorskim podacima. Skalarni zapreminski
podaci imaju jedan podatak za svaku tačku, dok vektorski podaci imaju tri podatka u svakoj tački
definišući tako komponente vektora - dakle intenzitet i smer vektora. Za oba tipa podataka postoji
nekoliko prikladnih naredbi. Ovde je samo iz razloga prezentacije mogućnosti zapreminske
vizuelizacije skalarnih podataka dat prikaz na slici 22.
41

Slika 22: Primer mogućnosti zapreminske vizuelizacije profila brzine strujanja na izlazu mlaznice

4.3.2 Specijalni oblici 2D grafičkih prikaza


Za kraj će biti navedene dve specijalne grafičke naredbe za 2D prikaz. Prvi je primjer prikaza
funkcije dve promenljive kao konturni dijagram (naredba contour; slika 23) što je zapravo prikaz
izo-linija matrice Z. Funkcija dve promenljive Z u ovom primeru generisana je naredbom peaks.
[X,Y,Z] = peaks;
contour(X,Y,Z,20)
axis([-2 2 -2 2])

Slika 23: Konturni dijagram funkcije dve promenljive


42

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

4.4 Crtanje i eksportovanje grafike


Svi ovi napori grafičke prezentacije podataka bili bi uzaludni kada dobijene dijagrame ne bismo
mogli da transformišemo iz MATLAB-a u željeni oblik: crtanje na printeru ili prevođenje u grafičku
datoteku ili pak direktan prenos (copy-paste) u neku drugu aplikaciju. Postoje četiri osnovne
operacije kojima je moguće transformisati grafiku iz MATLAB-a:

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).

Postoje dva načina na koje se gore navedene transformacije mogu sprovesti:

1. primenom programskog/grafičkog prikaza (prilično intuitivno tako da ovde neće biti


opisano)
2. primenom MATLAB naredbi (iz komandnog prozora ili M-datoteke).
43

Osnovna naredba MATLAB-a za crtanje je print i zavisno od potrebe primenjuje se nekoliko


opcija. Svaka je opcija primenljiva kako direktno iz komandnog prozora tako i iz M-datoteke.
Osnovi pozivi print naredbe su:

 za crtanje na difoltni printer


print ili
print -dwin
 za zapis u PostScript datoteci imena mojaslika.ps
print mojaslika
 za eksportovanje u datoteku
print -dfileformat filename
Postoji celi niz formata koje MATLAB direktno podržava. Tako bi, na primer, naredba za
eksport slike br.2, sa rezolucijom 600dpi primenom grafičkog formata EPS color, u datoteku
mojeps.eps izgledala ovako:
print -f2 -r600 -depsc mojeps.eps ili
na primer eksport trenutne (aktivne) slike u JPEG format s postaljanjem maksimalnog
kvaliteta u datoteku mojjpeg.jpg
print -djpeg100 mojjpeg.jpg
 za eksportovanje u Clipboard
print -dmeta.

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

You might also like