You are on page 1of 35

Prirunik 2 Programiranje u MATLAB-u

Edvard Neuman Matematiki odjel Southern Illinois University, Carbondale edneuman@siu.edu Ovaj prirunik je namijenjen onima koji ele nauiti osnove programskog jezika MATLAB. I ogranienim znanjem ovog jezika, programer poetnik moe napisati vlastiti raunalni kod za rjeavanje problema koji bi bili vrlo kompleksni kad bi smo ih rjeavali drugim nainima. U tekst su ukljueni brojni primjeri koji bi trebali pomoi itatelju da brzo naui osnovne programske alate ovog jezika. Obraene teme su m-files, inline funkcije, kontrolni tok (control flow), relacijski i logiki operatori, stringovi, nizovi polja (cell arrays), zaokrueni (rounding) i cjelobrojni (integers) brojevi i MATLAB grafovi.

2.1 M-files
File koji sadri raunalni kod nazivamo m-files. Postoje dvije vrste m-files: script files (skriptni) i function files (funkcijski). Skriptni files ne uzimaju ulazne argumente ili vraaju izlazne. Funkcijski files mogu prihvatiti ulazne argumente i vratiti izlazne. Da bi napravili m-file kliknite na File, izaberite New i kliknite na M-File sa padajueg izbornika. Otvoriti e vam se MATLAB Editor/Debugger ekran. Ovdje e te upisivati kod, raditi promjene itd. Kad zavrite s upisivanjem, kliknite na File, u MATLAB Editor/Debugger ekranu izaberite Save As... Izaberite ime vaeg file-a, npr., firstgraph.m i kliknite na Save. Provjerite da li je va file snimljen u direktorij koji je u MATLAB-ovoj domeni pretraivanja. U koliko imate najmanje dva m-file sa istim imenima, izvriti e se onaj kojeg e MATLABov pretraiva prvog dohvatiti. Da bi ste otvorili m-file bez Command Window utipkajte edit firstgraph i pritisnite tipku Enter ili Return. Evo primjera malog script file-a % Script file firstgraph. x = pi/100:pi/100:10*pi; y = sin(x)./x; plot(x,y) grid

C:\FSB-RacMat\pred04-tikz\matlab\2008\Prirunik 2b.doc

Analizirajmo sadraj ovog file-a. Prvi red zapoinje sa znakom %. To je comment (komentar). MATLAB ignorira sve komentare. Komentari se umeu da bi se poboljala itljivost koda. U idua dva reda kreirano je polje x i polje y. Primjetite da oba reda zavravaju znakom tokazarez.Time zavrava prikaz sadraja oba vektora na ekranu (vidi Prirunik 1, str. 5.). Polje x sadri 1000 jednako razmaknutih brojeva u intervalu [/100 10] dok polje y zadrava vrijednosti sinc funkcije y=sin(x)/x u tim tokama. Primjetimo uporabu dot operatora . prije operatora dijeljenja s desno /. To govori MATLABU da izvede podjelu po komponentama polja sin(x) i x. Specijalni operatori u MATLABU i operacije nad jednodimenzionalnim i dvodimenzionalnim poljima su detaljno raspravljene u Priruniku 3, odjeljak 3.2. Naredba plot kreira graf sinc funkcije koristei toke generirane u prethodna dva reda. Za detaljniji pregled naredbe plot pogledajte odjeljak 2.8.1, ovog prirunika. Konano, naredba grid je izvrena. To dodaje grid grafu. Ovaj file pozivamo tako da napiemo njegovo ime u Command Window i potom pritisnemo Enter ili Return.

Primjer funkcijskog file-a

Ova funkcija uzima jedan ulazni argumenat, polje realnih brojeva i vraa sortirano polje zajedno sa permutacijom koritenom da bi se postiglo polje b od polja a. MATLABOVA

ugraena funkcija sort je ovdje koritena. Prisjetimo se da ova funkcija sortira brojeve u rastuem nizu. Jednostavni trik koriten ovdje dozvoljava nam da sortiramo polje brojeva u padajuem nizu. Da bi pokazali funkcionalnost funkcije o kojoj diskutiramo, neka je

Moemo izvriti funkciju descort bez izlaznih argumenata. U tom sluaju informacije o uporabi permutacije e biti izgubljene.

Budui da nije koriten izlazni argument u pozivu funkcije descorder, sortirano polje a je pridrueno deaufoltnoj varijabli ans.

