You are on page 1of 40

Dragan V.

Lazi
Milan R. Ristanovi

Programiranje u Matlab -u r

Univerzitet u Beogradu • Maxinski fakultet • Katedra za automatsko upravljanje


Poglavlje 1

Uvod

1.1 Xta je to Matlab


Matlab, u daljem tekstu Matlab, je vixi programski jezik namenjen obradi podataka
u formi matrica i brojeva. Sam naziv Matlab izveden je od Matrix Laboratory, qime
se sugerixe da su matrice osnovni entiteti za numeriqke proraqune, za razliku
od skalara kao kod niih programskih jezika kao xto su FORTRAN, PASKAL ili
C. Zahvaljujui fleksibilnom okruenju koje integrixe proraqune sa vizuelizaci-
jom, xirokom spektru ugraenih funkcija kojima se efikasno dolazi do numeriqkih
rexenja, mogunoxu razvoja algoritama i programiranja, Matlab se nametnuo kao
nezamenljiv alat za rexavanje problema u gotovo svim oblastima inenjerske prakse.

1.2 Kako se koristi Matlab


Nakon pokretanja Matlaba na ekranu se otvara komandni prozor Matlaba na kome se
uoqava komandna linija, u qijem se levom uglu nalazi prompt “>>”, a odmah pored
i kursor koji trepti. Komandni prozor Matlaba treba zamisliti kao radni pros-
tor ekvivalentan praznom listu hartije, na kome je mogue vrxiti razliqite akcije
posredstvom komandne linije. Komandna linija slui da se izda naredba Matlabu.
Nakon xto se izda naredba, ona se nee izvrxiti dok god se ne pritisne taster
<enter>. Sve naredbe koje se izvrxe u komandnoj liniji, kao i promenljive nastale
posredstvom tih naredbi se automatski smextaju u memoriju i mogu se naknadno ko-
ristiti dok god se ne napusti trenutna seansa u Matlabu. Ako se u nekoj naredbi ne
definixe promeljiva kojoj se dodeljuje vrednost nekog izraza, Matlab tada dodeljuje
vrednost generiqkoj promenljivoj ans. Prirodno, prilikom izraqunavanja sledeeg
izraza, nova vrednost e biti prepisana preko prethodne vrednosti promenljive ans.
U jednoj komandnoj liniji moe da se nalazi jedan ili vixe izraza.
Najjednostavniji naqin da se upotrebi Matlab jeste kao veoma moan kalkulator.
Aritmetiqke, trigonometrijske ili eksponencijalne operacije se izvode posred-
stvom poziva ugraenih Matlab funkcija. Osim osnovnih, Matlab je opremljen ve-
likom kolekcijom funkcija koje omoguavaju veoma sloene matematiqke operacije.
Pored toga, Matlab dopuxta korisniku da definixe sopstvene funkcije.
Kada je potrebno uneti vixe naredbi u komandni prozor, ili je potrebno ponovo
pozivati i menjati izraze, rad u komandnoj liniji poqinje da predstavlja ozbiljno
ograniqenje. Potencijalni problemi mogu da se rexe uvoenjem skript datoteka, tj.
datoteka koje sadre jednu ili vixe naredbi koje bi se izvrxile na isti naqin kao
kad bi se jedna po jedna unosile u komandnu liniju u komandnom prozoru Matlaba.
Skript datoteka je tekstualna datoteka sa ekstenzijom “.m”, koja moe da se kreira

1
Poglavlje 1. Uvod 2

u bilo kom programu za obradu teksta, osnosno u editoru teksta i dibageru koji je
deo paketa Matlaba. Kreirana skript datoteka se izvrxava kucanjem njenog imena
u komandoj liniji bez sufiksa “.m” ili direktno iz Matlabovog editora.

1.3 Rad sa promenljivama


Duine identifikatora promenljivih u Matlabu treba da budu najvixe 31 alfanu-
meriqki karakter, pri qemu se karakteri posle tridesetprvog ignorixu. Identi-
fikator promenljive obavezno mora poqeti slovom, dok ostali karakteri mogu biti
kombinacija slova, brojeva i znaka podvuqeno ( ). Identifikator promenljive ne
sme da sadri blanko karakter. Matlab razlikuje velika/mala slova u imenu iden-
tifikatora promenljive. Prilikom odreivanja identifikatora uobiqajene su dve
programerske konvencije. U prvoj se koriste donje crte, dok se kod druge koriste
velika slova, kao npr.: ime promenljive odnosno ImePromenljive.
Postoje i specijalne promenljive qiji su nazivi rezervisani i to su: ans, pi, eps,
flops, inf, nan, i, j, nargin, nargout, realmin, realmax.
Za vreme jedne sesije rada sa Matlabom, tj. dokle god se ne napusti program, u
memoriji se quvaju najnovije vrednosti svih definisanih promenljivih nastalih u
komandnoj liniji ili u skript datoteci. Kao xto je prethodno napomenuto, vred-
nost dodeljena nekoj promenljivoj moe ponovo da se koriste jednostavnim kucanjem
identifikatora te promenljive ili ukljuqivanjem te promenljive u neki izraz. Pro-
menljive se brixu iz memorije naredbom clear. Da bi se videlo koje su promenljive
definisane od poslednjeg izvrxenja naredbe clear, dovoljno je otkucati whos. Skrom-
nija varijanta narebe whos je who. Ako se eli da se iz memorije izbrixu samo
pojedine promenljive to se qini naredbom clear i navoenjem liste identifikatora
promenljivih razdvojenih blanko karakterom.

1.4 Rad u komandnom prozoru


Svaka naredba u komandnoj liniji moe da ima jedan od dva sledea oblika:
>> promenljiva = izraz
ili
>> izraz
Dakle, ako elimo da definixemo tri promenljive a = 5, 23, b = 3 i c = −0, 68, to
se moe uqiniti na sledei naqin:

>> a = 5.23
a =
5.2300
>> b = 3
b =
3
>> c = -0.68
c =
-0.6800

Oqigledno je da je Matlab dao ogovarajui ispis na naredbe ispisujui identi-


fikator i vrednost promenljive. Stavljanje specijalnog znaka taqka-zapeta (;) kao
Poglavlje 1. Uvod 3

poslednjeg karaktera u naredbi ima za posledicu spreqavanje ispisa na tu naredbu.


Na primer:

>> a = 5.23;
>> b = 3;
>> c = -0.68;

Matlab dozvoljava unos vixe naredbi u komandnoj liniji, koje moraju biti razd-
vojene bilo zapetom (,), ili znakom taqka-zapeta (;). Ako se koristi zapeta, tada
sistem daje ispis na naredbu. Prethodni unos se moe kompaktnije napisati kao:

>> a = 5.23; b = 3; c = -0.68;

Nad promenljivama je mogue vrxiti aritmetiqke operacije. Recimo da je po-


trebno sraqunati sledei izraz:

b
d= a − 2c

Naredba u komandnoj liniji koja odgovara ovom izrazu bila bi:

>> d = (a - 2*c)^(1/b)

Da bi se izvrxio numeriqki proraqun, promenljive u izrazu moraju prethodno


da budu definisane, inaqe e se pojaviti poruka o grexci. Poxto su vrednosti
promenljivih a, b i c poznate, nakon izvrxenja naredbe sistem vraa vrednost:

d =
1.8748

Prilikom izvrxavanja aritmetiqkih operacija, Matlab vodi raquna o prior-


itetu operatora.
Korisno je koristiti Matlabov Help sistem (u daljem tekstu help sistem) iz
komandne linije jednostavnim ukucavanjem

help ImeFunkcije.

Osim toga, veoma koristan je i ulaz sa tastature ∧c (jednovremen stisak na Ctrl


i c) koji obezbeuje prekid izvrxavanja skript datoteke ili funkcije. U komand-
noj liniji se mogu nai prethodno unete naredbe koje se izlistavaju pomou kur-
zorskih tastera (↑) i (↓). Pre pritiska na taster <enter> mogue je izmeniti poz-
vanu naredbu.
Poglavlje 2

Matlab i matrice

2.1 Matrice
Neka je skup A polje (A = P) i neka su njegovi elementi oznaqeni sa a11 , a12 , . . . , amn .
Skup od mn elemenata a11 , a12 , . . . , amn polja A ureen u obliku pravougaone xeme
 
a11 a12 · · · a1n
 a21 a22 · · · a2n 
 
 .. .. . . ..  ,
 . . . . 
am1 am2 · · · amn

naziva se m × n matrica i oznaqava se sa Amn = (aij )m


n , ili krae, Amn = (aij ) qim
su brojevi m i n poznati. Koriste se i oznake Amn = kaij k, Amn = [aij ], itd.
Skalar aij se naziva (i, j)-ti element matrice A. Elementi ak1 , ak2 , . . . , akn qine
k-tu vrstu matrice A, a elementi a1k , a2k , . . . , amk qine njenu k-tu kolonu. Poxto su
elementi aij matrice A elementi polja A kae se da je A m × n matrica nad poljem A.
Jasno je da m oznaqava broj vrsta, a n broj kolona. Ako je broj vrsta jednak broju
kolona (m = n) matrica je kvadratna. U suprotnom sluqaju matrica je pravougaona.
Matrica u Matlabu moe da se kreira na sledei naqin:

