You are on page 1of 66

Milan R.

Ristanovi
Dragan V. Lazi

UVOD U MATLAB

y(t)

1.5

0.5

0
1
0.8

10
0.6

8
6

0.4
4

0.2

2
0

Beograd, 2004.

t [s]

Predgovor

Ovaj materijal je nastao kao pratea literatura za osnovni kurs Matlaba koji se
dri studentima tree godine Odseka za automatsko upravae Maxinskog fakulteta
u Beogradu. Materijal je osmixen da uvede qitaoca u osnovne pojmove u Matlabu i
uqini ih razumivim, kako bi se stekla jaka osnovna znaa za rexavae ineerskih
problema. Kroz niz jednostavnih primera qitalac se navodi da se osamostauje da bi
nastavio da individualno istrauje mogunosti Matlaba.
Prvih sedam poglava odnose se na Matlab u opxtem smislu, tako da mogu da ih koriste i studenti i ineeri koji se prvi put sreu sa Matlabom. Posleda glava
sadri deo mogunosti paketa Matalba koji se koristi za analizu i sintezu sistema
automatskog upravaa, i predstava logiqan nastavak prethodnih poglava.

Autori

Sadraj
1

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

1
1
1
2
2

Matlab i matrice
2.1 Matrice . . . . . . . . . . . . . . . . . .
2.2 Vektori . . . . . . . . . . . . . . . . . .
2.3 Manipulisae matricama i vektorima
2.4 Operacije nad matricama i vektorima

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

5
5
6
8
10

Ulaz/izlaz podataka
3.1 Ulazno/izlazne datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Stringovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Unos podataka sa tastature . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15
15
16

Kontrola toka programa


4.1 Uvod . . . . . . . . . . . .
4.2 While peta . . . . . . . .
4.3 For peta . . . . . . . . .
4.4 If naredba . . . . . . . . .
4.5 Naredbe break i continue
4.6 Naredba switch . . . . . .

Uvod
1.1 Xta je to Matlab . . . .
1.2 Kako se koristi Matlab .
1.3 Rad sa promenivama . .
1.4 Rad u komandnom prozoru

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

19
19
19
20
20
21
21

Funkcije
5.1 Uvod . . . . . . . . . . . . . . . . . .
5.2 Funkcijska datoteka . . . . . . . . .
5.2.1 Povratna vrednost funkcije
5.2.2 Posebni sluqajevi . . . . . .
5.2.3 Inline . . . . . . . . . . . . .
5.2.4 Funkcija funkcije (feval) .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

23
23
23
24
25
25
26

2D grafika
6.1 Uvod . . . . . . . . . . . . . . . .
6.2 Kreirae 2D dijagrama . . . . .
6.2.1 Crtae taqke . . . . . . .
6.2.2 Crtae dui . . . . . . .
6.2.3 Crtae krunice . . . .
6.2.4 Familija funkcija . . . .
6.2.5 Vixe funkcija na slici
6.3 Grafiqka obrada slika . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

29
29
29
30
30
30
30
30
32

3D grafika
7.1 Linije u 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Povrxi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35
35
35

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

iii

iv
8

SADRAJ
Control Systems Toolbox
8.1 Uvod . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Prikazivae sistema u Matlabu . . . . . . .
8.2.1 Model u prostoru staa . . . . . . . .
8.2.2 Prenosna funkcija . . . . . . . . . . . .
8.2.3 Nule, polovi i pojaqaa . . . . . . . .
8.2.4 Prevoee izmeu razliqitih oblika
8.3 Odreivae odziva sistema . . . . . . . . . .
8.4 Rastavae racionalnih funkcija . . . . . .
8.5 Uqestanosne karakteristike . . . . . . . . . .

.
.
.
.
.
.
.
.
.

39
39
39
39
41
42
42
42
43
45

Prilozi
9.1 Prilog A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Prilog B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47
47
55

Literatura

. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
modela
. . . . .
. . . . .
. . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

57

Spisak slika
5.1
5.2

Jediniqni odskoqni odziv sistema drugog reda . . . . . . . . . . . . . . .


Jediniqni odskoqni odziv sistema drugog reda za razliqite vredosti

28
28

6.1
6.2
6.3
6.4

Koncentriqne krunice . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Familija odziva sistema prvog reda . . . . . . . . . . . . . . . . . . . . .
Odziv i prvi izvod odziva sistema prvog reda . . . . . . . . . . . . . . .
Odziv i prvi izvod odziva sistema prvog reda sa grafiqkom opremom
slike . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31
31
32
33

7.1
7.2
7.3

Povrx nacrtana funkcijom mesh . . . . . . . . . . . . . . . . . . . . . . . .


Povrx nacrtana funckijom surf . . . . . . . . . . . . . . . . . . . . . . . .
Odziv sistema drugog reda u prikazan u tri dimenzije . . . . . . . . . .

36
36
37

8.1
8.2
8.3

Jediniqni odskoqni odziv sistema . . . . . . . . . . . . . . . . . . . . . .


Lik staa sistema drugog reda . . . . . . . . . . . . . . . . . . . . . . . .
Kompletan lik staa sistema drugog reda . . . . . . . . . . . . . . . . . .

43
44
44

9.1
9.2
9.3

Elementarni bodeovi dijagrami . . . . . . . . . . . . . . . . . . . . . . . .


Zbirni bodeov dijagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Najkvistov dijagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47
48
56

Poglave 1

Uvod
1.1

Xta je to Matlab

Matlab je vixi programski jezik nameen 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. Zahvaujui fleksibilnom
okrueu koje integrixe proraqune sa vizuelizacijom, xirokom spektru ugraenih
funkcija kojima se efikasno dolazi do numeriqkih rexea, mogunoxu razvoja algoritama i programiraa, Matlab se nametnuo kao nezameniv alat za rexavae problema u gotovo svim oblastima ineerske prakse.

1.2

Kako se koristi Matlab

Nakon pokretaa 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 prostor 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 promenive nastale posredstvom tih
naredbi se automatski smextaju u memoriju i mogu se naknadno koristiti dok god se
ne napusti trenutna seansa u Matlabu. Ako se u nekoj naredbi ne definixe promeiva
kojoj se dodeuje vrednost nekog izraza, Matlab tada dodeuje vrednost generiqkoj
promenivoj ans. Prirodno, prilikom izraqunavaa sledeeg izraza, nova vrednost
e biti prepisana preko prethodne vrednosti promenive 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 posredstvom
poziva ugraenih Matlab funkcija. Osim osnovnih, Matlab je opremen velikom
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 meati izraze, rad u komandnoj liniji poqie da predstava ozbino ograniqee. Potencijalni problemi mogu da se rexe uvoeem 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 u bilo kom
programu za obradu teksta, osnosno u editoru teksta i dibageru koji je deo paketa
Matlaba. Kreirana skript datoteka se izvrxava kucaem enog imena u komandoj
liniji bez sufiksa .m ili direktno iz Matlabovog editora.
1

Poglave 1. Uvod

1.3

Rad sa promenivama

Matlab razlikuje identifikatore promenivih duine do 31 alfanumeriqki karakter, pri qemu se karakteri posle tridesetprvog ignorixu. Identifikator promenive obavezno mora poqeti slovom, dok ostali karakteri mogu biti kombinacija
slova, brojeva i znaka podvuqeno ( ). Identfikator promenive ne sme da sadri
blanko karakter. Matlab razlikuje velika/mala slova u imenu identfikatora promenive. Prilikom odreivaa identifikatora moe se pridravati jedne od dve
programerske konvencije. U prvoj se koriste doe crte, dok se kod druge koriste
velika slova, kao npr.: ime promenljive odnosno ImePromenljive.
Postoje i specijalne promenive 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 promenivih nastalih u komandnoj liniji ili u skript datoteci. Kao xto je prethodno napomenuto, vrednost neke
brojqane vrednosti dodeene nekoj promenivoj se ponovo mogu koristiti jednostavnim
kucaem identifikatora te promenive ili u okviru nekog izraza. Promenive se brixu iz memorije naredbom clear. Da bi se videlo koje su promenive definisane od
posledeg izvrxea naredbe clear, dovono je otkucati whos. Skromnija varijanta
narebe whos je who. Ako se eli da se iz memorije izbrixu samo pojedine promenive
to se qini naredbom clear i navoeem liste identifikatora promenivih 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 promenive 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 identifikator i vrednost promenive. Stavae specijalnog znaka taqka-zarez (;) kao posledeg
karaktera u naredbi ima za posledicu spreqavae ispisa na tu naredbu. Na primer:
>> a=5.23;
>> b = 3;
>> c=-0.68;
Matlab dozvoava unos vixe naredbi u komandoj liniji, koje moraju biti razdvojene
bilo zarezom (,), ili sa znakom taqka-zarez (;). Ako se koristi zarez, tada sistem daje
ispis na naredbu. Prethodni unos se moe kompaktnije napisati kao:
>> a=5.23; b=3; c=-0.68;