2.2 Inline funkcije i feval naredba


Ponekad je praktino definirati funkciju koja e biti koritena za vrijeme i unutar trenutne MATLAB uporabe. MATLAB posjeduje naredbu inline koritenu da bi sse definirale takozvane inline funkcije u Command Window. Neka je

Moete procijeniti ovu funkciju na uobiajeni nain

Primjetite da ova funkcija takoer radi sa nizovima. Neka je:

A = [1 2;3 4] A = 1 3 2 4

i
B = ones(2) B = 1 1 1 1

onda je

Zbog kasnije upotrebe spomenimo ukratko koncept stringova u MATLAB-u. Character string je tekst okruen jednostrukim navodnicima. Na primjer,

ovo je primjer stringa. Stringovi su objanjeni u odjeljku 2.5 ovog prirunika. U prijanjem odjeljku nauili ste kako kreirati funkcijske file-ove. Neke funkcije kao ulazni argument uzimaju ime druge funkcije, koja je specificirana kao string. Da bi se izvrila funkcija specificirana stringom trebamo koristiti naredbu feval kao to je prikazano

Uoite problem izraunavanja najmanjeg zajednikog viekratnika dva integera. MATLAB ima ugraenu funkciju lcm koja rauna broj u upitu. Prisjetimo se se da najmanji zajedniki viekratnik i najvei zajedniki djelitelj (gcd) zadovoljavaju slijedeu jednakost

MATLAB posjeduje vlastitu funkciju, koja se zove gcd, za raunanje najveeg zajednikog djelitelja. Da bi jasnije prikazali upotrebu naredbe feval, pogledajmo kod u m-fileu mylcm

Naredba feval je upotrebljena dva puta u drugom redu (ne brojimo redove za komentare I prazne redove). Provjerava da li su oba ulazna argumenta integeri ili ne. Logiki I operator & koriten ovdje je objanjen u odjeljku 2.4. Ako je ovaj uvjet zadovoljen, tada se izraunava najmanji zajedniki viekratnik koristei prije spomenutu formulu, ili se prikae poruka o greki. Primjetite upotrebu naredbe error, koja kao argument koristi string. Uvjet if-else-end koriten ovdje je objanjen u odjeljku 2.4., ovog prirunika. Funkcija koja je dva puta izvedena unutar funkcije myclm, zove se isint

Nova funkcija korite ovdje je apsolutna vrijednost funkcije (abs) i zaokruivanje (round). Zaokruivanje je klasina matematika funkcija koja zaokruuje broj na najbliu cjelobrojnu vrijednost. Ostale funkcije kojima se zaokruuje realni brojevi na cjelobrojne vrijednosti su objanjene u odjeljku 2.7.. Konano, realmin je funkcija koja prikazuje najmanji pozitivni realni broj na raunalu.

Trapezoidno pravilo integracije uz pravilnu uporabu, esto se koristi u numerikoj integeciji funkcija koje ovise o intervalu integracije.

gdje je h=b-a. Ova formula se jednostavno koristi u MATLABU

Ulazni parametric a i b mogu biti polja istih dimenzija. To je mogue zato to dot operator izvodi odreene aritmetike operacije u naredbi koju definira varijabla y. U ovom primjeru, integrirati emo funkciju sinus kroz dva intervala ije se krajnje toke nalaze u poljima a i b, gdje je

Kako su integracija i derivacija prvog reda ugraene funkcije, nema potrebe definirati te funkcije u m-fileu.

2.3 Tok izvoenja


Za kontrolu toka izvoenja naredbi, MATLAB nudi programerima etiri markera za pisanje koda
for petlja while petlja if-else-end konstrukcija switch-case konstrukcija

2.3.1 Ponavljanje s for petljom


Sintaksa for petlje je prikazana ispod

Naredbe izmeu for i end izjave se uzvravaju za sve vrijednosti spremljene u array.

Pretpostavimo da je jedna potrebna vrijednost funkcije sinus kod jedanaest jednako razmaknutih toaka n/10, za n=0,1,2,...,10. Za generiranje brojeva u upitu moemo koristiti for petlju.

for petlja moe biti fiksirana (nested)

Matrica H stvorena ovdje naziva se Hilbertova matrica. Prva naredba dodjeljuje prostor u memoriji za generiranje matrice. To se dodaje ovdje da bi se smanjile potrebe koje zahtjevaju petlje u MATLABU. For petlju treba koristiti samo onda kada se ne mogu primjeniti druge metode. Razmotrimo slijedei problem. Generirajmo matricu 1010, A=[akl], gdje je akl=sin(k)cos(l). Uporabom fiksirane petlje moemo izraunati ulaze matrice A koristei slijedei kod