>> A = [1 2 -3; 4 -1 8; -3 0 6]

pri qemu Matlab na ekranu daje,

A =
1 2 -3
4 -1 8
-3 0 6

xto predstavlja matricu (3 × 3)


 
1 2 −3
A =  4 −1 8 .
−3 0 6

Prilikom unosa matrice, elementi po vrstama se moraju razdvojiti ili blanko


simbolom ili znakom (,), dok se vrste razdvajaju znakom (;). Dimenzija matrice

4
Poglavlje 2. Matlab i matrice 5

moe da se odredi pomou naredbe

size(A)

ili

[m,n] = size(A)

Ako su svi elementi aij = 0 tada se matrica naziva nula matrica, A = (0) = 0.
Naredba u Matlabu za nula matricu dimenzije (r, c) je

zeros(r,c)

Na primer:

>> nula_mat = zeros(2, 3)

nula_mat =

0 0 0
0 0 0

Elementi a11 , a22 , . . . , ann kvadratne n × n matrice A qine njenu glavnu dijagonalu.
Ako su svi elementi van glavne dijagonale jednaki nuli, aij = 0, ∀i, j = 1, 2, . . . , n,
i 6= j, tada se kvadratna matrica naziva dijagonalna i oznaqava sa

A = diag {a11 a22 . . . ann }.

Dijagonalna matrica se formira na sledei naqin

>> d = diag([1 2 6])

d =

1 0 0
0 2 0
0 0 6

Ako su svi elementi aii dijagonalne n × n matrice jednaki jedinici ona se naziva
jediniqna matrica i oznaqava sa In ,

In = diag {1 1 . . . 1}.

Naredba u Matlabu za formiranje jediniqne matrice reda n je

eye(n)

tako da sledea naredba daje:


Poglavlje 2. Matlab i matrice 6

>> I = eye(3)

I =

1 0 0
0 1 0
0 0 1

2.2 Vektori
Matrica An1 tipa n × 1 se naziva vektor kolona, ili krae, vektor, a matrica B1n
se naziva vektor vrsta. Transpozicijom vektora kolone dobija se vektor vrsta i
obratno. Vektore emo oznaqavati sa a = (ai ), b = (bi ), itd.:
 
a1
 a2  ¡ ¢
 
a =  .  ⇒ aT = a1 a2 · · · an .
 .. 
an

Qesto emo vektore prikazivati pomou vektora vrsta:


¡ ¢T
a= a1 a2 . . . an ,

imajui u vidu da za svaki vektor a vai da je (aT )T = a.


Vektori se kreiraju na jedan od sledeih naqina:

a = [a b c . . .]
ili
a = [a, b, c . . .]
gde su a, b, c, . . . bilo identifikatori promenljivih, brojevi, izrazi, ili stringovi.
U prvom sluqaju, izmeu simbola se zahteva blanko karakter, dok u drugom sluqaju
po elji moe da se izostavi.
Vano je napomenuti, da ako se na mestu nekog elementa matrice eksplici-
tno napixe matematiqki izraz, onda izmeu alfanumeriqkih karaktera i simbola
matematiqkih operatora ne smeju da se stavljaju blanko karakteri.
Matlab prua vixe razliqitih naqina da se dodele brojqane vrednosti vek-
toru. Jedan od naqina je da se specificira opseg vrednosti i priraxtaj izmeu
dva susedna broja naredbom oblika:

x = pocetna vrednost:prirastaj:krajnja vrednost

Na primer:

>> t = 0:0.1:2

t =

Columns 1 through 12
Poglavlje 2. Matlab i matrice 7

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000

1.0000 1.1000

Columns 13 through 21

1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000

Duina tako nastalog niza se moe odrediti naredbom

n = length(t)

Ako se prilikom ovakvog definisanja vektora izostavi priraxtaj, Matlab po-


drazumeva da je razlika izmeu susednih vrednosti 1. Tako da sledea naredba
daje:

>> t = 0:10

t =

0 1 2 3 4 5 6 7 8 9 10

S druge strane, mogue je specificirati n jednako udaljenih vrednosti poqev od


poqetne sve do krajnje vrednosti:

x = linspace(pocetna vrednost, krajnja vrednost, n)

recimo,

>> t = linspace(0, 2, 21)

t =

Columns 1 through 12

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000

1.0000 1.1000

Columns 13 through 21

1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000

Podjednako razmaknute vrednosti na logaritamskoj skali se dobijaju naredbom

x = logspace(pocetna vrednost, krajnja vrednost, n)


Poglavlje 2. Matlab i matrice 8

2.3 Manipulisanje matricama i vektorima


Neka je kreiran vektor b koji ima jednu vrstu i n kolona

b = [b1 b2 b3 . . . bn ].

Mogue je pristupiti svakom elementu matrice ili vektora. U sluqaju da elimo


da pristupimo, na primer, elementu b3 , Matlabova notacija bi bila b(3), odnosno
Matlab e da vrati vrednost dodeljenu treem elementu vektora b. Iako je vektor
b, zapravo (1 × n) matrica, Matlabov intepretator je inteligentan da u sluqaju
vektora ignorixe dvostruko indeksiranje. Drugim reqima, naredba b(3) ima isti
smisao kao b(1,3). Meutim, ako se zahteva sledea naredba b(3,1), pojavie se
poruka o grexci, zato xto trea vrsta nije ni definisana.
Ako definixemo vektor b kao

b = [b1 b2 b3 . . . bn ]T

to znaqi da smo kreirali vektor kolonu, tj. (n × 1) matricu. Trei element vektora
se indeksira sa b(3), ili b(3,1). Meutim, ako se zahteva b(1,3), Matlab e javiti
poruku o grexci jer trea kolona ne postoji.
Neka je vektor x definisan kao

x = [1 3 -5 8 2 0 -1 4 -3]

xto oqigledno predstavlja vektor saqinjen od devet elemenata. Ako elimo da


kreiramo novi vektor y saqinjen od prvog, treeg, qetvrtog, petog i devetog ele-
menta vektora x to moe biti uqinjeno na sledei naqin

y = [x(1) x(3) x(4) x(5) x(9)]

xto daje y = [1 -5 8 2 -3]. To moe da se uradi i drugaqije:

y = [x(1) x(3:5) x(9)]

ili,

y = x([1 3:5 9])

Isti rezultat se dobija ako se najpre definixe vektor koji sadri odgovarajue
indekse

index = [1 3:5 9]
y = x(index)

Svakom elementu matrice je mogue dodeliti novu vrednost,

x(1) = 2; x(4) = -7;

sliqno, svakom vektoru, odnosno elementima vektora, moemo da dodamo ili da


Poglavlje 2. Matlab i matrice 9

oduzmemo skalar

x = x + 1;

ili da odreene elemente pomnoimo ili podelimo skalarom,

x(1) = x(1)/3;
x(2:5) = x(2:5)/x(1);
x(7) = x(7) + 2;

xto daje kao rezultat x = [1 4 -4 -6 3 1 2 5 -2].


Ako bi smo eleli da sortiramo dobijeni vektor u rastuem nizu to lako moemo
da uqinimo pomou funkcije sort

z = sort(x)

na koji naqin dobijamo vektor z = [-6 -4 -2 1 1 2 3 4 5]. Vixe o mogunostima


svake naredbe, pa i naredbe sort se moe dobiti iz Matlabovog help sistema.
Pretpostavimo da iz vektora x elimo da izdvojimo, recimo, samo nepozitivne
vrednosti. Naredba find odreuje mesto (ne vrednost) elemenata vektora ili ma-
trice koji zadovoljavaju specificirani uslov ili izraz, tako da je mogue napisati:

index = find( x <= 0 )

xto vraa index = [3 4 9], a novi vektor u koji sadri samo nepozitvne elemente
vektora x moe da se dobije na sledei naqin

u = x(index)

Oqigledno je da smo u naredbi find iskoristili relacijski operator 6 qija je


notacija u Matlabu <=. Da bi smo znali kako se u Matlabu pixu operatori, najbolje
je da koristimo help sistem. Otuda, ako u komandoj liniji napixemo help +, ili
help > i sl., na ekranu e se pojaviti sintaksa za sve operatore.
Vektori mogu da poslue da se formiraju matrice. Naime, tri vektora vrste
duine 5 daju matricu (3 × 5):

>> x1 = (0:4);
>> x2 = 1:0.25:2;
>> x3 = [-24 38 12 8 1];
>> A = [x1; x2; x3]
A =
0 1.0000 2.0000 3.0000 4.0000
1.0000 1.2500 1.5000 1.7500 2.0000
-24.0000 38.0000 12.0000 8.0000 1.0000

Meutim, ako se isti vektori posmatraju kao matrice kolone, onda mogu da daju
matricu (5 × 3):