1.4. Rad u komandnom prozoru

Nad promenivama je mogue vrxiti aritmetiqke operacije. Recimo da je potrebno


sraqunati sledei izraz:
d=

b
a 2c

Naredba u komandnoj liniji koja odgovara ovom izrazu bila bi:


>> d=(a - 2*c)^(1/b)
Da bi se izvrxio numeriqki proraqun, promenive u izrazu moraju prethodno da budu
definisane, inaqe e se pojaviti poruka o grexci. Poxto su vrednosti promenivih
a, b i c poznate, nakon izvrxea naredbe sistem vraa vrednost:
d =
1.8748
Prilikom izvrxavaa aritmetiqkih operacija, Matlab vodi raquna o prioritetu
opreratora.
Korisno je koristiti Matlabov help sistem iz komandne linije jednostavnim ukucavaem
help ImeFunkcije.
Osim toga, veoma koristan je i ulaz sa tastature c (jednovremen stisak na Ctrl i c)
koji obezbeuje prekid izvrxavaa skript datoteke ili funkcije. U komandnoj liniji
se mogu nai prethodno unete naredbe koje se izlistavaju pomou kurzorskih tastera
() i (). Pre pritiska na taster <enter> mogue je izmeniti pozvanu naredbu.

Poglave 2

Matlab i matrice
2.1

Matrice

Neka je skup A poe (A = P) i neka su egovi elementi oznaqeni sa a11 , a12 , . . . , amn .
Skup od mn elemenata a11 , a12 , . . . , amn poa 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 = aij , 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 enu k-tu kolonu. Poxto su elementi
aij matrice A elementi poa A kae se da je A m n matrica nad poem 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
4
-3

2
-1
0

-3
8
6

xto predstava matricu (3 3)

1
2 3
8
A = 4 1
3
0
6

Prilikom unosa matrice, elementi po vrstama se moraju razdvojiti ili blanko simbolom ili znakom (,), dok se vrste razdvajaju znakom (;). Dimenzija matrice 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
5

Poglave 2. Matlab i matrice

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 enu glavnu dijagonalu. Ako
su svi elementi van glavne dijagonale jednaki nuli, aij = 0, i, j = 1, 2, . . . , n, i =
 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 sa formirae jediniqne matrice reda n je
eye(n)
tako da sledea naredba daje:
>> I = eye(3)
I =
1
0
0

2.2

0
1
0

0
0
1

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

2.2. Vektori
Qesto emo vektore prikazivati pomou vektora vrsta:


aT = a1 a2 . . . an ,
Vektori se kreiraju na jedan od sledeih naqina:
a = [a b c . . .]
ili
a = [a, b, c . . .]

gde su a, b, c, . . . bilo identifikatori promenivih, brojevi, izrazi, ili stringovi.


U prvom sluqaju, izmeu simbola se zahteva blanko karakter, dok u drugom sluqaju po
ei moe da se izostavi.
Vano je napomenuti, da ako se na mestu nekog elementa matrice eksplicitno napixe
matematiqki izraz, onda izmeu alfanumeriqkih karaktera i simbola matematiqkih
operatora ne smeju da se stavaju blanko karakteri.
Matlab prua vixe razliqitih naqina da se dodele brojqane vrednosti vektoru.
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
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 definisaa vektora izostavi priraxtaj, Matlab podrazumeva da je razlika izmeu susednih vrednosti 1. Tako da sledea naredba daje:
>> t = 0:10
t =
0

10

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


poqetne sve do kraje vrednosti:
x = linspace(pocetna vrednost,krajnja vrednost, n)
recimo,
>> t = linspace(0,2,21)
t =

Poglave 2. Matlab i matrice

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 logritamskoj skali se dobijaju naredbom


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

2.3

Manipulisae 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
Maltab e da vrati vrednost dodeenu treem elementu vektora b. Iako je vektor b,
zapravo (1 n) matrica, Matlabov intepretator je inteligentan da u sluqaju vektora
ignorixe dvostruko indeksirae. 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 ]
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 predstava vektor saqien od devet elemenata. Ako elimo da
kreiramo novi vektor y saqien od prvog, treeg, qetvrtog, petog i devetog elementa
vektora x to moe biti uqieno 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]

2.3. Manipulisae matricama i vektorima


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


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 matrice koji
zadovoavaju 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  qija je notacija u Matlabu <=. Da bi smo znali kako se u Matlabu pixu operatori, najboe 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
1.0000
1.2500
1.5000
-24.0000
38.0000
12.0000

3.0000
1.7500
8.0000

4.0000
2.0000
1.0000

Meutim, ako se isti vektori posmatraju kao matrice kolone, onda mogu da daju matricu (5 3):
>> x1 = (0:4);
>> x2 = 1:0.25:2;
>> x3 = [-24 38 12 8 1];
>> A = [x1, x2, x3]
A =

10

Poglave 2. Matlab i matrice


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

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 poslede dve kolone, prirodno
se namee sledea notacija
A(1:3,2:3)
U Matlab su ugraene dve naredbe repmat i meshgrid koje omoguavaju da se kreiraju
matrice umnoavaem 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. Tako, npr. ako iz matrice
A elimo da izbacimo prvu i qetvrtu vrstu i posledu 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 elementoj


osnovi, dakle u aritmetiqkim operacijama uqestvuju korespodentni elementi obe matrice. U tu svrhu se uvodi dot (.) operator. Taqka (.) koja prethodi nekom operatoru
(kao * / \ ili ) oznaqava matriqnu operaciju. Na primer, ako su definisane (3 4)
matrice A i B

a11
A = a21
a31

b11
B = b21
b31

a12
a22
a32

a13
a23
a33

a14
a24
a34

b12
b22
b32

b13
b23
b33

b14
b24
b34

11

2.4. Operacije nad matricama i vektorima

eksplicitno se mogu napisati rezultati sledeih dot operatora

a11 b11
C = A. B = a21 b21
a31 b31

a11 /b11
C = A./B = a21 /b21
a31 /b31

b11 /a11
C = A.\B = b21 /a21
b31 /a31

a11b11
C = A.B = a21b21
a31b31

a12 b12
a22 b22
a32 b32

a13 b13
a23 b23
a33 b33

a14 b14
a24 b24
a34 b34

a12 /b12
a22 /b22
a32 /b32

a13 /b13
a23 /b23
a33 /b33

a14 /b14
a24 /b24
a34 /b34

b12 /a12
b22 /a22
b32 /a32

b13 /a13
b23 /a23
b33 /a33

b14 /a14
b24 /a24
b34 /a34

a12b12
a22b22
a32b32

a13b13
a23b23
a33b33

a14b14
a24b24
a34b34

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

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

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 et/2 sin(3t +

)
8

za t [0, 0.1, . . . 10], kompaktno rexee problema bi bilo


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

T
x1 x2 xn
definisana sa


T
x2i ,
x = (x x) =
1
2

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

12

Poglave 2. Matlab i matrice

Matlab poseduje i svoju naredbu za izraqunavae norme, norm.


Transponovae matrica se vrxi operatorom apostrof (). Tako da ako je matrica A
tipa (m n)

a11 a12 a1n


a21 a22 a2n

A= .
..
..
..
..
.
.
.
am1
onda je B = A matrica (n m)

b11
b21

B = A =

bn1

am2

= a11
= a12
..
.

b12 = a21
b22 = a22
..
.

= a1n

bn2 = a2n

amn

..
.

b1m = am1
b2m = a2m
..
.

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
Sabirae/oduzimae matrica je definisano samo za matrice A i B istog tipa (m =
l, n = k) na sledei naqin
A B = (aij bij )
Mnoee matrice A skalarom je odreeno sa
A = (aij ).
Matriqno mnoee je definisano samo za matrice saglasnog tipa. Da bi matrica
Amn mogla da se pomnoi s desna matricom Blk potrebno je i dovono da je n = l. U
tom sluqaju rezultujua matrica C = (cij )pq = AB je odreena sa:
1. p = m q = k
n

ai bj , i = 1, 2, . . . , m, j = 1, 2, . . . , k.
2. cij =
=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

b1

b2

bn

reda (1 n) i b vektor kolona


b=

2.4. Operacije nad matricama i vektorima

13

