predmet: upravljanje sistemima - saobraćajni fakultet · 6. unošenje skript datoteka ili funkcija...

24
Osnovne akademske studije PREDMET: Upravljanje sistemima TEMA: Uvod u MATLAB (1) Predmetni nastavnik: Prof. dr Milorad Stanojević Asistent: mr Marko Đogatović

Upload: others

Post on 04-Sep-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Osnovne akademske studije PREDMET: Upravljanje sistemima TEMA: Uvod u MATLAB (1) Predmetni nastavnik: Prof. dr Milorad Stanojević Asistent: mr Marko Đogatović

Matlab kao razvojno okruženje

MATLAB je razvojno okruženje za numerička izračunavanja i programski jezik četvrte generacije. Matlab omogućava rad sa matricama, iscrtavanje grafikona funkcija ili podataka, implementaciju algoritama, razvoj korisničkog interfejsa i povezivanje sa programima napisanim u drugim programskim jezicima (FORTRAN, C/C++, Java). Iako je MATLAB u osnovi namenjen numeričkim izračunavanjima on ima ugrađenu i mogućnost simboličkog izračunavanja (MuPAD toolbox).

Kratko uputstvo za korišćenje MATLAB-A 1. Nakon kreiranja direktorijuma u kojem želite da sačuvate vaš rad, u Command prompt-u se pozicionirajte na taj direktorijum i ukucavanjem komande matlab pokrenite program. C:\Users\Marko Markovic\Documents\Moj rad>matlab 2. Postoje dve vrste programa u Matlab-u: skript programi koji se sastoje od liste komandi koristeći ugrađene Matlab funkcije i korisničke funkcije i funkcije koje su programi koji mogu biti pozvani sa različitim ulazima obezbeđujući odgovarajuće izlaze. 3. Jedanput kada se Matlab pokrene vide se četiri prozora: komandni prozor (Command window), u kome unosimo komande, prozor hronologije komandi (Command history), koji sadrži listu komandi koje smo koristili, prozor radnog

prostora (Workspace), koji prikazuje korišćene promenljive i prozor tekućeg direktorijuma (Current folder), u kome su prikazane sve korisničke skript datoteke i funkcije, kao i datoteke sa podacima koje je moguće pozivati ili iščitavati.

4. Nakon pokretanja Matlab-a, ukoliko tekući direktorijum nije onaj u kome želimo da se sačuvamo potonji rad ili da pozovemo postojeće skript datoteke ili funkcije, prvo je neophodno pozicionirati se na željeni direktorijum. To se radi korišćenjem komande cd (change directory) na isti način kao i u Command Prompt-u Windows-a. >> >> cd C:\Users\Marko Markovic\Documents\Moj prethodni rad 5. Help je raspoloživ u nekoliko oblika u Matlab-u. Poziva se korišćenjem nekoliko ugrađenih komandi u Matlabu (help, doc ili demo). help prikazuje tekstualnu verziju pomoći koja se prikazuje u prozoru komandi. Uputstvo za korišćenje konkretne komande ili funkcije dobija se unošenjem njenog naziva nakon help komande. help cd help disp

doc prikazuje HTML verziju pomoći koja se prikazuje u posebnom Help prozoru. demo otvara prozor iz koga je moguće pozvati demonstracione programe. 6. Unošenje skript datoteka ili funkcija moguće je vršiti korišćenjem editora ugrađenog u Matlab. On se poziva komandom edit. Sve skript datoteke i funkcije se čuvaju sa ekstenzijom *.m. Takođe je editor moguće koristiti za izmenu teksta već postojećih skript datoteka ili funkcija navođenjem naziva datoteke nakon komande edit. edit prog.m Moguće je i bez ekstenzije samo edit prog

Vektori i matrice Primer kreiranja vektora vrste i vektora kolone % Vektor-vrsta i vektor-kolona x = [1 2 3 4] % Formiramo vektor-vrstu y = x' % Transponovanjem dobijamo vektor-kolonu

Odgovarajući izlaz je sledeći: x = 1 2 3 4 y = 1 2 3 4