>> x1 = (0:4);
Poglavlje 2. Matlab i matrice 10

>> x2 = 1:0.25:2;
>> x3 = [-24 38 12 8 1];
>> A = [x1’, x2’, x3’]
A =
0 1.0000 -24.0000
1.0000 1.2500 38.0000
2.0000 1.5000 12.0000
3.0000 1.7500 8.0000
4.0000 2.0000 1.0000

Svakom elementu matrice se pristupa na isti naqin kao i kod vektora. Meutim,
veoma je korisno nauqiti kako iz matrice izdvojiti odreenu vrstu, odnosno kolonu.
Za to slui sledea notacija

A(3,:)

xto bi znaqilo “trea vrsta, sve kolone”, odnosno,

A(:,3)

xto se qita “sve vrste, trea kolona”.


Ako elimo da iz matrice izdvojimo prve tri vrste i poslednje dve kolone,
prirodno se namee sledea notacija

A(1:3, 2:3)

U Matlabu su ugraene dve naredbe repmat i meshgrid koje omoguavaju da se


kreiraju matrice umnoavanjem skalara, vektora vrste/kolone, ili matrice odreen
broj puta.
U odreenim situacijama kada je potrebno zameniti mesta vrstama, odnosno
kolonama, takve manipulacije nad matricama se efikasno rexavaju naredbama
flipup, odnosno fliplr.
Konaqno, ako je potrebno da se izbaci neka od vrsta ili kolona date matrice, to
se qini tako xto se te vrste i kolone izjednaqe sa praznom matricom, tj. izrazom
[], pri qemu se izmeu uglastih zagrada ne nalazi blanko karakter. Na primer, ako
iz matrice A elimo da izbacimo prvu i qetvrtu vrstu i poslednju kolonu, to bi
izgledalo

>> A([1 4],:) = [];


>> A(:,3) = []
A =
1.0000 1.2500
2.0000 1.5000
4.0000 2.0000

2.4 Operacije nad matricama i vektorima


Matlab podrava aritmetiqke operacije nad matricama istog tipa i to na element-
noj osnovi, dakle u aritmetiqkim operacijama uqestvuju korespodentni elementi obe
Poglavlje 2. Matlab i matrice 11

matrice. U tu svrhu se uvodi dot (.) operator. Taqka (.) koja prethodi nekom oper-
atoru (kao * / \ ili ˆ) oznaqava matriqnu operaciju. Na primer, ako su definisane
(3 × 4) matrice A i B

 
a11 a12 a13 a14
A =  a21 a22 a23 a24 
a31 a32 a33 a34
 
b11 b12 b13 b14
B=  b21 b22 b23 b24 
b31 b32 b33 b34

eksplicitno se mogu napisati rezultati sledeih dot operatora

 
a11 b11 a12 b12 a13 b13 a14 b14
C = A. ∗ B =  a21 b21 a22 b22 a23 b23 a24 b24 
a31 b31 a32 b32 a33 b33 a34 b34
 
a11 /b11 a12 /b12 a13 /b13 a14 /b14
C = A./B =  a21 /b21 a22 /b22 a23 /b23 a24 /b24 
a31 /b31 a32 /b32 a33 /b33 a34 /b34
 
b11 /a11 b12 /a12 b13 /a13 b14 /a14
C = A.\B =  b21 /a21 b22 /a22 b23 /a23 b24 /a24 
b31 /a31 b32 /a32 b33 /a33 b34 /a34
 
a11ˆb11 a12ˆb12 a13ˆb13 a14ˆb14
C = A.ˆB =  a21ˆb21 a22ˆb22 a23ˆb23 a24ˆb24 
a31ˆb31 a32ˆb32 a33ˆb33 a34ˆb34

Dot operator moe da se primeni i na skalarne konstante, ali samo kada se


koristi dot operator kao eksponent. Na primer, ako elimo da sraqunamo potencije
broja 2 od nulte do sedme, to moemo da uqinimo na sledei naqin

>> x = 0:7; y = 2.^x


y =
1 2 4 8 16 32 64 128

Obrnuto, mogue je elemente vektora x dii na kvadrat, tako da se dobija:

>> x = 0:7; y = x.^2


y =
0 1 4 9 16 25 36 49

Dot operatori mogu da se kombinuju sa funkcijama i vektorima. Ako je potrebno


da se sraquna vrednost funkcije, na primer:

π
y(t) = t2 e−t/2 sin(3t + )
8
za t ∈ [0, 0.1, . . . 10], kompaktno rexenje problema bi bilo
Poglavlje 2. Matlab i matrice 12

t = 0:0.1:10; y = t.^2.*exp(-t/2).*sin(3*t + pi/2);

Korisne naredbe za rad sa vektorima su sum i cumsum. Ako je norma vektora


¡ ¢T
x = x1 x2 · · · xn definisana sa
v
u n
1 uX
kxk = (x x) 2 = t
T
x2i ,
i=1

tada se ona naziva Euklidova norma vektora x ∈ Rn i ona moe da se sraquna na


sledei naqin:

norma = sum(x.^2)^0.5

Matlab poseduje i svoju naredbu za izraqunavanje norme, norm. Skree se panja,


da se pre upotrebe ove naredbe, prouqe njene specifiqnosti uz pomo help sistema.
Transponovanje matrica se vrxi operatorom jednostrukog znaka navoda (’). Na
primer, ako je matrica A tipa (m × n)
 
a11 a12 · · · a1n
 a21 a22 · · · a2n 
 
A= . .. .. .. 
 .. . . . 
am1 am2 · · · amn

onda je B = A’ matrica (n × m)
 
b11 = a11 b12 = a21 ··· b1m = am1
 b21 = a12 b22 = a22 ··· b2m = am2 
 
B = A’ =  .. .. .. .. .
 . . . . 
bn1 = a1n bn2 = a2n · · · bnm = amn

Primer:

>> A = [1 2 4; 6 0 5]
A =
1 2 4
6 0 5

>> B = A’
B =
1 6
2 0
4 5

Sabiranje/oduzimanje matrica je definisano samo za matrice Amn i Blk istog


tipa (m = l, n = k) na sledei naqin

A ± B = (aij ± bij ).
Poglavlje 2. Matlab i matrice 13

Mnoenje matrice A skalarom α je odreeno sa

αA = (αaij ).

Matriqno mnoenje je definisano samo za matrice saglasnog tipa. Da bi matrica


Amn mogla da se pomnoi s desna matricom Blk potrebno je i dovoljno da je n = l. U
tom sluqaju rezultujua matrica C = (cij )pq = AB je odreena sa:
1. p = m ∧ q = k
P
n
2. cij = aiν bνj , ∀i = 1, 2, . . . , m, ∀j = 1, 2, . . . , k.
ν=1
Naredba u Matlabu kojim se izraava AB je

A*B

Ovim je istovremeno pokazano kako se matrica B mnoi matricom A s leva. U


opxtem sluqaju je AB (ako ima smisla) razliqito od BA (pod uslovom da i ovo ima
smisla). Ako oba ova proizvoda imaju smisla i jednaka su, AB = BA, tada su A i B
komutativne matrice.
Za transpoziciju proizvoda AB vai

(AB)T = BT AT .

Ako je vektor a vektor vrsta


¡ ¢
a= a1 a2 · · · an

reda (1 × n) i b vektor kolona


¡ ¢
b= b1 b2 · · · bn ’

tada
(a, b) = ab
oznaqava njihov skalarni proizvod ili unutraxnji proizvod, jer je u matriqnom
smislu ovakav proizvod daje (1 × n)(n × 1) = (1 × 1) matricu. Naredba u Matlabu za
skalarni proizvod ova dva vektora je

a*b

ili

dot(a,b)

Meutim, ako je b (m × 1) vektor kolona i ako je a (1 × n) vektor vrsta, onda njihov


proizvod ba daje matricu (m × n), jer je (m × 1)(1 × n) = (m × n).
Neka su A i B kvadratne matrice reda n takve da je

AB = BA = I.

Tada i samo tada je matrica B inverzna matrica matrice A, xto se oznaqava sa

B = A−1 .
Poglavlje 2. Matlab i matrice 14

Odatle sledi, A−1 A = AA−1 = I. Oqigledno je matrica A istovremeno inverzna


matrica matrice B, A = B−1 . Kvadratna matrica ima inverznu matricu ako je njena
determinanta razliqita od nule. U Matlabu determinanta moe da se izraquna
naredbom det, na primer

>> A = [1 3; -2 4];
>> d = det(A)
d =
10

Izraz kojim se dobija inverzna matrica je

A^-1

ili,

inv(A)

Svaki broj λ i vektor x koji zadovoljavaju

Ax = λx, A ∈ Rn×n ,

nazivaju se karakteristiqna (sopstvena) vrednost i karakteristiqni (sopstveni)


vektor matrice A. Matrica λI − A naziva se karakteristiqna matrica matrice A,
P
n
a det (λI − A) = ci λi , cn = 1, je karakteristiqni polinom matrice A.
i=0
Jednaqina
det (λI − A) = 0,
je karakteristiqna jednaqina matrice A i ona ima taqno n rexenja koja ne moraju
sva da budu meusobno razliqita. Ova rexenja su oqigledno sopstvene vrednosti
matrice A. Korenovi karakteristiqnog polinoma