tada
(a, b) = ab
oznaqava ihov skalarni proizvod ili unutraxi 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 ihov
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 = A1 .
Odatle sledi, A1 A = AA1 = I. Oqigledno je matrica A istovremeno inverzna matrica matrice B, A = B1 . Kvadratna matrica ima inverznu matricu ako je ena
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 zadovoavaju
Ax = x, A Rnn ,
nazivaju se karakteristiqna (sopstvena) vrednost i karakteristiqni (sopstveni) vektor matrice A. Matrica I A naziva se karakteristiqna matrica matrice A, a
n

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 rexea koja ne moraju sva
da budu meusobno razliqita. Ova rexea su oqigledno sopstvene vrednosti matrice
A. Koeficijenti karakteristiqnog polinoma
p() = det (I A) = n + cn1 n1 + + c1 + c0 ,
se nazivaju korenovi ili sopstvene vrednosti ove jednaqine i mogu da se izraqunaju

14

Poglave 2. Matlab i matrice

lambda=eig(A)
Dat je sistem skalarnih diferencijalnih jednaqina u vektorskom obliku
Ax = h, h =

h1

h2

. . . hm

T

, A Rmn , x Rn

(2.1)

On je saglasan ako i samo ako postoji najmae jedno x za koje je Ax = h. Ovo x je


rexee datog sistema. Ako rexee sistema jednaqina ne postoji onda je on nesaglasan.
Ako je A kvadratna matrica reda n (m = n) tada sistem pri h = 0 ima jedinstveno
rexee ako i samo ako je A nesingularna matrica.
x=A^-1*h
ili,
x=inv(A)*h
Meutim, za rexavae sistema linearnih jednaqina, Matlabu vixe odgovara operator
obrnuta kosa crta (\)
x=A\h
xto predstava deee matrica s leve strane. Ova notacija moe da se primeni i u
sluqaju kada matrica A nije kvadratna, tada deee 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 sraqunavaa izraza krae nego da se trai inverzna matrica. Osim toga,
u sluqaju velikih matrica ovaj pristup daje taqnije rexee.
Qitaocu se ostava 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

Poglave 3

Ulaz/izlaz podataka
3.1

Ulazno/izlazne datoteke

Podaci koji se koriste za obradu, ili podaci koji predstavaju rezultat obrade se
mogu uqitati, odnosno saquvati u datotekama. Razlikuju se dve osnovne vrste datoteka: teksualne 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 predstava kraj reda. Podaci u okviru reda se razdvajaju
blanko karakterom ili zarezom. 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 datoteke
samo bez ekstenzije (u ovom sluqaju bez .dat). To moe da se vidi naredbom whos. Na
goreopisani naqin se uqitava navedena datoteka koja se nalazi u tekuem direktorijumu. U suprotnom, neophodno je ili navesti celokupnu putau gde se nalazi datoteka,
ili podestiti radni direktorijum.
Pretpostavimo da su kao rezultat izraqunavaa nastali vektori kolone x, y, i z,
jednakih duina. Ako hoemo da snimimo dobijene rezultate kao tekstualnu datoteku, 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 promenivih. Ako se izostavi ekstenzija, onda se imenu datoteke automatski
pridodaje .mat. Prilikom uqitavaa binarne datoteke, ako se navede ime datoteke
bez ekstenzije, Matlab tu datoteku takoe tretira kao binarnu. Prilikom uqitavaa
binarne datoteke, sve zahtevane promenive se pojavuju u radnom prostoru.

3.2

Stringovi

Matlab podrava kreirae, quvae i manipulisae matrica sa bilo kojom kombinacijom slova, brojeva i specijalnih znakova, tj. stringova. Stringovi se definixu
na sliqan naqin kao vektori i matrice, s tim xto se prilikom definisaa stringa
alfanumeriqki karakteri nalaze izmeu jednostrukih znakova navoda ( . . . ). Svaki
karakter u stringu predstava jedan element u vektoru ili matrici.
Definiximo sledei string Masinski fakultet, xto bi bilo ekvivalentno kreirau
15

16

Poglave 3. Ulaz/izlaz podataka

sledeeg vektora:
s = Masinski fakultet
ili
s = [Masinski fakultet]
Poxto svaki karakter predstava element matrice, ako elimo da izvojimo fakultet
iz prethodnog stringa, trebalo bi da uzmemo elemente vektora od desetog 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
promenive 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 naredbom
fprintf, qija je sintaksa:
fprintf(identifikator datoteke, format string, lista promenljivih)
Ako se umesto identifikatora datoteke stavi 1, to znaqi da e ispis ii na ekran. O
ostalim identifikatorima videti u helpu. Format string sadri specifikatore formata ispisa. Naime, svakoj promenivoj iz liste promenivih se mora dodeliti korespodentan specifikator formata koji opisuje poe kako e odgovarajue promenive
da se ispixu. Specifikatori formata poqiu znakom % i opciono sadre flegove,
xirinu i preciznost poa, specifikatore podtipa i karaktere 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 korisnika


oqekuje da unese izvesne podatke sa tastature je input.

3.3. Unos podataka sa tastature

17

>> 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 kreirae matrica.
Kod unosa stringa, naredba input ima dodatni argument s:
>> ime = input(Kako se zoves: ,s);
Prilikom unosa striga na ovaj naqin ne zahteva se upotreba jednostrukih znakova
navoda, zahvaujui 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.

Poglave 4

Kontrola toka programa


4.1

Uvod

Kontrola toka izvrxavaa 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 zadovoen 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 karaktera. Nazubivae programa znatno poveava qitivost programa qime se olakxava
traee grexaka i odravae programa. Kada se koristi Matlabov editor/dibager,
nazubivae se vrxi automatski.

4.2

While peta

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


while uslov
naredbe
end
Naredba while ponava naredbe neograniqen broj puta sve dok je ispuen 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 sraqunavae prvih N elemenata
sledeeg niza,
SN =

N

1
n2
n=1

s tim da priraxtaj niza mora da bude mai od 1 105 .


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)

19

20

Poglave 4. Kontrola toka programa

4.3

For peta

For peta je takoe peta sa izlaskom na poqetku. Sintaksa ove naredbe je:
for promenljiva = izraz
naredbe
end
For peta ponava 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 kraja
vrednost, a N 2 priraxtaj indeksne promenive. Treba primetiti da N 3 moe da
bude maa od N 1, u kom sluqaju N 2 mora da bude negativno. Ako se N 2 izostavi,
podrazumeva se da se indeksna promeniva uveava za jedan.
Primena for pete e biti ilustrovana na sledeem primeru. Recimo da 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)])

4.4

If naredba

Opxti oblik naredbe if je


if uslov1
naredbe1
elseif uslov2
naredbe2
else
naredbe3
end
Ako je ispuen uslov1, izvrxavaju se naredbe1, a zatim se izvrxava prva sledea
naredba nakon end. Ako uslov1 nije ispuen, ispituje se uslov2. Ukoliko je taj uslov ispuen, izvrxavaju se naredbe2, a zatim se izvrxavae programa nastava ispod
end. Ukoliko ni jedan od uslova nije ispuen, 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):

ako je x > 0,
1
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;

4.5. Naredbe break i continue

21

end

4.5

Naredbe break i continue

Matlab nema petu sa izlaskom na kraju i na sredini. Zbog toga je naredbom break
mogue prekinuti for ili while petu. Ako je naredba break u okviru ugnedene for
ili while pete, prekida se izvrxavae te pete i vraa se na vixi nivo for ili
while pete. Ako se u okviru for ili while pete izvrxi naredba continue, tada se
prelazi na sledeu iteraciju u peti, pri qemu se preskaqu sve preostale naredbe u
telu pete. Ako se radi o ugnedenoj peti, tada se se prelazi u narednu iteraciju
u okviru pete 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 prirodinih brojeva maih 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
disp([Suma = , num2str(suma)])

4.6

Naredba switch

Naredba switch omoguava vixestruko granae 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 postoji
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.

22

Poglave 4. Kontrola toka programa

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

Poglave 5

Funkcije
5.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 promenive pod okriem Matlaba.
Sve promenive koje se kreiraju u okviru funkcije su lokalne za tu funkciju i ne
korespondiraju sa promenivama istih imena u drugim skript ili funkcijskim datotekama. Sve ugraene naredbe u Matlabu su funkcije ovog tipa. Upotrebom funkcija
uproxava se sloenost i poveava qitivost izvornog koda, izbegava se duplirae
k
oda, poveava portabilnost, itd.

5.2

Funkcijska datoteka