Komentari u programima započinju znakom procenta (%). Komentari služe za opis programa ili pojedinih linija koda. Interpretator jezika ih ignoriše. Vektor se definiše korišćenjem srednjih zagrada ([]) pri čemu se pojedinačni elementi vektora razdvajaju razmakom ili zapetom ukoliko se ti elementi nalaze u vrsti. Naredni primer daće isti izlaz kao i prethodni primer. % Vektor-vrsta i vektor-kolona x = [1,2,3,4] % Formiramo vektor-vrstu y = x' % Transponovanjem dobijamo vektor-kolonu Stavljanje tačke-zapete (;) na kraj svake linije sprečava Matlab da prikaže izlaz. Znači, ukoliko bi napisali % Vektor-vrsta i vektor-kolona x = [1 2 3 4]; % Formiramo vektor-vrstu y = x'; % Transponovanjem dobijamo vektor-kolonu

ne bismo dobili nikakav izlaz nakon izvršenja ove skript datoteke. Znak apostrofa (‘) nakon vektora ili matrice daje transponovani vektor ili matricu. Da bismo videli dimenzije promenljivih x i y u komandnom prozoru ukucaćemo komandu whos >> whos Name Size Bytes Class Attributes x 1x4 32 double y 4x1 32 double Primetite da se vektor posmatra kao matrica. Npr. vektor-vrsta x je matrica koja ima jednu vrstu i četiri kolone.

Drugi način da se prikaže vektor kolona je taj da se elementi vektora međusobno razdvoje tačka-zapetom (;). Tako, na primer, vektor y možemo da napišemo kao y = [1;2;3;4] % Formiramo vektor-kolonu To nam daje izlaz kao i malopre y = 1 2 3 4

Za pristupanje pojedinačnim elementima vektora ili matrica Matlab koristi indeksiranje od 1, to znači da argumenti vektora ili matrica ne mogu biti negativni brojevi ili 0.

Na primer, sledeći primer daće prvi element vektora y y(1) % Prvi element vektora y ans = 1

Ukoliko unesemo y(0)

dobićemo sledeću poruku o grešci: ??? Subscript indices must either be real positive integers or logicals.

U Matlab-u je veoma jednostavno dobiti elemente vektora koji se nalaze određenom intervalu indeksa. Npr. ukoliko želimo da dobijemo vrednosti vektora sa indeksima 1, 2 i 3 napisaćemo sledeće

y(1:3) % Prvi, drugi i treci element vektora y

izlaz će glasiti ans = 1 2 3

Sledeći primer vratiće treći, drugi i prvi element vektora-vrste x x(3:-1:1) % Treci, drugi i prvi element vektora x

Izlaz će glasiti ans = 3 2 1

Matrice se stvaraju konkatenacijom redova (ili kolona): A = [1 2;3 4;5 6] % matrica A sadrzi vektore-vrste [1 2], [3 4] % i [5 6]

A = 1 2 3 4 5 6

Da bi napravili vektor koji odgovara sekvenci brojeva (u ovom slučaju celih brojeva) postoje različiti načini kao što su: n = 0:10 % vektor-vrsta sa elementima od 0 do 10 uvecanim % za 1

Ovaj pristup daje sledeći izlaz: n =

0 1 2 3 4 5 6 7 8 9 10

što je isti izlaz koji bi se dobio korišćenjem komande: n = [0:10].

Ukoliko želimo da uvećamo vrednosti sa inkrementom koji nije 1 (jedinica je po difoltu), onda pišemo sledeće n1 = 0:2:10 % vektor-vrsta sa elementima od 0 do 10 % uvecanim za 2

što daje: n1 = 0 2 4 6 8 10

Vektori se mogu kombinovati u jedan operacijom konkatenacije, na sledeći način nn1 = [n n1] % kombinacija vektora

što daje: nn1 = Columns 1 through 9 0 1 2 3 4 5 6 7 8 Columns 10 through 17 9 10 0 2 4 6 8 10

Vektorske operacije

Matlab-om se mogu izvršavati uobičajene vektorske operacije. Npr. Ukoliko želimo da pomnožimo konstantu 3 sa svakim elementom već definisanog vektora x z = 3*x % Mnozenje konstantom

dobićemo z = 3 6 9 12