p(λ) = det (λI − A) = λn + cn−1 λn−1 + · · · + c1 λ + c0 ,

koji su ujedno i sopstvene vrednosti matrice A (od koje je taj polinom nastao) mogu
da se izraqunaju korixenjem Matlabove funkcije:

lambda = eig(A)

Naredba eig moe da se koristi i za odreivanje sopstvenih vektora:

[V,D] = eig(A)

gde je D dijagonalna matrica sopstvenih vrednosti, a V je matrica qije su kolone


sopstveni vektori.
Dat je sistem skalarnih diferencijalnih jednaqina u vektorskom obliku
¡ ¢T
Ax = h, h = h1 h2 . . . hm , A ∈ Rm×n , x ∈ Rn .
Poglavlje 2. Matlab i matrice 15

On je saglasan ako i samo ako postoji najmanje jedno x∗ za koje je Ax∗ = h. Ovo
x∗ je rexenje datog sistema. Ako rexenje sistema jednaqina ne postoji onda je on
nesaglasan.
Ako je A kvadratna matrica reda n (m = n) tada sistem pri h 6= 0 ima jedinstveno
rexenje ako i samo ako je A nesingularna matrica.

x = A^-1*h

ili,

x = inv(A)*h

Meutim, za rexavanje sistema linearnih jednaqina, Matlabu vixe odgovara


operator obrnuta kosa crta (\)

x = A\h

xto predstavlja deljenje matrica s leve strane. Ova notacija moe da se primeni
i u sluqaju kada matrica A nije kvadratna, tada deljenje matrica s leva x = A\h,
zapravo izvodi pseudo inverziju matrice A, x = (AT A)−1 AT h. Ovakav pristup ima
prednosti jer je vreme sraqunavanja izraza krae nego da se trai inverzna matrica.
Osim toga, u sluqaju velikih matrica ovaj pristup daje taqnije rexenje.
Qitaocu se ostavlja da istrai mogunosti nekih od vanih naredbi za rad sa
matricama kao xto su: rank, expm, pinv, cond i svd.
Spisak svih ugraenih funkcija u Matlabu za rad sa matricama se dobija sa

help matfun
Poglavlje 3

Ulaz/izlaz podataka

3.1 Ulazno/izlazne datoteke


Podaci koji se koriste za obradu, ili podaci koji predstavljaju rezultat obrade
se mogu uqitati, odnosno saquvati u datotekama. Razlikuju se dve osnovne vrste
datoteka: tekstualne i binarne.
Podaci se iz datoteke unose u radnu memoriju Matlaba naredbom

load

Ako se radi o tekstualnoj datoteci, naredba load qita red po red te datoteke
dok ne doe do sekvence koja predstavlja kraj datoteke. Podaci u okviru reda se
razdvajaju blanko karakterom ili zapetom. Broj kolona u okviru svake vrste mora
da bude isti, a broj vrsta u svakoj koloni takoe mora da bude isti.
Ako se u datoteci podaci.dat nalaze podaci koje elimo da uqitamo, jedan od naqina
da to uradimo je naredbom

load podaci.dat

U radnoj memoriji e se pojaviti matrica koja ima isto ime kao i sam naziv da-
toteke samo bez ekstenzije (u ovom sluqaju bez “.dat”). To moe da se vidi naredbom
whos. Na gore opisani naqin se uqitava navedena datoteka koja se nalazi u tekuem
direktorijumu. U suprotnom, neophodno je ili navesti celokupnu putanju gde se
nalazi datoteka, ili podesiti radni direktorijum.
Pretpostavimo da su kao rezultat izraqunavanja nastali vektori kolone x, y i
z, jednakih duina. Ako hoemo da snimimo dobijene rezultate kao tekstualnu da-
toteku, moemo najpre da vektore poreamo u matricu, npr. out, a zatim bi trebalo
da napixemo:

out = [x y z]; save izlaz.dat out -ascii

Binarna datoteka se snima tako xto se navede ime fajla sa ekstenzijom “.mat”
i navede lista promenljivih. Ako se izostavi ekstenzija, onda se imenu datoteke
automatski pridodaje “.mat”. Prilikom uqitavanja binarne datoteke, ako se navede
ime datoteke bez ekstenzije, Matlab tu datoteku takoe tretira kao binarnu. Pri-
likom uqitavanja binarne datoteke, sve zahtevane promenljive se pojavljuju u radnom
prostoru.

16
Poglavlje 3. Ulaz/izlaz podataka 17

3.2 Stringovi
Matlab podrava kreiranje, quvanje i manipulisanje matrica sa bilo kojom kombi-
nacijom slova, brojeva i specijalnih znakova, tj. stringova. Stringovi se defin-
ixu na sliqan naqin kao vektori i matrice, s tim xto se prilikom definisanja
stringa alfanumeriqki karakteri nalaze izmeu jednostrukih znakova navoda (’ . . .
’). Svaki karakter u stringu predstavlja jedan element u vektoru ili matrici.
Definiximo sledei string ’Masinski fakultet’, xto bi bilo ekvivalentno
kreiranju sledeeg vektora:

s = ’Masinski fakultet’

ili

s = [’Masinski fakultet’]

Poxto svaki karakter predstavlja element matrice, ako elimo da izdvojimo


fakultet iz prethodnog stringa, trebalo bi da uzmemo elemente vektora od dese-
tog do sedamnaestog:

>> s(10:17)
ans =
fakultet

Korisna naredba koja pretvara brojqanu vrednost u string je num2string. Ova


naredba se najqexe koristi kada je potrebno ispisati neku konkretnu brojqanu
vrednost na sliku ili u komandni prozor Matlaba. Na primer, ako elimo da
ispixemo vrednost promenljive snaga, komanda u Matlabu bi bila:

>> snaga = 3.777; ispis = num2str(snaga);


>> disp([’Korisna snaga: ’ ispis ’ kW’])
Korisna snaga: 3.777 kW

Matlab dopuxta da se definixe broj cifara koji e da se konvertuje u string,


pri qemu je prvi argument naredbe broj koji se konvertuje, dok je drugi broj cifara.
Prethodni primer moe kompaktnije da se napixe:

>> snaga = 3.777; disp([’Korisna snaga: ’ num2str(snaga,2) ’ kW’])


Korisna snaga: 3.8 kW

Proxirene mogunosti za formatizovani ispis podataka se mogu dobiti nared-


bom fprintf, qija je sintaksa:

fprintf(identifikator datoteke, format string, lista promenljivih)


Poglavlje 3. Ulaz/izlaz podataka 18

Ako se umesto identifikatora datoteke stavi ‘1’, to znaqi da e ispis ii na


ekran. O ostalim identifikatorima videti u helpu. Format string sadri speci-
fikatore formata ispisa. Naime, svakoj promenljivoj iz liste promenljivih se mora
dodeliti korespodentan specifikator formata koji opisuje polje kako e odgova-
rajue promenljive da se ispixu. Specifikatori formata poqinju znakom % i op-
ciono sadre flegove, xirinu i preciznost polja, specifikatore podtipa i karak-
tere konverzije. Taqnije, format string je potpuno preuzet iz programskog jezika
C. Sledei primer ilustruje upotrebu ove naredbe:

>> br = 3; p = 210; t = 293.7;


>> fprintf(1,’br.merenja: %1d \nprit: %3.0f Pa \ntemp: %5.1f K’,br,p,t)
br.merenja: 3
prit: 210 Pa
temp: 293.7 K

3.3 Unos podataka sa tastature


Naredba kojom se na ekranu ispisuje odgovarajua poruka i nakon qega se od koris-
nika oqekuje da unese izvesne podatke sa tastature je input.

>> n = input(’Unesi broj jabuka: ’);


Unesi broj jabuka: 32

Na ovaj naqin smo uneli skalar. Naredba za unos vektora je potpuno ista, s tim
xto nakon ispisane poruke korisnik mora da unese elemente vektora strogo izmeu
uglastih zagrada. Prirodno, u sluqaju unosa matrice, moraju da se poxtuju pravila
za kreiranje matrica.
Kod unosa stringa, naredba input ima dodatni argument ’s’:

>> ime = input(’Kako se zoves: ’,’s’);

Prilikom unosa stringa na ovaj naqin se ne zahteva upotreba jednostrukih


znakova navoda, zahvaljujui ’s’. Inaqe, string je mogue uneti kao i svaki drugi
niz, ali samo izmeu jednostrukih znakova navoda.
Ako se na naredbu input u komandnoj liniji ne unese nikakav karakter, ve se
pritisne taster return, naredba input vraa praznu matricu.
Poglavlje 4

Grafika