Svaka funkcija ima najmae dve linije koda, 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 dovono
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 predstava prototip funkcije, qime se specificira broj promenivih i ihov tip (skalar, vektor, matrica)
koje se prenose iz glavnog programa u funkciju i obratno. Komentare, koji se nalaze
neposredno ispod deklaracije funkcije, Matlab tretira kao help informacije vezane
za tu funkciju, i ispisuju se kada se u komandnoj liniji Matlaba unese:
help ImeFunkcije
Na kraju funkcije se ne nalazi terminator krakter 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
promeniva. Ako to nije, proverava se da li ta funkcija ne pripada skupu internih
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 argumenata u
prototipu funkcije. Promenive u definiciji funkcije ne moraju obavezno da imaju
iste identifikatore kao u pozivu funkcije. Naprotiv, ista imena promenivih mogu
da imaju potpuno razliqito znaqee u skript datoteci iz koje se poziva funkcija i
same funkcije. Argumenti funkcije, koji se nalaze izmeu zagrada u definiciji funk23

24

Poglave 5. Funkcije

cije, predstavaju lokalne promenive i formiraju se pri pozivu funkcije. Prvom


argumentu se dodeuje vrednost prvog parametra u pozivu funkcije, i tako dae do
kraja liste argumenata. Dakle, pri pozivu funkcije mora da se vodi raquna da poziv
odgovara definiciji funkcije. Argumenti funkcije se odvajaju zarezom.

5.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 promenive pojedinaqno, kod 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
t = 0:0.1:10; [y1 y2] = odziv(t,1,1);
Paivim uporeivaem definicije funkcije i skripta u navedenom primeru, uoqava
se, da su povratne vrednosti u definiciji funkcije strogo razdvojene zarezom, dok
u pozivu funkcije promenive u vektoru koje primaju te vrednosti, mogu da budu
razdvojene ili zarezom ili blanko karakterom. Ako bi se u skriptu umesto vektora
koji prihvata povratnu vrednost funkcije napisao skalar, npr. y1, oj bi se dodelila
samo povratna vrednost prve promenive.
Sledea varijanta moe da bude da su argumenti prikazani kao vektor, dok je svaka
izlazna promeniva 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);

5.2. Funkcijska datoteka

25

Zamislimo sada da elimo da izvedemo isti proraqun, ali za vixe razliqitih vrednosti, recimo promenive . Ovo moe da se rexi uz pomo, npr. for pete. 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 ihovim elementima dodeuje vrednost u for peti. Ova praksa se preporuquje
zbog toga xto znatno skrauje vreme izvrxavaa ovog dela programa, jer bi u suprotnom Matlab vrxio dinamiqku alokaciju memorije u svakoj iteraciji for pete. Ovo
se objaxava 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.

5.2.2

Posebni sluqajevi

Postoje situacije kada funkcija nema povratnu vrednost. Kada se crta dijagram naredbom plot, ili se pohrauju podaci u datoteku naredbom save, prilikom poziva funkcija ne vraaju se podaci u glavni program. Prototip funkcije moe da se 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 posleda naredba u telu funkcije. Meutim,
naredbom return je mogue izdejstvovati raniji prekid funkcije.

5.2.3

Inline

Matlab dozvoava da se naredbom inline kreira funkcija koja ne mora da se saquva u


posebnoj datoteci. Funkcija kreirana na ovaj naqin mora da bude saqiena iskuqivo
od Matlabovskih izraza i ne moe da poziva druge inline funkcije. Ovakva funkcija
moe da vraa samo jednu promenivu (nikako vixe promenivih poreanih u vektor).
U opxtem sluqaju naredba inline se koristi na sledei naqin
ImeFunkcije = inline (Izraz,Argument1,Argument2,. . .)
Primer iz 5.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))

26

Poglave 5. Funkcije

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.

5.2.4

Funkcija funkcije (feval)

Naredba feval izvrxava specificiranu funkciju od strane korisnika. Naime,


feval(F,x1,. . .,xn) izvrxava funkciju specificiranu hendlom funkcije ili imenom
funkcije, F, za date argumente x1,. . . , xn. Feval se najqexe koristi unutar funkcija koje kao argumente koriste hendl funkcija ili stringove funkcija. Matlab ima
nekoliko funkcija koje obrauju funkcije definisane od strane korisnika. U daem
tekstu e biti ilustrovane funkcije fzero, roots i ode45.
Traee nula funkcije
Matlab ima ugraenu funkciju koja trai rexee 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 xn1 + . . . + cn x + cn+1
jednostavnije je da se za traee 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.

27

5.2. Funkcijska datoteka


Numeriqko rexavae obiqnih diferencijalnih jednaqina

Funkcijom ode45 se rexava sistem n obiqnih diferencijalnih jednaqina prvog reda,


u vektorskom obliku
dy
= f(t, y1 , y2 , . . . , yn )
dt
na intervalu t0  t  tf , za poqetne uslove y(t0 ) = y(0). 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 jednostrukih
znakova navoda bez sufiksa .m ili identifikator funkcije definisane sa inline. U
svakom sluqaju mora da bude oblika, npr.
function y izvod = ImeFunkcije(t,y,flag,p1,p2,. . .)
gde je t nezavisna promeniva, y je vektor qiji su elementi u korespodenciji sa elementima 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 predstava najboi alat za rexavae diferencijalnih jednaqina u veini sluqajeva i zbog toga je podexeno da bude difoltni metod u Matlabu.
Osim ode45, Matlab ima i druge metode za rexavae diferencijalnih jednaqina.
Primena ode45 e biti ilustrovana na odreivau odziva sistema drugog reda
dy
d2 y
+ wn2 y = wn2 u(t)
+ 2wn
dt2
dt
Diferencijalna jednaqina moe da se, nakon uvoea smene
y1

y2

y
dy
dt

napixe kao sistem dve diferencijalne jednaqine prvog reda


dy1
dt
dy2
dt

= y2
= wn2 y1 2wn y2 + wn2 u

Sada moe da se napixe funkcija koja predstava 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, wn = 1 [rad/s], na
vremenskom intervalu [t0 , tf ] = [0, 10], za nulte poqetne uslove, ako je ulaz jediniqna
odskoqna funkcija u(t) = 1 je sledei
[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 vrednosti
stepena priguxea = 0, 0.2, . . . , 1, dovono je da napixemo odgovarajui skript
close all

28

Poglave 5. Funkcije
1.4

1.2

0.8

0.6

0.4

0.2

0
0

10

Slika 5.1. Jediniqni odskoqni odziv sistema drugog reda

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

1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

10

Slika 5.2. Jediniqni odskoqni odziv sistema drugog reda za razliqite vredosti

Poglave 6

2D grafika
6.1

Uvod

Matlab sadri veoma fleksibilne funkcije za dvo- i trodimenzionalnu grafiku.


Ovim funkcijama je mogue generisati krive ili povrxi, vrxiti manipulacije sa
dijagramima i meati karakteristike i notaciju na dijagramima.
Svaki dijagram se kreira u prozoru slike, tj. u prozoru koji otvori Matlab za vreme
izvrxavaa funkcije koja kreira dijagram. Ako se u programu koristi vixe funkcija koje generixu dijagrame, Matlab e pri izvrxavau svake funkcije da kreira
novi prozor slike tako xto 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 dodeuje 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 posledi argument predstava redni broj dijagrama poqev od goreg levog ugla,
raqunajui s leva na desno i odozgo na dole.
Poxto svako generisae 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 ukuqivae u
druge dokumente ili doraivati.

6.2

Kreirae 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 ordinatnoj osi
e se xtampati vrednosti elemenata vektora y, dok e se na apscisnoj osi nalaziti
odgovarajui indeksi elemenata tog vektora. Argument s je string karakter kojim se
definixe boja taqke, odn. linije, tip taqke na dijagramu i vrsta linije. Na primer,
29

30

Poglave 6. 2D grafika

k znaqi da e linija da bude isprekidana i crne boje. U helpu naredbe plot se


nalazi detaan opis string karaktera. Ako se izostavi string karakter, koriste se
sistemske difolt vrednosti. Ukoliko se na slici crta vixe od jedne krive, boje se
meaju u skladu sa difolt sekvencom.

6.2.1

Crtae taqke

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


plot(-1,2,bo)

6.2.2

Crtae dui

Naredba
plot([-1 1],[-1 2])
crta du izmeu taqaka (1, 1) i (1, 2)

6.2.3

Crtae krunice

Krunica moe da se nacrta u polarnim koordinatama


x =

xc + cos()

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)
pri qemu su x i y u naredbi plot matrice i iscrtavaju se kolonu po kolonu. Karakter
string je izostaven, pa je svaka krunica na slici 6.1 drugaqije boje.

6.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, odn.
vrsta matrice, u zavisnosti od toga koja dimenzija matrice odgovara duini vektora.
Sledei skript ilustruje familiju odziva sistema prvog reda za razliqite vrednosti
vremenske konstante. Rezultat je prikazan na slici 6.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)