Verzija bez petlje moe izgledati ovako

Prva naredba generira red polja k koje se sastoji od cijlih brojeva 1,2,...,10. Naredba sin(k)' .stvara stupac vektora dok je cos(k) vektor retka. Komponente oba vektora su vrijednosti

dviju pokrenutih funkcija sa vrijednostima u k. Kod prikazan ovdje ilustrira jako svojstvo MATLABA koje se zove vektorizacija. Ovu tehniku treba koristiti kada god je mogue.

2.3.2 Ponavljanje while petljom


Sintaksa while petlje je

Ova petlja se koristi kad programer ne zna potreban broj ponavljanja. Ovdje je gotovo trivijalni problem koji zahtjeva koritenje ove petlje. Pretpostavimo da je broj podijeljen s 2. Rezultirajui kvocijent je ponovo podijeljen s 2. Ovaj proces se nastavlja sve dok trenutni kvocijent bude manji ili jednak 0.01. Koji je najvei kvocijent koji je vei od 0.01? Da bi smo odgovorili na ovo pitanje napisti emo nekoliko linija koda.

2.3.3 if-else-end konstrukcija


Sintaksa najjednostavnije verzije konstrukcije koju objanjavamo je

Ova konstrukcija se koristi kad je samo jedna alternativa. Dvije alternative zahtjevaju slijedeu konstrukciju

Konstrukcija ovog oblika je koritena u funkcijama mylcm i isint (vidi poglavlje 2.3). Ako postoji nekoliko alternativa, treba koristiti slijedeu konstrukciju

Chebyshevi polinomi Tn(x), n=0,1,... prvog reda su od velike vanosti u numerikoj analizi. Definiraju se rekurzivno na slijedei nain

Implementacija ove definicije je jednostavna

Koeficijenti kubinog Chebyshevog polinoma prve vrste su

Ovdje T3(x)=4x - 3x.

2.3.4 switch-case konstrukcija


Sintaksa swith-case konstrukcije je

Switch usporeuje ulazne izrate za svaki sluaj vrijednosti. Kad se pronae podudarnost izvodi sve pridruene naredbe. U slijedeem primjeru sluajni cijeli broj x iz grupe {1,2,...,10} je generiran. Ako je x=1 ili x=2, onda se poruka Probability=20% prikae na ekranu. Ako je x=3 ili 4 ili 5, onda se prikazuje poruka Probability=30% , inae se generira poruka Probability=50%. Skriptni file fswitch koristi switch kao alat za rukovanje svim spomenutim sluajevima

Obratite panju na uporabu vitiastih zagrada iza rijei case. To stvara tzv. polje niza bolje nego jednodimenzionalno polje, koje zahtjeva uporabu uglatih zagrada. Ovdje su nove MATLABOVE funkcije koritene u fileu fswitch
rand jednoliko raspodijeljuje sluajne brojeve u intervalu (0,1) ceil zaokruuje u smjeru pozitivne beskonanosti disp prikazuje znak/polje na ekranu

Provjerimo ovaj kod deset puta

10

2.4 Relacije i logiki operatori


Usporedbe se u MATLABU izvode uz pomo slijedeih operatora
Operator < <= > >= == ~= Opis manje od manje ili jednako vee od vee ili jednako jednako nije jednako

Operator == usporeuje dvije varijable i vraa jedan kad su jednake a nulu inae Neka je

Onda

Moemo proiriti sve ulaze u polju a da budu jednaki 1 koristei

To je primjer tzv. loginog adresiranja u MATLABU. Mogli smo postii isti rezultat koristei funkciju find.

Varijabla ind sada sadri vrijednosti koji zadovoljavaju zadane uvjete. Da bi proirili sve jedinice iz polja a koristimo

Tri su logika operatora u MATLABU

11

Logiki operator | & ~

Opis I ili ne

Pretpostavimo da neko eli selektirati sve ulaze x koji zadovoljavaju nejednadbu x 1 ili x < 0.2 gdje

je polje normalno distribuiranih sluajnih brojeva. Lako moemo rijeiti ovaj problem koristei operatore objanjene u ovom odjeljku