4.1 Uvod
Matlab sadri veoma fleksibilne funkcije za dvodimenzionalnu i trodimenzion-
alnu grafiku. Ovim funkcijama je mogue generisati krive ili povrxi, vrxiti
manipulacije sa dijagramima i menjati karakteristike i notaciju na dijagramima.
Svaki dijagram se kreira u prozoru slike, tj. u prozoru koji otvori Matlab za
vreme izvrxavanja funkcije koja kreira dijagram. Ako se u programu koristi vixe
funkcija koje generixu dijagrame, Matlab e pri izvrxavanju svake funkcije da
kreira novi prozor slike koji e da prebrixe prethodni. Da bi se zadrao svaki
novi dijagram u novom prozoru slike, potrebno je to uqiniti funkcijom

figure(n)

gde je n prirodan broj koji oznaqava broj slike. Ako se ovaj broj izostavi Matlab
sam dodeljuje sledeu vrednost.
Kada je potrebno na jednoj slici postaviti vixe nezavisnih dijagrama neophodno
je da se koristi funkcija

subplot(k,l,m)

gde prva dva argumenta dele sliku na sektore, poput matrice sa k vrsta i l kolona,
dok poslednji argument predstavlja redni broj dijagrama poqev od gornjeg levog ugla,
raqunajui s leva na desno i odozgo na dole.
Poxto svako generisanje dijagrama kreira novi prozor slike, da bi se u okviru
istog dijagrama nacrtalo vixe od jedne linije ili povrxi potrebno je “zamrznuti”
tekui prozor da bude aktivan naredbom

hold on

Gotovu sliku je mogue saquvati, konvertovati u pogodan format za ukljuqivanje


u druge dokumente ili doraivati.

19
Poglavlje 4. Grafika 20

4.2 Kreiranje 2D dijagrama


Dvodimenzionalni dijagram se kreira naredbom

plot(x,y,s)

kojom se crtaju kolone vektora y nasuprot vektoru x. Argumenti x i y ne moraju


strogo da budu vektori, ve to mogu da budu par taqaka, matrice istog tipa ili
izrazi koji se sraqunavaju. Ukoliko se izostavi x iz liste argumenata, na ordinat-
noj osi e se xtampati vrednosti elemenata vektora y, dok e se na apscisnoj osi
nalaziti odgovarajui indeksi elemenata tog vektora. Argument s je string karak-
ter kojim se definixe boja taqke, odnosno linije, tip taqke na dijagramu i vrsta
linije. Na primer, ’k–’ znaqi da e linija da bude isprekidana i crne boje. U helpu
naredbe plot se nalazi detaljan opis string karaktera. Ako se izostavi string ka-
rakter, koriste se sistemski predefinisane vrednosti. Ukoliko se na slici crta
vixe od jedne krive, boje se menjaju u skladu sa predefinisanom sekvencom.

4.2.1 Crtanje taqke


Taqka sa koordinatom (-1,2) oznaqena plavim kruiem se crta naredbom

plot(-1, 2, ’bo’)

4.2.2 Crtanje dui


Naredba

plot([xstart xend ], [ystart yend ])

odnosno

plot([-1 1], [-1 2])

crta du izmeu taqaka (−1, −1) i (1, 2).

4.2.3 Crtanje krunice


Krunica moe da se nacrta u polarnim koordinatama

x = xc + ρ · cos(θ),
y = yc + ρ · sin(θ).

Sledei skript crta koncentriqne krunice sa centrom u koordinatnom poqetku

teta = linspace(0, 2*pi, 36);


ro = 0:0.2:1;
x = cos(teta)’ * ro;
y = sin(teta)’ * ro;
plot(x, y)
Poglavlje 4. Grafika 21

pri qemu su x i y u naredbi plot matrice i iscrtavaju se kolonu po kolonu. Karakter


string je izostavljen, pa je svaka krunica na slici 4.1 drugaqije boje.

0.8

0.6

0.4

0.2

−0.2

−0.4

−0.6

−0.8

−1 −0.5 0 0.5 1

Slika 4.1. Koncentriqne krunice.

4.2.4 Familija funkcija


Matlab dopuxta da se jedna osa prikae vektorom, a druga matricom. Podaci sa
apscisne ose se uzimaju iz vektora, dok se na ordinatu nanose podaci iz kolona,
odnosno vrsta matrice, u zavisnosti od toga koja dimenzija matrice odgovara
duini vektora.
Sledei skript ilustruje familiju odziva sistema prvog reda za razliqite vred-
nosti vremenske konstante. Rezultat je prikazan na slici 4.2.

t = 0:0.1:10;
T = 0.5:0.5:3;
K = 1;
[TT, tt] = meshgrid(T, t);
yy = K * (1 - exp( -tt./TT ));
plot(t, yy)

4.2.5 Vixe funkcija na jednoj slici


Postoji vixe naqina da se nacrta vixe funkcija u okviru jedne slike. Odziv i prvi
izvod odziva sistema prvog reda mogu da se prikau na istoj slici skriptom

t = 0:0.1:10; T = 1; K = 1;
y = K * (1 - exp( -t/T ));
ydot = K / T * exp( -t/T );
plot(t, y, ’b’, t, ydot, ’m:’)
Poglavlje 4. Grafika 22

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 1 2 3 4 5 6 7 8 9 10

Slika 4.2. Familija odziva sistema prvog reda.

ili

t = 0:0.1:10; T = 1; K = 1;
y = K * (1 - exp( -t/T ));
ydot = K / T * exp( -t/T );
plot(t, y, ’b’)
hold on
plot(t, ydot, ’m:’)

Rezultat prethodna dva skripta je prikazan na slici 4.3.

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 1 2 3 4 5 6 7 8 9 10

Slika 4.3. Odziv i prvi izvod odziva sistema prvog reda.


Poglavlje 4. Grafika 23

4.3 Grafiqka obrada slika


Slike je mogue oplemenjivati u smislu davanja imena slici, natpisa na osama,
definisanja legendi, senqenja, umetanja teksta, zatim menjanja atributa osa, linija
i teksta. Takoe, mogue je koristiti grqka slova, matematiqke simbole, kao i
slova u indeksu i eksponentu.
Sledei primer ilustruje deo mogunosti. Na slici 4.4 prikazan je odziv sis-
tema prvog reda kao na slici 4.3, meutim daleko bogatije grafiqki opremljen.
Skript koji to omoguava je

close all, clear, pack


t = 0:0.1:10; T = 1; K = 10;
y = K * (1 - exp( -t/T ));
ydot = K / T * exp( -t/T );
plot(t, y, t, ydot)
title(’Odziv sistema prvog reda na odskocnu promenu ulaza’,...
’fontname’, ’arial’, ’fontsize’, 11)
xlabel(’t [s]’, ’fontsize’, 12)
ylabel(’y(t), dy(t)/dt’, ’fontsize’, 12)
legend(’y(t)’, ’dy(t)/dt’)
set(gca, ’fontsize’, 12)
indx = min( find( y >= 0.63*K ) );
hold on
plot([0 t(indx)], [y(indx) y(indx)], ’r:’)
plot([t(indx) t(indx)], [y(indx) 0], ’r:’)
plot([0 K/ydot(1)], [0 K], ’k’)
ispis = sprintf(’\\tau = %0.2f sec’, t(indx));
text( t(indx) + 0.2, 0.95*y(end), ispis, ’fontsize’, 14)
grid
ax = axis;
axis([ax(1) 7 ax(3) ax(4)])

Nakon sraqunavanja, iscrtavaju se krive odziva i prvog izvoda odziva sistema.


Obzirom da u naredbi plot nije naveden trei argument, uzima se predefinisana
sekvenca boja. Slici je dodato ime naredbom title, koja sadri string koji se
ispisuje. Naredba title moe da ima dodatne argumente kojima se menjaju atributi
teksta. Natpis uz apscisnu osu se dodaje naredbom xlabel, odnosno na ordinatnu
osu naredbom ylabel. String koji se ispisuje je obavezan, dok su ostali argumenti
u ovim naredbama opcioni. Veoma praktiqna naredba za identifikaciju krivih na
dijagramu je naredba legend. Broj argumenata u ovoj naredbi moe da bude jednak
maksimalnom broju razliqitih krivih na jednom dijagramu, pri qemu je bitno da se
vodi raquna o redosledu. Prvi argument odgovara prvoj krivoj u naredbi plot, itd.
Ova naredba moe da ima poslednji argument koji je opcioni (uzima vrednosti 1,
2, 3 ili 4), i koji definixe poloaj legende u odnosu na uglove slike. Ukoliko se
stavi vrednost 0, Matlab bira “najbolje” mesto za legendu, a ako se ovaj argument
izostavi, uzima se predefinisna vrednost (gornji desni ugao). Raster, tj. mrea sa
podelom se ukljuquje naredbom grid.
Naredbom set se u Matlabu podexavaju svojstva objekta. Konkretno, u gornjem
skriptu se podexava veliqina slova kojim se oznaqava podela na osama (pokazivaq
na funkciju gca). Na slici su nacrtane linije koje naznaqavaju vremensku konstantu
sistema (63% vrednosti u stacionarnom stanju), odnosno, tangentu na vremensku pro-
Poglavlje 4. Grafika 24