6.2.5

Vixe funkcija na 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

31

6.2. Kreirae 2D dijagrama

0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8

0.5

0.5

Slika 6.1. Koncentriqne krunice


1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0

Slika 6.2. Familija odziva sistema prvog reda

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

10

32

Poglave 6. 2D grafika

Rezultat prethodna dva skripta je prikazan na slici 6.3.


1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0

10

Slika 6.3. Odziv i prvi izvod odziva sistema prvog reda

6.3

Grafiqka obrada slika

Slike je mogue oplemeivati u smislu davaa imena slici, natpisa na osama, definisaa legendi, senqea, umetaa teksta, zatim meaa 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 6.4 prikazan je odziv sistema
prvog reda kao na slici 6.3, meutim daleko bogatije grafiqki opremen. Skript
koji to omoguava je sledei
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)])

33

6.3. Grafiqka obrada slika


Odziv sistema prvog reda na odskocnu promenu ulaza

10
y(t)
dy(t)/dt

= 1.00 sec
9
8

y(t), dy(t)/dt

7
6
5
4
3
2
1
0
0

t [s]

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

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


Obzirom da u naredbi plot nije naveden trei argument, uzima se difolt sekvenca
boja. Slici je dodato ime naredbom title, koja sadri string koji se ipisuje. Naredba
title moe da ima dodatne argumente kojima se meaju atributi teksta. Natpis uz
apcisnu osu se dodaje naredbom xlabel, odn. 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, idt. Ova naredba moe da ima posledi 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 najboe mesto
za legendu, a ako se ovaj argument izostavi, uzima se difolt vrednost (gori desni
ugao). Raster, tj. mrea sa podelom se ukuquje naredbom grid.
Naredbom set se u Matlabu podexavaju svojstva objekta. Konkretno, u gorem skriptu
se podexava veliqina slova kojim se oznaqava podela na osama (hendl gca). Na slici
su nacrtane linije koje naznaqavaju vremensku konstantu sistema (63% vrednosti u
stacionarnom stau), odnosno, tangentu na vremensku promenu uzlaza u poqetnom trenutku. Vrednost vremenske konstante se ispisuje na dijagramu 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 indeksu i oznake u eksponentu,
pri qemu se koristi LATEX notacija (sve sekvence poqiu obrnutom kosom crtom (\)).
String koji se ispisuje naredbom text u konkretnom primeru je najpre pripremen
naredbom sprintf. Konaqno, granice apscisne i ordinatne ose su promeene naredbom axis kako bi se dobio najboi vizuelni efekat. Naredba axis bez argumenata
vraa vektor [xmin xmax ymin ymax ] sa trenutnim granicama na slici. Ako se kao
argument navede vektor, postavaju se nove granice crtea.
U prethodnom primeru su iskorixene samo neke od mogunosti opremaa slika u
Matlabu, a qitaocu se ostava da uz pomo help sistema istrai ostale.

Poglave 7

3D grafika
7.1

Linije u 3D

Naredba kojom se crtaju linije u tri dimenzije je


plot3(x,y,z,s)
pri qemu su x, y, z bilo taqke ili nizovi taqaka, odnosno tripleti brojeva, vektora
iste duine, matrica istog tipa ili izraza koji kada se sraqunaju daju jednu od
prethodnonabrojanih veliqina. Argument s je string karakter kojim se definixe boja
taqke, odn. linije, tip taqke na dijagramu i vrsta linije kao kod naredbe plot.
Sledei skript crta heliks.
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);

7.2

Povrxi

Matlab raspolae monim funkcijama za trodimenzionalno prikazivae povrxi, kontura, zapremina, kao i kombinacija prethodnonabrojanih.
Osnovne funkcije za crtae povrxi su
surf
i
mesh
Funkcija surf crta mreu qija su poa obojena, dok se kod funkcije mesh crtaju granice poa na mrei, a sama poa ostaju bela. Kod naredbe surf granice poa su crne
boje, a boja poa zavisi od intenziteta z, dok mesh boja granice poa mree odreena
intenzitetom z.
Neka je funkcija v(x1 , x2 ) definisana kao
v(x1 , x2 ) = x21 + x22 + x1 x2
Na slici 7.1 nacrtana je v(x1 , x2 ) funkcijom mesh, odgovarajuim 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)

35

36

Poglave 7. 3D grafika

300
250
200
150
100
50
0
10
10

5
5

0
0

5
10

10

Slika 7.1. Povrx nacrtana funkcijom mesh


Ista funkcija generisana sa surf je data na slici 7.2. Ako se koristi funkcija surfc,
na slici e se nai konture koje predstavaju pojedine projekcije povrxi na ravan
z = 0.

300
250
200
150
100
50
0
10
10

5
5

0
0

5
10

10

Slika 7.2. Povrx nacrtana funckijom surf


Na slici 7.3 prikazan je odziv sistema drugog reda na jediniqnu odskoqnu promenu
ulaza za razliqite vrednosti stepena priguxea.
Skript za prethodi 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)

37

7.2. Povrxi

y(t)

1.5

0.5

0
1
0.8

10
0.6

8
6

0.4
4

0.2

2
0

t [s]

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

xlabel(t [s]), ylabel(\zeta), zlabel(y(t))

Poglave 8

Control Systems Toolbox


8.1

Uvod

Osim osnovih funkcija, Matlab raspolae dodatnim paketima alata za rexavae


posebnih klasa problema. (Control Systems Toolbox) obezbeuje funkcije koje su od
posebne koristi za analizu i sintezu sistema automatskog upravaa. Naredbom
help control
iz komandne linije Matlaba, ispisuju se naredbe iz ovog paketa, qime se stiqe uvid
u napredne mogunosti.

8.2

Prikazivae sistema u Matlabu

Analiza i sinteza linearnih sistema automatskog upravaa zasniva se na rexavau


i razumevau rexea obiqnih linearnih diferencijalnih jednaqina, koje u opxtem
obliku mogu da se napixu
dn y(t)
dn1 y(t)
dy(t)
dm u(t)
dm1 u(t)
du(t)
+an1 n1 +. . . a1
+a0 y(t) = bm m +bm1 m1 +. . . b1
+b0 u(t)
n
d t
d
t
dt
d t
d
t
dt
(8.1)
gde je n  m, y(t) izlazna vrednost, u(t) ulazna vrednost. Ako su koeficijenti u
jednaqini ai i bi realne konstante, radi se o linearnoj diferencijalnoj jednaqini sa
konstantim koeficijentima. Jednaqinom (8.1) moe da se opixe bilo koji jednostruko
prenosan linearni stacionarni vremenski neprekidan sistem.
Sistem opisan jednaqinom (8.1) moe da se prikae u Matlabu na tri naqina:
prenosnosnom funkcijom (tf),
u prostoru staa (ss) i
nulama, polovima i pojaqaem (zpk)
Prethodna tri naqina za prikazivae sistema postoje i za linearne vremenski
diskretne sisteme.

an

8.2.1

Model u prostoru staa

Bilo koji sistem opisan diferencijalnom jednaqinom n-tog reda moe da se prevode
na sistem od n jednaqina prvog reda xto je jednostavnije i pouzdanije za numeriqko
rexavae.
Na primer, sistem drugog reda opisan diferencijalnom jednaqinom
dy
d2 y
+ wn2 y = wn2 u(t)
+ 2wn
2
dt
dt
moe da se, nakon uvoea smene
x1
x2

= y
dy
=
dt
39

(8.2)

40

Poglave 8. Control Systems Toolbox

napixe kao sistem dve diferencijalne jednaqine prvog reda


dx1
dt
dx2
dt

x2

wn2 x1 2wn x2 + wn2 u

Ako se uvede vektor staa

x(t) = [x1 (t), x2 (t)]T

model sistema u prostoru staa izgleda,


dx(t)
dt
y(t)

= Ax(t) + Bu(t)
= Cx(t) + Du(t)

gde su

A=

0
1
wn2 x1 2wn x2


0
B=
wn2


C= 1 0
D=

Naredbe kojom se definixe model u prostoru staa je ss. Naredba ss ima qetiri
argumenta, matrice A, B, C i D modela u prostoru staa. Odgovarajui skript kojim
se predstava sistem (8.2) je
wn = 1; zeta = 0.7;
A = [0 1; -wn^2 -2*zeta*wn];
B = [0; wn^2];
C = [1 0];
D = [0];
sistem = ss(A,B,C,D);
Ako se iz komandne linije pozove definisani model dobija se
>> sistem
a =
x1
x2
x1
0
1
x2
-1 -1.4
b =
u1
x1
0
x2
1
c =
x1 x2
y1
1
0
d =
u1
y1
0
Ako elimo da od objekta uzmemo matrice A, B, C i D, onda koristimo naredbu
[A,B,C,D] = ssdata(sistem)