Rijeite posljednji primjer bez uporabe logikog adresiranja. Kao prilog relacijskim i logikim operatorima MATLAB ima nekoliko logikih funkcija kreiranih za izvoenje slinih zadataka. Te funkcije vraaju 1 (istina) ako je odreeni uvjet zadovoljen i 0 (la) inae. Lista ovih funkcija je preduga da bi smo ih ukljuili ovdje. itateljima koje to zanima preporuuje se referenca [1] str. 85-86. i [4], 10 poglavlje, str. 2627. Imena veine ovih funkcija zapoinje prefiksom is. Npr, slijedee naredba

vraa 0 zato jer polje y iz zadnjeg primjera nije prazno. Ipak, ova naredba

vraa 1 zato jer je argument koritene funkcije prazno polje []. Ovdje je jo jedan primjer koji zahtjeva upotrebu isempty naredbe

12

U ovom primjeru p(x)=x + 2x + 4. Koritenjem pravila za predstavljanje polinoma u MATLABU kao polja njegovih koeficijenata koje je pohranjeno u padajuem smjeru potencija, postiemo

2.5 Stringovi
String je polje znakova. Svaki znak je pretstavljen interno svojom ASCII vrijednou.

Ovo je primjer stringa

Da bi vidjeli njegov ASCII prikaz koristimo funkciju double

Moemo pretvoriti polje str1 u njegovu zvakovnu formu koristei funkciju char

13

Aplikacija za pretvorbu stringova, koritena je u Priruniku 3, poglavlje 3.11 za nekodirane i dekodirane poruke. Za usporedbu jednakosti dva stringa koristimo funkciju strcmp

Dva stringa mogu biti ulanani koristei funkciju ctrcat

Primjetite da lanac stringova nije odvojen praznim mjestom. Moemo stvoriti dvodimenzionalno polje znakova. Za to je bolje koristiti jedinino polje, nego dvodimenzionalno polje. To odgovara injenici da numeriko polje mora imati isti broj stupaca u svakom retku. Ovo je primjer jedininog polja

Primjetimo uporabu vitiastih zagrada umjesto uglatih zagrada. Jedinino polje je detaljno objanjeno u slijedeem odjeljku ovog Prirunika. MATLAB ima dvije funkcije za kategorizaciju znakova: isletter i isspace. Pokrenuti emo obje funkcije na stringu str

14

Prva funkcija vraa 1 ako je znak slovo i 0 inae, dok zadnja vraa 1 ako je znak prazno mjesto i 0 inae. Zavrit emo ovo poglavlje sa dvije vane funkcije koje su namijenjene konverzaciji brojeva u stringove. Funkcije u pitanju su imenovane int2str i num2str. Funkcija int2str zaokruuje svoj argument (matricu) u cijeli broj i pretvara rezultat u matricu stringova. Neka je

Onda

Funkcija num2str uzima polje i pretvara ga u polje stringova. Pokretanjem ove funkcije na matrici A ranije definiranoj, dobivamo

15

Funkcija o kojoj je rije, uzima drugi mogui argument a broj decimalnih mjesta. Ova karakteristika dozvoljava korisniku prikaz znamenaka desno od decimalne toke. Koristei matricu A ponovo, dobivamo

Za usporedbu, promjenom formata u long, dobivamo

Funkcija num2str se esto koristi za obiljeavanje crtea sa title, xlabel, ylabel i text naredbama.

2.6 Jedinino polje (cell arrays)


Dva tipa podataka jedinino polje i strukture ine MATLAB monim alatom za aplikacije. Oni sadre druga MATLABOVA polja. U ovom odjeljku emo obraditi samo jedinino polje. itatelji koje zanimaju strukture, mogu saznati o njima u referencama [4] poglavlje 13 i [1] poglavlje 12. Da bi kreirali jedinino polje moemo koristiti dvije tehnike, koje se zovu jedinino indeksiranjei indeksiranje sadraja. Slijedei primjer otkriva razlike izmeu ove dvije tehnike. Pretpostavimo da elimo snimiti string John Brown i njegov SSN 123-45-6789 (bez zagrada) u jedininom polju. 1. Jedinino indeksiranje

16

2. Indeksiranje sadraja

Saeti oblik jedininog polja A je

Da bi prikazali njegov puni oblik koristimo funkciju celldisp

Da bi pristupili podatku u pojedinoj jedinici koristimo indeksiranje sadraja s desna. Npr.

Da bi izbrisali polje koristimo prazan matrini operator []. Npr., ova operacija