Odziv sistema prvog reda na odskocnu promenu ulaza


10
τ = 1.00 sec y(t)
dy(t)/dt
9

6
y(t), dy(t)/dt

0
0 1 2 3 4 5 6 7
t [s]

Slika 4.4: Odziv i prvi izvod odziva sistema prvog reda sa grafiqkom opremom
slike.

menu uzlaza u poqetnom trenutku. Vrednost vremenske konstante se ispisuje na dija-


gramu naredbom text. Naredba text, za razliku od legend moe da se upotrebi vixe
puta na jednoj slici. Uoqava se da je vremenska konstanta napisana grqkim slovom τ .
Matlab dopuxta da se osim grqkih slova koriste matematiqki simboli, oznake u in-
deksu i oznake u eksponentu, pri qemu se koristi LATEX notacija (sve sekvence poqinju
obrnutom kosom crtom (\)). String koji se ispisuje naredbom text u konkretnom
primeru je najpre pripremljen naredbom sprintf. Konaqno, granice apscisne i or-
dinatne ose su promenjene naredbom axis kako bi se dobio najbolji vizuelni efekat.
Naredba axis bez argumenata vraa vektor [xmin xmax ymin ymax ] sa trenutnim
granicama na slici. Ako se kao argument navede vektor, postavljaju se nove granice
crtea.
U prethodnom primeru su iskorixene samo neke od mogunosti opremanja slika
u Matlabu, a qitaocu se ostavlja da uz pomo help sistema istrai ostale.

4.4 Linije u 3D
Naredba kojom se crtaju linije u tri dimenzije je

plot3(x,y,z,s)

pri qemu su x, y i z bilo taqke ili nizovi taqaka, odnosno tripleti brojeva, vektora
iste duine, matrica istog tipa ili izraza koji kada se sraqunaju daju jednu od
prethodno nabrojanih veliqina. Argument s je string karakter kojim se definixe
boja taqke, odnosno linije, tip taqke na dijagramu i vrsta linije kao kod naredbe
plot.
Sledei skript crta heliks, slika 4.5.

t = 0:pi/50:10*pi;
Poglavlje 4. Grafika 25

plot3(sin(t), cos(t), t);

40

30

20

10

0
1
0.5 1
0 0.5
0
−0.5 −0.5
−1 −1

Slika 4.5. Heliks.

4.5 Povrxi
Matlab raspolae monim funkcijama za trodimenzionalno prikazivanje povrxi,
kontura, zapremina, kao i kombinacija prethodno nabrojanih.
Osnovne funkcije za crtanje povrxi su surf i mesh.
Funkcija surf crta mreu qija su polja obojena, dok se kod funkcije mesh crtaju
granice polja na mrei, a sama polja ostaju bela. Kod naredbe surf granice polja su
crne boje, a boja polja zavisi od intenziteta z, dok mesh boja granice polja mree
odreena intenzitetom z.
Neka je funkcija v(x1 , x2 ) definisana kao
v(x1 , x2 ) = x21 + x22 + x1 x2 .

Na slici 4.6 nacrtana je v(x1 , x2 ) funkcijom mesh, skriptom:


xx1 = linspace(-10, 10, 25);
xx2 = linspace(-10, 10, 25);
[x1,x2] = meshgrid(xx2, xx2);
z = x1.^2 + x2.^2 + x1.*x2;
mesh(x1, x2, z)
Ista funkcija generisana sa surf je data na slici 4.7.
Ako se koristi funkcija surfc, na slici e se nai konture koje predstavljaju
pojedine projekcije povrxi na ravan z = 0. Naredbom colorbar prikazuje se vaea
kolor-mapa. Funkcija shading kontrolixe senqenje povrxi. Kombinacija poslednje
tri naredbe data je u sledeem skriptu, a rezultat je prikazan na slici 4.8.
xx1 = linspace(-10, 10, 25);
xx2 = linspace(-10, 10, 25);
[x1,x2] = meshgrid(xx2, xx2);
z = x1.^2 + x2.^2 + x1.*x2;
surf_c(x1, x2, z);
shading interp;
colorbar(’vert’);
Poglavlje 4. Grafika 26

300

250

200

150

100

50

0
10
5 10
0 5
0
−5
−5
−10 −10

Slika 4.6. Povrx nacrtana funkcijom mesh.

300

250

200

150

100

50

0
10
5 10
0 5
0
−5
−5
−10 −10

Slika 4.7. Povrx nacrtana funkcijom surf.

Na slici 4.9 prikazan je odziv sistema drugog reda na jediniqnu odskoqnu pro-
menu ulaza za razliqite vrednosti stepena priguxenja. Skript za taj primer je
close all, clear, pack
t = 0:0.1:10;
wn = 1;
zeta = 0:0.2:1;
y = zeros(length(t), length(zeta));
for k = 1:length(zeta)
y(:, k) = step(tf([wn^2], [1 2*zeta(k)*wn wn^2]), t);
end
mesh(t, zeta, y’)
xlabel(’t [s]’), ylabel(’\zeta’), zlabel(’y(t)’)
Poglavlje 4. Grafika 27

300

250
300

250

200
200

150
150
100

50
100

0
10

5 10 50
5
0
0
−5
−5
0
−10 −10

Slika 4.8. Povrx nacrtana funkcijama surfc, shading i colorbar.

1.5

1
y(t)

0.5

0
1
0.8 10
0.6 8
0.4 6
4
0.2
2
0 0
ζ t [s]

Slika 4.9. Odziv sistema drugog reda prikazan u tri dimenzije.


Poglavlje 5

Kontrola toka programa

5.1 Uvod
Kontrola toka izvrxavanja naredbi u okviru programa napisanog u Matlabu se vrxi
pomou sledee qetiri naredbe: while, if, for i switch. Sintaksa ovih naredbi
odreuje da se svaka od ovih naredbi zavrxava naredbom end. Dakle, sve naredbe
ili izrazi koji se nalaze izmeu jedne od naredbi kontrole toka programa i naredbe
end e se izvrxiti ako je zadovoljen odgovarajui logiqki uslov. U okviru jedne
naredbe kontrole toka je mogue ugnezditi i druge naredbe za kontrolu toka.
Kada se koriste naredbe za kontrolu toka programa, dobra programerska praksa
je da se naredbe koje se nalaze pod kontrolom tih naredbi uvuku nekoliko karak-
tera. Nazubljivanje programa znatno poveava qitljivost programa qime se olak-
xava traenje grexaka i odravanje programa. Kada se koristi Matlabov edi-
tor/dibager, nazubljivanje se vrxi automatski.

5.2 While petlja


While petlja je petlja sa izlaskom na poqetku. Sintaksa naredbe while izgleda

while uslov
naredbe
end

Naredba while ponavlja naredbe neograniqen broj puta sve dok je ispunjen uslov.
Uslov se najqexe daje kao izraz u obliku

izraz relacijski operator izraz

Nenulta vrednost izraza se tretira kao logiqki taqna.


Sledei program ilustruje primenu while naredbe za sraqunavanje prvih N ele-
menata sledeeg niza,

N
X 1
SN =
n2
n=1

s tim da priraxtaj niza mora da bude manji od 1 · 10−5 .

28
Poglavlje 5. Kontrola toka programa 29

n = 1; S = 0; eps = 1e-5;
while 1/n^2 > eps
S = S + 1/n^2;
n = n + 1;
end
fprintf(1,’Suma %d elemenata je S = %6.4f’,n,S)

5.3 For petlja


For petlja je takoe petlja sa izlaskom na poqetku. Sintaksa ove naredbe je:

for promenljiva = izraz


naredbe
end

For petlja ponavlja naredbe odreen broj puta. Qesto promenljiva = izraz ima oblik
brojachka promenljiva = N 1 : N 2 : N 3, pri qemu je N 1 inicijalna vrednost, N 3 krajnja
vrednost, a N 2 priraxtaj indeksne promenljive. Treba primetiti da N 3 moe da
bude manja od N 1, u kom sluqaju N 2 mora da bude negativno. Ako se N 2 izostavi,
podrazumeva se da se indeksna promenljiva uveava za jedan.
Primena for petlje e biti ilustrovana na sledeem primeru, gde je potrebno
sraqunati sumu kvadrata svih elemenata (m × n) matrice

A = magic(5);
[m, n] = size(A);
S = 0;
for k = 1:m
for l = 1:n
S = S + A(k,l)^2;
end
end
disp([’Suma kvadrata elemenata matrice A je: ’,num2str(S)])

5.4 If naredba
Opxti oblik naredbe if je

if uslov1
naredbe1
elseif uslov2
naredbe2
else
naredbe3
end

Ako je ispunjen uslov1, izvrxavaju se naredbe1, a zatim se izvrxava prva sledea


Poglavlje 5. Kontrola toka programa 30

