Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

Dio 3: Programiranje u Matlabu


 

1. Matlab Skripti
 

U prijašnjim lekcijama i vježbama smo korisitili interaktivan rad sa Matlabom. Unos velikog broja 
komandi iz komandnog prostora oduzima dosta vremena a vrlo često je u Matlabu, kao i u drugim 
programskim jezicima potrebno ponoviti isti niz komandi i modifikovati ih da bi smo postigli željene 
rezultate. U ovom slučaju je lakše raditi sa Matlab skriptima – nizovima komandi sačuvanih u 
dokumentu koje se u tom slučaju mogu izvrsiti automatski jedna za drugom jednostavnim pozivom 
tog skripta. 

Skripti se mogu pisati u bilo kom editorskom programu (čak i u Wordu, što nije preporučljivo) ali ih je 
najlakše pisati u samom programskom prozoru (Editor Window) u Matlabu. Da bi ste započeli novi 
script možete koristiti Matlab meni (File – New – m‐file). Matlab skripti nemaju ulaznih ili izlaznih 
vrijednosti što predstavlja jednu od glavnih razlika izmedju Matlab skripti i Matlab funkcija o kojima 
ćemo pričati nešto kasnije. Isto tako Matlab skripti mogu koristiti i operirati jedino na varijablama 
koje se nalaze u random prostoru. Nove varijable se mogu kreirati iz Matlab skripta na način kao što 
smo to radili u prethodnoj lekciji ali u (komandnom prozoru) a nakon izvršenja skripta ove varijable 
ostaju i dalje u Matlabovom random prostoru.  

Da bi se pokrenio script izvršile komande iz tog Matlab skripta, potrebno je u komandnom prozoru, 
poslije standardnog Matlab odziva “>>” otkucati ime skripta.  

Da bi se lakše razumjeli, skripti mogu sadržavati i linije komentara. Da bi se označili komentari, liniju 
sa komentarom treba započeti sa “%”. Boja teksta na toj liniji će se u tom slučaju obično promijeniti 
u zelenu i Matlab će ignorisati ovakve linije prilikom izvršenja skripta, ali će programeru i drugim 
korisnicima biti od koristi jer će bolje objasniti operaciju samog skripta.  

Neke komande koje su korisne u pisanju Matlab skripta su 

pause  zaustavlja izvodjenje skripta i čeka da korisnik pritisne bilo koju tipku na 
tastaturi da bi se nastavilo procesiranje komandi iz skripta. 

keyboard   zaustavlja izvodjenje skripta i vraća komandu standardnom Matlab odzivu 
“>>”; kada se ukuca komanda return procesiranje komandi iz skripta se 
natavlja. 

break      zaustavlja izvodjenje petlje ili skripta u kom se program našao. 

27 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
return      izlazi iz funkcije u kojoj se program našao. 

2. Primjer
 