brie jedinicu B(1,1) jedininog polja B. Ova naredba

kreira novo jedinino polje

17

Kako bi ste izbrisali jedinicu C(2,1)?

2.7 Zaokruivanje na cijeli broj. Funkcije ceil, floor, fix and round
Ve smo koristili dvije MATLABOVE funkcije round i ceil za zaokruivanje realnih brojeva na cijele brojeve. One su kratko opisane u prijanjim odjeljcima ovog prirunika. Potpuna lista funkcija stvorena za zaokruivanje brojeva je prikazana ispod
Funkcija floor ceil fix round Opis Zaokruuje u smjeru minus beskonanosti Zaokruuje u smjeru plus beskonanosti Zaokruuje prema nuli Zaokruuje prema najbliem cijelom broju

Da bi smo prikazali razliku izmeu ovih funkcija kreirajmo prvo dvodimenzionalno polje sluajnih brojeva koji su normalno distribuirani (sredina=0, varijanca=1) koristei drugu MATLAB funkciju randn

18

Vrijedno je spomenuti da su slijedei identiteti


floor(x)=fix(x) za x 0

i
ceil(x)=fix(x) za x 0

istiniti. U slijedeoj m-file funkciji floor i ceilsu koriteni da bi dobili odreenog reprezentanta nenegativnog realnog broja

Naredba return uzrokuje povrat pozvanoj funkciji ili tipkovnici. Funkcija log10 je logaritam po bazi 10.

19

Provjerimo ovaj rezultat

2.8 MATLAB grafika


MATLAB ima nekoliko vrhunskih grafikih rutina. Dozvoljava korisniku da stvori razliite grafike objekte ukljuujui i dvodimenzionalne i trodimenzionalne grafove, grafika korisnika suelja (GUIs), filmove, da spomenemo najvanije. Za opseni prikaz MATLABOVE grafike zainteresirani itatelji mogu pogledati referencu[2]. Prije nego krenemo sa objanjenjima grafikih alata koji su dostupni u MATLABU. preporuio bih da pokrenete nekoliko demo programa koji su u MATLAB paketu. U Command Window kliknite na Help i odaberite Examples and Demos. izaberite Visualization, i onda odaberite 2-D Plots. Prikazati e vam se nekoliko opcija. Izaberite Line i poogledajte m-file ispod grafa. To e vam dati neke ideje o raunalnom kodu potrebnom za stvaranje jednostavnih grafova.. Preporuljivo je da paljivo pogledate sadraj m-fileova koji generiraju grafove u ovom demu.

2.8.1 2-D grafika


Osnovna funkcija koritena za stvaranje 2-D grafova je plot funkcija. Ova funkcija uzima razliite brojeve kao ulazne argumente. Za punu definiciju ove funkcije otipkajte help plot u Command Window. U ovom primjeru graf racionalne funkcije

biti e nacrtan koristei razliite brojeve kao toke na grafu f(x)

20

Analizirajmo sadraj ovog filea. Petlja for se izvrava tri puta. Dakle, tri grafa iste funkcije biti e prikazana u Figure Window. MATLAB funkcija linspace(a,b,n) generira jednodimenzionalno polje n jednako razmaknutih brojeva u intervalu [a b]. Y ordinata toaka koje trebaju biti nacrtane je pohranjena u polju y. Naredba plot je pozvana sa tri argumenta: dva polja sadre x i y koordinate i string 'r', koji opisuje boju koja e biti koritena za prikaz nacrtane krivulje. Uoite razliku izmeu tri grafa kreiranih ovim fileom. Znakovita je razlika u glatkoi izmeu grafova 1 i 3. Bazirajui se na vizualno promatranje, trebali biste doi do slijedeeg zakljuka:"to vie toaka uporabimo, graf generiran funkcijom plot je glai." Funkcija title pridodaje opisne informacije grafu generiranom ovim m-fileom i slijedi naredbu sprintf. Primjetite da sprintf uzima ovdje tri argumenta : string i imena dviju varijabli prikazanim u naslovu svakog grafa. Da bi specificirali format prikazanih brojeva koristimo konstrukciju %g, koja se preporuuje za prikaz cijelih brojeva. Naredba axis govori MATLABU koje su dimenzije draa kutije za plotanje. Da bi smo dodali vie informacija u ovdje kreiranim grafovima, oznaavali smo x i y osi uporabom naredbe xlabel i ylabel. Svaka od ovih naredbi uzima string kao ulazni argument. Funkcija grid pridruuje koordonatnu mreu grafu. Zadnja naredba prije zavretka je naredba pause. Naredba pause(n) zadrava izvoenje grafa za n sekundi prije nastavka., gdje n takoer moe biti decimalan. Ako je pause pozvana bez ulaznog argumenta , onda raunalo eka korisnikov odgovor. Npr., pritiskom na tipku Enter, nastaviti e se izvoenje programa. Funkcija subplot je uporabljena za crtanje nekolicine grafova u samom Figure Window. Ovdje je niz modifikacija na m-fileu graph1