naredba nakon end. Ako uslov1 nije ispunjen, ispituje se uslov2. Ukoliko je taj uslov
ispunjen, izvrxavaju se naredbe2, a zatim se izvrxavanje programa nastavlja ispod
end. Ukoliko ni jedan od uslova nije ispunjen, izvrxavaju se naredbe3. Naredbe
elseif i else ne moraju obavezno da se koriste. Osim toga, mogue je koristiti
vixe od jedne elseif naredbe.
Naredba if moe da se koristi da se realizuje funkcija sign(x):


1 ako je x > 0,
sign(x) = 0 ako je x = 0,


−1 ako je x < 0.
Program kojim se ova funkcija realizuje je:

if x > 0
y = 1;
elseif x == 0
y = 0;
else
y = -1;
end

5.5 Naredbe break i continue


Matlab nema petlju sa izlaskom na kraju i na sredini. Zbog toga je naredbom break
mogue prekinuti for ili while petlju. Ako je naredba break u okviru ugnedene
for ili while petlje, prekida se izvrxavanje te petlje i vraa se na vixi nivo for
ili while petlje. Ako se u okviru for ili while petlje izvrxi naredba continue,
tada se prelazi na sledeu iteraciju u petlji, pri qemu se preskaqu sve preostale
naredbe u telu petlje. Ako se radi o ugnedenoj petlji, tada se se prelazi u narednu
iteraciju u okviru petlje u kojoj se nalazi naredba continue.
Sledei program ilustruje primenu naredbi break i continue. Potrebno je
napraviti program koji uqitava sa tastature i pravi sumu deset prirodnih brojeva
manjih od pedeset.

n = 1; suma = 0;
while 1
str = sprintf(’Unesite element broj %d: ’, n);
x = input(str);
if x <= 0 | x >= 50
disp([’Pogresan broj! Uneste ponovo!’])
continue;
else
suma = suma + x;
n = n + 1;
end
if n > 10
break;
end
end
Poglavlje 5. Kontrola toka programa 31

disp([’Suma = ’, num2str(suma)])

5.6 Naredba switch


Naredba switch omoguava vixestruko grananje u programu. Opxti oblik naredbe
switch je:

switch switch izraz


case case izraz1
naredbe1
case case izraz2
naredbe2
..
.
case case izrazN
naredbeN
otherwise
naredbeN+1
end

Najpre se izraqunava switch izraz, koji moe biti ili skalar ili string, a zatim
se proverava da li postoji case izraz sa istom vrednoxu, poqev od prvog. Ako po-
stoji case izraz, izvrxavaju se naredbe u oviru istog case-a, a zatim se prelazi na
prvu naredbu iza end. Ako ne postoji ni jedan case izraz koji odgovara switch izraz-
u, izvrxie se naredbeN+1. Za razliku od programskog jezika C, kada se izvrxe
naredbe u okviru jednog case-a, Matlab ne prolazi kroz preostale case-ove, pa se
zbog toga ne koristi naredba break.
Sledei program ilustruje upotrebu naredbe switch.

n = input(’Unesi broj: ’);


if n ~= 0
n = n/abs(n);
end
switch n
case 1
disp(’Broj je pozitivan’)
case -1
disp(’Broj je negativan’)
otherwise
disp(’Broj je nula’)
end
Poglavlje 6

Funkcije

6.1 Uvod
Jedan od naqina da se grupixe sekvenca naredbi je u obliku skript datoteke sa
ekstenzijom ’.m’. Drugi oblik m-datoteke je funkcija. Funkcije su skript datoteke
koje kreiraju sopsteveni radni prostor i lokalne promenljive pod okriljem Matlaba.
Sve promenljive koje se kreiraju u okviru funkcije su lokalne za tu funkciju i
ne korespondiraju sa promenljivama istih imena u drugim skript ili funkcijskim
datotekama. Sve ugraene naredbe u Matlabu su funkcije ovog tipa. Upotrebom
funkcija uproxava se sloenost i poveava qitljivost izvornog kôda, izbegava se
dupliranje kôda, poveava portabilnost, itd.

6.2 Funkcijska datoteka


Svaka funkcija ima najmanje dve linije kôda, pri qemu prva linija obavezno mora
da ima zahtevani format. Opxti oblik funkcije je:

function PovratnaVrednost = ImeFunkcije(Argumenti)


%komentari
izrazi

Svakoj funkciji mora da se dodeli ime koje bi trebalo da bude smisleno i do-
voljno indikativno da ukazuje na to xta ta funkcija radi. Xta vixe, ime ’.m’
datoteke mora da bude isto kao i ime funkcije. Prva linija u funkciji predstavlja
prototip funkcije, qime se specificira broj promenljivih i njihov tip (skalar, vek-
tor, matrica) koje se prenose iz glavnog programa u funkciju i obratno. Komentare,
koji se nalaze neposredno ispod deklaracije funkcije, Matlab tretira kao help in-
formacije vezane za tu funkciju, i ispisuju se kada se u komandnoj liniji Matlaba
unese:

help ImeFunkcije

Na kraju funkcije se ne nalazi terminator karakter ili izraz kao xto je end kod
naredbi kontrole toka.
Kada se u komandnoj liniji napixe ime funkcije Matlab pokuxava da prepozna
funkciju po imenu. Preciznije, Matlab najpre proverava da li je ime funkcije
promenljiva. Ako to nije, proverava se da li ta funkcija ne pripada skupu in-

32
Poglavlje 6. Funkcije 33

ternih funkcija Matlaba. Ako to ne uspe, Matlab trai na disku datoteku sa


istim imenom. Ako se funkcija pronae, Matlab je kompajlira i smexta u memoriju
tako da moe da se koristiti i svaki sledei put.
Kada se pozove funkcija, bilo iz komandne linije, skript datoteke ili druge
funkcije, vrxi se prenos argumenata u funkciju prema specificiranoj listi ar-
gumenata u prototipu funkcije. Promenljive u definiciji funkcije ne moraju
obavezno da imaju iste identifikatore kao u pozivu funkcije. Naprotiv, ista imena
promenljivih mogu da imaju potpuno razliqito znaqenje u skript datoteci iz koje
se poziva funkcija i same funkcije. Argumenti funkcije, koji se nalaze izmeu
zagrada u definiciji funkcije, predstavljaju lokalne promenljive i formiraju se
pri pozivu funkcije. Prvom argumentu se dodeljuje vrednost prvog parametra u
pozivu funkcije, i tako dalje do kraja liste argumenata. Dakle, pri pozivu funk-
cije mora da se vodi raquna da poziv odgovara definiciji funkcije. Argumenti
funkcije se odvajaju zapetom.

6.2.1 Povratna vrednost funkcije


Povratna vrednost funkcije moe da ima nekoliko oblika u zavisnosti od toga kako
se rezultati vraaju. Razmotrimo sledei primer funkcije koja ima tri argumenta,
od kojih je jedan vektor t i dva su skalari τ , K. Povratna vrednost funkcije je
matrica.

function izlaz = Odziv(t, tau, K)


%Odziv sistema prvog reda
%tau.d(y(t))/dt + y(t) = K.u(t)
%na hevisajdovu funkciju
%y(t) = K*(1 - exp(-t/tau))
%ydot(t) = K/tau*exp(-t/tau)
%Argumenti: t - vektor
% tau, K - skalari
%Povratna vrednost: izlaz = [y ydot]
y = K * (1 - exp( -t/tau ));
ydot = K / tau * exp( -t/tau );
izlaz = [y; ydot];

Deo skripta kojim se poziva funkcija moe da izgleda

t = 0:0.1:10; y = Odziv(t, 1, 1);

Nakon poziva funkcije Odziv u radnom prostoru se naxla matrica y, koja ima dve
vrste i onoliko kolona koliko i vektor t.
Ako bi eleli da funkcija vrati obe sraqunate promenljive pojedinaqno, kôd
funkcije bi mogao da izgleda

function [y, ydot] = Odziv(t, tau, K)


y = K * (1 - exp( -t/tau ));
ydot = K / tau * exp( -t/tau );

dok bi skript mogao da se napixe


Poglavlje 6. Funkcije 34

t = 0:0.1:10; [y1 y2] = odziv(t, 1, 1);

Paljivim uporeivanjem definicije funkcije i skripta u navedenom primeru,


uoqava se, da su povratne vrednosti u definiciji funkcije strogo razdvojene za-
petom, dok u pozivu funkcije promenljive u vektoru koje primaju te vrednosti, mogu
da budu razdvojene ili zapetom ili blanko karakterom. Ako bi se u skriptu umesto
vektora koji prihvata povratnu vrednost funkcije napisao skalar, npr. y1, njoj bi
se dodelila samo povratna vrednost prve promenljive.
Sledea varijanta moe da bude da su argumenti prikazani kao vektor, dok je
svaka izlazna promenljiva individualna. Funkcija bi bila

function [y, ydot] = Odziv(t, ulaz)


y = ulaz(2) * (1 - exp( -t/ulaz(1) ));
ydot = ulaz(2) / ulaz(1) * exp( -t/ulaz(1) );

a odgovarajui skript

t = 0:0.1:10; ulaz = [1, 1]; [y1 y2] = odziv(t, ulaz);

