Milan R. Ristanovi Dragan V. Lazi
UVOD U MATLAB
2
y(t)
1.5
1
0.5
0 1 0.8
10 0.6
8 6
0.4 4
0.2 ζ
2 0
0
Beograd, 2004.
t [s]
i
Predgovor
Ovaj materijal je nastao kao pratea literatura za osnovni kurs Matlaba koji se dri studentima tree godine Odseka za automatsko upravljanje Maxinskog fakulteta u Beogradu. Materijal je osmixljen da uvede qitaoca u osnovne pojmove u Matlabu i uqini ih razumljivim, kako bi se stekla jaka osnovna znanja za rexavanje inenjerskih problema. Kroz niz jednostavnih primera qitalac se navodi da se osamostaljuje da bi nastavio da individualno istrauje mogunosti Matlaba. Prvih sedam poglavlja odnose se na Matlab u opxtem smislu, tako da mogu da ih koriste i studenti i inenjeri koji se prvi put sreu sa Matlabom. Poslednja glava sadri deo mogunosti paketa Matalba koji se koristi za analizu i sintezu sistema automatskog upravljanja, i predstavlja logiqan nastavak prethodnih poglavlja.
Autori
Sadraj 1
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
1 1 1 2 2
Matlab i matrice 2.1 Matrice . . . . . . . . . . . . . . . . . . 2.2 Vektori . . . . . . . . . . . . . . . . . . 2.3 Manipulisanje matricama i vektorima 2.4 Operacije nad matricama i vektorima
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
5 5 6 8 10
3
Ulaz/izlaz podataka 3.1 Ulazno/izlazne datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Stringovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Unos podataka sa tastature . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 15 15 16
4
Kontrola toka programa 4.1 Uvod . . . . . . . . . . . . 4.2 While petlja . . . . . . . . 4.3 For petlja . . . . . . . . . 4.4 If naredba . . . . . . . . . 4.5 Naredbe break i continue 4.6 Naredba switch . . . . . .
2
5
6
7
Uvod 1.1 Xta je to Matlab . . . . 1.2 Kako se koristi Matlab . 1.3 Rad sa promenljivama . . 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 Kreiranje 2D dijagrama . . . . . 6.2.1 Crtanje taqke . . . . . . . 6.2.2 Crtanje dui . . . . . . . 6.2.3 Crtanje 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
9
SADRAJ
. . . . . . . . .
39 39 39 39 41 42 42 42 43 45
Prilozi 9.1 Prilog A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Prilog B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 47 55
Control Systems Toolbox 8.1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Prikazivanje sistema u Matlabu . . . . . . . . . . . . 8.2.1 Model u prostoru stanja . . . . . . . . . . . . . 8.2.2 Prenosna funkcija . . . . . . . . . . . . . . . . . 8.2.3 Nule, polovi i pojaqanja . . . . . . . . . . . . . 8.2.4 Prevoenje izmeu razliqitih oblika modela 8.3 Odreivanje odziva sistema . . . . . . . . . . . . . . . 8.4 Rastavljanje racionalnih funkcija . . . . . . . . . . . 8.5 Uqestanosne karakteristike . . . . . . . . . . . . . . .
Literatura
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
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
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 stanja sistema drugog reda . . . . . . . . . . . . . . . . . . . . . . . . Kompletan lik stanja sistema drugog reda . . . . . . . . . . . . . . . . . .
43 44 44
9.1 9.2 9.3
Elementarni bodeovi dijagrami . . . . . . . . . . . . . . . . . . . . . . . . Zbirni bodeov dijagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Najkvistov dijagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 48 56
v
33
Poglavlje 1
Uvod 1.1
Xta je to Matlab
Matlab je vixi programski jezik namenjen obradi podataka u formi matrica i brojeva. Sam naziv Matlab izveden je od Matrix Laboratory, qime se sugerixe da su matrice osnovni entiteti za numeriqke proraqune, za razliku od skalara kao kod niih programskih jezika kao xto su FORTRAN, PASKAL ili C. Zahvaljujui fleksibilnom okruenju koje integrixe proraqune sa vizuelizacijom, xirokom spektru ugraenih funkcija kojima se efikasno dolazi do numeriqkih rexenja, mogunoxu razvoja algoritama i programiranja, Matlab se nametnuo kao nezamenljiv alat za rexavanje problema u gotovo svim oblastima inenjerske prakse.
1.2
Kako se koristi Matlab
Nakon pokretanja Matlaba na ekranu se otvara komandni prozor Matlaba na kome se uoqava komandna linija, u qijem se levom uglu nalazi prompt “>>”, a odmah pored i kursor koji trepti. Komandni prozor Matlaba treba zamisliti kao radni 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 . Sve naredbe koje se izvrxe u komandnoj liniji, kao i promenljive 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 promeljiva kojoj se dodeljuje vrednost nekog izraza, Matlab tada dodeljuje vrednost generiqkoj promenljivoj ans. Prirodno, prilikom izraqunavanja sledeeg izraza, nova vrednost e biti prepisana preko prethodne vrednosti promenljive ans. U jednoj komandnoj liniji moe da se nalazi jedan ili vixe izraza. Najjednostavniji naqin da se upotrebi Matlab jeste kao veoma moan kalkulator. Aritmetiqke, trigonometrijske ili eksponencijalne operacije se izvode posredstvom poziva ugraenih Matlab funkcija. Osim osnovnih, Matlab je opremljen 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 menjati izraze, rad u komandnoj liniji poqinje da predstavlja ozbiljno ograniqenje. Potencijalni problemi mogu da se rexe uvoenjem skript datoteka, tj. datoteka koje sadre jednu ili vixe naredbi koje bi se izvrxile na isti naqin kao kad bi se jedna po jedna unosile u komandnu liniju u komandnom prozoru Matlaba. Skript datoteka je tekstualna datoteka sa ekstenzijom “.m”, koja moe da se kreira u bilo kom programu za obradu teksta, osnosno u editoru teksta i dibageru koji je deo paketa Matlaba. Kreirana skript datoteka se izvrxava kucanjem njenog imena u komandoj liniji bez sufiksa “.m” ili direktno iz Matlabovog editora. 1
2
Poglavlje 1. Uvod
1.3
Rad sa promenljivama
Matlab razlikuje identifikatore promenljivih duine do 31 alfanumeriqki karakter, pri qemu se karakteri posle tridesetprvog ignorixu. Identifikator promenljive obavezno mora poqeti slovom, dok ostali karakteri mogu biti kombinacija slova, brojeva i znaka podvuqeno ( ). Identfikator promenljive ne sme da sadri blanko karakter. Matlab razlikuje velika/mala slova u imenu identfikatora promenljive. Prilikom odreivanja identifikatora moe se pridravati jedne od dve programerske konvencije. U prvoj se koriste donje crte, dok se kod druge koriste velika slova, kao npr.: ime promenljive odnosno ImePromenljive. Postoje i specijalne promenljive qiji su nazivi rezervisani i to su: ans, pi, eps, flops, inf, nan, i, j, nargin, nargout, realmin, realmax. Za vreme jedne sesije rada sa Matlabom, tj. dokle god se ne napusti program, u memoriji se quvaju najnovije vrednosti svih definisanih promenljivih nastalih u komandnoj liniji ili u skript datoteci. Kao xto je prethodno napomenuto, vrednost neke brojqane vrednosti dodeljene nekoj promenljivoj se ponovo mogu koristiti jednostavnim kucanjem identifikatora te promenljive ili u okviru nekog izraza. Promenljive se brixu iz memorije naredbom clear. Da bi se videlo koje su promenljive definisane od poslednjeg izvrxenja naredbe clear, dovoljno je otkucati whos. Skromnija varijanta narebe whos je who. Ako se eli da se iz memorije izbrixu samo pojedine promenljive to se qini naredbom clear i navoenjem liste identifikatora promenljivih razdvojenih blanko karakterom.
1.4
Rad u komandnom prozoru
Svaka naredba u komandnoj liniji moe da ima jedan od dva sledea oblika: >> promenljiva = izraz ili >> izraz Dakle, ako elimo da definixemo tri promenljive a = 5.23, b = 3 i c = −0.68, to se moe uqiniti na sledei naqin: >> a=5.23 a = 5.2300 >> b=3 b = 3 >> c=-0.68 c = -0.6800 Oqigledno je da je Matlab dao ogovarajui ispis na naredbe ispisujui identifikator i vrednost promenljive. Stavljanje specijalnog znaka taqka-zarez (;) kao poslednjeg karaktera u naredbi ima za posledicu spreqavanje ispisa na tu naredbu. Na primer: >> a=5.23; >> b = 3; >> c=-0.68; Matlab dozvoljava unos vixe naredbi u 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
3
Nad promenljivama 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, promenljive u izrazu moraju prethodno da budu definisane, inaqe e se pojaviti poruka o grexci. Poxto su vrednosti promenljivih a, b i c poznate, nakon izvrxenja naredbe sistem vraa vrednost: d = 1.8748 Prilikom izvrxavanja aritmetiqkih operacija, Matlab vodi raquna o prioritetu opreratora. Korisno je koristiti Matlabov help sistem iz komandne linije jednostavnim ukucavanjem help ImeFunkcije. Osim toga, veoma koristan je i ulaz sa tastature ∧c (jednovremen stisak na Ctrl i c) koji obezbeuje prekid izvrxavanja skript datoteke ili funkcije. U komandnoj liniji se mogu nai prethodno unete naredbe koje se izlistavaju pomou kurzorskih tastera (↑) i (↓). Pre pritiska na taster mogue je izmeniti pozvanu naredbu.
Poglavlje 2
Matlab i matrice 2.1
Matrice
Neka je skup A polje (A = P) i neka su njegovi elementi oznaqeni sa a11 , a12 , . . . , amn . Skup od mn elemenata a11 , a12 , . . . , amn polja A ureen u obliku pravougaone xeme a11 a12 · · · a1n a21 a22 · · · a2n .. .. .. , .. . . . . am1 am2 · · · amn naziva se m × n matrica i oznaqava se sa Amn = (aij )m n , ili krae, Amn = (aij ) qim su brojevi m i n poznati. Koriste se i oznake Amn = kaij k, Amn = [aij ], itd. Skalar aij se naziva (i, j)-ti element matrice A. Elementi ak1 , ak2 , . . . , akn qine k-tu vrstu matrice A, a elementi a1k , a2k , . . . , amk qine njenu k-tu kolonu. Poxto su elementi aij matrice A elementi polja A kae se da je A m × n matrica nad poljem A. Jasno je da m oznaqava broj vrsta, a n broj kolona. Ako je broj vrsta jednak broju kolona (m = n) matrica je kvadratna. U suprotnom sluqaju matrica je pravougaona. Matrica u Matlabu moe da se kreira na sledei naqin: >> A=[1 2 -3; 4 -1 8; -3 0 6] pri qemu Matlab na ekranu daje, A = 1 4 -3
2 -1 0
-3 8 6
xto predstavlja 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
6
Poglavlje 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 njenu glavnu dijagonalu. Ako su svi elementi van glavne dijagonale jednaki nuli, aij = 0, ∀i, j = 1, 2, . . . , n, i 6= j, tada se kvadratna matrica naziva dijagonalna i oznaqava sa A = diag {a11 a22 . . . ann }. Dijagonalna matrica se formira na sledei naqin >> d = diag([1 2 6]) d = 1 0 0
0 2 0
0 0 6
Ako su svi elementi aii dijagonalne n × n matrice jednaki jedinici ona se naziva jediniqna matrica i oznaqava sa In , In = diag {1 1 . . . 1}. Naredba u Matlabu sa formiranje 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 · · · a n . .. an
2.2. Vektori
7
Qesto emo vektore prikazivati pomou vektora vrsta: aT = a 1 a 2 . . . a n ,
Vektori se kreiraju na jedan od sledeih naqina: a = [a b c . . .] ili a = [a, b, c . . .]
gde su a, b, c, . . . bilo identifikatori promenljivih, brojevi, izrazi, ili stringovi. U prvom sluqaju, izmeu simbola se zahteva blanko karakter, dok u drugom sluqaju po elji moe da se izostavi. Vano je napomenuti, da ako se na mestu nekog elementa matrice eksplicitno napixe matematiqki izraz, onda izmeu alfanumeriqkih karaktera i simbola matematiqkih operatora ne smeju da se stavljaju blanko karakteri. Matlab prua vixe razliqitih naqina da se dodele brojqane vrednosti 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 definisanja vektora izostavi priraxtaj, Matlab podrazumeva da je razlika izmeu susednih vrednosti 1. Tako da sledea naredba daje: >> t = 0:10 t = 0
1
2
3
4
5
6
7
8
9
10
S druge strane, mogue je specificirati n jednako udaljenih vrednosti poqev od poqetne sve do krajnje vrednosti: x = linspace(pocetna vrednost,krajnja vrednost, n) recimo, >> t = linspace(0,2,21) t =
8
Poglavlje 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
Manipulisanje matricama i vektorima
Neka je kreiran vektor b koji ima jednu vrstu i n kolona b = [b1 b2 b3 . . . bn ] Mogue je pristupiti svakom elementu matrice ili vektora. U sluqaju da elimo da pristupimo, na primer, elementu b3 , Matlabova notacija bi bila b(3), odnosno Maltab e da vrati vrednost dodeljenu treem elementu vektora b. Iako je vektor b, zapravo (1 × n) matrica, Matlabov intepretator je inteligentan da u sluqaju vektora ignorixe dvostruko indeksiranje. Drugim reqima, naredba b(3) ima isti smisao kao b(1,3). Meutim, ako se zahteva sledea naredba b(3,1), pojavie se poruka o grexci, zato xto trea vrsta nije ni definisana. Ako definixemo vektor b kao b = [b1 b2 b3 . . . bn ]’ to znaqi da smo kreirali vektor kolonu, tj. (n × 1) matricu. Trei element vektora se indeksira sa b(3), ili b(3,1). Meutim, ako se zahteva b(1,3), Matlab e javiti poruku o grexci jer trea kolona ne postoji. Neka je vektor x definisan kao x = [1 3 -5 8 2 0 -1 4 -3] xto oqigledno predstavlja vektor saqinjen od devet elemenata. Ako elimo da kreiramo novi vektor y saqinjen od prvog, treeg, qetvrtog, petog i devetog elementa vektora x to moe biti uqinjeno na sledei naqin y = [x(1) x(3) x(4) x(5) x(9)] xto daje y = [1 -5 8 2 -3]. To moe da se uradi i drugaqije: y = [x(1) x(3:5) x(9)] ili, y = x([1 3:5 9]) Isti rezultat se dobija ako se najpre definixe vektor koji sadri odgovarajue indekse index = [1 3:5 9]
2.3. Manipulisanje matricama i vektorima
9
y = x(index) Svakom elementu matrice je mogue dodeliti novu vrednost, x(1) = 2; x(4) = -7; sliqno, svakom vektoru, odnosno elementima vektora, moemo da dodamo ili da 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 zadovoljavaju specificirani uslov ili izraz, tako da je mogue napisati: index = find(x<=0) xto vraa index = [3 4 9], a novi vektor u koji sadri samo nepozitvne elemente vektora x moe da se dobije na sledei naqin u = x(index) Oqigledno je da smo u naredbi find iskoristili relacijski operator 6 qija je notacija u Matlabu <=. Da bi smo znali kako se u Matlabu pixu operatori, najbolje je da koristimo help sistem. Otuda, ako u komandoj liniji napixemo help +, ili help > i sl., na ekranu e se pojaviti sintaksa za sve operatore. Vektori mogu da poslue da se formiraju matrice. Naime, tri vektora vrste duine 5 daju matricu (3 × 5): >> x1 = (0:4); >> x2 = 1:0.25:2; >> x3 = [-24 38 12 8 1]; >> A = [x1; x2; x3] A = 0 1.0000 2.0000 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
Poglavlje 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 poslednje 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 umnoavanjem skalara, vektora vrste/kolone, ili matrice odreen broj puta. U odreenim situacijama kada je potrebno zameniti mesta vrstama, odnosno kolonama, takve manipulacije nad matricama se efikasno rexavaju naredbama flipup, odnosno fliplr. Konaqno, ako je potrebno da se izbaci neka od vrsta ili kolona date matrice, to se qini tako xto se te vrste i kolone izjednaqe sa praznom matricom, tj. izrazom [], pri qemu se izmeu uglastih zagrada ne nalazi blanko karakter. Tako, npr. ako iz matrice A elimo da izbacimo prvu i qetvrtu vrstu i poslednju kolonu, to bi izgledalo >> A([1 4],:) = []; >> A(:,3) = [] A = 1.0000 1.2500 2.0000 1.5000 4.0000 2.0000
2.4
Operacije nad matricama i vektorima
Matlab podrava aritmetiqke operacije nad matricama istog tipa i to na 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
a12 a22 a32
a13 a23 a33
a14 a24 a34
b12 b22 b32
b13 b23 b33
b14 b24 b34
a11 A = a21 a31 b11 B = b21 b31
2.4. Operacije nad matricama i vektorima
11
eksplicitno se mogu napisati rezultati sledeih dot operatora
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
a12ˆb12 a22ˆb22 a32ˆb32
a13ˆb13 a23ˆb23 a33ˆb33
a14ˆb14 a24ˆb24 a34ˆb34
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
a11ˆb11 C = A.ˆB = a21ˆb21 a31ˆb31
Dot operator moe da se primeni i na skalarne konstante, ali samo kada se koristi dot operator kao eksponent. Na primer, ako elimo da sraqunamo potencije broja 2 od nulte do sedme, to moemo da uqinimo na sledei naqin >> x = 0:7; y = 2.^x y = 1 2 4
8
16
32
64
128
Obrnuto, mogue je elemente vektora x dii na kvadrat, tako da se dobija: >> x = 0:7; y = x.^2 y = 0 1 4
9
16
25
36
49
Dot operatori mogu da se kombinuju sa funkcijama i vektorima. Ako je potrebno da se sraquna vrednost funkcije, na primer: y(t) = t2 e−t/2 sin(3t +
π ) 8
za t ∈ [0, 0.1, . . . 10], kompaktno rexenje problema bi bilo 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 · · · x n definisana sa v u n uX 1 kxk = (xT x) 2 = t x2i , i=1
tada se ona naziva Euklidova norma vektora x ∈ Rn i ona moe da se sraquna na sledei naqin: norma = sum(x.^2)^0.5
12
Poglavlje 2. Matlab i matrice
Matlab poseduje i svoju naredbu za izraqunavanje norme, norm. Transponovanje matrica se vrxi operatorom apostrof (’). Tako da ako je matrica A tipa (m × n) a11 a12 · · · a1n a21 a22 · · · a2n A= . .. .. . . . . . . . am1 am2 · · · amn onda je B = A’ matrica (n × m) b11 b21 B = A0 = bn1
= a11 = a12 .. .
b12 = a21 b22 = a22 .. .
··· ··· .. .
b1m = am1 b2m = a2m .. .
= a1n
bn2 = a2n
···
bnm = amn
Primer: >> A = [1 2 4; 6 0 5] A = 1 2 4 6 0 5 >> B = A’ B = 1 6 2 0 4 5 Sabiranje/oduzimanje matrica je definisano samo za matrice A i B istog tipa (m = l, n = k) na sledei naqin A ± B = (aij ± bij ) Mnoenje matrice A skalarom α je odreeno sa αA = (αaij ). Matriqno mnoenje je definisano samo za matrice saglasnog tipa. Da bi matrica Amn mogla da se pomnoi s desna matricom Blk potrebno je i dovoljno da je n = l. U tom sluqaju rezultujua matrica C = (cij )pq = AB je odreena sa: 1. p = m ∧ q = k n P 2. cij = aiν bνj , ∀i = 1, 2, . . . , m, ∀j = 1, 2, . . . , k. ν=1
Naredba u Matlabu kojim se izraava AB je
A*B Ovim je istovremeno pokazano kako se matrica B mnoi matricom A s leva. U opxtem sluqaju je AB (ako ima smisla) razliqito od BA (pod uslovom da i ovo ima smisla). Ako oba ova proizvoda imaju smisla i jednaka su, AB = BA, tada su A i B komutativne matrice. Za transpoziciju proizvoda AB vai (AB)T = BT AT . Ako je vektor a vektor vrsta a=
a1
a2
· · · an
b=
b1
b2
· · · bn
reda (1 × n) i b vektor kolona
0
2.4. Operacije nad matricama i vektorima
13
tada (a, b) = ab oznaqava njihov skalarni proizvod ili unutraxnji proizvod, jer je u matriqnom smislu ovakav proizvod daje (1 × n)(n × 1) = (1 × 1) matricu. Naredba u Matlabu za skalarni proizvod ova dva vektora je a*b ili dot(a,b) Meutim, ako je b (m × 1) vektor kolona i ako je a (1 × n) vektor vrsta, onda njihov proizvod ba daje matricu (m × n), jer je (m × 1)(1 × n) = (m × n). Neka su A i B kvadratne matrice reda n takve da je AB = BA = I. Tada i samo tada je matrica B inverzna matrica matrice A, xto se oznaqava sa B = A−1 . Odatle sledi, A−1 A = AA−1 = I. Oqigledno je matrica A istovremeno inverzna matrica matrice B, A = B−1 . Kvadratna matrica ima inverznu matricu ako je njena determinanta razliqita od nule. U Matlabu determinanta moe da se izraquna naredbom det, na primer >> A = [1 3; -2 4]; >> d = det(A) d = 10 Izraz kojim se dobija inverzna matrica je A^-1 ili, inv(A) Svaki broj λ i vektor x koji zadovoljavaju Ax = λx, A ∈ Rn×n , nazivaju se karakteristiqna (sopstvena) vrednost i karakteristiqni (sopstveni) vektor matrice A. Matrica λI − A naziva se karakteristiqna matrica matrice A, a n P det (λI − A) = ci λi , cn = 1, je karakteristiqni polinom matrice A. Jednaqina
i=0
det (λI − A) = 0, je karakteristiqna jednaqina matrice A i ona ima taqno n rexenja koja ne moraju sva da budu meusobno razliqita. Ova rexenja su oqigledno sopstvene vrednosti matrice A. Koeficijenti karakteristiqnog polinoma p(λ) = det (λI − A) = λn + cn−1 λn−1 + · · · + c1 λ + c0 , se nazivaju korenovi ili sopstvene vrednosti ove jednaqine i mogu da se izraqunaju
14
Poglavlje 2. Matlab i matrice
lambda=eig(A) Dat je sistem skalarnih diferencijalnih jednaqina u vektorskom obliku Ax = h, h =
h1
h2
. . . hm
T
, A ∈ Rm×n , x ∈ Rn
(2.1)
On je saglasan ako i samo ako postoji najmanje jedno x∗ za koje je Ax∗ = h. Ovo x∗ je rexenje datog sistema. Ako rexenje sistema jednaqina ne postoji onda je on nesaglasan. Ako je A kvadratna matrica reda n (m = n) tada sistem pri h 6= 0 ima jedinstveno rexenje ako i samo ako je A nesingularna matrica. x=A^-1*h ili, x=inv(A)*h Meutim, za rexavanje sistema linearnih jednaqina, Matlabu vixe odgovara operator obrnuta kosa crta (\) x=A\h xto predstavlja deljenje matrica s leve strane. Ova notacija moe da se primeni i u sluqaju kada matrica A nije kvadratna, tada deljenje matrica s leva x = A\h, zapravo izvodi pseudo inverziju matrice A, x = (AT A)−1 AT h. Ovakav pristup ima prednosti jer je vreme sraqunavanja izraza krae nego da se trai inverzna matrica. Osim toga, u sluqaju velikih matrica ovaj pristup daje taqnije rexenje. Qitaocu se ostavlja da istrai mogunosti nekih od vanih naredbi za rad sa matricama kao xto su: rank, expm, pinv, cond i svd. Spisak svih ugraenih funkcija u Matlabu za rad sa matricama se dobija sa help matfun
Poglavlje 3
Ulaz/izlaz podataka 3.1
Ulazno/izlazne datoteke
Podaci koji se koriste za obradu, ili podaci koji predstavljaju rezultat obrade se mogu uqitati, odnosno saquvati u datotekama. Razlikuju se dve osnovne vrste datoteka: 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 predstavlja 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 putanju gde se nalazi datoteka, ili podestiti radni direktorijum. Pretpostavimo da su kao rezultat izraqunavanja nastali vektori kolone x, y, i z, jednakih duina. Ako hoemo da snimimo dobijene rezultate kao tekstualnu 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 promenljivih. Ako se izostavi ekstenzija, onda se imenu datoteke automatski pridodaje “.mat”. Prilikom uqitavanja binarne datoteke, ako se navede ime datoteke bez ekstenzije, Matlab tu datoteku takoe tretira kao binarnu. Prilikom uqitavanja binarne datoteke, sve zahtevane promenljive se pojavljuju u radnom prostoru.
3.2
Stringovi
Matlab podrava kreiranje, quvanje i manipulisanje 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 definisanja stringa alfanumeriqki karakteri nalaze izmeu jednostrukih znakova navoda (’ . . . ’). Svaki karakter u stringu predstavlja jedan element u vektoru ili matrici. Definiximo sledei string ’Masinski fakultet’, xto bi bilo ekvivalentno kreiranju 15
16
Poglavlje 3. Ulaz/izlaz podataka
sledeeg vektora: s = ’Masinski fakultet’ ili s = [’Masinski fakultet’] Poxto svaki karakter predstavlja 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 promenljive snaga, komanda u Matlabu bi bila: >> snaga = 3.777; ispis = num2str(snaga); disp([’Korisna snaga: ’ ispis ’ kW’]) Korisna snaga: 3.777 kW Matlab dopuxta da se definixe broj cifara koji e da se konvertuje u string, pri qemu je prvi argument naredbe broj koji se konvertuje, dok je drugi broj cifara. Prethodni primer moe kompaktnije da se napixe: >> snaga=3.777; disp([’Korisna snaga: ’ num2str(snaga,2) ’ kW’]) Korisna snaga: 3.8 kW Proxirene mogunosti za formatizovani ispis podataka se mogu dobiti 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 promenljivoj iz liste promenljivih se mora dodeliti korespodentan specifikator formata koji opisuje polje kako e odgovarajue promenljive da se ispixu. Specifikatori formata poqinju znakom % i opciono sadre flegove, xirinu i preciznost polja, 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 kreiranje 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, zahvaljujui ’s’. Inaqe, string je mogue uneti kao i svaki drugi niz, ali samo izmeu jednostrukih znakova navoda. Ako se na naredbu input u komandnoj liniji ne unese nikakav karakter, ve se pritisne taster return, naredba input vraa praznu matricu.
Poglavlje 4
Kontrola toka programa 4.1
Uvod
Kontrola toka izvrxavanja naredbi u okviru programa napisanog u Matlabu se vrxi pomou sledee qetiri naredbe: while, if, for i switch. Sintaksa ovih naredbi odreuje da se svaka od ovih naredbi zavrxava naredbom end. Dakle, sve naredbe ili izrazi koji se nalaze izmeu jedne od naredbi kontrole toka programa i naredbe end e se izvrxiti ako je zadovoljen odgovarajui logiqki uslov. U okviru jedne naredbe kontrole toka je mogue ugnezditi i druge naredbe za kontrolu toka. Kada se koriste naredbe za kontrolu toka programa, dobra programerska praksa je da se naredbe koje se nalaze pod kontrolom tih naredbi uvuku nekoliko karaktera. Nazubljivanje programa znatno poveava qitljivost programa qime se olakxava traenje grexaka i odravanje programa. Kada se koristi Matlabov editor/dibager, nazubljivanje se vrxi automatski.
4.2
While petlja
While petlja je petlja sa izlaskom na poqetku. Sintaksa naredbe while izgleda while uslov naredbe end Naredba while ponavlja naredbe neograniqen broj puta sve dok je ispunjen uslov. Uslov se najqexe daje kao izraz u obliku izraz relacijski operator izraz Nenulta vrednost izraza se tretira kao logiqki taqna. Sledei program ilustruje primenu while naredbe za sraqunavanje prvih N elemenata sledeeg niza, SN =
N X 1 2 n n=1
s tim da priraxtaj niza mora da bude manji od 1 · 10−5 . 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
Poglavlje 4. Kontrola toka programa
4.3
For petlja
For petlja je takoe petlja sa izlaskom na poqetku. Sintaksa ove naredbe je: for promenljiva = izraz naredbe end For petlja ponavlja naredbe odreen broj puta. Qesto promenljiva = izraz ima oblik brojachka promenljiva = N 1 : N 2 : N 3, pri qemu je N 1 inicijalna vrednost, N 3 krajnja vrednost, a N 2 priraxtaj indeksne promenljive. Treba primetiti da N 3 moe da bude manja od N 1, u kom sluqaju N 2 mora da bude negativno. Ako se N 2 izostavi, podrazumeva se da se indeksna promenljiva uveava za jedan. Primena for petlje e biti ilustrovana na sledeem primeru. 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 ispunjen uslov1, izvrxavaju se naredbe1, a zatim se izvrxava prva sledea naredba nakon end. Ako uslov1 nije ispunjen, ispituje se uslov2. Ukoliko je taj uslov ispunjen, izvrxavaju se naredbe2, a zatim se izvrxavanje programa nastavlja ispod end. Ukoliko ni jedan od uslova nije ispunjen, izvrxavaju se naredbe3. Naredbe elseif i else ne moraju obavezno da se koriste. Osim toga, mogue je koristiti vixe od jedne elseif naredbe. Naredba if moe da se koristi da se realizuje funkcija sign(x): 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 petlju sa izlaskom na kraju i na sredini. Zbog toga je naredbom break mogue prekinuti for ili while petlju. Ako je naredba break u okviru ugnedene for ili while petlje, prekida se izvrxavanje te petlje i vraa se na vixi nivo for ili while petlje. Ako se u okviru for ili while petlje izvrxi naredba continue, tada se prelazi na sledeu iteraciju u petlji, pri qemu se preskaqu sve preostale naredbe u telu petlje. Ako se radi o ugnedenoj petlji, tada se se prelazi u narednu iteraciju u okviru petlje u kojoj se nalazi naredba continue. Sledei program ilustruje primenu naredbi break i continue. Potrebno je napraviti program koji uqitava sa tastature i pravi sumu deset prirodinih brojeva manjih od pedeset. n = 1; suma = 0; while 1 str = sprintf(’Unesite element broj %d: ’, n); x = input(str); if x <= 0 | x >= 50 disp([’Pogresan broj! Uneste ponovo!’]) continue; else suma = suma + x; n = n + 1; end if n > 10 break; end end disp([’Suma = ’, num2str(suma)])
4.6
Naredba switch
Naredba switch omoguava vixestruko grananje u programu. Opxti oblik naredbe switch je: switch switch izraz case case izraz1 naredbe1 case case izraz2 naredbe2 .. . case case izrazN naredbeN otherwise naredbeN+1 end Najpre se izraqunava switch izraz, koji moe biti ili skalar ili string, a zatim se proverava da li postoji case izraz sa istom vrednoxu, poqev od prvog. Ako 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
Poglavlje 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
Poglavlje 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 promenljive pod okriljem Matlaba. Sve promenljive koje se kreiraju u okviru funkcije su lokalne za tu funkciju i ne korespondiraju sa promenljivama istih imena u drugim skript ili funkcijskim datotekama. Sve ugraene naredbe u Matlabu su funkcije ovog tipa. Upotrebom funkcija uproxava se sloenost i poveava qitljivost izvornog kˆ oda, izbegava se dupliranje kˆ oda, poveava portabilnost, itd.
5.2
Funkcijska datoteka
Svaka funkcija ima najmanje dve linije kˆ oda, 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 dovoljno indikativno da ukazuje na to xta ta funkcija radi. Xta vixe, ime ’.m’ datoteke mora da bude isto kao i ime funkcije. Prva linija u funkciji predstavlja prototip funkcije, qime se specificira broj promenljivih i njihov tip (skalar, 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 promenljiva. 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. Promenljive u definiciji funkcije ne moraju obavezno da imaju iste identifikatore kao u pozivu funkcije. Naprotiv, ista imena promenljivih mogu da imaju potpuno razliqito znaqenje u skript datoteci iz koje se poziva funkcija i same funkcije. Argumenti funkcije, koji se nalaze izmeu zagrada u definiciji funk23
24
Poglavlje 5. Funkcije
cije, predstavljaju lokalne promenljive i formiraju se pri pozivu funkcije. Prvom argumentu se dodeljuje vrednost prvog parametra u pozivu funkcije, i tako dalje do kraja liste argumenata. Dakle, pri pozivu 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 promenljive pojedinaqno, kˆ od 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); Paljivim uporeivanjem definicije funkcije i skripta u navedenom primeru, uoqava se, da su povratne vrednosti u definiciji funkcije strogo razdvojene zarezom, dok u pozivu funkcije promenljive 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, njoj bi se dodelila samo povratna vrednost prve promenljive. Sledea varijanta moe da bude da su argumenti prikazani kao vektor, dok je svaka izlazna promenljiva individualna. Funkcija bi bila function [y, ydot] = Odziv(t,ulaz) y = ulaz(2)*(1 - exp(-t/ulaz(1))); ydot = ulaz(2)/ulaz(1)*exp(-t/ulaz(1)); a odgovarajui skript t = 0:0.1:10; ulaz = [1, 1]; [y1 y2] = odziv(t,ulaz);
5.2. Funkcijska datoteka
25
Zamislimo sada da elimo da izvedemo isti proraqun, ali za vixe razliqitih vrednosti, recimo promenljive τ . Ovo moe da se rexi uz pomo, npr. for petlje. Skript bi izgledao t = 0:0.1:10; tau = 1:5; y1 = zeros(length(tau),length(t)); y2 = zeros(length(tau),length(t)); for k = 1:length(tau) [y1(k,:) y2(k,:)] = odziv(t,tau(k),1); end Veoma je vano da se primeti da su matrice y1 i y2 deklarisane neposredno pre nego xto se njihovim elementima dodeljuje vrednost u for petlji. Ova praksa se preporuquje zbog toga xto znatno skrauje vreme izvrxavanja ovog dela programa, jer bi u suprotnom Matlab vrxio dinamiqku alokaciju memorije u svakoj iteraciji for petlje. Ovo se objaxnjava time xto Matlab interpretira, a ne kompajlira, funkcije koje pixe korisnik. Iz ovog razloga programi pisani u Matlabu mogu da budu dosta sporiji od sliqnih napisanih u programskim jezicima Fortran ili C. Da bi se izvukao maksimum performansi Matlaba, preporuquje se da se, kad god je mogue, koriste ugraene Matlabove funkcije i operatori.
5.2.2
Posebni sluqajevi
Postoje situacije kada funkcija nema povratnu vrednost. Kada se crta dijagram naredbom plot, ili se pohranjuju podaci u datoteku naredbom save, prilikom poziva funkcija ne vraaju se podaci u glavni program. Prototip funkcije moe da se generalizuje kao function ImeFunkcije(Argumenti) Funkcija moe da ne sadri argumente. To je qest sluqaj ako se funkcija koristi da sloi podatke u odreen naqin. U tom sluqaju prototip funkcije je function PovratnaVrednost ImeFunkcije Iz funkcije se izlazi kada se dosegne poslednja naredba u telu funkcije. Meutim, naredbom return je mogue izdejstvovati raniji prekid funkcije.
5.2.3
Inline
Matlab dozvoljava da se naredbom inline kreira funkcija koja ne mora da se saquva u posebnoj datoteci. Funkcija kreirana na ovaj naqin mora da bude saqinjena iskljuqivo od Matlabovskih izraza i ne moe da poziva druge inline funkcije. Ovakva funkcija moe da vraa samo jednu promenljivu (nikako vixe promenljivih poreanih u vektor). U opxtem sluqaju naredba inline se koristi na sledei naqin ImeFunkcije = inline (’Izraz’,’Argument1’,’Argument2’,. . .) Primer iz 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
Poglavlje 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 daljem tekstu e biti ilustrovane funkcije fzero, roots i ode45. Traenje nula funkcije Matlab ima ugraenu funkciju koja trai rexenje f (x) = 0 unutar tolerancije t0 bilo u okolini x0 ili na intervalu [x1 x2 ]. Ova naredba u opxtem sluqaju je oblika fzero(ImeFunkcije,x0,opcije,p1,p2,. . .) gde je ImeFunkcije ime funkcijske datoteke izmeu jednostrukih znakova navoda, ali bez sufiksa “.m’’. Ako se koristi inline nisu potrebni znaci navoda. Na primer, fzero(’sin(x)+cos(2*x+pi/4)’,10) ili, g = inline(’sin(x)+cos(2*x+pi/4)’,’x’); fzero(g,10) Ako je funkcija f (x) data u obliku polinoma f (x) = c1 xn + c2 xn−1 + . . . + cn x + cn+1 jednostavnije je da se za traenje korenova koristi roots(c) gde je c = [c1 c2 . . . cn+1 ] Na primer: >> r = roots([1 6 11 6]) r = -3.0000 -2.0000 -1.0000 Obrnuto, ako su poznati korenovi, koeficijenti polinoma se dobijaju naredbom poly >> c = poly(r) c = 1.0000 6.0000
11.0000
6.0000
Dva polinoma je mogue pomnoiti naredbom conv(a,b) gde vektori a i b sadre koeficijente polinoma respektivno.
5.2. Funkcijska datoteka
27
Numeriqko rexavanje 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 6 t 6 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 promenljiva, 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 predstavlja najbolji alat za rexavanje diferencijalnih jednaqina u veini sluqajeva i zbog toga je podexeno da bude difoltni metod u Matlabu. Osim ode45, Matlab ima i druge metode za rexavanje diferencijalnih jednaqina. Primena ode45 e biti ilustrovana na odreivanju odziva sistema drugog reda d2 y dy + 2ζwn + wn2 y = wn2 u(t) 2 dt dt Diferencijalna jednaqina moe da se, nakon uvoenja smene y1 y2
= y dy = dt
napixe kao sistem dve diferencijalne jednaqine prvog reda dy1 dt dy2 dt
= y1 = −wn2 y1 − 2ζwn y2 + wn2 u
Sada moe da se napixe funkcija koja predstavlja sistem function ydot = DrugiRed(t,y,flag,zeta,wn,u) ydot = [y(2); -wn^2*y(1)-2*zeta*wn*y(2)+u]; Skript koji poziva funkciju i crta dijagram za vrednosti ζ = 0.7, 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 priguxenja ζ = 0, 0.2, . . . , 1, dovoljno je da napixemo odgovarajui skript close all
28
Poglavlje 5. Funkcije 1.4
1.2
1
0.8
0.6
0.4
0.2
0 0
1
2
3
4
5
6
7
8
9
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
1
0.8
0.6
0.4
0.2
0
0
1
2
3
4
5
6
7
8
9
10
Slika 5.2. Jediniqni odskoqni odziv sistema drugog reda za razliqite vredosti ζ
Poglavlje 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 menjati karakteristike i notaciju na dijagramima. Svaki dijagram se kreira u prozoru slike, tj. u prozoru koji otvori Matlab za vreme izvrxavanja funkcije koja kreira dijagram. Ako se u programu koristi vixe funkcija koje generixu dijagrame, Matlab e pri izvrxavanju svake funkcije da kreira novi prozor slike 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 dodeljuje sledeu vrednost. Kada je potrebno na jednoj slici postaviti vixe nezavisnih dijagrama neophodno je da se koristi funkcija subplot(k,l,m) gde prva dva argumenta dele sliku na sektore, poput matrice sa k vrsta i l kolona, dok poslednji argument predstavlja redni broj dijagrama poqev od gornjeg levog ugla, raqunajui s leva na desno i odozgo na dole. Poxto svako generisanje dijagrama kreira novi prozor slike, da bi se u okviru istog dijagrama nacrtalo vixe od jedne linije ili povrxi potrebno je “zamrznuti” tekui prozor da bude aktivan naredbom hold on Gotovu sliku je mogue saquvati, konvertovati u pogodan format za ukljuqivanje u druge dokumente ili doraivati.
6.2
Kreiranje 2D dijagrama
Dvodimenzionalni dijagram se kreira naredbom plot(x,y,s) kojom se crtaju kolone vektora y nasuprot vektoru x. Argumenti x i y ne moraju strogo da budu vektori, ve to mogu da budu par taqaka, matrice istog tipa ili izrazi koji se sraqunavaju. Ukoliko se izostavi x iz liste argumenata, na 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
Poglavlje 6. 2D grafika
’k–’ znaqi da e linija da bude isprekidana i crne boje. U helpu naredbe plot se nalazi detaljan opis string karaktera. Ako se izostavi string karakter, koriste se sistemske difolt vrednosti. Ukoliko se na slici crta vixe od jedne krive, boje se menjaju u skladu sa difolt sekvencom.
6.2.1
Crtanje taqke
Taqka sa koordinatom (-1,2) oznaqena plavim kruiem se crta naredbom plot(-1,2,’bo’)
6.2.2
Crtanje dui
Naredba plot([-1 1],[-1 2]) crta du izmeu taqaka (−1, −1) i (1, 2)
6.2.3
Crtanje krunice
Krunica moe da se nacrta u polarnim koordinatama x = xc + ρ · cos(θ) y
= yc + ρ · sin(θ)
Sledei skript crta koncentriqne krunice sa centrom u koordinatnom poqetku teta = linspace(0,2*pi,36); ro = 0:0.2:1; x = cos(teta)’*ro; y = sin(teta)’*ro; plot(x,y) pri qemu su x i y u naredbi plot matrice i iscrtavaju se kolonu po kolonu. Karakter string je izostavljen, pa je svaka krunica na slici 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
6.2. Kreiranje 2D dijagrama
31
0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8
−1
−0.5
0
0.5
1
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
1
2
3
4
5
6
7
8
9
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
Poglavlje 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
1
2
3
4
5
6
7
8
9
10
Slika 6.3. Odziv i prvi izvod odziva sistema prvog reda
6.3
Grafiqka obrada slika
Slike je mogue oplemenjivati u smislu davanja imena slici, natpisa na osama, definisanja legendi, senqenja, umetanja teksta, zatim menjanja atributa osa, linija i teksta. Takoe, mogue je koristiti grqka slova, matematiqke simbole, kao i slova u indeksu i eksponentu. Sledei primer ilustruje deo mogunosti. Na slici 6.4 prikazan je odziv sistema prvog reda kao na slici 6.3, meutim daleko bogatije grafiqki opremljen. 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)])
6.3. Grafiqka obrada slika
33 Odziv sistema prvog reda na odskocnu promenu ulaza
10
τ = 1.00 sec
y(t) dy(t)/dt
9 8
y(t), dy(t)/dt
7 6 5 4 3 2 1 0 0
1
2
3
4
5
6
7
t [s]
Slika 6.4: Odziv i prvi izvod odziva sistema prvog reda sa grafiqkom opremom slike
Nakon sraqunavanja, 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 menjaju 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 poslednji argument koji je opcioni (uzima vrednosti 1, 2, 3 ili 4), i koji definixe poloaj legende u odnosu na uglove slike. Ukoliko se stavi vrednost 0, Matlab bira “najbolje” mesto za legendu, a ako se ovaj argument izostavi, uzima se difolt vrednost (gornji desni ugao). Raster, tj. mrea sa podelom se ukljuquje naredbom grid. Naredbom set se u Matlabu podexavaju svojstva objekta. Konkretno, u gornjem skriptu se podexava veliqina slova kojim se oznaqava podela na osama (hendl gca). Na slici su nacrtane linije koje naznaqavaju vremensku konstantu sistema (63% vrednosti u stacionarnom stanju), 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 poqinju obrnutom kosom crtom (\)). String koji se ispisuje naredbom text u konkretnom primeru je najpre pripremljen naredbom sprintf. Konaqno, granice apscisne i ordinatne ose su promenjene naredbom axis kako bi se dobio najbolji vizuelni efekat. Naredba axis bez argumenata vraa vektor [xmin xmax ymin ymax ] sa trenutnim granicama na slici. Ako se kao argument navede vektor, postavljaju se nove granice crtea. U prethodnom primeru su iskorixene samo neke od mogunosti opremanja slika u Matlabu, a qitaocu se ostavlja da uz pomo help sistema istrai ostale.
Poglavlje 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 prikazivanje povrxi, kontura, zapremina, kao i kombinacija prethodnonabrojanih. Osnovne funkcije za crtanje povrxi su surf i mesh Funkcija surf crta mreu qija su polja obojena, dok se kod funkcije mesh crtaju granice polja na mrei, a sama polja ostaju bela. Kod naredbe surf granice polja su crne boje, a boja polja zavisi od intenziteta z, dok mesh boja granice polja mree odreena intenzitetom z. Neka je funkcija v(x1 , x2 ) definisana kao v(x1 , x2 ) = x21 + x22 + x1 x2 Na slici 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
Poglavlje 7. 3D grafika
300 250 200 150 100 50 0 10 10
5 5
0 0
−5
−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 predstavljaju pojedine projekcije povrxi na ravan z = 0.
300 250 200 150 100 50 0 10 10
5 5
0 0
−5
−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 priguxenja. 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’)
7.2. Povrxi
37
2
y(t)
1.5
1
0.5
0 1 0.8
10 0.6
8 6
0.4 4
0.2 ζ
2 0
0
t [s]
Slika 7.3. Odziv sistema drugog reda u prikazan u tri dimenzije
xlabel(’t [s]’), ylabel(’\zeta’), zlabel(’y(t)’)
Poglavlje 8
Control Systems Toolbox 8.1
Uvod
Osim osnovih funkcija, Matlab raspolae dodatnim paketima alata za rexavanje posebnih klasa problema. (Control Systems Toolbox) obezbeuje funkcije koje su od posebne koristi za analizu i sintezu sistema automatskog upravljanja. Naredbom help control iz komandne linije Matlaba, ispisuju se naredbe iz ovog paketa, qime se stiqe uvid u napredne mogunosti.
8.2
Prikazivanje sistema u Matlabu
Analiza i sinteza linearnih sistema automatskog upravljanja zasniva se na rexavanju i razumevanju rexenja obiqnih linearnih diferencijalnih jednaqina, koje u opxtem obliku mogu da se napixu dn−1 y(t) dy(t) dm u(t) dm−1 u(t) du(t) dn y(t) +a +. . . a +a y(t) = b +b +. . . b1 +b0 u(t) n−1 1 0 m m−1 dn t dn−1 t dt dm t dm−1 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 stanja (ss) i • nulama, polovima i pojaqanjem (zpk) Prethodna tri naqina za prikazivanje sistema postoje i za linearne vremenski diskretne sisteme.
an
8.2.1
Model u prostoru stanja
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 rexavanje. Na primer, sistem drugog reda opisan diferencijalnom jednaqinom d2 y dy + 2ζwn + wn2 y = wn2 u(t) dt2 dt moe da se, nakon uvoenja smene x1 x2
= y dy = dt 39
(8.2)
40
Poglavlje 8. Control Systems Toolbox
napixe kao sistem dve diferencijalne jednaqine prvog reda dx1 dt dx2 dt
= x2 = −wn2 x1 − 2ζwn x2 + wn2 u
Ako se uvede vektor stanja x(t) = [x1 (t), x2 (t)]T model sistema u prostoru stanja izgleda, dx(t) dt y(t)
= Ax(t) + Bu(t) = Cx(t) + Du(t)
gde su A=
0 1 −wn2 x1 −2ζwn x2 0 B= wn2 C= 1 0 D=
0
Naredbe kojom se definixe model u prostoru stanja je ss. Naredba ss ima qetiri argumenta, matrice A, B, C i D modela u prostoru stanja. Odgovarajui skript kojim se predstavlja 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)
8.2. Prikazivanje sistema u Matlabu
8.2.2
41
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) =
Y (s) bm sm + bm−1 sm−1 + . . . + b1 s + b0 = U (s) an sn + an−1 sn−1 + . . . + a1 s + a0
(8.3)
gde je an 6= 0 i n 6 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
bm−1
...
b1
b0 ]
odnosno, imenioca prenosne funkcije (8.3) je den = [an
an−1
...
a1
a0 ]
Na primer, prenosna funkcija W (s) =
2s + 1 s3 + 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
Poglavlje 8. Control Systems Toolbox
8.2.3
Nule, polovi i pojaqanja
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 pojaqanjem W = zpk([-0.5],[-1 -2 -3],2)
8.2.4
Prevoenje izmeu razliqitih oblika modela
Model definisan na jedan od tri objaxnjena naqina je mogue prevesti u druga dva Matlabovim funkcijama ss2tf, tf2ss, zp2tf i zp2ss. Metode konverzije modela koriste Matlabove funkcije za numeriqko oreivanje nula polinoma, i zbog toga su podlone numeriqkim grexkama, posebno kod sistema vixih redova. Treba napomenuti da Matlabu najvixe “odovara” model u prostoru stanja, 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 pojaqanja.
8.3
Odreivanje odziva sistema
Matlab raspolae funkcijama za odreivanje 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 poglavlja 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). Bolja 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 pojavljuje 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 odreivanje odziva na sve tipiqne promene ulaznih veliqina. Zbog toga postoji funkcija koja odreuje odziv na proizvoljnu 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
8.4. Rastavljanje racionalnih funkcija
43 Jedinicni odskocni odziv
1.4
1.2
1
y
0.8
0.6
0.4
0.2
0
0
2
4
6
8
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 predstavljen u prostoru stanja, 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 crtanje lika (ili portreta) stanja 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 stanja i rezultat prikae na istoj slici, dobija se kompletnija predstava o sistemu (slika 8.3)
8.4
Rastavljanje 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
Poglavlje 8. Control Systems Toolbox Lik stanja sistema drugog reda
0.2
0.1
x2(t)
0
−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
0.1
0.2
Slika 8.2. Lik stanja sistema drugog reda Lik stanja sistema drugog reda 1 0.8 0.6 0.4
2
x (t)
0.2 0 −0.2 −0.4 −0.6 −0.8 −1
−1
−0.5
0 x1(t)
0.5
1
Slika 8.3. Kompletan lik stanja sistema drugog reda
Na primer, ako je potrebno odrediti prelaznu funkciju sistema, pri nultim poqetnim uslovima, datog sledeom prenosnom funkcijom, W (s) =
s2
2 + 5s + 6
kompleksni lik G(s) prelazne funkcije 2 1 · + 5s + 6 s na osnosu rezultata izvrxavanja sledee naredbe, G(s) =
s2
>> [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 0.6667 −1 0.3333 + + s+3 s+2 s Svi parcijalni razlomci u prethodnom izrazu predstavljaju tabliqne sluqajave Laplasove transformacije, tako da je prelazna funkcija u vremenskom domenu G(s) =
g(t) = 0.6667e−3t − e−2t + 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 ispitivanje 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.
Poglavlje 9
Prilozi 9.1
Prilog A
Sledei program ilustruje primenu bodeovog kriterijuma za ispitivanje stabilnosti sistema qija je prenosna funkcija otvorenog kola 1 s2 1 −s(s2 + 9) = − · s · ( + 1) · 2 s2 + 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 0
10
0
−50 −2 10 100
0
10
2
10
0 0
10
2
10
−0.5
3
3
0
10
−1 −2 10 0
2
10
φ (ω) [π rad]
0 −50 −100 −2 10
0
10
2
10
−0.5
4
4
0
10
1
−1 −2 10 0
2
10
0
−100 −2 10 50 L (ω) [dB]
1
0 −2 10 2
2
10
φ2(ω) [π rad]
L2(ω) [dB]
φ1(ω) [π rad]
−31
−33 −2 10 50
L (ω) [dB]
2
φ (ω) [π rad]
L1(ω) [dB]
−30
0
10 ω [rad/s]
−1 −2 10
2
10
Slika 9.1. Elementarni bodeovi dijagrami close all, clear, pack % brojioci elementarnih prenosnih funkcija 47
0
10 ω [rad/s]
2
10
48
Poglavlje 9. Prilozi 100
ok
L (ω) [dB]
50 0 −50 −100 −150 −2 10
−1
0
10
1
10 P≡0
Σ≡0
→
10
2
10
ZSAU je stabilan
1.5
φok(ω) [π rad]
1 ⊕/2
∅
0.5
0
−0.5 −2 10
−1
10
0
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
1
10
2
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)
49
50
Poglavlje 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
Poglavlje 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
Poglavlje 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
’,...
P≡1
∆Φ≡−1*2π
→
20
ZSAU je stabilan + ω→0
15
10
ImFok(jω)
5 ω→ −∞
0
ω→ +∞
−5
−10
−15
−20 −30
ω→0
−
−25
−20
−15
−10 −5 ReF (jω) ok
Slika 9.3. Najkvistov dijagram
0
5
10
Literatura [1] Magrab, B. Edward, ”An Engineer’s 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