21

Naredba subplot pozvana je sa tri argumenta. Prva dava govore MATLABU da e biti kreirano 22 polje sastavljeno od etiri srtea. Trei parametar je tekui index koji govori MATLABU koji podcrte se trenutno generira.

Uporabom naredbe plot moemo prikazati nekoliko krivulja u istom Figure Window. Nacrtati emo dvije elipse

koristei naredbu plot 22

U ovom fileu koristimo nekoliko novih MATLAB naredbi. Koriste se da poveaju itljivost grafa. Analizirajmo raunalni kod koji sadri m-file graph3. Prije svega, jednadbe elipsi u pravokutnim koordinatama su transformirane u parametarske jednadbe. To je uobiajeni nain za crtanje grafova jednadbi u implicitnom obliku. Toke koje trebaju biti iscrtane i izglaene funkcijom plot, su definirane u prvih pet linija filea. Ne raunamo linije komentara i prazne linije. Moemo nacrtati obje krivulje koristei jednu plot naredbu. tovie, moemo odabrati boju krivulja. Specificirane su kao stringovi (vidite liniju 6). MATLAB ima nekoliko boja kojima moemo crtati grafove.

Primjetite da naredba u liniji 6 zapoinje s h1=plot... Varijabla h1 zadrava informacije o grafu koji generiramo i zove se handle graphics. Naredba set koritena u iduem redu dozvoljava korisniku upravljanje crtanjem. Primjetite da naredba uzima kao ulazni parametar varijablu h1. Debljinu iscrtanih krivulja mijenjamo od poetnih vrijednosti (default) do irine po vlastitom izboru. U slijedeoj liniji koristimo naredbu axis za pojednostavljivanje crtanja. Izabiremo opciju 'square' da bi osi imale kvadratne dimenzije. Ostale dostupne opcije su: 'equal', 'normal', 'ij', 'xy' i 'tight'. Da bi ste saznali vie o ovim opcijama posluite se MATLAB helpom.

23

Ako funkcija axis nije koritena, onda krune krivulje nisu nuno krune. Da bi smo to dokazali, nacrtat emo graf kruga radijusa 1 sa centrom kao izvorom

, Druga vana MATLAB funkcija koritena u ovom fileu je get (vidi liniju 10). Uzima kao prvi ulazni parametar a varijablu imenom gca=get current axis. Trebalo bi vam biti oito da ova funkcija djeluje na x os. Varijabla h=get(gca,...) je grafiko upravljanje ovom osi. Sa informacijama pohranjenim u varijabli h, mijenjamo font veliina pridruen x osi koristei 'FontSize' string nakon veliine fonta koji elimo koristiti. Pozivajui funkciju set u liniji 12, promijenit emo obiljeja znakova du osi x koristei 'XTick' string slijedei polje opisnih distribucija znakova. Moemo komentirati privremenu liniju 12 dodajui znak postotka % prije rijei set da bi vidjeli razliku izmeu deafaultnih znakova i znakova generiranih naredbom u liniji 12. Kada ste gotovi izbriite znak postotka koji ste otipkali u liniji 12 i kliknite na Save iz File izbornika u MATLAB Editor/Debugger. Konano, takoer moete raditi izmjene u naslovu crtea. Npr., moete odabrati veliinu fonta koritenog u naslovu. To se ovdje postie koristei funkciju set. Oito je iz kratkog objanjenja prikazanog ovdje da su dvije MATLAB funkcije get i set od velike vanosti u manipuliranju grafovima. Graf elipse o kojoj je rije prikazan je na slijedeoj stranici

24

MATLAB ima nekoliko funkcija napravljenih za crtanje specijaliziranih 2-D grafova. Djelomina lista ovih funkcija je prikazana ovdje: fill, polar, bar, barh, pie, hist, compass, errorbar, stem, i feather. U ovom primjeru funkcija fill se koristi za kreiranje dobro poznatog objekta