41

8.2. Prikazivae sistema u Matlabu

8.2.2

Prenosna funkcija

Primenom Laplasove tranformacije na sistem opisan diferencijalnom jednaqinom


pri svim poqetnim uslovima jednakim nuli, dobija se prenosna funkcija sistema, u
opxtem obliku
W (s) =

bm sm + bm1 sm1 + . . . + b1 s + b0
Y (s)
=
U (s)
an sn + an1 sn1 + . . . + a1 s + a0

(8.3)

gde je an = 0 i n  m. Naredbom tf definixe se model u obliku prenosne funkcije.


Ova naredba ima dva argumenta, vektore qiji su elementi koeficijenti polinoma u
brojiocu i imeniocu prenosne funkcije respektivno. Vektor koji sari koeficijente
brojioca je
num = [bm

bm1

...

b1

b0 ]

odnosno, imenioca prenosne funkcije (8.3) je


den = [an

an1

...

a1

a0 ]

Na primer, prenosna funkcija


W (s) =

s3

2s + 1
+ 6s2 + 11S + 6

(8.4)

se definixe sledeim skriptom


num = [2 1];
den = [1 6 11 6];
W = tf(num,den)
dok se u komandnom prozoru Matlaba vidi
Transfer function:
2 s + 1
---------------------s^3 + 6 s^2 + 11 s + 6
Koeficijenti polinoma broijoca i imenioca mogu da se ekstrahuju iz prenosne funkcije naredbom
[num, den] = tfdata(W,v)
String karakter v ukazuje naredbi da povratne vrednosti num i den budu vektori
vrste. Ako se ovaj argument izostavi, funkcija vraa sel matricu, koja se koristi
kod reprezentacije vixestruko prenosnih sistema.
Dve korisne naredbe za rad sa prenosnim funkcijama su pole i zero. Prva naredba
vraa polove, a druga nule prenosne funkcije.
Na primer,
polovi = pole(W)
nule = zero(W)
prikazuju na ekranu
polovi =
-3.0000
-2.0000
-1.0000
nule =
-0.5000

42

Poglave 8. Control Systems Toolbox

8.2.3

Nule, polovi i pojaqaa

U opxtem sluqaju, prenosna funkcija moe da se predstavi faktorizovanim polinomima u brojiocu i imeniocu
W (s) = k

(s z1 )(s z2 ) . . . (s zm )
(s p1 )(s p2 ) . . . (s pn )

Na primer, prenosna funkcija (8.4) se sledeim skriptom definixe nulama, polovima


i pojaqaem
W = zpk([-0.5],[-1 -2 -3],2)

8.2.4

Prevoee izmeu razliqitih oblika modela

Model definisan na jedan od tri objaxena naqina je mogue prevesti u druga dva
Matlabovim funkcijama ss2tf, tf2ss, zp2tf i zp2ss.
Metode konverzije modela koriste Matlabove funkcije za numeriqko oreivae nula
polinoma, i zbog toga su podlone numeriqkim grexkama, posebno kod sistema vixih
redova.
Treba napomenuti da Matlabu najvixe odovara model u prostoru staa, zato xto
se sistem prevodi u n linearnih diferencijalnih jednaqina prvog reda. Zatim sledi
model u obliku prenosne funkcije, a na kraju model u obliku nula, polova i pojaqaa.

8.3

Odreivae odziva sistema

Matlab raspolae funkcijama za odreivae odziva sistema, a to su step, impulse,


initial i lsim.
Naredbom step odreuje se jediniqni odskoqni odziv sistema. Najprostija varijatna naredbe step je kada se ne koristi povratna vrednost funkcije. Za model iz
poglava 8.2.1, sledei skript daje jediniqni odskoqni odziv sistema.
step(sistem)
xlabel(Vreme)
ylabel(Izlaz)
title(Jedinicni odskocni odziv sistem)
Funkcija automatski odreuje pogodan opseg vremena za koji vrxi simulaciju i iscrtava odgovarajui dijagram (slika 8.1).
Boa kontrola nad procesom simulacije odvija se ako se definixe vremenski opseg i
koristi povratna vrednost funkcije. Dakle
t = 0:0.1:10;
y = step(sistem,t);
plot(t,y)
U funkciji se pojavuje drugi argument, vektor vremenskih trenutaka simulacije.
Funkcija impulse se koristi na isti naqin kao i funkcija step, s tim xto raquna
impulsni odziv sistema.
Matlab ne raspolae funkcijama za odreivae odziva na sve tipiqne promene
ulaznih veliqina. Zbog toga postoji funkcija koja odreuje odziv na proizvonu
sekvencu ulaza,
lsim(sys,u,t)
gde je sys sistem koji se razmatra, u vektor qiji su elementi amplitude ulaznog signala
u trenucima vremena definisanim vektorom t. Duine vektora u i t moraju da budu
iste.
Sinusni odziv sistema (8.2) na ulazni signal jediniqne amplitude i uqestanosti
1 rad/s se odreuje skriptom

43

8.4. Rastavae racionalnih funkcija


Jedinicni odskocni odziv

1.4

1.2

0.8

0.6

0.4

0.2

10

12

t (sec)

Slika 8.1. Jediniqni odskoqni odziv sistema

t = 0:0.1:10;
u = sin(t);
y = lsim(sistem,u,t);
Ako je sistem predstaven u prostoru staa, funkcijom
initial(sys,x0)
vrxi se simulacija sistema u slobodnom radnom reimu za poqetne uslove definisane
vektorom x0. Dobijeni rezultati mogu da se iskoriste za crtae lika (ili portreta)
staa datog sistema. Za sistem (8.2) sledei skript
x0 = [-0.5;-0.5];
[y,t,x] = initial(sistem,x0);
plot(x(:,1),x(:,2))
axis equal
grid
xlabel(x_1(t))
ylabel(x_2(t))
title(Lik stanja sistema drugog reda)
daje rezultat na slici 8.2.
Ako se ista funkcija primeni za razliqita poqetna staa i rezultat prikae na istoj
slici, dobija se kompletnija predstava o sistemu (slika 8.3)

8.4

Rastavae racionalnih funkcija

Svaku racionalnu funkciju, koja je koliqnik dva polinoma mogue je rastaviti na


parcijalne qinioce. Funkcija
[R,P,K] =residue(B,A)
trai rezidijume, polove i direktni qlan razvoja u parcijalne razlomke koliqnika
dva polinoma B(s)/A(s).

44

Poglave 8. Control Systems Toolbox


Lik stanja sistema drugog reda

0.2

0.1

x2(t)

0.1

0.2

0.3

0.4

0.5

0.7

0.6

0.5

0.4

0.3
x1(t)

0.2

0.1

0.1

0.2

Slika 8.2. Lik staa sistema drugog reda


Lik stanja sistema drugog reda
1
0.8
0.6
0.4

x2(t)

0.2
0
0.2
0.4
0.6
0.8
1

0.5

0
x (t)

0.5

Slika 8.3. Kompletan lik staa sistema drugog reda

Na primer, ako je potrebno odrediti prelaznu funkciju sistema, pri nultim poqetnim
uslovima, datog sledeom prenosnom funkcijom,
W (s) =

2
s2 + 5s + 6

kompleksni lik G(s) prelazne funkcije


1
2

s2 + 5s + 6 s
na osnosu rezultata izvrxavaa sledee naredbe,
G(s) =

>> [r,p,k] = residue([2],[1 5 6 0])


r =

8.5. Uqestanosne karakteristike

45

0.6667
-1.0000
0.3333
p =
-3.0000
-2.0000
0
k =
[]
moe da se prikae kao
1
0.3333
0.6667
+
+
s+3
s+2
s
Svi parcijalni razlomci u prethodnom izrazu predstavaju tabliqne sluqajave
Laplasove transformacije, tako da je prelazna funkcija u vremenskom domenu
G(s) =



g(t) = 0.6667e3t e2t + 0.3333 h(t)

8.5

Uqestanosne karakteristike

Funkcije kojima se u Matlab-u odreuju uqestanosne karakteristike su bode i nyquist.