Pored algebarskog množenja dva vektora (poznatog iz Matematike I) pri čemu vektori moraju da budu odgovarajućih dimenzija, Matlab omogućava još jednu vrstu množenja vektora. Ovo množenje se ostvaruje onda kada se elementi jednog vektora množe sa odgovarajućim

elementima drugog vektora ( , 1,.., i 1,...,ij ij ijc a b i m j n ). Proizvod ovakvog množenja treba da dâ vektor istih dimenzija kao i vektori koji se međusobno množe. U vektorskom obliku ova operacija se označava kao c a b (Hadamardov proizvod). Da bi se ova operacija izvršila potrebno je staviti tačku (.) pre operatora množenja (.*). v = x.*x % Mnozenje elemenata dva vektora (Hadamardov % proizvod) v = 1 4 9 16 Isto važi i za deljenje, i postoji operacija, ./, koja se ostvaruje onda kada se elementi jednog vektora dele sa odgovarajućim elementima drugog vektora, pri čemu su vektori istih dimenzija.

Drugi tip množenja je uobičajeno množenje koje je dozvoljeno u algebri. Npr. Množenje vektora vrste i vektora kolone bi glasilo w = x*x' % Mnozenje vektora vrste (x) dimenzija 1x4 sa % vektorom kolonom (x') dimenzija 4x1 w = 30

Rezultat je konstanta. Inače, dužina vektora vrste treba da odgovara dužini vektora kolone. Ukoliko bi množili vektor kolonu (recimo x') dimenzija 4x1 sa vektorom vrstom (x) dimenzija 1x4 kao rezultat množenja z=x'*x dobili bi smo matricu dimenzija 4x4.

U Matlab-u je veoma lako naći rešenje sistema linearnih jednačina. Da bi garantovali da jedinstveno rešenje postoji, izračunava se determinanta pre nalaženja inverzne matrice. Ukoliko je determinanta jednaka nuli to će značiti da jedinstveno rešenje ne postoji. % Resenje sistema linearnih jednacina, Ax = b A = [1 0 0; 2 2 0; 3 3 3]; % 3x3 matrca t = det(A); % MATLAB funkcija koja izracunava determinantu b = [2 2 2]'; % Vektor kolona x = inv(A)*b; % MATLAB funkcija koja nalazi inverznu matricu

Obzirom da se tačka-zapeta nalazi na kraju svakog reda rezultati operacija se ne ispisuju. Sledeće naredbe bi trebalo da ispišu vrednosti promenljivih disp('Ax = b') % MATLAB funkcija koja prikazuje tekst A b x t

što daje Ax = b A = 1 0 0 2 2 0 3 3 3 b = 2 2 2 x = 2.0000 -1.0000 -0.3333 t = 6

Drugi načini da se reši gornji sistem jednačina su x = A\b; % Operator deljenja ulevo (kosa crta unazad % (backslash) oznacava invertovanje matrice i % mnozenje sa b) x = (b'/A')'; % Operator deljenja udesno (kosa crta unapred % (slash))

Matlab obezbeđuje brz način za dobijanje određenih vrsta vektora i matrica. % Specijalni vektori i matrice x = ones(1, 10) % vrsta od deset jedinica x = 1 1 1 1 1 1 1 1 1 1 A = ones(5, 5) % matrica od 5x5 jedinica

A = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 x1 = [x zeros(1, 5)] % vektor od prethodnog x i dodatnih % 5 nula x1 = 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 A(2:5, 2:5) = zeros(4, 4) % U vrste od 2 do pet i kolone od % dva do 5 upisujemo nule

A = 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 y = rand(1,10) % Vektor-vrsta sa 10 uniformno % generisanih elemenata na intervalu % [0,1) y = Columns 1 through 9 0.6557 0.0357 0.8491 0.9340 0.6787 0.7577 0.7431 0.3922 0.6555 Column 10 0.1712

Moguće je generisati slučajne brojeve i korišćenjem normalne raspodele. Tako dobijene slučajne vrednosti se ne nalaze na intervalu između 0 i 1. y1 = randn(1,10) % vektor-vrsta sa 10 slucajnih % elemenata (normalna raspodela)

y1 = Columns 1 through 9 -0.1022 -0.2414 0.3192 0.3129 -0.8649 -0.0301 -0.1649 0.6277 1.0933 Column 10 1.1093