Zamislimo sada da elimo da izvedemo isti proraqun, ali za vixe razliqitih


vrednosti, recimo promenljive τ . Ovo moe da se rexi uz pomo, npr. for petlje.
Skript bi izgledao

t = 0:0.1:10;
tau = 1:5;
y1 = zeros(length(tau), length(t));
y2 = zeros(length(tau), length(t));
for k = 1:length(tau)
[y1(k,:) y2(k,:)] = odziv(t, tau(k), 1);
end

Veoma je vano da se primeti da su matrice y1 i y2 deklarisane neposredno pre


nego xto se njihovim elementima dodeljuje vrednost u for petlji. Ova praksa se
preporuquje zbog toga xto znatno skrauje vreme izvrxavanja ovog dela programa,
jer bi u suprotnom Matlab vrxio dinamiqku alokaciju memorije u svakoj iteraciji
for petlje. Ovo se objaxnjava time xto Matlab interpretira, a ne kompajlira,
funkcije koje pixe korisnik. Iz ovog razloga programi pisani u Matlabu mogu da
budu dosta sporiji od sliqnih napisanih u programskim jezicima Fortran ili C.
Da bi se izvukao maksimum performansi Matlaba, preporuquje se da se, kad god je
mogue, koriste ugraene Matlabove funkcije i operatori.

6.2.2 Posebni sluqajevi


Postoje situacije kada funkcija nema povratnu vrednost. Kada se crta dijagram
naredbom plot, ili se pohranjuju podaci u datoteku naredbom save, prilikom poziva
funkcija ne vraaju se podaci u glavni program. Prototip funkcije moe da se
Poglavlje 6. Funkcije 35

generalizuje kao

function ImeFunkcije(Argumenti)

Funkcija moe da ne sadri argumente. To je qest sluqaj ako se funkcija koristi


da sloi podatke u odreen naqin. U tom sluqaju prototip funkcije je

function PovratnaVrednost ImeFunkcije

Iz funkcije se izlazi kada se dosegne poslednja naredba u telu funkcije. Meu-


tim, naredbom return je mogue izdejstvovati raniji prekid funkcije.

6.2.3 Inline
Matlab dozvoljava da se naredbom inline kreira funkcija koja ne mora da se saquva
u posebnoj datoteci. Funkcija kreirana na ovaj naqin mora da bude saqinjena
iskljuqivo od Matlabovskih izraza i ne moe da poziva druge inline funkcije.
Ovakva funkcija moe da vraa samo jednu promenljivu (nikako vixe promenljivih
poreanih u vektor). U opxtem sluqaju naredba inline se koristi na sledei naqin

ImeFunkcije = inline (’Izraz’,’Argument1’,’Argument2’,. . .)

Primer iz 6.2.1 moe da se rexi primenom inline

Izlaz = inline(’K * (1 - exp( t/tau ))’, ’t’, ’tau’, ’K’)

xto za posledicu ima ispis na komandnom prozoru Matlaba

Izlaz =
Inline function:
Izlaz(t,tau,K) = K * (1 - exp( t/tau ))

Funkcija moe da se pozove iz komandne linije

y = Izlaz(0:0.1:10, 1, 1);

Naredba inline bi mogla da se shvati i kao ekvivalent makrou u programskom


jeziku C.

6.2.4 Funkcija funkcije (feval)


Naredba feval izvrxava specificiranu funkciju od strane korisnika. Naime,
feval(F,x1,. . .,xn) izvrxava funkciju specificiranu pokazivaqem na funkciju (han-
dle) ili imenom funkcije, F, za date argumente x1,. . . , xn. Feval se najqexe koristi
unutar funkcija koje kao argumente koriste hendl funkcija ili stringove funk-
cija. Matlab ima nekoliko funkcija koje obrauju funkcije definisane od strane
korisnika. U daljem tekstu e biti ilustrovane funkcije fzero, ode45 i quadl
Poglavlje 6. Funkcije 36

Traenje nula funkcije

Matlab ima ugraenu funkciju koja trai rexenje f (x) = 0 unutar tolerancije t0
bilo u okolini x0 ili na intervalu [x1 x2 ]. Ova naredba u opxtem sluqaju je
oblika

fzero(ImeFunkcije,x0,opcije,p1,p2,. . .)

gde je ImeFunkcije ime funkcijske datoteke izmeu jednostrukih znakova navoda, ali
bez sufiksa “.m’’. Ako se koristi inline nisu potrebni znaci navoda. Na primer,

fzero(’sin(x) + cos(2*x+pi/4)’, 10)

ili,

g = inline(’sin(x) + cos(2*x + pi/4)’, ’x’);


fzero(g, 10)

Ako je funkcija f (x) data u obliku polinoma

f (x) = c1 xn + c2 xn−1 + . . . + cn x + cn+1

jednostavnije je da se za traenje korenova koristi

roots(c)

gde je c = [c1 c2 . . . cn+1 ].


Na primer:

>> r = roots([1 6 11 6])


r =
-3.0000
-2.0000
-1.0000

Obrnuto, ako su poznati korenovi, koeficijenti polinoma se dobijaju naredbom


poly

>> c = poly(r)
c =
1.0000 6.0000 11.0000 6.0000

Dva polinoma je mogue pomnoiti naredbom

conv(a,b)

gde vektori a i b sadre koeficijente polinoma respektivno.


Poglavlje 6. Funkcije 37

Numeriqko rexavanje diferencijalnih jednaqina

Funkcijom ode45 se rexava sistem od n diferencijalnih jednaqina prvog reda, u


vektorskom obliku
dy
= f (t, y1 , y2 , . . . , yn ),
dt
na intervalu t0 6 t 6 tf , za poqetne uslove y(t0 ) = y0 . U opxtem sluqaju, argumenti
i povratna vrednost funkcije su

[t,y] = ode45(ImeFunkcije,[t0 tf],y0,opcije,p1,p2. . .)

Argument ImeFunkcije moe da bude ili ime funkcijske datoteke izmeu jedno-
strukih znakova navoda bez sufiksa “.m” ili identifikator funkcije definisane
sa inline. U svakom sluqaju mora da bude oblika, na primer

function y izvod = ImeFunkcije(t,y,flag,p1,p2,. . .)

gde je t nezavisna promenljiva, y je vektor qiji su elementi u korespodenciji sa ele-


mentima vektora y diferencijalne jednaqine, flag je string koji mora da se koristi
ako se navode parametri p1, p2, . . . koji se prosleuju funkciji. Povratna vrednost
se definixe u telu funkcije tako da funkcija vraa vektor kolonu korespodentnu
sa vrstama u sistemu od n diferencijalnih jednaqina.
U opxtem sluqaju, ode45 predstavlja najbolji alat za rexavanje diferencijalnih
jednaqina u veini sluqajeva i zbog toga je podexeno da bude predefinisani metod
u Matlabu. Osim ode45, Matlab ima i druge metode za rexavanje diferencijalnih
jednaqina.
Primena ode45 e biti ilustrovana na odreivanju odziva sistema drugog reda

d2 y(t) dy(t)
2
+ 2ζwn + wn2 y(t) = wn2 u(t).
dt dt
Diferencijalna jednaqina moe da se, nakon uvoenja smene

y1 = y,
dy
y2 = ,
dt
napixe kao sistem dve diferencijalne jednaqine prvog reda

dy1
= y2 ,
dt
dy2
= −wn2 y1 − 2ζwn y2 + wn2 u.
dt
Sada moe da se napixe funkcija koja predstavlja sistem

function ydot = DrugiRed(t, y, flag, zeta, wn, u)


ydot = [y(2); -wn^2*y(1) - 2*zeta*wn*y(2) + u];

Skript koji poziva funkciju i crta dijagram za vrednosti ζ = 0, 7 i wn = 1 rad/s,


na vremenskom intervalu [t0 , tf ] = [0, 10], za nulte poqetne uslove, ako je ulaz je-
diniqna odskoqna funkcija u(t) = 1 je sledei
Poglavlje 6. Funkcije 38

1.4

1.2

0.8

0.6

0.4

0.2

0
0 1 2 3 4 5 6 7 8 9 10

Slika 6.1. Jediniqni odskoqni odziv sistema drugog reda.

[tt,yy] = ode45(’DrugiRed’, [0 10], [0 0]’, [], 0.7, 1, 1);


plot(tt, yy(:,1))

Ako bi smo eleli da reximo istu diferencijalnu jednaqinu za razliqite vred-


nosti stepena priguxenja ζ = 0, 0.2, . . . , 1, dovoljno je da napixemo odgovarajui
skript

close all
hold on
for k = 0:0.2:1
[tt, yy] = ode45(’DrugiRed’, [0 10], [0 0]’, [], k, 1, 1);
plot(tt, yy(:,1))
pause(0.1)
end

Odgovarajui dijagram je dat na slici 6.2.


Poglavlje 6. Funkcije 39

1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

0
0 1 2 3 4 5 6 7 8 9 10

Slika 6.2: Jediniqni odskoqni odziv sistema drugog reda za razliqite vredosti ζ.

You might also like