Funkcija
bode(sistem)
crta Bodeov dijagram sistema sistem pri qemu se opseg uqestanosti i broj taqaka
odreuju automatski, dok funkcija
[ampl,faza] = bode(sistem,w)
vraa amplitudu i fazu u stepenima za uqestanosti definisane vektorom w.
U prilogu A ilustrovana je primena funkcije bode u programu za ispitivae sistema
primenom Bodeovog kriterijuma stabilnosti.
Funkcija
nyquist(sistem)
crta Najkvistov dijagram sistema sistem pri qemu se opseg uqestanosti i broj taqaka
odreuju automatski, dok funkcija
[re,im] = nyquist(sistem,w)
vraa realni i imaginarni deo uqestanosne karakteristike sistema za uqestanosti
definisane vektorom w.
Primena funkcije nyquist je data u sklopu programa kojim se ispituje stabilnost
sistema primenom Najkvistovog kriterijuma datog u Prilogu B.

Poglave 9

Prilozi
9.1

Prilog A

Sledei program ilustruje primenu bodeovog kriterijuma za ispitivae stabilnosti


sistema qija je prenosna funkcija otvorenog kola
1
s2
1
s(s2 + 9)
=

(
+ 1) 2
2
s + 2s + 4
36
9
s
s
+ +1
4
2
Program najpre odreuje dijagrame elementarnih prenosnih funkcija, slika 9.1, a
zatim i zbirni dijagram na slici 9.2
Wok (s) =

32

10

0
50
100
2
10

10
[rad/s]

47

10

10

10

0.5

Slika 9.1. Elementarni bodeovi dijagrami


close all, clear, pack
% brojioci elementarnih prenosnih funkcija

10

0.5

1
2
10

10

10

1
2
10
0

10

4() [ rad]

10

10

1
2
10
0

10

100
2
10
50

0
2
10
2

10

() [ rad]

L2() [dB]

10

50
2
10
100
L3() [dB]

1() [ rad]

31

33
2
10
50

L4() [dB]

3() [ rad]

L1() [dB]

30

10
[rad/s]

10

48

Poglave 9. Prilozi
100

Lok() [dB]

50
0
50
100
150
2
10

10

10
P0

10

10

ZSAU je stabilan

1.5

ok() [ rad]

1 /2

0.5

0.5
2
10

10

10
[rad/s]

Slika 9.2. Zbirni bodeov dijagram

num = [0, 0, -1./36.;...


0, 1, 0;...
1/9., 0, 1;...
1/4., 1/2., 1];
% stepen elementarne prenosne funkcije
stepen = [1, 1, -1, -1];
% imenilac je konstantan - sve prenosne funkcije
% se posmatraju kao elementarne
den =[0, 0, 1];
% broj elementarnih prenosnih funkcija
[br, tmp] = size(num);
% odredjivanje broja P - broj polova Wok u desnoj poluravni
P = 0;
for i=1:br
%drugi stepen
if num(i,1) ~= 0 & stepen(i) < 0
if num(i, 2) < 0
P = P - 2*stepen(i);
end
elseif num(i,1) == 0 & stepen (i) < 0
if num(i, 2) < 0
P = P - stepen(i);
end

10

10

9.1. Prilog A
end
end
% na prvoj slici nacrtaj sve elementarne logaritamske karakteristike
figure (1);
% broj tacaka za crtanje
N=10000;
% leva i desna granica na ucestanosnoj osi - logaritamska podela
w = logspace(-2, 2, N);
% ukupan broj razlicitih ucestanosti u datom opsegu
n=length(w);
% inicijalizacija zbirne asimptote
asimp_zbir = zeros(n, 1);
% inicijalizacija zbirne logaritamske amplitudne karakteristike
mag_zbir = zeros(n, 1);
% inicijalizacija zbirne logaritamske fazne karakteristike
phase_zbir = zeros(n,1);
% inicijalizacija vertikalnih asimptota
asimp_vert = zeros(br, 2);
vert = zeros(br, 1);
skok = 0;
% petlja po svim elementarnim prenosnim funkcijama date Wok
for i=1:br,
k=2*i-1;
[mag,phase,w] = bode(num(i,:),den,w);
magdB = 20*log10(mag);
% uticaj stepena elementarne funkcije na L i fi
if stepen(1, i) ~= 1
magdB = stepen(1,i)*magdB;
phase = stepen(1,i)*phase;
end
mag_zbir = mag_zbir + magdB;
phase_zbir = phase_zbir + phase;
asimp=zeros(n,1);
j = 1;
%ASIMPTOTE
% drugi stepen
if num(i,1)
while w(j)<sqrt(1/abs(num(i,1))),
asimp(j,1)= 0;
asimp_zbir(j, 1) = asimp_zbir(j, 1) + asimp(j,1);
j = j+1;
end
%da li postoji vertikalna asimptota
if num(i, 2) == 0
asimp_vert(i, 1) = w(j);

49

50

Poglave 9. Prilozi
asimp_vert(i, 2) = -stepen(i);
vert(i)=j;
end
z=j;
while j <= n,
asimp(j,1)= stepen(1,i)*40*log10(w(j)) - stepen(1,i)*40*log10(w(z));
asimp_zbir(j, 1) = asimp_zbir(j, 1) + asimp(j,1);
j = j+1;
end