Slijedeći uputstva (#) napišite svoj prvi matlab script.  

(# se koristi u ostatku teksta da bi vam dalo indikaciju da je potrebno da nešto uradite.) 

# Pokrenite Matlab i otvorite novi script u programskom prozoru. 

# U prozoru upišite slijedeće: 

% Lecture 2 Example 1
A1 = [1 2 3];
A2 = [4 5 6];

% bez korištenja točke-zareza komande i rezultati


% će biti ispisani na ekranu

A = [A1; A2]
B = [A1' A2']
C = A*B
 

# Sačuvajte datoteku u vašem direktoriju (File – Save‐as) i dajte joj odgovarajuće ime.  

# Pokrenite ovaj script tako što ćete otkucati ime koje ste dali ovom skriptu u komandnom prozoru.  

Na ekranu će se ispisati vrijednosti matrica A, B i C u komandnom prozoru. Radni prozor će takodje 
sadržavati iste varijable. 

Takozvani “debug” Matlab programa (testiranje, provjera i otklanjanje greški u programu) se može 
obaviti na razne načine. Ovdje ćemo pokazati neke osnovne postupke pomoću kojih se testira I 
“debug”‐uje program. 

# Da bi ste vidjeli trenutne vrijednosti varijabli u vašem random prostoru pozicionirajte kursor na 
varijablu koja vas interesuje u programskom prostoru. Pravokutnik koji se pokaže će sadržavati 
vrijednost te varijable. 

28 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

# Ako želite da se procesiranje skripta zaustavi na točno odredjenom mjestu možete postaviti 
“breakpoint” na tu liniju u programu. Postavite kursor na liniju u programskom prostoru i u meniju 
izaberite Set/Clear breakpoint opciju. Postavljeni “breakpoint” će se indicirati crvenom točkom na 
lijevoj margini skripta pored te linije ako ste ovo uradili kako treba. 

# Sada ponovo pokrenite procesiranje skripta i program će se zaustaviti na zadatoj liniji. Zelena 
strelica će označavati liniju na kojoj se program zaustavio.  

Isto tako, možemo primjetiti da je standardni Matlab odziv “>>” promijenjen u “K>>” kao indikacija 
da je Matlab presao u “debug” operaciju. Na ovaj način, vrijednosti varijabli u random prostoru se 
sada mogu ispitati (whos komanda je poprilicno korisna u ovim situacijama). 

Sve ovo se može uraditi i bez menija, koristeći opcije na traci iznad programskog prozora. Pokušajte 
sve ovo ponoviti koristeći ovu mogućnost. Uz to, istražite i druge mogućnosti koje mogu biti korisne 
kod “debug”‐a Matlab skripti i funkcija u budućnosti. 

Clear     se riješava svih postavljenih “breakpoint”‐a 

Single Step   izvršava script (ili funkciju) liniju po liniju. 

Step Into   ulazi u drugu funkciju ako je pozvana iz skripta. 

Step Out   završava procesiranje funkcije ili skripta. 

Quit     završava “debug” programa.  

# Pokušajte iskoristiti neke od ovih mogućnosti u skriptu koji ste napisali. 

Matlab ima i mogućnost postavljanaja automatskog zaustavljanja na pojedinoj liniji programa u 
pojedinim situacijama (ako na primjer varijabla izlazi iz opsega koji se koristi u Matlabu, ili je 
otkrivena greška ili upozorenje u skriptu). Ovo su takozvane “automatic breakpoints”. 

29 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

3. Kontrola toka programa


 

Kod pisanaja matlab skripti se ponekad možete naći u situačiji da neku operaciju morate ponoviti 
veći broj puta. Ovakve situacije treba izbjegavati jer usporavaju rad Matlaba, kad god je moguće 
pokušajte iskoristiti mogućnosti operacije sa vektorima, npr. da bi ste izračunali sumu svih 
elemenata u vektoru, jedan od bržih i efikasnijih načina je da pomnozite taj vektor sa vektorom u 
kome su svi elementi jedinice a veličina mu je kompatibilna sa veličinom vektora čiju sumu želite 
dobiti. Ipak, ako nema drugog izlaza, marate koristiti petlje u Matlabu. for petlju ste već imali prilike 
vidjeti i isprobati u prethodnoj lekciji. Ona se i najvise koristi u Matlabu. Pored nje često se koristi i 
druga vrst petlje, tzv. while petlja. 

for petlja se korsiti da bi se jedna operacija ili dio programa ponovio više puta. Unutar jedne for 
petlje moguće je smjestiti drugu manju for petlju. Ovo se naziva ugnježdena for petlja. Isprobajte 
promjer ugnježdene petlje u komandnom prozoru Matlaba: 

for k = 1:4
for p = 1:4
A(k,p)=1/(k+p-1);
end
end
A   
 

Drugi vid kontrole programa u Matlabu je testiranje uslova na osnovu kojih se program onda može 
preusmjeriti i nastaviti na različite načine. Grananje programa nakon testiranja se postiže if 
konstukcijom. if konstrukcija se može korsititi sama za sebe ili se može kombinirati sa elseif i else 
Matlab riječima. Korištenje if‐elseif i if‐else konstrukcija je vrlo slično kao i drugim programskim 
jezicima. Testovi su dani za svaki if ili elseif iskaz u skriptu se testiraju dok se ne pronadje točan iskaz. 
Operacija ili skup operacija koji potpadaju pod taj iskaz se izvrše i program se onda nastavlja sa 
komandama koje slijede end iskaz koji se mora nalaziti na kraju svake if‐else ili if‐elseif konstrukcije u 
skriptu. 

for I = 1:4
for J = 1:4
if I == J
B(I,J)= 2;
elseif abs(I-J)==1
B(I,J) = -1;
else
B(I,J) = 0;
end
end

30 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
end
B

Uslovi i izrazi koji se najčešće javljaju u if konstrukcijama obično koriste operatore 

==    da li je jednako? 

~=     da li nije jednako? 

<    da li je manje? 

>    da li je veće? 

<=    da li je manje ili jednako? 

>=    da li je veće ili jednako? 

Ovi operatori se mogu kombinirati sa sljedećim logičkim operatorima 

&    logičko “i”. 

|    logičko “ili”. 

~    logičko “ne”. 

xor    isključivo “ili” (ili jedan ili drugi ali ne oba). 

any    točno, ako je ijedan element vektora različit od nule. 

all    točno, ako su svi elementi vektora različiti od nule. 

switch konstrukcija je pogodna zamjena za if‐elseif  konstrukciju u slučajevima kada je mogućnost 
izbora nakon testiranja if uslova velika. switch izračunava i provjerava vrijednost koja je dana nakon 
te riječi u programu i nakon toga izvršava komandu koja slijedi poslije odgovarajuće case izjave. 
Čitava switch konstrukcija se obično završava sa linijom koja sadržava riječ otherwise i jednom ili 
nizom komandi koje slijede iza toga. Ove komande ili niz komandi će biti izvršene ako nijedna od 
case izjava ne odgovara vrijednosti izračunatoj u switch liniji. U slučaju da je više case vrijednosti 
istinito, izračunava se samo prva.  

U ovom primjeru, operacija koja slijedi drugi case će biti izvršena. Provjerite kako ovo radi u Matlabu. 

switch (12/6)
case 1
a = 1;

31 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
case 2
a = 2;
case 3
a = 3;
case 4
a = 4;
otherwise
a = 5;
end
a
 

Na kraju, spomenimo još jednu vrstu petlje koja se koristi umjesto “for” petlje u slučajevima kada se 
točan broj ponavljanja Matlab komandi u petlji ne zna prije početka izvršenja same petlje. U ovim 
situacijama se korsti “while” petlja. Evo primjera koji ilustrira upotrebu ove petlje. Pokušajmo, 
koristeći “while” petlju odrediti broj uzastopnih cijelih brojeva čija je suma jednaka ili tek nešto 
manja od 210.  

int = 1;
int_sum = 0;
max_val = 210;

while int_sum < max_val


int_sum = int_sum + int;
int = int + 1;
end

last_int = int
if int_sum == max_val
num_int = int - 1
tt_int_ct = int_sum
elseif int_sum > max_val
num_int = int - 1
tt_int_ct = int_sum - last_int
end
 

Razni oblici petlji i uslova za grananje u Matlab programima su prikazani na sljedećoj stranici. 

32 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 
   
“for” petlja  “while” petlja 
for brojač = izraz koji uvećava brojač  while uslov 1 
  grupa Matlab komandi    grupa Matlab komandi 1 
end  end 
  grupa Matlab komandi 2 
 
   
“if” grananje  ugnježdeno “if” grananje 
if uslov 1  if uslov 1 
  grupa Matlab komandi 1    grupa Matlab komandi 1 
end    if uslov 2 
      grupa Matlab komandi 2 
  end 
  grupa Matlab komandi 3 
end 
grupa Matlab komandi 4 
 
   
“if‐else” grananje  “if‐elseif” grananje  
if uslov 1  if uslov 1 
  grupa Matlab komandi 1    grupa Matlab komandi 1 
else  elseif uslov 2 
  grupa Matlab komandi 2    grupa Matlab komandi 2 
end  elseif uslov 3 
    grupa Matlab komandi 3 
elseif uslov 4 
  grupa Matlab komandi 4 
end 
 
   
“switch – case” grananje  “If‐elseif‐else” grananje 
switch indikator  if uslov 1 
case vrijednost indikatora 1    grupa Matlab komandi 1 
  grupa Matlab komandi 1  elseif uslov 2 
case vrijednost indikatora 2    grupa Matlab komandi 2 
  grupa Matlab komandi 2  elseif uslov 3 
otherwise    grupa Matlab komandi 3 
  grupa Matlab komandi 3  elseif uslov 4 
end    grupa Matlab komandi 4 
  else 
  grupa Matlab komandi 5 
end 
 

33 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

4. Matlab funkcije
 

I pored svega prethodno navedenog o Matlab skriptima, najveća snaga Matlaba i popularnost ovog 
programa ipak leži u funkcijama. Čitav Matlab jezik je i baziran na funkcijama. U Matlabu postoji 
veliki broj ugradjenih funkcija kao što su npr. sin, sqrt, inv itd. Ove su funkcije ugradjene u osnovnu 
jezgru Matlaba, veoma su efikasne i brzo se izvode ali su nepristupačne, ne može se im se prići i 
vidjeti kako su točno napisane. Druga grupa ugradjenih Matlab funkcija su pristupačne u Matlab 
dadotekama, koje kao i Matlab skripti imaju produžetak ~.m u imenu. Pošto se ovim funkcijama 
može pristupiti, one se mogu dalje mijenjati i prilagodjavati potrebama korisnika. Dobra ideja je da 
se u tom slučaju sačuvaju pod drugim imenom kako bi originalne ugradjene funkcije i dalje obavljale 
zadatak koji im je početno i namjenjen.  Takva funkcija je npr. sinh. 

Liste raznoraznih funkcija se mogu vidjeti koristeći Matlab help komandu, npr. 

help elfun       će ispisati listu osnovnih matematičkih funkcija. 

help specfun    će ispisati listu specijalnih matematičkih funkcija  

help elmat   će na ekranu (komandni prozor) ispisati listu osnovnih funkcija za 


manipulaciju sa matricama i vektorima. 

Snaga i fleksibilnost Matlaba se krije u mognućnosti da svaki korisnik/programer kreira svoje 
sopstvene funkcije prema potrebi (i mogućnostima). Pisanje funkcije je vrlo slično pisanju Matlab 
skripta, koristi se isti Matlab editor (programski prozor) i završena funkcija se sprema u datoteku, tj. 
dokument sa produžetkom ~.m.  

Dvije osnovne razlike izmedju kreiranja Matlab skripta i funkcije su slijedeće: 

1. Funkcija mora sadržavati ključnu riječ “function” na početku prve linije. 

2. Varijable koje se koriste u funkciji se ne nalaze u matlabovom random prostoru. Na ovja 
način se spriječavaju konfliktni izmedju varijabli koje bi mogle imati ista imenau različitim 
funkcijama. Radnom prostoru svake funkcije se može pristupiti sa “K>>” odziva koji je 
dostupan jedino u “debug” operačiji. Informacije i varijable se ipak moraju komunicirati i 

34 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
izmedju pojedinih funkcija kao i izmedju funkcija i Matlab skripti koje koriste te funkcije. Ovo 
se odvija pomoću ulaznih i izlaznih varijabli koje mogu biti definirane za svaku funkciju. 

Proces deifniranja i kreiranja funkcije se može opisati kroz slijedeće stepenice: 

1. Izaberite ime za vašu funkciju. Pri ovome vodite pažnju da ne koristite ime koje je već dano 
nekoj od ugradjenih Matlab funkcija ili nekoj od funkcija koje ste ranije kreirali. 

2. U Matlab editor‐u (tj. programskom prozoru) otvorite novi dokument. 

3. Prva linija funkcije mora imati slijedeći oblik: 

function [lista izlaznih varijabli] = ime_funkcije(lista ulaznih varijabli) 

4. Nakon ovoga upišite kratki opis funkcije, npr. koja je svrha funkcije, kako radi i kako se 
poziva. Svaka od ovih linija treba da započne sa “%” tj., mora da bude data kao komentar. 
Ove informacije će se pojaviti kada funkcija bude završena a u komandnom prozoru se kao i 
za bilo koju drugu Matlab funkciju otkuca: 

    help ime_funkcije 

5. Na kraju, slijedi najteži posao, ukucajte Matlab funkciju ‐ niz komandi koje će imati željeni 
rezultat nakon izvodjenja ove funkcije. Korisno je da se kod funkcija, kao i kod Matlab skripti 
doda dovoljno komentara kako bi korisnicima (a i vama) bili jasni detalji operacije ove 
funkcije. Studenti vrlo često zaboravljaju ili izbjegavaju dodavanje komentara njihovim 
Matlab funkcijama, što kasnije te funkcije često čini potpuno nerazumljivim i 
neupotrebljivim. Pokušajte to izbjeći. (Dakle, pokušao sam.) 

Slijedi primjer vrlo jednostavne Matlab funkcije koja izračunava površinu trokuta ako su poznate 
duljine svih stranica tog trokuta. Jednažba koja se koristi i koja će biti glavni dio naše funkcije je: 

P  s  s  a  s  b  s  c   

P je površina koja se izračunava, a, b i c su duljine stranica a s je definisano sa: 

s  a  b  c 2  

Da bi ste kreirali ovu funkciju u Matlabu: 

# Otvorite novi dokument u Matlab editor i otkucajte slijedeći tekst ove funkcije: 

function [A] = area(a,b,c)


%compute the area of the triangle whose sides
%have lengths a,b,c
%uses the perimeter formula

35 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
%Inputs:
% a,b,c: lengths of the sides
%Output:
% A: area of the triangle
%Usage:
% Area = area(2,3,4)
%written by ****, May 2013

s = (a+b+c)/2
A = sqrt(s*(s-a)*(s-b)*(s-c));

%%%%%%%%% end of area %%%%%%%%%


 

# Spremite ovaj dokument. Ime pod kojim ste spremili dokument mora odgovarati imenu koje ste 
dali ovoj funkciji, tj. ime dokumenta u koji spremate ovu funkciju mora biti “area.m”. Ovo im će vam 
biti automatski ponudjeno kod spremanja ove funkcije, provjerite i prihvatite. 

# Otkucajte “help area” u komandnom prozoru da bi ste dobili pomoć za ovu funkciju. 

# Pozovite funkciju sa komandnog prozora, definišući pri tom ulazne veličine, npr. “area(1,1,1)”. 
Ovim će te izračunati površinu jednakostraničnog trokuta gdje je svaka stranica duljine 1.  

# Nakon ovoga otkucajte “s” u komandnom prozoru da bi ste provjerili vrijednost ove varijable. 
Poruka koju ste dobili bi trebala biti: Undefined function or variable 's'. Matlab ne prepoznaje ovu 
varijablu iako je korištena u funkciji “area”.  Možete li objasniti zašto? 

# Izmjenite vašu funkciju tako da pored izlazne varijable “area” definišete još jednu izlaznu varijablu 
“s”. Ponovo pozovite funkciju. Koliko rezultata sada dobijate? Ako još uvijek dobijate samo jedan 
rezultat ‐ površinu – u čemu je sada problem? 

# Pokušajte proširiti vašu funkciju tako da prije no što se krene na izračunavanje površine funkcija 
provjeri je li suma dvije kraće stranice veća od treće stranice. 

36 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

5. Malo više o Matlab grafici


 

U prvoj lekciji ste se upoznali sa osnovnim mogućnostima matlab grafike. Pored funkcija glavni razlog 
popularnosti Matlaba je u snažnoj grafici. Mogućnosti su puno veće nego što se to da naslutiti iz prve 
lekcije.  

Zapocnimo ponovo tako što ćemo kreirati jednostavan graf u Matlabu.  

# U komandnom prozoru, otkucajte slijedeće matlab komande. 

>> x = 0:0.1:10;
>> y = sin(x) + cos(2*x);
>> z = sin(2*x) + cos(x);
>> plot(x,y,'b*-');
>> figure
>> plot(x,z,'r+-');
 

Treba li bi ste dobiti dvije slike. Ako ih ne vidite dobro, moguće je da je jedna postavljena točno 
preko druge. Malo ih razmaknite. 

# Odaberite opciju za ručno popravljanje slike sa menija na slici (Tools‐Edit Plot). Pomoću ove opcije 
možete izbrisati graf, kopirati ga i tako ga prebaciti na drugu sliku. Pokušajte to učiniti sa ovim 
grafovima. 

Umjesto više slika, ili iscrtavanja više grafova na jednoj slici u Matlabu se koristi i opcija kojom se 
slika dijeli na više podslika koje se onda ponašaju kao individualne slike o kojima je do sada bilo riječi. 

# Zatvorite prethodne slike i proučite efekte sljedićih komandi: 

subplot(2,2,1);
plot(1:10)
subplot(2,2,2)
x = 0;0.1:2*pi;
plot(x,sin(x))
subplot(2,2,3)
x = 0:0.1:2*pi;
plot(x, exp(-x),'r')
subplot(2,2,4)
plot(peaks)
 

Svaka podslika se može označavati, baš kao što ste to radili i sa običnim slikama u prvoj lekciji. Da bi 
ste sa jedne podslike presli na drugu morate izvrsiti komandu subplot(?,?,?). 

37 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

6. Trodimenzionalna grafika
 

Površina se može matematički definirati kao funkcija koja povezuje svaku točku na mreži sa nekom 
vrijednošću. Na primjer, koristeći dvodimenzionalnu mrežu (tj. ravninu) površina se može iskazati 
jednadžbom: 

z  f  x, y   

Da bi smo iscrtali površinu z, opseg vrijednosti varijabli x i y mora biti definiran. Isto tako rezolucija 
mreže ‐ razmak izmedju dvije susjedne x i dvije susjedne y veličine takodje mora biti definiran. Ako 
na primjer izaberemo opseg za x od 2 do 4 a opseg za y od 1 do 3 i rezlouciju obe varijable postavimo 
na 0.5, odgovarajuća mreža se može definirati koristeći Matlab komandu meshgrid: 

>> [X,Y] = meshgrid(2:0.5:4, 1:0.5:3)

Elementi ove mreže su u stvari koordinate točaka u X‐Y ravnini.  

Vrijednost površine se sada može izračunati za svaku točku u ovako definiranoj X‐Y ravnini. Koristeći 
ovu mrežu, možemo na primjer površinu predstaviti jednadžbom:  

z  ( x  3) 2  ( y  2) 2  

U Matlabu bi smo ovo izračunali na slijedeći način: 

>> Z = (X-3).^2-(Y-2).^2

Matrica Z koja je rezultat gornje komande predstavlja vrijednost ove površine u svakoj točki 
prethodno definirane mreže. Sve što sada treba učiniti da bi se predstavila i vizualizirala ova površina 
je ispravno upotrijebiti matlab komandu mesh. 

>> mesh(X,Y,Z)
>> title('saddle'), xlabel('x'), ylabel('y')
 

# Izvršite ove dvije komande u Matlab komandnom prozoru i trebali bi ste dobiti 3D sliku ove 
površine. 

# Zanimljive mogućnost u Matlabu je rotacija dobijene površine. Pokušajte (Tools‐Rotate 3D). 

# Da bi ste dobili konture ove površine možete iskoristiti contour komandu: 

38 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
>> contour(X,Y,Z)

7. Ćelije i strukture u Matlabu


 

Iako su matrice najprirodnije i osnovne varijable u Matlabu, postoje i kompleksniji formati koji se 
dosta koriste u naprednijim Matlab programima, kako u skriptama, tako i u funkcijama. Ćelije i 
structure su kolekcije varijabli različitih vrsta. Ovdje ćemo samo kratko objasniti što su u stvari ćelije i 
strukture i osnovne principe njihovog korištenja. 

7.1.Ćelije
 

Ćelija je u stvari matrica sa elementima raznih vrsta i dimenzija. Kreira se koristeći vitičaste zagrade, 
“{ }”. Na pimjer, ako ukucate i izvršite slijedeću Matlab komandu: 

A = {rand(2,2,2), 'Hello', 17.35}   

vidjet ćete prvi element ove ćelije kao [2*2*2 double] jer je prevelikih dimenzija da bi se prikazao ali 
druga dva elementa ‐ text i konstanta su dovoljno mali da bi bili prikazani u komandnom prozoru.  

Da bi se pristupilo pojedinim elementima ćelije, ponovo se mogu koristiti vitičaste zagrade, a ako je 
potrebno, kutne zagrade se koriste da bi se pristupilo pojedinim elementima toga elementa. Jasnije 
je ako se ovo uradi u Matlabu: 

A{1,1}(2, :, 1)   
 
ans =
0.2311 0.4860   
 

Na sličan način se mogu i definirati novi elementi ćelije: 

B {1,1} = 1:10
B{2,2} = A   
 

Neke stvari koje je vrijedno primjetiti u radu sa ćelijama 

39 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 Veličina ćelije je 2x2 iako smo kreirali samo dva elementa. Druga komanda je odredila 
veličinu ćelije a nedefinirani elementi ćelije su automatski dobili vrijednost 0. Dimezije ćelija 
se uredjuju dinamički u Matlabu (kao i u slučaju matrica). 
 Ćelija može sadržavati druge ćelije. 
 Da bi se pristupilo sadržaju ćelije, index pristupa je odredjen indexima u vitičastim 
zagradama 
 Ćelije koje sadrže druge ćelije se ne mijenjaju automatski. Ako se sadržaj ćelije A u 
prethodnom primjeru promijeni, sadržaj ćelije B se neće automatski promijeniti. 
 
 
Podsijetimo se primjera iz prošle vježbe, gdje smo iskoristili matricu da bi smo spojili i sačuvali veći 
dio teksta. Stringove pretvorili u matricu koristeći ‘str2mat’ funkciju: 
 
negative = str2mat(...
'We regret to inform you,',...
'your application has been rejected.')
closing = 'Sincerely, Big Boss';
name = 'Mr. Looser';

message = str2mat(['Dear', name], negative, closing)


 
Sličan rezultat se može postići korsiteći ćeliju umjesto matrice. U tom slučaju pojedinačni stringovi se 
mogu kombinirati na slijedeći način: 
 
cellmessage = {['Dear', name], negative, closing}
 
U ovom slučaju je svaki od stringova, element u polju ćelija pod nazivom ‘cellmessage’. Matricu je 
moguće pretvoriti u polje ćelija i obrnuto. Ovo se postiže funkcijama ‘char’ i ‘cellstr’. 
 
message = char(cellmessage)
cellmessage = cellstr(message)
 
 
 

7.2. Strukture
 

Strukture se koriste za grupiranje dvije ili više Matlab varijabli koje su na neki način povezane ili se 
koriste da opišu isti objekt ili problem. 

Na primjer, pokušajmo opisati loptu koja je u splobodnom padu sa neke visine. Masa lopte se može 
iskazati jednim brojem, a pozicija lopte u prostoru se može prikazati vektorom koji ima tri elementa. 

40 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
Brzina lopte bi mogla biti još jedna dodatna varijabla u ovo grupi. Sve ove osobine se mogu skupiti u 
jednu strukturu u Matlabu na sljedeći način:  

>> ball.mass = 10;
>> ball.position = [0, 0, 100];
>> ball.velocity = [0, 0, 0];
 

Da bi ste vidjeli sadržaj novoformirane structure, u komandnom prozoru , kao I kod drugih Matlab 
varijabli, otkucajte ime structure kod Matlab odziva: 

>> ball

Pojedinačni elementi structure se nazivaju poljima. Poljima structure se pristupa na slijedeći način:  

>> ball.position

ans =

0 0 100

Standardne Matlab operacije se mogu primjeniti na elemente strukture kao i na svaku drugu 
varijablu. Da bi smo promijenili poziciju lopte za 10 u y smjeru:  

>> ball.position = ball.position + [0, 10, 0]

ball =

mass: 10
position: [0 10 100]
velocity: [0 0 0]

Nova polja se mogu dodavati strukturama. Ako na primjer želite dodati novi podatak, polumjer lopte 
u strukturu koju ste kreirali: 

>> ball.radius = 2.0

41 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
Ako želite raditi sa više objekata u vašoj strukturi, novi objekti se isto tako mogu dodati u svakom 
trenutku rada. Ispitajte koja je posljedica  slijedeće naredbe:  

>> ball(2:3,1) = ball;

Stuktura “ball” je sada promijenila dimenzije sa 1x1 na 3x1, dodana su joj dva nova elementa. Ne 
polja, nego dvije čitave grupe polja koja su činila početnu strukturu. Svaki od ovih elemenata ima iste 
elemente kao i prijašnja “ball” struktura. Elementi za sada imaju i iste vrijednosti koje sada možemo 
izmjeniti. Pokušajmo svakoj od ovih lopti dati različitu masu: 

  

>> ball(1).mass = 1.0;

>> ball(2).mass = 5.0;

>> ball(3).mass = 10.0;

Provjerimo što je sadržaj druge lopte, tj. drugog elementa u ovom vektoru struktura: 

>> ball(2)

Mase svih lopti u strukturi se mogu brzo provjeriti na sljedeći način:

>> ball.mass

ans =

ans =

ans =

10

42 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
Matlab je dao tri odvojena odgovora na ovaj upit. Bolji način da se ovo uradi je da se sva tri odgovora 
skupe u vektor koristeći “[ ]” zagrade. Pokušajte ovu komandu:  

>> [ball.mass]

Kako bi ste u jednoj liniji izračunali ukupnu masu svih lopti u ovoj strukturi? 

>> totalMass = sum([ball.mass])

Što bi se desilo da ste umjesto ove komande otkucali: 

>> totalMass = sum(ball.mass)

Poruka: “[ ]” zagrade su važne ! 

43 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

8. Vježbe
 

1. Fibonnaci serija je dfinirana sa: 
 

f n  f n 1  f n 2   n  3, 4, 5...  

  i f1 = 0, f2 = 1. Napišite Matlab funkciju koja će izračunavati n‐ti element ove serije (ulazna 
varijabla je n, rezultat je fn). 

  Nakon što ste napisali svoju funkciju zatražite odgovor od predavača (dokumenti L2Fib1, 
L2Fib2, L2Fib3 and L2Fib4). Pomoću komande  profile ispitajte efikasnost svakog od ovih 
riješenja. 

2. Prikažite grafove funkcija:  
 
1

y
sin x
, u
1 x2  1
 x, v  2 , w
10  x  3  1  
 x  1 x 4
2 1
x
4  x 
2 2

  na jednoj slici za 0   x  10 i pravilno označite slike. 

  Pokušajte isprobati I iskoristiti sljedeće Matlab komande: 

>> subplot(222), axis([0 10 0 10])

>> grid

>> grid

>> hold on

>> plot(x,v,'- -'), hold off, plot(x,y,':')

3. Napišite funkciju koja će simulirati bacanje kocke. (Matlab funkcija floor će vam možda 
korisno doći da bi ste riješili ovaj zadatak.) 
 

44 
 
Branislav Vuksanovic  Matlab za inžinjere  Dio 3:          Programiranje u Matlabu 

 
 

4. Nacrtajte površinu koja je definirana funkcijom:  
 

  
f  x, y    x  y  e
2 x 2  y 2

  u domenu definiranom sa ‐2   x  2, ‐2   y  2. Pronadjite minimum i maximum ove 
funkcije kao i vrijednosti x i y u ovim točkama. Na istoj slici nacrtajte konture ove površine 
i označite položaj pronadjenih točaka na ovom crtežu. Funkcije find i max bi vam mogle 
biti od koristi u ovoj vježbi. 

5. Napišite Matlab funkciju koja ce se ponašati na sljedeći način: 
 

 Ako ju pozovete bez ikakvih ulaznih vrijednost, neće raditi ništa 

 Ako ju pozovete i date joj neki vektor kao ulaznu vrijednost, funkcija će nacrtati 
ovaj vektor 

 Ako ju pozovete I date joj dva vektora kao ulaz, funkcija će nacrtati prvi vektor kao 
funkciju drugog vektora. 

 Ako ju pozovete sa više od dvije ulazne vrijednost, funkcija će automatski 
razumijeti da je prva ulazna varijabla vektor koji treba nacrtati a da su ostali ulazi 
parametri sa kojima treba označiti ovaj graf. Ove oznake mogu biti samo sljedeće: 
naslov slike, oznaka na x‐osi i oznaka na y‐osi, tj. u Matlabu: 'title', 'xlabel' and 
'ylabel'. 

  Da bi ste riješili ovaj problem morati će te koristiti Matlab komande varagin, nargin a 
vjerovatno i isempty, isnumeric, lower and length. Svaka Matlab funkcija može imati 
najviše osam ulaznih vrijednosti.  

45 
 

You might also like