Funkcija koju promatramo uzima tri ulazna parametra: dva polja, ovdje imenovanih x i y. Oni sadre xi y koordinate okomica poligona koje treba popuniti. Tri parametar je boja koju korisnik odabire da bi popunio objekt. Nova naredba koja se pojavljuje u ovom kratkom kodu je text naredba. Koristi se za pribiljeke teksta. Prva dva ulazna parametra specificiraju lokaciju teksta. Trei parametar je tekst, koji e biti dodan crteu. Graf objekta koji je generiran ovim kodom prikazan je na slijedeoj stranici.

25

2.8.2 3-D grafika


MATLAB ima nekoliko ugraenih funkcija za crtanje trodimenzionalnih objekata. U ovom dijelu najee emo upotrebljavati funkcije za crtanje krivulja u prostoru (plot3), mreiranje povrina (mesh), povrina (surf) i konturnih crtea (contour). Takoer, dvije funkcije za crtanje specijalnih povrina, sphere i cylinder biti e kratko objanjene. Preporuujem da svki put kad zatrebate pomo oko 3-D grafike, otipkate help graph3 u Command Window da bi nauili vie o razliitim funkcijama koje su dostupne za crtanje trodimenzionalnih objekata. Neka je r(t)=<t cos(t), t sin(t), t>, -10 t 10, prostorna krivulja. Nacrtati emo njezin graf preko pokazanog intervala koristei funkciju plot3

26

Funkcija plot3 je koritena u liniji 4. Uzima tri ulazna parametra-polja sadre koordinate toaka na krivulji koje se crtaju. Druga nova naredba u ovom kodu je zlabel naredba (vidi liniju 4 odozdo). Njeno znaenje je samoobjanjavajue.

Funkcija mesh je namijenjena crtanju grafova sa 3-D mreastom povrinom. Prije nego krenemo u rad s ovom funkcijom, trebamo predstaviti drugu funkciju meshgrid. Ova funkcija generira dva dvodimenzionalna polja za 3-D crtee. Pretpostavimo da netko eli nacrtati mreastu povrinu preko mree koja je definirana Kartezijevim produktom dvaju postava

meshgrid naredba primjenjena na polja x i y kreira dvije matrice

27

Primjetite da matrica xi sadri replicirane redove polja x dok yi sadri replicirane stupce y. Z vrijednosti funkcije koje se crtaju, izraunavaju se iz polja xi i yi. U ovom primjeru nacrtati emo hiperbolni paraboloid z=y-x preko kvadrata -1 1, -1 y 1

Crte grafa mreaste povrine zajedno sa konturnim crteom ispod nacrtane povrine koristi funkciju meshc

Funkcija surf se koristi za vizualizaciju podatake kao zasjenjene povrine. Raunalni kod u m-fileu graph5 trebao bi vam pomoi da nauite neke bolje strane 3-D grafike u MATLABU.

28

Drugi graf je prikazan na iduoj stranici.

29

Nekoliko novih naredbi je upotrebljeno u ovom fileu. U liniji 5 (ponavljm, ne raunamo prazne linije i linije za komentare), koritena je naredba surfc. Crta povrinu skupa sa nivoom linija ispod. Za razliku od naredbe surfc, naredba surf crta samo povrinu bez nivoa krivulja.Naredba colormap koritena je u liniji 6 da bi obojila povrinu koristei boje koje je korisnik definirao. Ako naredba colormap nije pridruena, MATLAB koristi defaultne boje. Ovdje je popis mapa boja koje su dostupne u MATLABU.

Naredba shading (vidi liniju 7) kontrolira boje kojima se zasjenjuje povrina. Razmatrana naredba uzima jedan argument. Slijedee su opcije zasjenjivanja dostupne u MATLABU.
shading flat postavlja zasjenjenj grafa na povrini shading interp postavlja zasjenjenje na interpolaciju shading faceted postavlj zasjenjenje na stranu, to je po defaultu

30