% prvi stepen
elseif num(i,2)
% da li je u pitanju realini pol van koord. pocetka
if num(i,3)
while w(j)<=1/abs(num(i,2)),
asimp(j,1)= 0;
asimp_zbir(j, 1) = asimp_zbir(j, 1) + asimp(j,1);
j = j+1;
end
z=j;
% druga asimptota (verodostojna pravoj krivoj za \omega >> \omega_kr
while j <= n,
asimp(j,1)= stepen(1,i)*20*log10(w(j))-stepen(1,i)*20*log10(w(z));
asimp_zbir(j, 1) = asimp_zbir(j, 1) + asimp(j,1);
j = j+1;
end
% da li je u pitanju pol u koordinatnom pocetku
elseif num(i,3) == 0
skok = skok + 90*stepen(1,i);
for j=1:n
asimp(j,1)=stepen(1,i)*20*log10(w(j));
asimp_zbir(j, 1) = asimp_zbir(j, 1) + asimp(j,1);
end
end

% nulti stepen
else
for j=1:n
asimp(j,1)=stepen(1,i)*20*log10(abs(num(i,3)));
asimp_zbir(j,1) = asimp_zbir(j,1) + asimp(j,1);
end
end
subplot(br,2,k);
semilogx(w, magdB, w, asimp, r, asimp_vert(i,1), asimp_vert(i,2)*(1:.1:100),r)
grid
s=strcat({\itL_{, int2str(i), }}(\omega) [dB]);
ylabel(s);
if i==br
xlabel (\omega [rad/s])
end
k=2*i;
subplot (br,2,k);
semilogx(w, phase/180)

9.1. Prilog A

51

grid
s=strcat({\it\phi_{, int2str(i), }}(\omega) [\pi rad]);
ylabel (s)
if i==br
xlabel (\omega [rad/s])
end
end

figure(2)
subplot(2,1,1)
% Nacrtaj logaritamsku ucestanosnu karakteristiku
semilogx(w, mag_zbir, w, zeros(1, N), w, asimp_zbir)
hold on
for i=1:br
if vert(i) ~= 0
semilogx(asimp_vert(i,1), asimp_zbir(vert(i))+asimp_vert(i,2)*(1:.1:100),r)
end
end
hold off
% Nacrtaj grid i nazive osa
grid
%xlabel (\omega [rad/s],FontName, Times New Roman)
ylabel ({\itL_{ok}}(\omega) [dB], FontName, Times New Roman);
% Na drugoj slici nacrtaj fazu
subplot (2, 1, 2)
% Nacrtaj logaritamsku faznu ucestanosnu karakteristiku
sk = [];
laz = [];
if skok == 0
semilogx(w, phase_zbir/180)
else
for i=-3600:90:3600
if abs(phase_zbir(1)-i) < 30
phase_zbir(1) = i;
end
end
sk = 0:-sign(skok):-skok;
sk = sk + phase_zbir (1);
if sk(length(sk)) ~= 0
laz = sk(length(sk)):-sign(sk(length(sk))):0;
end
if length(laz)
semilogx(w, phase_zbir/180, w(1), laz/180, og, w(20), sk/180,...
or, MarkerSize, 1.5)
else
semilogx(w, phase_zbir/180, w(1), sk/180, or, MarkerSize, 1.5)
end
%set(gca, YTickLabel, -600:180:600)
%semilogx(w, phase_zbir, w(1),laz, g, w(20), sk, r, LineWidth, 1.5)
end
hold on
% Prave (2*m+1)*pi
min_phase = min([phase_zbir; sk; laz])-10;
max_phase = max([phase_zbir; sk; laz])+10;

52

Poglave 9. Prilozi

% fazna ucestanosna karakteristika mora u nuli da bude nula


if max_phase < 0
max_phase = 0;
end
if min_phase > 0
min_phase = 0;
end
p_min = [];
for i=-180*7:360:180*7
if i >= min_phase & i<= max_phase
p_min = [p_min, i];
end
end
prave = p_min;
if length(p_min)
p_min = (p_min*ones(1, N));
semilogx (w, p_min/180, r);
end
% nacrtaj preseke i polupreseke
presek_plus = [];
presek_minus = [];
polupresek_plus = [];
polupresek_minus = [];
sum = 0;
if length(prave)
for i=1:length(prave)
phase_zbir_p = phase_zbir(1);
for j=1:n
if phase_zbir(j) > prave(i) & phase_zbir_p < prave(i)
presek_plus = [presek_plus j];
if mag_zbir(j) > 0
text (w(presek_plus(length(presek_plus))), prave(i)/180,\bf\oplus,...
FontSize, 10);
sum = sum+1;
else
text (w(presek_plus(length(presek_plus))), prave(i)/180,\bf\oplus,...
FontSize, 10, Color, g);
end
end
if phase_zbir(j) < prave(i) & phase_zbir_p > prave(i)
presek_minus = [presek_minus j];
if mag_zbir(j) > 0
text (w(presek_minus(length(presek_minus))), prave(i)/180,\bf\oslash,...
FontSize, 10);
sum = sum-1;
else
text (w(presek_minus(length(presek_minus))), prave(i)/180,\bf\oslash,...
FontSize, 10, Color, g);
end
end
phase_zbir_p = phase_zbir(j);
end
end

9.1. Prilog A

53

end
% deo u nuli
if skok & length(prave)
sk_p = sk(length(sk));
for i=1:length(prave)
% polazni deo iz nule (nastavak laznog skoka) ka phase_zbir
if sk(length(sk)-1) > sk(length(sk)) & abs(sk(length(sk))-prave(i)) < 10.
polupresek_plus = [polupresek_plus 1];
if mag_zbir(1) > 0
text (w(20), prave(i)/180, \bf\oplus/2, FontSize, 10);
sum = sum + 0.5;
else
text (w(20), prave(i)/180, \bf\oplus/2, FontSize, 10,...
Color, g);
end
elseif abs(sk(length(sk))-prave(i)) < 10.
polupresek_minus = [polupresek_minus 1];
if mag_zbir(1) > 0
text (w(20), prave(i)/180, \bf\oslash/2, FontSize, 10);
sum = sum - 0.5;
else
text (w(20), prave(i)/180, \bf\oslash/2, FontSize, 10,...
Color, g);
end
end
% kraj skoka u delu do phase_zbir
if sk(1) > sk(2) & abs(sk(1)-prave(i)) < 10.
polupresek_plus = [polupresek_plus 1];
if mag_zbir(1) > 0
text (w(20), prave(i)/180, \bf\oplus/2, FontSize, 10);
sum = sum + 0.5;
else
text (w(20), prave(i)/180, \bf\oplus/2, FontSize, 10,...
Color, g);
end
elseif abs(sk(1)-prave(i)) < 10.
polupresek_minus = [polupresek_minus 1];
if mag_zbir(1) > 0
text (w(20), prave(i)/180, \bf\oslash/2, FontSize, 10);
sum = sum - 0.5;
else
text (w(20), prave(i)/180, \bf\oslash/2, FontSize, 10, Color, g);
end
end
sk_p = sk(length(sk)-1);
for j=length(sk)-1:-1:2
if sk(j) > prave(i) & sk_p <= prave(i)
presek_plus = [presek_plus j];
if mag_zbir (1) > 0
text (w(20), prave(i)/180, \bf\oplus, FontSize, 10);
sum = sum + 1;
else
text (w(20), prave(i)/180, \bf\oplus, FontSize, 10, Color, g);
end
end
if sk(j) < prave(i) & sk_p >= prave(i)

54

Poglave 9. Prilozi
presek_minus = [presek_minus j];
if mag_zbir (1) > 0
text (w(20), prave(i)/180, \bf\oslash, FontSize, 10);
sum = sum - 1;
else
text (w(20), prave(i)/180, \bf\oslash, FontSize, 10, Color, g);
end
end
sk_p = sk(j);
end

end
end

% deo phase_zbir u nuli


for i=1:length(prave)
if abs(phase_zbir(1)-prave(i)) < 20. & phase_zbir(2) > phase_zbir(1)
polupresek_plus = [polupresek_plus 1];
if mag_zbir(1) > 0
text (w(40), phase_zbir(40)/180, \bf\oplus/2, FontSize, 10);
sum = sum + 0.5;
else
text (w(40), phase_zbir(40)/180, \bf\oplus/2, FontSize, 10, Color, g);
end
elseif abs(phase_zbir(1)-prave(i)) < 20. & phase_zbir(2) < phase_zbir(1)
polupresek_minus = [polupresek_minus 1];
if mag_zbir(1) > 0
text (w(40), phase_zbir(40)/180, \bf\oslash/2, FontSize, 10);
sum = sum - 0.5;
else
text (w(40), phase_zbir(40)/180, \bf\oslash/2, FontSize, 10, Color, g);
end
end
end
% deo phase_zbir u beskonacnosti
for i=1:length(prave)
if abs(phase_zbir(n)-prave(i)) < 10
if phase_zbir(n) > phase_zbir(n-1)
polupresek_plus = [polupresek_plus n];
if mag_zbir(n) > 0
text (w(n), prave(i)/180, \bf\oplus/2, FontSize, 10);
sum = sum + 0.5;
else
text (w(n), prave(i)/180, \bf\oplus/2, FontSize, 10, Color, g);
end
elseif phase_zbir(n) < phase_zbir(n-1)
polupresek_minus = [polupresek_minus n];
if mag_zbir(n) > 0
text (w(n), prave(i)/180, \bf\oslash/2, FontSize, 10);
sum = sum - 0.5;
else
text (w(n), prave(i)/180, \bf\oslash/2, FontSize, 10, Color, g);
end
else
j=n;
while phase_zbir(j) == phase_zbir(n) & j > 1
j = j - 1;

9.2. Prilog B

55

end
if phase_zbir(j) < phse_zbir(n) & j > 1
polupresek_plus = [polupresek_plus j];
if mag_zbir(j) > 0
text (w(j), prave(i)/180, \bf\oplus/2, FontSize, 10);
sum = sum + 0.5;
else
text (w(j), prave(i)/180, \bf\oplus/2, FontSize, 10, Color, g);
end
elseif phase_zbir(j) > phse_zbir(n) & j > 1
polupresek_minus = [polupresek_minus j];
if mag_zbir(j) > 0
text (w(j), prave(i)/180, \bf\oslash/2, FontSize, 10);
sum = sum - 0.5;
else
text (w(j), prave(i)/180, \bf\oslash/2, FontSize, 10, Color, g);
end
end
end
end
end

hold off

% Nacrtaj grid i napisi nazive osa


grid
%xlabel (\omega [rad/s], FontName, Times New Roman, FontAngle, italic)
%ylabel (\phi_{ok}(\omega) [rad/\pi], FontName, Times New Roman,FontAngle,...
italic)
xlabel (\omega [rad/s], FontName, Times New Roman)
ylabel ({\it\phi_{ok}}(\omega) [\pi rad], FontName, Times New Roman)
if sum == P/2
zaklj =
ZSAU je stabilan;
else
zaklj =
ZSAU nije stabilan;
end
s=strcat(P\equiv, int2str(P),
\Sigma\equiv, num2str(sum),
zaklj);
title (s, FontName, wncyr10);

9.2

\rightarrow

Prilog B

Sledeim programom ispituje se stabilnost sistema qija je prenosna funkcija


otvorenog kola
2s + 1
Wok = 2
s s

,...

P1

1*2

20

ZSAU je stabilan
+
0

15

10

ImFok(j)

10

15

20
30

25

20

15

10
5
ReFok(j)

Slika 9.3. Najkvistov dijagram

10

Literatura
[1] Magrab, B. Edward, An Engineers Guide to Matlab, Prentice Hall, Uper Saddle
River, NJ 2000., ISBN 0-13-011335-2
[2] Tewari, Ashish Modern Control Design with Matlab and Simulink, John Wiley &
Sons, Chichester, England 2002., ISBN 0 471 496790
[3] Ogata, Katshuhiko Modern Control Engineering, Prentice Hall, Uper Saddle River,
NJ 2002., ISBN 0-13-043245-8
[4] Dragan V. Lazi, Nelinearni sistemi, Xtampana skripta iz predmeta Nelinearni sistemi na Maxinskom fakultetu u Beogradu, Beograd, 2000.
[5] Vrdoljak, Milan, Uvod u Matlab, www.fsb.hr/ mvrdolja/matlab/,

57

You might also like