Professional Documents
Culture Documents
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
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
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
36
36
37
8.1
8.2
8.3
43
44
44
9.1
9.2
9.3
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
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
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;
b
a 2c
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
..
.. ,
..
..
.
.
.
.
am1
am2
amn
2
-1
0
-3
8
6
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
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 . . .]
10
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
2.3
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
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
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
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
16
25
36
49
)
8
T
x2i ,
x = (x x) =
1
2
i=1
12
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
a1
a2
an
b1
b2
bn
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
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)
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
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
17
Poglave 4
Uvod
4.2
While peta
N
1
n2
n=1
19
20
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
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;
21
end
4.5
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
22
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
5.2.1
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);
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
26
Poglave 5. Funkcije
5.2.4
11.0000
6.0000
27
y2
y
dy
dt
= y2
= wn2 y1 2wn y2 + wn2 u
28
Poglave 5. Funkcije
1.4
1.2
0.8
0.6
0.4
0.2
0
0
10
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
6.2
Kreirae 2D dijagrama
30
Poglave 6. 2D grafika
6.2.1
Crtae taqke
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
xc + cos()
yc + sin()
6.2.4
Familija funkcija
6.2.5
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
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
0.5
0.5
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
10
6.3
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
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
Poglave 7
3D grafika
7.1
Linije u 3D
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
300
250
200
150
100
50
0
10
10
5
5
0
0
5
10
10
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]
Poglave 8
Uvod
8.2
an
8.2.1
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
x2
= 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.2
Prenosna funkcija
bm sm + bm1 sm1 + . . . + b1 s + b0
Y (s)
=
U (s)
an sn + an1 sn1 + . . . + a1 s + a0
(8.3)
bm1
...
b1
b0 ]
an1
...
a1
a0 ]
s3
2s + 1
+ 6s2 + 11S + 6
(8.4)
42
8.2.3
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 )
8.2.4
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
43
1.4
1.2
0.8
0.6
0.4
0.2
10
12
t (sec)
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
44
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
x2(t)
0.2
0
0.2
0.4
0.6
0.8
1
0.5
0
x (t)
0.5
Na primer, ako je potrebno odrediti prelaznu funkciju sistema, pri nultim poqetnim
uslovima, datog sledeom prenosnom funkcijom,
W (s) =
2
s2 + 5s + 6
s2 + 5s + 6 s
na osnosu rezultata izvrxavaa sledee naredbe,
G(s) =
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
Poglave 9
Prilozi
9.1
Prilog A
(
+ 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
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]
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
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
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
9.2
\rightarrow
Prilog B
,...
P1
1*2
20
ZSAU je stabilan
+
0
15
10
ImFok(j)
10
15
20
30
25
20
15
10
5
ReFok(j)
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