Naredba view (vidi liniju 8) je specifikacija pogleda na 3-D graf. uzima trodimenzionalni vektor, koji postavlja kut pogleda u Kartezijevim koordinatama. Usmjeriti emo panju na naredbe u linijama 23 do 25. Naredba figure nalae MATLABU da stvori novi Figure Window u kojem e biti nacrtan nivo linija. Da bi poveali graf koristimo naredbu contourf umjesto contour. Prijanji crtei imaju popunjene konturne linije dok zadnji nema. u istoj liniji koristimo naredbu hold on da bi zadrali trnutni cre i sva svojstva osi tako da subsekventne grafike naredbe dodajemo postojeem grafu. Prva naredba u liniji 25 vraa matricu c i grafiki manipulator h koji se koriste kao ulazni parametri za funkciju clabel, koja pridruuje visoke znakove trenutnom konturnom crteu. Da bi nauili vie o ovoj temi itateljima se preporuuju reference [1-3] i [5].

2.8.3 Animacija
U prilog statinim grafovima koje smo do sada obradili, moemo staviti sekvencu grafa u pokretu. Drugim rijeima moemo napraviti film koristei MATLAB grafike alate. Da bi saznali vie o tome kako napraviti film, analizirajmo m-file firstmovie.

Savjetujem da prvo pogledate film. Otipkajte firstmovie u Command Window i pritisnite Enter ili Return tipku. Primjetit e te da su se prikazala pet okvira (frameova) i da se na kraju prikaza okviri pokreu ponovo, ali razliitom brzinom. Postoji nekoliko novih naredbi koje treba nqauiti da bi se bavili animiranom grafikom u MATLABU. Koristit emo m-file firstmovie kao poetnu toku diskusije. Naredba moviein, u liniji 1, sa integralnim parametrom, govori MATLABU da se film koji se sastoji od pet

31

okvira kreira unutar filea. Slijedni okviri se generiraju unutar petlj for. Gotovo sve naredbe ovdje koritene bi vam trrebale biti poznate. Jedina nova unutar petlje je getframe naredba. Svaki okvir filma je pohranjen u stupcu matrice m. S ovom primjedbom, uloga ove naredbe bi trebala biti jasna. Posljednja naredba u ovom fileu je movie(m). On govori MATLABU da izvrava film koji je upravo kreiran i pohrabjen u matrici m.
Upozorenje! File firstmovie ne moe se koristiti u Studentskoj ediciji MATLABA, verzija 4.2. Uzrok tome je ograniena veliina matrice. Budue izdanje Studentske edicije MATLABA, verzija 5.3. dozvoljavati e razliite veliine matrice.

2.8.4. Naredbe sphere i cylinder


MATLAB posjeduje funkcije za generiranje specijalnih povrina. Usredotoiti emo se uglavnom na dvije funkcije sphere i cylinder. Naredba sphere(n) generira jedininu sferu sa centrom u ishoditu koristei (n+1) toaka. Ako je pozvana funkcija sphere(n) bez ulaznih parametara, MATLAB koristi defaultne vrijednosti n=20. Centar sfere moemo translantirati vrlo lako. U slijedeem primjeru, nacrtati emo graf jedinine sfere sa centrom u (2,-1,1)

Funkcija sphere zajedno sa funkcijama surf ili mesh moe biti iskoritena za crtanje grafa sfere proizvoljnog radijusa. Takoer mogu se iskoristiti i za crtanje grafa elipsoida. Funkcija cylinder se koristi za crtanje povrine okretanja. Potrebana su dva (opcija) ulazna parametra. U slijedeoj naredbi cylinder(r,n) parametar r predstavlja vektor koji definira radijus cilindra du z-osi i n specificira broj toaka koritenih za definiranje obodnice cilindra. Defaultne vrijednosti ovih parametara su r = [1 1] i n=20. Generirani cilindar ima jedininu visinu. Slijedea naredba

32

crta unj sa osnovnim radijusom jednakim jedan i jedininoj visini. U ovom primjeru nacrtati emo graf povrine nastao rotacijom krivulje r(t)=<sin(t),t>,0 t oko y osi. Graf generirane krivulje i povrine okretanja se kreira koristei nekoliko linija koda.

33

2.8.5 Ispis MATLAB grafike


U ovom odjeljku razmatrati emo MATLAB grafiku. Da bi poslali odreeni graf printeru kliknemo na File i onda izaberemo Print sa padajueg izbornika. Kad je ovaj izbornik ve otvoren moemo pregledati graf koji emo printati izabirui opciju PrintPreview... Moemo poslati graf printeru koristei print naredbu kao to je prikazano ispod

Moete printati vau grafiku u m-file koristei upravljae za ugraene ureaje. Nepotpuna lista upravljaa je prikazane ovdje:

Za kompletnu listu dostupnih ureaja pogledajte [5], poglavlje 7 str.8-9.

34

Reference

35

You might also like