You are on page 1of 32

S

#126
oktobar 2006

Matematika na PC-ju

Bo ris Bje lo e vi

PC SPECIJALNI DODATAK

oznavanje i veto baratanje matema- raune. Ovim tekstom je obraena verzija Mattikim izrazima preduslov je za ozbilj- lab-a 7.0.0.19920 za Microsoft Windows, a prino bavljenje mnogim prirodnim i tehnikim mere obraene u tekstu nai ete i na DVD-u naukama. Matlab firme Mathworks predstav- koji prati ovaj broj asopisa PC, u sekciji PC lja odlian alat za takve namene korisniku, Plus, u PC Press konferenciji na on-line sistebio on student, revizor, inemu SezamPro ili na Web sajtu www.pcpress.co.yu. njer, projektant ili naunik, Matlab omoguava lako programiranje prilagoeno speciInstalacija finim zahtevima. Paket Matlab ima poseUpotrebljavajui paket bne verzije za 32-bitne i 64-biMatlab korisnik se usredtne operativne sisteme. Bez obsreuje pre svega na problem zira na verziju, minimalna pokoji reava i ne gubi vreme/ trebna radna memorija je 512 energiju/novac uei proMB, a najosnovnija instalacija gramske jezike ili objanjavasa prateim Help-om e zauzejui programeru ta mu je poSoftverski paket Matlab 7 ti oko 450 MB na hard disku. trebno. Na jednostavan i vizuUz instalaciju dodatnih toolelno prihvatljiv nain Matlab ne vri samo pro- box-ova, koji proiruju mogunosti Matlab-a, raune, nego omoguava i izradu algoritama, instalacija moe porasti na preko 2,5 GB. No, modelovanje i simulaciju procesa, grafiki pri- i pored instalacije toolbox-ova, veliku snagu kaz rezultata, pa ak i razvoj softverskih ree- Matlab pokazuje i ako su na raunaru instaliranja za trite, koja obuhvataju i sopstveni kori- ni Word i Excel. sniki interfejs. Ako se instalacija vri na raunaru koji neMatlab je pojaan toolbox-ovima, pro- ma instaliranu raniju verziju Matlab-a, dovoljgramskim dodacima raznih (grupa) autora iz no je ubaciti prvi od dva CD-a i pokrenuti setusko specijalizovanih oblasti, koji obezbeuju up.exe. Na raunaru paralelno mogu da rade dodatne funkcije i komande proirujui oblast stara i nova verzija, pa novi Matlab moemo primene paketa. Drei instalirati u drugom foldese ove premise, autoru. Tokom instalacije nori Matlab-a su proirili vog ne samo da podeakrug potencijalnih korivanja prethodnog nee bisnika, pa ceo softverski ti obrisana, nego e nopaket odavno nije namevi Matlab preuzeti podatnjen samo tehnikom ke od starije verzije. Ako osoblju; primenjuju ga i se ipak odluimo za deinhemiari, biolozi, ekonostalaciju prethodne verzije, a elimo da sauvamo misti, meteorolozi, farmaceuti... Matlab je odavnjena podeavanja, nai no prevaziao svoje ime emo ih u posebnom follaboratorija za matrideru ija se adresa dobice (MATrix LABoratoja komandom prefdir u sary) to je danas komplemom Matlab-u. tan RAD-studio za komIzbor toolbox-ova prilikom custom instalaKada pokrenemo pleksne matematike procije paketa CD moemo izabrati typ-

PC

oktobar 2006

Ma te ma ti ka na PC-ju

ical instalaciju, koja podrazumeva instaliranje samo osnovnog paketa Matlab-a, ili custom instalaciju, u kojoj moemo da izaberemo dodatne toolbox-ove. Tokom custom instalacije Matlab e nas obavestiti ako smo iskljuili neku opciju koja je nuna za rad neke druge ukljuene opcije. Posle zavretka instalacije Matlab e upitati da li moe da postane gazda za sve fajlove sa ekstenzijama m, mat i fig.
Izgled osnovnog ekrana programa

Rad u Matlab-u
Matlab je vizuelni alat: veinu operacija korisnik moe uraditi miem i uz vrlo malo korienja tastature. Matlab e naredbe dobijene izborom miem u pozadini prevesti u svoje komande i obraditi ih ba kao da je korisnik te komande uneo preko tastature. Ipak, i dalje se rad uglavnom obavlja runim unoenjem komandi i promenljivih, a Matlab prvenstveno nudi korisniku komunikaciju kroz Command Window. Instalacija Matlab-a nam donosi dve nove ikone u odeljku Programs menija Start. Jedna omoguava startovanje paketa Matlab, a druga pokretanje programa za kreiranje i izmenu m-fajlova. O m-fajlovima e kasnije biti vie rei; za sada emo samo naglasiti da se oni mogu posmatrati kao batch fajlovi, dakle tekstualni fajlovi sa spiskom komandi koje e program izvriti zadatim redosledom, ali i kao fajlovi sa izvornim programskim kodom. Odmah nakon startovanja je uoljivo da se ovaj paket po osnovnom izgledu ekrana ne razlikuje mnogo od bolje opremljenih tekst-procesora tu su standardni padajui meni, toolbar, glavni i pomoni prozori. Verzija 7 donosi novinu kojom se program pribliava samom izgledu operativnog sistema Windows u donjem levom uglu se nalazi Start taster sa Matlab-ovim logotipom, ijim se aktiviranjem pojavljuje glavni meni pod nazivom Matlab. Na radnom ekranu dominira Command Window, prozor u kome se unose promenljive i komande za rad sa tim promenljivama. Ovakav nain rada je moda nekima nepristupaan ili deluje zastarelo, ali je on jedini univerzalan nain rada koji u isto vreme omoguava i direktan rad sa promenljivama i fajlovima, te programiranje kompleksnih prorauna koji e podatke uzimati iz fajlova ili iz promenljivih koje se ve nalaze u memoriji. Ostatak radnog ekrana zauzimaju prozori Command History i Current Directory/Workspace. Prvi pamti i prikazuje aktivnosti korisnika (unos novih promenljivih, uitavanje fajlova, izmene radnih direktorijuma...) tokom rada u prozoru Command Window; komanda se aktivira dvoklikom. Prozor omoguava da utvrdimo koja komanda je dala koji rezultat i tako predvidimo i korigujemo tok prorauna. Memorija ovog prozora se ne brie zatvaranjem Matlab-a; novo startovanje programa e otvoriti novi odeljak za nove komande, ali e nam i dalje na raspolaganju biti komande iz prethodnih sesija. Current Directory/Workspace prikazuje dva sadraja, koji samo na prvi pogled deluju nezavisno. Izborom opcije Current Directory ovaj prozor prikazuje spisak fajlova koji se nalaze u odabranom direktorijumu (naziv fajla, tip fajla, datum i vreme poslednje izmene fajla). Ako odaberete opciju Workspace bie prikazane sve promenljive koje su trenutno aktivne i nalaze se u Matlab-ovoj radnoj memoriji.
oktobar 2006 PC

PC SPECIJALNI DODATAK

Matrice
radnom okruenju koje nam prua Matlab, kao i u samom njegovom programskom jeziku, matrica predstavlja osnovnu vrstu promenljive. ak i kada se nekoj najjednostavnijoj promenljivoj dodeli konkretna skalarna vrednost, na primer komandom a=23, Matlab tu promenljivu tretira kao matricu dimenzija 11. Iako iz matematikog i programerskog ugla gledanja matrice mogu biti vrlo kompleksne promenljive, Matlab zapravo vidi matrice kao osnovne promenljive pa tako bez problema moe nad njima da izvodi sve matematike operacije.

Unos matrica
Ve smo pokazali najjednostavniji unos najprostije matrice, dimenzija 11. Sloeniju matricu moemo uneti nabrajanjem svih njenih elemenata, recimo J = [ 11 2 19 74; 31 3 20 6 ]. Time smo promenljivoj J dodelili matricu iji prvi red ine elementi 11, 2, 19 i 74, a drugi red elementi sa vrednostima 31, 3, 20 i 6. Uglaste zagrade obeleavaju poetak i kraj navoenja elemenata matrice, a znak ; (taka-zarez) razdvaja redove matrice u naem primeru matrica J je dimenzija 24. Matlab nam nee dozvoliti da redovi sadre razliit broj elemenata, odnosno da budu razliitih duina. U nazivima promenljivih mogu se koristiti svi znaci engleskog alfabeta, cifre i znak _ (underscore). Promenljiva moe imati do 31 znaka u nazivu, a svi prekobrojni znaci bie ignorisani. Matlab razlikuje mala i velika slova, pa tako moe da uoi razliku izmeu promenljivih visoko_C i visoko_c. Drugi nain unosa matrice jeste uz pomo prozora Workspace. U toolbar-u ovog prozora kliknemo na prvu ikonu sa leve strane (New variable). Odmah emo dobiti mogunost da unesemo naziv nae nove promenljive; neka to bude samo B. Kada pritisnemo Enter deo komandnog prozora e biti zamenjen prozorom

Array Editor za unos vrednosti u elemente matrice. Korisnicima programa Excel ovaj prozor je dobro poznat: unosom vrednosti u pojedine elije ovog prozora i pritiskom na Enter definisaemo vrednost i dimenzije same matrice. Matlab e nam u tome pomoi tako to e automatski popuniti nulama sve elemente u koloni ili redu ije vrednosti nismo zadali. Ovaj nain rada se moe koristiti i za laku izmenu vrednosti i matrica ije smo elemente uneli kroz komandni prozor. Ovu izmenu bismo runo, kroz komandni prozor, izvrili komandom J(2,1) = -4 ili J(2) = -4. Nakon toga prvi element u drugom redu dobija vrednost -4. Nije potrebno snimanje ovih izmena, ni novounetih matrica, jer e Matlab sve ove izmene prihvatiti odmah po pritisku na Enter. Drugi nain direktnog pozicioniranja na element se naziva linearno indeksiranje i zasnovan je na injenici da Matlab elemente nae matrice J u memoriju smeta po kolonama 11, 31, 2, 3, 19, 20, 74, 6. Kompletan red ili kolonu matrice prikazane u Array Editor-u moemo obrisati klikom desnim tasterom mia na broj reda/kolone i izborom opcije Delete. Kada zavrimo sa unosom/ izmenom, prozor Array Editor moemo zatvoriti klikom na oznaku u gornjem desnom uglu. Matrica moe da se uita i iz mat, odnosno m-fajla. Mat fajl sadri binarne podatke o samoj matrici, a najjednostavnije emo ga kreirati ako odmah nakon unoenja elemenata matrice (na jedan od dva prikazana naina) izvrimo komandu save ime_matrice, pri emu ime_ matrice obeleava konkretnu matricu iju vrednost elimo da sauvamo. Sa druge strane, m-fajl sadri komandu kojom se kreira matrica (u ASCII-formatu). Praktino moemo, koristei bilo koji klasini tekst-procesor (npr. Notepad), upisati komandu kojom se kreira matrica, slinu komandi kojom smo kreirali nau matricu J, i taj fajl snimiti kao ime_matrice.m. Onda

PC

oktobar 2006

Ma te ma ti ka na PC-ju

u Matlab-ovom prozoru Current Directory treba izabrati direktorijum u kojem smo snimili fajl i dvokliknuti na njegovo ime. Prednost prvog naina snimanja matrice u fajl jeste u tome to je binarni fajl manji od tekstualnog, ali njegova mana lei u funkcionalnosti. Naime, binarni fajl snimljen na prikazan nain nee moi da se uita u verzijama Matlab-a 4 i ranijim (reenje problema donekle postoji u parametru -V4 koji se moe zadati u nastavku komande save), dok je ASCII format uvek upotrebljiv. Matlab olakava kreiranje osnovnih matrica. Tako se komandom J = eye(5) kreira jedinina matrica dimenzija 55, N = zeros(2,5) generie matricu N dimenzija 25 iji su svi elementi jednaki nuli, dok komanda K = ones(3) generie matricu K dimenzija 33 (ako se navede samo jedna dimenzija, Matlab e kreirati kvadratnu matricu) kod koje su svi elementi imaju vrednost 1. Komandom R = rand(4,3) e biti napravljena matrica dimenzija 43 sa elementima ije je realne vrednosti Matlab generisao proizvoljno izmeu 0 i 1. Ako elimo matricu kod koje e elementi uzeti proizvoljne vrednosti iz ogranienog skupa prirodnih brojeva od 0 do 9, unaprediemo prethodnu komandu u R = fix(10*rand(4,3)). Dakle, matrica dimenzija 43 e najpre imati vrednosti racionalnih brojeva izmeu 0 i 1, ali kada je pomnoimo sa 10, pa e svi elementi biti izmeu 0 i 10. Na kraju emo komandom fix zaokruiti te vrednosti (svaki element matrice posebno) na manje cele brojeve.

Operacije sa matricama
U prozoru Workspace ili komandom who uvek moemo videti aktivne promenljive koje koristimo u daljim operacijama. Sabiranje dve matrice vrimo kao i sabiranje dve skalarne vrednosti. Tako e komanda J+B prikazati novu matricu koja predstavlja zbir matrica J i B. Naravno, i ovde vai algebarsko pravilo da se mogu sabirati samo matrice istih dimenzija; ako di-

menzije nisu identine, Matlab e nas uredno obavestiti o tome. Ako su zadovoljena matematika pravila, rezultat operacije koju trenutno obavljamo e neposredno nakon pritiska na taster Enter biti smeten u promenljivu pod nazivom ans (skraeno od answer). Ova promenljiva e dobiti drugu vrednost odmah posle naredne uspeno izvrene operacije. Praktino, promenljiva ans je interna Matlab-ova promenljiva u koju program smeta rezultat poslednje matematike operacije. Ukoliko nam je neki rezultat potreban na due staze trebalo bi da ga smestimo u promenljivu sa konkretnim nazivom, na primer L = J + B. Ova komanda e kreirati matricu pod nazivom L, izraunati vrednosti njenih elemenata i prikazati ih. Ako elimo da budu izraunate vrednosti elemenata matrice L, ali da se iz bilo kog razloga oni ne prikau na ekranu, onda emo staviti znak ; (taka-zarez) na kraju komande. Mnoenje dve matrice vrimo korienjem operanda * (zvezdica). Algebra jasno definie pravila koja matrice treba da zadovoljavaju da bi se izmeu njih mogla izvriti operacija mnoenja (druga dimenzija prve matrice i prva dimenzija druge matrice moraju biti iste) i Matlab ih potuje. Da ne bismo sada pravili novu matricu, iskoristiemo postojee. Prvo emo transponovati matricu B komandom B = B;. Operand (apostrof) e transponovati matricu, a njenu novu vrednost e smestiti ponovo u promenljivu B; zbog upotrebe znaka taka-zarez rezultat nee biti prikazan na ekranu. Sada matrica B ima dimenzije 4*2 i moe se pomnoiti sa matricom J: A = J * B. Rezultat se upisuje u matricu A i prikazuje se na ekranu. Ako imamo dve matrice istih dimenzija i elimo da pomnoimo svaki element prve matrice sa elementom druge matrice koji se nalazi na istoj poziciji, koristiemo A = J .* B. Matrice J i B moraju biti istih dimenzija, a ispred znaka * mora stajati taka. Deljenje jedne matrice drugom se svodi na mnoenje jedne matrice invertovanom veroktobar 2006 PC

PC SPECIJALNI DODATAK

zijom druge matrice A/B je zapravo A*inv(B). Setimo se da mnoenje matrica nije komutativno, pa A*inv(B) nije isto to i inv(B)*A; pri tom se inv(B)A moe izraunati operacijom B\A. Jo jedna klasina operacija nad matricama jeste raunanje ranga komanda je rank(A), a rezultat je skalarna vrednost (ili matrica dimenzija 11) smetena u promenljivu ans. Poto je matrica A kvadratna, njenu determinantu moemo izraunati komandom det(A). Elemente na glavnoj dijagonali matrice dobijamo komandom GD = diag(A) a na sporednoj komandom SD = diag(fliplr(A)). Poto u Matlab-u ne postoji nijedna komanda za neposredan rad sa sporednom dijagonalom matrice, koja i inae u algebri nema toliki znaaj kao glavna dijagonala, komandom fliplr je u ovom sluaju bilo potrebno napraviti sliku u ogledalu po vertikalnoj osi matrice A, pa onda iz takve matrice izvui elemente na glavnoj dijagonali. esto je potrebno izvui neki element matrice dobijene proraunom. Na primer, ako matrica Racuni sadri iznose telefonskih rauna stanara nekog stambenog bloka, pri emu redovi oznaavaju broj ulaza u tom bloku a kolone broj stana u tom ulazu, komandom Telefon = Racuni(2,11) emo u promenljivu Telefon smestiti podatak koliki su telefonski raun napravili stanari koji ive u stanu broj 11 u drugom ulazu bloka stambenih zgrada. Dimenzije neke matrice dobijamo komandom ndims(naziv_matrice). Poto postoje dva rezultata ove komande, broj redova i broj kolona, Matlab e nam rezultat dati u vidu matrice dimenzija 12. Ukoliko elimo da ovaj rezultat smestimo u odgovarajue nezavisne promenljive, to moemo uraditi komandom [broj_redova broj_kolona] = size(naziv_matrice). Proraun sopstvenih vrednosti matrice J dobijamo komandom eig(J), ali pre toga moramo postii da ova matrica postane kvadratna. To je najjednostavnije uraditi komandama J(3,1)=2 i J(4,3)=-5, posle ije primene elementi na zadatim pozicijama dobijaju konkretne vre-

dnosti, a ostali elementi u istim redovima dobijaju vrednost 0. Prostor nam ne dozvoljava da preciznije objasnimo sve operacije nad matricama (detalje potraite u help-u). Za sintaksu komande otkucajte help komanda i Matlab e vam dati detaljno uputstvo.

Sistemi linearnih jednaina


Sistemi linearnih jednaina se u matematici najjednostavnije reavaju korienjem matrica. Tako se sistem jednaina:
4x + y + 2z = 59 x + 3y 8z = -71 -x + 2y + 5z = 77

prezentuje matricom A=[4 1 2; 1 3 -8; -1 2 5] i vektorom B=[59; -71; 77]. Matrica X=[x; y; z], iji elementi predstavljaju nepoznate vrednosti koje treba da izraunamo, dobija se deljenjem matrice B matricom A, odnosno komandom X = A \ B. Dakle, x=6, y=9, a Z=13. Ako se dogodi da je sistem linearnih jednaina nedefinisan (vie je nepoznatih nego to ima nezavisnih jednaina), Matlab e prikazati jedno od netrivijalnih reenja. Za kraj prie o osnovnim komandama Matlab-a treba samo naglasiti da imena funkcija, odnosno komandi nisu rezervisane rei: moete napisati sinh = 13 + 11; i Matlab e kreirati promenljivu sinh i dati joj vrednost 24, bez obzira na to to postoji funkcija istog imena; promenljiva e pregaziti funkciju, pa od tog trenutka naa instalacija Matlab-a nee imati funkciju sinh. Kada nam bude zatrebala ova funkcija, moraemo pre njenog pozivanja da otkucamo komandu clear sinh i uklonimo promenljivu sinh iz memorije.

Reavanje kompleksnijih problema


Jedan od naina izraunavanja potrebnih vrednosti jeste pisanje sopstvenih funkcija, o emu emo kasnije vie govoriti. Pisanjem tih

PC

oktobar 2006

Ma te ma ti ka na PC-ju

funkcija moemo automatizovati mnoge kompleksne i dugotrajne proraune. Matlab nam uz pomo svojih toolbox-ova u startu nudi pomo prilikom reavanja standardnih prorauna koji se esto javljaju u matematici. Na primer, kvadratnu jednainu tipa a*x2 + b*x + c zapiimo na sledei nain: f = sym(a*x^2+b*x+c) pa emo njena reenja dobiti komandom solve(f). Komandom sym prilikom definisanja promenljive f naglasili smo Matlab-u da ne pone da reava kvadratnu jednainu, nego da na zapis shvati kao simboliku oznaku naeg problema kojim emo se kasnije pozabaviti. Narednom komandom solve zadajemo Matlab-u da nae reenje za na problem. S obzirom da smo taj problem prikazali simboliki, bez konkretnih vrednosti za parametre a, b i c, i Matlab e svoja reenja za x prikazati simboliki. Pravu snagu simbolikog predstavljanja problema, odnosno lakou s kojom Matlab izlazi na kraj sa tim problemom, moemo videti u sledeem kratkom primeru. Recimo da imamo promenljivu q, kojoj smo simboliki zadali vrednost q=sym((1+sqrt(6))/2). Ako je potrebno da izraunamo sledei izraz q^2-q-1, moemo to uraditi na sledei nain: g = q^2 q 1 i Matlab e nam prikazati uproeni nain reavanja ovog problema. Ako nam to nije potrebno, nego elimo konkretan rezultat, odnosno krajnju vrednost, upotrebiemo komandu simplify(g). Komandu sym moemo iskoristiti i za simboliko predstavljanje promenljivih ije vrednosti ve znamo (na primer sym(0.2)), ali pod uslovom da se ta promenljiva moe predstaviti racionalnim brojevima, jer komanda sym(pi) nee imati mnogo smisla. Komandom sym moemo predstaviti i kompletne funkcije, da bi ih zatim koristili u daljim proraunima. Konkretno:
syms x f = sin(5*x);

sama sa sobom mogu se dobiti vii izvodi, ali je to mnogo lake postii upotrebom drugog, numerikog argumenta diff(f,2) za drugi izvod. Ako pak funkcija ima vie argumenata, prilikom pozivanja komande diff treba navesti po kom argumentu se vri diferenciranje. Konkretno to izgleda ovako:
syms p, t f = sin(p*t); diff(f,t)

Kad smo ve kod izvoda, simboliko predstavljanje promenljivih i funkcija nad njima moe se iskoristiti i za funkciju limesa. Ako definiemo promenljive x i h kao simbolike, komanda limit((sin(x+h) sin(x))/h, h, 0) e po definiciji izraunati prvi izvod funkcije sin(x) (prvi argument komande limit je funkcija, drugi argument tei vrednosti navedenoj kao trei argument). Izraunavanje neodreenog integrala iste funkcije bismo izveli komadom int(f), a ista komanda u drugaijem obliku bi mogla da se iskoristi i za odreeni integral int(f,a,b), gde su a i b donja i gornja granica integrala; naravno, pre toga treba ukucati komandu sysm a b, kako bi Matlab znao da su promenljive a i b simbolike (u suprotnom e od nas traiti vrednosti za te promenljive). Matlab omoguava i iscrtavanje grafika funkcija koje su predstavljene simboliki, ali o tome neto kasnije.

Operacije sa polinomima
Polinome Matlab predstavlja preko matrica, odnosno vektor-redova. Na primer, polinom
p(x) = 4x5 + x3 +2x2 59

Prvi izvod ove funkcije se dobija komandom diff(f). Ako se dalje ta funkcija kombinuje

se predstavlja kao P = [ 4 0 1 2 0 -59 ]. Matlab e na osnovu dimenzije ovog vektor-reda znati koji je red polinoma; bitno je samo uneti sve koeficijente, pa i one jednake nuli, i to poreane od onih koji pripadaju veim stepenima ka manjim.
oktobar 2006 PC

PC SPECIJALNI DODATAK

Vrednost polinoma P za konkretno x se rauna komandom polyval (P, vrednost). Ne postoji ogranienje u pogledu tipa konkretne vrednosti. Stoga se mogu upisati kompleksan broj ili matrica; u optem sluaju rezultat e biti istog tog tipa. Nule polinoma odreuju se komandom nule = roots(P); vektor nule e sadrati sve nule polinoma P. U obrnutom sluaju, ako znamo nule polinoma ali ne i njegove koeficijente, dobiemo ih komandom Q = poly(nule_polinoma_upisane_kao_vektor-red). Istom ovom komandom moemo dobiti i koeficijente karakteristinog (sopstvenog) polinoma konkretne kvadratne matrice. Komanda poly(J) nam daje koeficijente karakteristinog polinoma matrice J. Dva polinoma, na primer P i x3+1, mnoe se komandom proizvod = conv ( [ 4 0 1 2 0 -59 ], [ 3 0 1 ] ) a dele sa:
[kolicnik, razlika] = ... deconv ( [ 4 0 1 2 0 -59 ], [ 3 0 1 ] )

Najzad, prvi izvod polinoma P se dobija komandom polyder(P).

Unapred denisane promenljive


Iako se te promenljive ne mogu direktno videti u prozoru Workspace, Matlab ima ugraene vrednosti standardnih matematikih promenljivih. Tako, na primer, promenljiva pi ima vrednost 3,1415... a promenljive i i j imaju vrednost imaginarne jedinice; ovde je napravljena svojevrsna kombinacija, jer se u mate-

matici i koristi za obeleavanje imaginarne jedinice, dok se u nekim tehnikim naukama, npr. u elektrotehnici, koristi j. Korisnik moe, ako mu je to potrebno, da koristi ove ve definisane promenljive kao da im je sam dodelio vrednosti. Meutim, Matlab dozvoljava korisniku da ovim promenljivama dodeli i druge vrednosti. Tako se moe napisati pi = 7 i od tog trenutka e u nastavku rada u Matlab-u, pa sve do njegovog gaenja, promenljiva pi imati vrednost 7. Ukoliko u nekom kasnijem trenutku ipak elimo normalnu vrednost za ovu promenljivu, dovoljno je da napiemo clear pi. Komandom clear uklanjamo promenljivu iz Matlab-ove memorije, a ovom konkretnom komandom briemo nau promenljivu pi, pa Matlab preuzima kontrolu nad tom promenljivom. Ako elimo da uklonimo sve nae promenljive iz memorije Matlab-a, koristiemo clear all. Korisniku mogu biti od velikog znaaja jo dve promenljive sa unapred definisanim vrednostima: inf ija je vrednost beskonana i NaN sa nedefinisanom vrednosti. Ako napiemo, na primer, 1 / 0, Matlab e nas upozoriti da pokuavamo deljenje nulom, ali e i prikazati rezultat ans=inf. Isti odgovor dobijamo i ako sa dva pomnoimo npr. najvei realni broj sa kojim Matlab moe da barata, vrednost smetenu u unapred definisanu promenljivu realmax. Dalje, ako napiemo 0 / 0 opet emo dobiti upozorenje da vrimo deljenje nulom, ali e rezultat biti ans=NaN (not a number), jer Matlab ne zna da li e rezultat biti jednak nuli (zbog brojioca jednakog nuli) ili beskonanosti (zbog imenioca jednakog nuli). Slino je i za inf inf.

PC

oktobar 2006

Ma te ma ti ka na PC-ju

Operatori i funkcije
Matlab-ovi operatori
e smo koristili aritmetike operatore za sabiranje i mnoenje. Za oduzimanje se koristi znak (minus) ili istoimena komanda, pa je svejedno da li emo napisati 5 3 ili minus (5,3). Slina je veza izmeu znaka + i komande plus, te znaka * i komande mtimes, kao i izmeu znaka / i komande mrdivide. Poznavaoci FORTRAN-a e prepoznati operatore relacija, jer se komande lt, gt, le i ge koriste podjednako kao i znaci <, >, <= i >= respektivno. Komande eq i ne se koriste kao i operandi == i ~=. Lista operatora data je u tabeli 1. Operatoru : (dvotaka) treba posvetiti posebnu panju, jer se moe koristiti u raznim priAritmetiki operatori sabiranje oduzimanje mnoenje deljenje stepenovanje Operatori relacija manje od vee od manje ili jednako vee ili jednako jednako razliito Logiki operatori i ili ne iskljuivo ili
Tabela 1: Operatori

Osnovne matematike funkcije korenovanje eksponent prirodni logaritam logaritam za osnovu 10 Trigonometrijske funkcije sinus kosinus tangens kotangens sinus hiperboliki kosinus hiperboliki tangens hiperboliki kotangens hiperboliki arkus sinus arkus kosinus arkus tangens arkus kotangens Kompleksne funkcije apsolutna vrednost fazni ugao konjugovano kompleksna vrednost
Tabela 2: Matematike funkcije

sqrt exp log log10 sin cos tan cot sinh cosh tanh coth asin acos atan acot abs angle conj

plus minus mtimes mrdivide mpower lt gt le ge eq ne and or not xor

+ / ^ < > <= >= == ~= & |

likama. Najjednostavniji primer je kreiranje jednodimenzionalne matrice (vektora) iji e elementi uzimati vrednosti od 1 do 10. Pisaemo: T = [ 1; 2; 3; 4; 5; 6; 7; 8; 9; 10 ] ili, uz korienje dvotake, T = [ 1 : 10 ]. Komanda T = [ 1:5; 11:4:30; 100:-10:60 ] e kreirati matricu u kojoj prvi red ine elementi vrednosti redom od 1 do 5, drugi red elementi vrednosti od 11 do 30 sa korakom 4, a trei red elementi sa vrednostima od 100 do 60 sa negativnim korakom -10. Daoktobar 2006 PC

PC SPECIJALNI DODATAK

lje, ako elimo svaki trei element matrice T da postavimo na nulu, onda to moemo uraditi na sledei nain: T[1:3:15]=0. Takoe, ako elimo da izdvojimo sve elemente jedne kolone ili jednog reda, to moemo da uradimo pomou operatora dvotaka. Kolone se izdvajaju sa T(:,broj_kolone), a redovi sa T(broj_reda,:). Ako elimo da izbriemo ceo red ili celu kolonu, onda emo to uraditi komandom T(:,2)=[].

Funkcije
U osnovnoj instalaciji Matlab-a se nalazi nemali broj osnovnih matematikih funkcija, ali i funkcija koje ne sreemo tako esto. Ako nam za nae proraune nisu dovoljne te funkcije, uvek se moemo osloniti na neki od toolbox-ova, koji donose funkcije karakteristine za pojedine oblasti istraivanja i projektovanja. Matlab tei da proizvede ispravan rezultat ak i kada se neka funkcija pogreno koristi. Tako e sqrt(5) biti tretirano slino kao i sqrt(-5), s tim to se u drugom sluaju dobija kompleksan broj kao rezultat. To moe da zbuni korisnika, pa treba paljivo proveriti unesene vrednos-

ti. Takoe treba naglasiti da Matlab-u nisu strane ni funkcije iji su argumenti druge funkcije. Takve su na primer funkcije vie matematike (izvodi, integrali,...), funkcije za iscrtavanje grafika ili funkcije za pronalaenje neke konkretne funkcije. Iako su takve funkcije same po sebi dosta sloene, korisnik Matlab-a tu sloenost ne vidi i koristi ih kao i druge. Matlab u minimalnom pakovanju, bez dodatnih toolbox-ova, sadri i specifine matematike funkcije kao to su dvosmerne transformacije koordinata iz Dekartovog u sferini i/ ili polarni sistem, pa ak i dvosmerne konverzije parametara red-green-blue predstave neke boje u hue-saturation-value predstavu te iste boje. Manji deo funkcija su interne funkcije i sastavni su deo Matlab-ove interne logike rada. Vei deo funkcija, ak i onih koje dolaze u osnovnom pakovanju softverskog paketa, se u stvari nalazi u m-fajlovima, koji se uitavaju prilikom pokretanja funkcije. Prednost internih funkcija je u tome to su bre, a eksternih u tome to m-fajl, koji se nalazi u sri same funkcije, korisnik moe da prilagodi svojim potrebama. Spisak osnovnih funkcija Matlab-a dat je u tabeli 2.

Razmena podataka
ostoji nekoliko naina da razmenite podatke izmeu Matlab-a i nekog drugog programa, recimo Microsoft Excel-a. U sluajevima kada vreme ne igra presudnu ulogu, manje koliine podataka se mogu preneti sa copy / paste. Kod vee koliine podataka treba se posluiti m-fajlovima. Dovoljno je u obinom tekst-editoru uneti podatke na isti nain kao to bismo ih uneli u komandnoj liniji Matlab-a. Podaci iz m-fajla se unose u Matlab komandom load naziv_fajla. Komanda formira promenljivu koja se zove naziv_fajla, a sadraj same promenljive se preuzima iz fajla. Ukoliko je fajl binarnog a ne ASCII-tipa, onda se koristi komanda fread, no pre toga je potrebno otvoriti fajl komandom fopen.

Komandom p = fopen(naziv_fajla, parametar) se kreira promenljiva p, koja postaje spona sa fajlom, pa se komanda fread nadalje koristi nad tom promenljivom, a ne nad fajlom koji je otvoren. U argumentu parametar nalaze se slovni znaci kojima se naglaava pod kojim uslovima je otvoren fajl. Tako slovo r oznaava da se otvoreni fajl moe samo itati (read only), slovo w da se samo moe pisati (write only), slovo a da se moe dodavati na trenutni sadraj fajla, ali mu se ne moe menjati sadraj (appending only); dvoslovnom kombinacijom r+ se dozvoljava itanje i upis podataka u otvoreni fajl. Po zavretku rada binarni fajl treba zatvoriti i za to se koristi komanda fclose(p). U zagradi se kao argument navodi promenljiva preko

10

PC

oktobar 2006

Ma te ma ti ka na PC-ju

koje je izvreno povezivanje sa samim fajlom. Ukoliko elimo da zavrimo rad sa vie binarnih fajlova, Matlab obezbeuje komandu fclose (all). Zatvaranje fajla nee izbrisati promenljive koje smo im dodelili niti obrisati njihove vrednosti; komandom fclose je preseena veza izmeu promenljive i fajla, pa sadraj te promenljive prestaje da bude bitan. Kod izvoza podataka najjednostavnija je upotreba komande diary kojom se Matlab-u nalae da sve to prikazuje na ekranu upie i u fajl; komandom diary off se to upisivanje zaustavlja. Novim pokretanjem ove komande Matlab e nastaviti zapisivanje u fajlu u kojem je ve zapisivao, a ako elimo da damo konkretno ime ovom naem dnevniku koristiemo komandu diary naziv_fajla. Komandom fwrite podaci se zapisuju u binarnoj formi, ali prethodno treba izvriti fopen, konkretno p = fopen(tekst.m,w). Ako bismo odmah iza ove komande uneli fwrite(p,[ 1 2 3; 4 5 6; 7 8 9 ], integer*1) u fajl tekst.m bi bila upisana matrica 33. Prvi argument je promenljiva koja je vezana za fajl u koji elimo da upiemo podatke, a trea oznaava preciznost koju moemo poveati po potrebi. Ovde je takoe vano zatvoriti fajl sa fclose(p). Komandom dlmread (naziv_fajla, graninik) se uitava matrica sadrana u fajlu pod imenom naziv_fajla (obavezna ekstenzija dat ili data), a u samom fajlu su elementi matrice meusobno razdvojeni karakterom oznaenim kao graninik. Fajl mora biti u tekstualnom obliku, a podaci se unose pomou tekst-editora, pri emu je bitno da se graninik izmeu elemenata ne koristi ni za ta drugo, npr. R = dlmread (primer.dat, !). Kod ovakvog uitavanja promenljive ne treba otvarati fajl komandom fopen. Komanda dlmwrite je zaduena za upis podataka: dlmwrite (naziv_fajla, promenljiva,

graninik). Naziv fajla se obavezno mora uneti izmeu apostrofa; drugi argument je promenljiva iju vrednosti (ili vrednosti) elimo da sauvamo u fajlu, a trei argument je karakter koji e imati ulogu graninika. Ako nam je potrebno da iz nekog fajla uitamo sve podatke, a oni nisu istog tipa (npr. nisu svi brojevi), posluiemo se komandom textread. Recimo da postoji tekstualni fajl podaci.txt, koji je po strukturi tabela sa nekoliko kolona: prva je ime osobe, druga prezime, trea godine starosti, etvrta iznos pozajmice. Neka je za svaku osobu predvien jedan red u fajlu. Promenljive, dakle, nisu istog tipa, ali znamo njihov redosled pa emo koristiti komandu: [ime, prezime, godine, zajam] = textread (podaci.txt, %s %s %u %f ...,p) Ovom komandom se kreira skup matrica-promenljivih ime, prezime, godine, zajam, koje e uzimati vrednosti iz fajla ije smo ime naveli kao prvi argument, dakle podaci.txt. Komanda textread u drugom argumentu oekuje oznaku kojeg su tipa pojedine od promenljivih koje treba da se uitaju iz fajla. Konkretno, promenljive kojima se oznaava ime i prezime e biti tekstualne (oznaka %s), godine starosti su ceo broj (oznaka %u), a iznos pozajmice je decimalan, racionalan broj (oznaka %f). Poslednji argument ove komande, oznaen brojem p, pokazuje koliko zapisa treba da bude uitano iz fajla. To znai da moemo uitati i manje osoba tj. manje zapisa nego to ih imamo upisanih u fajlu. Ako se ovaj argument izostavi ili se upotrebi vrednost vea od broja osoba zapisanih u fajlu, Matlab e uitati sve zapise. Promenljive koje su nastale na ovaj nain postaju vektori (matrice-kolone), a njihovi elementi dobijaju vrednosti iz fajla. Dakle, naim primerom emo dobiti etiri vektora naznaenog imena, istih dimenzija koje su definisane treim argumentom komande textread.

oktobar 2006

PC

11

PC SPECIJALNI DODATAK

Kontrola prikaza podataka


ommand Window je glavni (i gotovo jedini) prozor za dosadanji rad u Matlab-u, ali je ponekad potrebno da ga prilagodimo trenutnim eljama za prikaz vrednosti promenljivih ili za navigaciju kroz sam prozor. U padajuem meniju File treba izabrati opciju Preferences; ista opcija se moe dobiti i klikom na Start u donjem levom uglu radnog prozora Matlab-a. Bilo kako bilo, otvorie nam se novi prozor koji nas sa leve strane pita koje opcije hoemo da menjamo; za izmenu opcija u okviru Command Window-a potrebno je izabrati istoimeno stablo. Sa desne strane se otvara mogunost da izaberemo vrstu prikaza pro-

Toolbox-ovi

menljivih (opcija Text display), da li e promenljive iji sadraj ne moe da stane u jedan red biti prelomljene (opcija Wrap lines), pa ak i

da li kursorske tastere elimo da koristimo za pozivanje prethodno unetih komandi ili za skrolovanje ekrana kako bismo videli vrednosti koje nisu stale u jedan red (opcija Arrow keys navigate instead of recalling history). Najee se podeava format prikaza promenljivih na ekranu. Tako e format short uvek davati etiri, a format long etrnaest cifara iza decimalnog zareza, bez obzira na to da li te cifre imaju neku vrednost razliitu od nule. Formati short e i long e e prikazivati isti broj cifara, ali e rezultat uvek biti prikazan preko eksponenta broja 10, bez obzira da li je to potrebno ili nije. Format rat e prikazivati racionalne brojeve (na primer, umesto 0,3333 e biti prikazano 1/3), dok e najverovatnije format short g zadovoljiti osnovne potrebe korisnika, jer e Matlab u zavisnosti od vrednosti rezultata pronai najbolji nain za njegov prikaz. Ako prilikom unosa matrice uvidimo da za unos jedne vrste nije dovoljan jedan red na ekranu, treba otkucati ... (tri take) na kraju reda i pritisnuti Enter. Dalje samo valja nastaviti unoenje elemenata. Korienjem tri take naglasili smo Matlab-u da ne krene u proces obrade podataka koje smo uneli, kao prilikom unosa neke komande.

12

PC

oktobar 2006

Ma te ma ti ka na PC-ju

Grafika
edna slika hiljadu rei. Tako i Matlab za sve proraune koje vrimo omoguava grafiki prikaz reenja, to olakava korisniku sagledavanje situacije i donoenje odluka, kao i realizovanje eventualnih izmena u proraunu. Prikazani grafikoni se mogu odtampati ili snimiti u TIFF, JPG ili EPS formatu, a grafik se uvek moe snimiti u m-fajl, ali i u fajl sa ekstenzijom fig. Ovako snimljen fajl sadri sve podatke o grafiku i moe se uitati i na raunaru koji ima instaliran Matlab pod drugim operativnim sistemom. Novijim raunarima sigurno ne nedostaje radne memorije, ali se ipak savetuje da pre poetka rada sa grafikom otkucate pack. Tokom rada u Matlab-u program e kreirati interne promenljive za privremene rezultate (jedna od njih je i promenljiva ans), pa slobodna radna memorija moe biti rasparana u fragmente. Isto tako i neke promenljive, koje zauzimaju vie memorijskog prostora, mogu u memoriji biti smetene u delovima. Pomenuta komanda e sve aktivne promenljive privremeno smestiti na hard disk, oistiti radnu memoriju i vratiti promenljive. U zavisnosti od veliine RAM-a u raunaru i brzine hard diska, ova operacija moe biti trenutna, ali i vremenski zahtevna. Po izvrenju ove komande Matlab-u e biti lake da barata graficima.

dom u Command Window-u i ne mora se zatvarati ili minimizovati da bi se nastavio rad sa Matlab-om. Grafikon e ostati u ovom prozoru sve dok ne pokrenemo iscrtavanje nove funkcije, a ako ipak elimo da se naredni grafikon prikae u drugom prozoru, potrebno je otvoriti novi prozor komandom figure; ova komanda nee promeniti sadraj starog/starih prozora sa grafikonima. No, ako ipak elimo da naredni grafik iscrtamo preko prethodnog grafika, komandom hold on emo narediti Matlab-u da ne brie prethodni grafik. Crtanje dvodimenzionalnog grafika se najjednostavnije moe videti na primeru funkcije sind. Sledee komande e nacrtati grafik sinusne funkcije:
X = [ 0 : 4 : 360 ]; Y = sind(X); plot(X,Y)

Dvodimenzionalna umetnost
Po zadavanju bilo koje komande za crtanje grafika, Matlab e otvoriti novi prozor pod nazivom figure i u njemu prikazati grafik. Adekvatnim komandama u Command Window-u se grafik moe obogatiti dodatnim informacijama, ali se i u samom figure prozoru mogu izvriti izmene u prikazu. U tu svrhu nam dosta moe pomoi toolbar ovog prozora, prvenstveno opcijama Edit Plot, Rotate 3D i Data Cursor. Rad u ovom prozoru nije uslovljen ra-

Preciznije govorei, tek e poslednja komanda iscrtati grafik. Prve dve komande generiu dve jednodimenzionalne matrice (vektore): vektor X koji sadri 91 element vrednosti od 0 do 360, sa korakom 4 izmeu vrednosti, i drugi vektor Y koji sadri vrednosti sinusne funkcije za svaki element vektora X; funkcija sind u Matlab-u zahteva vrednost argumenta datu u stepenima. Poto je vektor Y nastao od vektora X, on e imati isti broj elemenata. Stoga se za svaki ureeni par (element vektora X, element vektora Y) moe nacrtati jedna taka na grafikonu. Izmeu dve susedne take Matlab e iscrtati pravu liniju. Tako dolazimo do zakljuka da to je vie ovih ureenih parova to e grafikon biti precizniji, ali e raunaru trebati vie vremena da ga iscrta. Da smo prilikom generisanja vektora X izmeu dve dvotake stavili 40, grafik bi bio neprecizniji, odnosno grublji. Da je kojim sluajem stajalo 100, grafik sinusne funkcije bi bio grub do neprepoznatljivosti.
oktobar 2006 PC

13

PC SPECIJALNI DODATAK

Dva kao jedan

Matlab e dozvoliti crtanje dvodimenzionalnog grafika svaki put kada mu prosledimo dva vektora kao argumente funkcije za crtanje, bez obzira na koji nain smo doli do vrednosti elemenata tih vektora, a sve to pod uslovom da oba vektora imaju identian broj elemenata. U raznim naunim oblastima inenjeri i tehniari su svesni prednosti i opasnosti pojave viih harmonika sinusnih funkcija. Kako izgleda sinusna funkcija kojoj harmonian oblik kvare vii (na primer, trei i peti) harmonici moemo videti promenom vrednosti elemenata matrice Y: Y=sind(X)+sind(3*X)/3+sind(5*X)/5;. Sledeim parom komandi emo nacrtati dve razliite funkcije na istom grafiku, pod uslovom da smo zadrali prethodno definisane promenljive X i Y:
Z = sind(X-60); plot(X,Y,X,Z)

sanje naina iscrtavanja funkcije mogu se koristiti jednoslovne oznake za boje (c cyan, m magenta, y yellow, k black, r red, g green, b blue, w white) i jednokarakterne ili dvokarakterne oznake za nain iscrtavanja (- za punu liniju, -- za isprekidanu liniju, : za takice, -. za kombinaciju crta-taka). Ova dva parametra, bez obzira na ukupnu duinu, moraju se nalaziti izmeu apostrofa. Ako elimo da naglasimo take na grafikonu koje predstavljaju ureene parove, onda moemo posle oznake za nain iscrtavanja upisati znak kojim elimo da budu naglaene te take (+, o, * i x su jasne oznake, ali se koriste i s za kvadrati, d za romb, p za petougao, h za estougao, kao i ^, v, > za trouglie). Primer je plot(X,Y, b:x,X,Z,r--v)i. Ovde bi valjalo da ukaemo na jedan mali trik. Ako planiramo da detaljno nacrtamo neku funkciju, na primer sinusnu, a opet elimo i da imamo kruie koji e jo vie naglasiti oblik same funkcije, moemo se ispostaviti da imamo dve kontradiktorne elje. S jedne strane elimo detaljan prikaz funkcije, a s druge strane silni kruii na grafiku mogu samo umanjiti snalaenje na prikazu.
X = [ 0 : 2 : 360 ]; plot(X,sind(X),k:o)

Naime, Matlab e iscrtati krui za svaki ureeni par elemenata iz vektora X i Y, pa emo na grafiku u ovom primeru imati 181 krui. Zato emo u stvari napraviti dva nezavisna vektora X1 i X2, pa onda i sam grafik.
X1 = [ 0 : 2 : 360 ]; X2 = [ 0 : 20 : 360 ]; plot(X1,sind(X1),k:,X2,sind(X2),ko)

Grafik e sada pokazivati dve sinusne funkcije meusobno pomerene za 60 stepeni. Ove dve linije e biti iscrtane razliitim bojama. Komandom plot(X,Y, b:,X,Z,r--) emo dobiti grafik dve meusobno jasno razdvojene funkcije. Prva e biti iscrtana plavim takicama (argument b:), a druga crvenim crticama (argument r--). Kao parametri za defini-

Nacrtana su dva grafika, ali zbog preklapanja deluju kao jedan, koji izgleda ba kao to smo i hteli. Matlab dozvoljava iscrtavanje dve 2D funkcije na istom grafiku ak i kada one nisu u istoj srazmeri. Grafici dve funkcije:

14

PC

oktobar 2006

Ma te ma ti ka na PC-ju

X = [ 2 : .5 : 10 ]; Y = X .^ 5; Z = exp(X)

ljiva. Bie nacrtan grafik koji bismo dobili da smo napisali:


X = real(Z); Y = imag(Z); plot(X,Y)

nisu naroito pregledni nakon izvrenja komande plot(X,Y,X,Z), ali jesu posle komande plotyy(X,Y,X,Z). Grafici e biti iscrtani razliitim bojama, ba kao i dve y ose, sa leve strane grafika ona koja se odnosi na prvu funkciju (u ovom sluaju Y), a sa desne ona koja se odnosi na drugu funkciju (funkcija Z). Ovde valja napomenuti da je generisanje vektora Y izvreno stepenovanjem svakog pojedinanog

Ako je neka funkcija data simboliki, onda se za iscrtavanje njenog grafika koristi komanda ezplot. Konkretno:
syms x f = sin(5*x) ezplot(f)

Komanda sama po sebi olakava vizuelno utvrivanje nula neke funkcije ili oblasti u kojima nije definisana, ali ima striktno ogranienje u smislu opsega u kojem e iscrtati grafik od -2*pi do 2*pi. Ekstremne vrednosti funkcije emo, na primer, vizuelizovati komandom ezplot(diff(f,2)).

Trea dimenzija
Plot je osnovna funkcija kojom se iscrtavaju 2D grafici. Za iscrtavanje trodimenzionalnih funkcija najjednostavnija funkcija je plot3. Ova funkcija zahteva najmanje tri argumenta i dae grafik linije koja se prema zadatim vrednostima nalazi u prostoru. Na primer:
t = 0 : pi/20 : 10*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z)

Grafik dve funkcije

elementa vektora X; ovo je obezbeeno upisivanjem take pre znaka stepenovanja. Komanda Y=X^5 bi, prema tome, proizvela poruku o greci, jer je X vektor a ne kvadratna matrica koja se moe stepenovati. Ako prilikom crtanja grafika formiramo ureene parove tipa (vektor sa realnim vrednostima, vektor sa kompleksnim vrednostima), onda e biti ignorisani imaginarni delovi kompleksnih promenljivih i praktino e biti nacrtan grafik ureenih parova tipa (vektor sa realnim vrednostima, vektor sa realnim delovima kompleksnih promenljivih). Kada crtamo grafik kompleksne promenljive, dovoljno je napisati plot(Z), gde je Z kompleksna promen-

Grafik prikazuje liniju koja ima oblik opruge. Broj uvojaka opruge moemo menjati promenom vrednosti koja je u naem primeru 10, prilikom definisanja vektora t, a finou (preciznost) crtea promenom vrednosti 20 prilikom definisanja istog vektora. Za prikazivanje pravih 3D grafika se koristi funkcija mesh koja iscrtava iani oblik
oktobar 2006 PC

15

PC SPECIJALNI DODATAK

povrine postavljene u prostoru. Za ispravno pokretanje komande mesh(X,Y,Z) argumenti moraju potovati sledee pravilo: ako je vektor X dimenzija 1n, a vektor Y dimenzija 1m, onda Z mora biti matrica dimenzija mn. Dakle, X i Y odgovaraju konkretnim kolonama i redovima matrice Z. Matematiki gledano, vektori X i Y sadre take na x i y osi, a matrica Z onda sadri elemente koji kazuju koliko je koja taka udaljena od ravni koju ine ose x i y. Matlab e u prvom koraku iscrtati te take, a onda ih spojiti pravim linijama i tako stvoriti iani model povrine. Na primer:
Poluprovidni 3D grafik sa gradacijom visine
X = [ 1 : 10 : 360 ]; Y = [ 1 : 72 : 360 ]; Z = [sind(X);sind(X-20);sind(X-40);... sind(X-60);sind(X-80)]; mesh(X,Y,Z)

3D grafik iscrtan linijama

Svakoj taki prikazanog grafika odgovara ureena trojka koju ine vrednosti elemenata vektora X i Y i elementa matrice Z koji se nalazi u preseku kolone i reda koji odgovaraju vektorima X i Y, respektivno. Boje pravih linija kojima Matlab spaja take prikazanog grafika zavise od visine samih taaka. Svaka boja odgovara nekoj konkretnoj visini na z osi, a ovu re-

laciju grafiki moemo proveriti ako unesemo komandu colorbar. Ako elimo da obogatimo grafik time to emo prikazanu povrinu iscrtati malim kvadratiima, a ne ianim modelom, iskoristiemo komandu surf(X,Y,Z). No, poto ovako nacrtana povrina delimino zaklanja samu sebe, moemo je uiniti poluprovidnom: alpha(.5) Ova komanda odreuje providnost malih poligona koji ine veliki 3D grafik; vrednosti u zagradi mogu biti izmeu 0 (potpuna providnost) i 1 (nema providnosti). Komanda mesh ima samo jedan argument koji mora biti matrica a nipoto vektor; Matlab e ukazati na ovu greku. U sluaju korienja ove funkcije samo sa jednim argumentom, Matlab e iscrtati 3D funkciju, gde e za x i y ose uzimati jedinine vrednosti. Dakle, komanda mesh(Z) e u naem primeru iscrtati isti grafik, ali e vrednosti na vodoravnim osama biti drugaije. Iz dosadanjih primera smo mogli da vidimo da Matlab prilikom korienja komandi za crtanje (bez obzira da li crtamo dvodimenzionalni ili trodimenzionalni grafik) prvo izbrie prethodnu sliku, pa onda nacrta novu. Ako ipak elimo da zadrimo staru sliku i preko nje nacrtamo novu, koristiemo komandu hold koja ima dva osnovna parametra on i off. Dakle,

16

PC

oktobar 2006

Ma te ma ti ka na PC-ju

pod uslovom da nismo zatvorili figure prozor u kojem je prvobitni grafik, koristimo program:
hold on Z = [cosd(2*X+10);cosd(2*X+30);cosd(2*X+50);... cosd(2*X+70);cosd(2*X+90)]; mesh(X,Y,Z) hold off

Nekoliko funkcija ne moramo, kao u gornjem primeru, predstavljati u istom prozoru, nego i u vie nezavisnih figure prozora koliko grafika, toliko prozora. Kada prvi put pokrenemo komandu plot, mesh ili surf, Matlab e otvoriti jedan figure prozor i u njemu iscrtati grafik. Ako se ne primeni komanda hold on, svaListing 1: Kreiranje mini-grafika
X = [ 1 : 10 : 360 ]; Y = [ 1 : 72 : 360 ]; Z = [sind(X);sind(X-20); sind(X-40);... sind(X-60); sind(X-80)]; gure subplot(2,2,1) mesh(meshgrid(X)) subplot(2,2,2) mesh(meshgrid(Y)) subplot(2,2,3) mesh(Z) subplot(2,2,4) mesh(X,Y,Z)

ko naredno pokretanje funkcija za crtanje grafika e izbrisati prethodni grafik na ve postojeem prozoru. Otvaranje novog prozora emo obezbediti komandom figure bez parametara. Posle pritiska na taster Enter bie automatski kreiran novi prozor bez ijednog crtea, a naziv prozora e biti za jedan vei od onog koji je trenutno otvoren (u naem sluaju Figure 2). Od tog trenutka bilo koja komanda za crtanje grafika e raditi u novom prozoru; prvootvoreni prozor ostaje netaknut. Ako posle crtanja u novom prozoru elimo da se vratimo u stari, koristiemo komandu figure(1). Dakle, u argumentu komande treba naglasiti koji od figure prozora elimo da bude aktivan. Matlab, naravno, omoguava da u jednom figure prozoru budu nacrtano vie meusobno potpuno nezavisnih grafika. Komandom subplot(3,2,1) emo kreirati matricu malih prozora dimenzija 32, gde e svaki element biti mini-grafik, odnosno prostor za crtanje dvodimenzionalne ili trodimenzionalne funkcije. Trei argument funkcije naglaava Matlab-u koji od tih elemenata e biti radni, odnosno na koji element e se odnositi naredne komande za crtanje (pogledajte primer u listingu 1). etvrti red kreira figure prozor a naredni parovi redova subplot-mesh aktiviraju pojedine delove ovog prozora i iscrtavaju trodimenzionalne funkcije u njima.

Programiranje
snovni oblik programiranja u paketu Matlab se svodi na pisanje takozvanih m-fajlova koji sadre komande koje bismo uneli u komandom prozoru. Tako gledano, m-fajlovi imaju funkciju batch fajlova iz MS-DOS-a. Tu su i proirenja poput uslovnih skokova, petlji i slino, pa m-fajlovi ne samo da ubrzavaju i automatizuju proraune, ve omoguavaju i stvari koje su u samom komandnom prozoru nemogue.

Instalacijom Matlab-a smo dobili dve nove ikone u Start meniju. Prvom smo pokrenuli sam Matlab, a ovoga puta emo iskoristiti drugu: M-file Editor. Odmah po startovanju ovog programa upisaemo kod sa slike. Zatim emo ga pod imenom PrviPrimer.m snimiti, recimo, u direktorijum My Documents. Ako smo familijarni sa DOS komandama cd i dir, koje Matlab razume, ovaj direktorijum moemo postaviti za aktivan. Ako nam je ovaj operativni sisoktobar 2006 PC

17

PC SPECIJALNI DODATAK Listing 2: Matlab program


X = [ 1 : 10 : 360 ]; Y = [ 1 : 72 : 360 ]; Z = [sind(X);sind(X-20);sind(X-40);... sind(X-60);sind(X-80)]; surf(X,Y,Z) hold on Z = [cosd(2*X+10);cosd(2*X+30);... cosd(2*X+50);cosd(2*X+70);cosd(2*X+90)]; alpha(.4) hold off

tem stran, direktorijum My Documents moemo postaviti za aktivan uz pomo Matlab-ovog toolbar-a, upisivanjem direktne fizike putanje do njega u prozoru Current Directory ili pomou tastera sa tri takice desno od njega. eljeni m-fajl pokreemo kucanjem njegovog imena, kao i svake druge komande, ali bez navoenja argumenta (treba upisati samo ime, ali ne i ekstenziju fajla). Ako smo uneli taku-zarez na kraju svakog reda, kao u prikazanom listingu, Matlab e nam odmah pokazati svoj prompt i otvoriti figure-prozor sa poznatim crteom na njemu. Izostavljanjem karaktera taka-zarez na kraju redova neemo napraviti (veliku) greku Matlab e pomisliti da elimo na ekranu Command Window-a da vidimo sadraje matrica X, Y i Z, pa e nam prikazivati njihove sadraje tokom ovog kratkog programa. Kad god poelimo da vidimo nacrtani grafik na radnom ekranu, dovoljno je da pokrenemo PrviPrimer i Matlab e uraditi sve ostalo. Prozor Command History nee zapamtiti komande iz m-fajla, nego samo komandu PrviPrimer. Time je PrviPrimer.m postao komanda lokalne instalacije Matlab-a i od sada ga moemo koristiti kao i sve ostale Matlab-ove komande bez argumenata.

Tipovi podataka i vrste promenljivih


Ozbiljni programi nemaju tako linearan tok izvravanja operacija kao na prvi primer.

Matematiki prorauni i analize realnih situacija zahtevaju da se neki prorauni izvre pod odreenim uslovima, a da se pod drugim uslovima uopte ne izvre. Da bismo ozbiljnije zali u mogunosti Matlab-a kao alata za programiranje i razvoj kompletnih samostalnih aplikacija, potrebno je da ukratko savladamo vrste promenljivih i osnovne naredbe ovog programskog jezika. Za razliku od veine programskih jezika, tokom pisanja programa u Matlab-ovom programskom jeziku ne moramo deklarisati promenljive. Deklarisanjem promenljivih u nekom programskom jeziku programer saoptava raunaru ovo ovde je promenljiva m pa kada negde u programu naie na nju znaj da ona moe da uzima samo vrednosti iz skupa prirodnih brojeva (naravno, programerski se to kae mnogo krae); za svaku promenljivu koju programer koristi u svom programu mora se raunaru naglasiti koja je to vrsta promenljive. Matlab-ov programski jezik to ne zahteva promenljivu koju smo do sada koristili kao celobrojnu moemo od nekog trenutka koristiti i kao kompleksnu, ako smatramo da to ima smisla. Poto se smatra naslednikom FORTRAN-a i C-a, bar kad je programiranje matematikih prorauna u pitanju, Matlab je vrste promenljivih nasledio od ova dva programska jezika, ali je i proirio skup tipova podataka sa kojima moe uspeno da barata. Evo kratkog pregleda osnovnih tipova podataka: int8, int16, int32, int64 celobrojni podatak; broj iza oznake int oznaava broj bitova rezervisanih za predstavljanje vrednosti, pa stoga moe imati opsege od [-128, 127] za 8 bita do preko 9 kvadriliona (9 sa 18 nula iza) i pozitivnih i negativnih celobrojnih vrednosti; uint8, uint16, uint32, uint64 celobrojni podatak; s obzirom da ne moe biti negativan, opseg u pozitivnom smeru brojne prave mu je dvostruko vei od prethodnog tipa; single podatak koji pripada skupu realnih brojeva (brojevi sa decimalnim zarezom; eng. floating point); 32 bita se koriste za pred-

18

PC

oktobar 2006

Ma te ma ti ka na PC-ju

stavljanje znaka, eksponenta i mantise ovog broja, a granice opsega ovog tipa se dobijaju komandama realmax(single), dok se najmanji dobija sa realmin(single); double slian prethodnom tipu, s tim to se koriste 64 bita za predstavljanje broja, pa je opseg vei; kada ponemo da koristimo novu numeriku promenljivu u naem programu, Matlab joj odmah implicitno dodeljuje ovaj tip podatka, obezbeujui sebi veliku rezervu za njene potencijalne vrednosti; logical podatak koji moe imati vrednost 1 ili 0; u prvom sluaju predstavlja tanost (true) nekog iskaza, a u drugom njegovu netanost (false); char podatak tekstualnog (karakter) tipa; praktino predstavlja niz slovnih znakova, gde je za svaki slovni znak izdvojen jedan podatak tipa uint8; zbog njegovih osobenosti i razliitih oblika primene kasnije emo rei neto vie o ovom tipu podataka; structure tip podatka slian nizu brojeva, s tom razlikom da elementi strukture mogu biti meusobno razliitog tipa (svi elementi niza moraju biti istog tipa); elementi strukture mogu ak biti i matrice i to meusobno razliitih dimenzija, ali o tome neto kasnije. Kada znamo naziv promenljive ali ne i njen tip, iskoristiemo komandu class(ime_ promenljive) da bismo ga dobili. Sada emo navesti tipove promenljivih koji su karakteristini za Matlab. Viedimenzionalne matrice. Treu dimenziju matrice je najlake shvatiti posmatranjem 3D matrice koja ima dubinu realizovanu preko slojeva. Na primer, A = randn(2,3,6). Komanda randn e generisati matricu iji elementi e uzeti sluajne vrednosti i pozitivnog i negativnog predznaka. Ako ne unesemo taka-zarez na kraju komande, Matlab e nam prikazati kako izgleda ova 3D matrica A. Prvi sloj, onaj koji bi u nekoj fiktivnoj fizikoj predstavi same matrice bio najblii posmatrau, Matlab predstavlja kao A(:,:1), drugi sloj kao A(:,:,2) i tako redom do poslednjeg, u naem sluaju A(:,:6). U

praktinoj primeni 3D matrica se moe posmatrati kao niz klasinih, 2D matrica. Komanda A = randn(2,5,3,2) e kreirati etvorodimenzionalnu matricu, kako god mi nju zamiljali (za razliku od fizike, algebra prihvata viedimenzionalne prostore), tako to e i u prvom i u drugom sloju etvrte dimenzije kreirati po jednu 3D matricu dimenzija 253. Granica u smislu maksimalnog broja dimenzija jedne viedimenzionalne matrice je definisana koliinom radne memorije. Matlab e komandom randn(2,5,11,2,5,7,10,3,9,1,5,8); biti zaokupljen due vreme u nameri da nam kreira viedimenzionalnu matricu sa preko 80 miliona elemenata, koji e zauzimati preko 650 megabajta radne memorije. Da li su u realnim svrsishodnim proraunima zaista potrebne ovakve dimenzije? Niz matrica zaobilazi ogranienje 3D matrice. Naime, 3D matrica ne dozvoljava da 2D matrice koje je ine budu razliitih dimenzija; matrica A(:,:,1) ima iste dimenzije kao i A(:,:,6) ili bilo koja matrica u tom nizu. Vrsta promenljive koja se naziva niz matrica dozvoljava da njeni elementi budu meusobno razliitih dimenzija. Na primer:
A = cell(1,1); A{1} = 9; A{3} = [ 1 2 ; 3 4 ]; A{2} = randn(5,3);

Prva komanda e stvoriti niz matrica koji e imati samo jedan element praznu matricu. Naredna komanda e u prvom elementu niza matrica A napraviti matricu dimenzija 11. Trea komanda e (indirektno) zadati Matlab-u da veliinu naeg niza matrica A povea na tri i (direktno) dodeli treem elementu matricu dimenzija 22. Ako eventualno pre unosa poslednje komande nateramo Matlab da pokae izgled niza matrica A, dobiemo [9] [] [2x2 double] to znai da je prvi element naeg niza matrica sa jednim elementom vrednosti 9, dok je drugi element prazan (Matlab je prilikom poveanja dimenzija niza dodao prazne elemenoktobar 2006 PC

19

PC SPECIJALNI DODATAK

te i rezervisao prostor za njih, a na nama je da tim elementima damo neku vrednost). Poslednja komanda definie i matricu dimenzija 53 kao drugi element ovog niza matrica. Viedimenzionalni niz matrica predstavlja kombinaciju prethodne dve vrste promenljivih. Komanda A = cell(3,7,4,2) e kreirati etvorodimenzionalni niz sa 84 prazne matrice. Matlab e nam i ovog puta omoguiti da kreiramo niz matrica nesluenih dimenzija, ali opet od radne memorije zavisi da li emo uspeti da svakom elementu ovog niza dodelimo vrednost koju elimo. Tekst promenljivoj moemo dodeliti vrednost komandom tekst = Matlab. Interno e Matlab ovaj tekst drati u memoriji kao brojeve. Ako elimo da vidimo koji su to brojevi, koristimo komandu tekst = double(tekst) iako nije namenjena toj ulozi. Komanda tekst = char(tekst) omoguava vraanje originalne vrednosti promenljivoj tekst . Promenljiva tekst se moe posmatrati kao matrica dimenzija 11, iji jedini element ima vrednost Matlab. Ako je to tako, onda je logino napisati istina = [ Ja uim tekst ]; obratite panju na razmake pre i posle rei uim. Ako elimo da rei napiemo jednu ispod druge, komanda istina = [ Ja; uim; tekst ] nam nee pomoi. Naime, Matlab e interno prebaciti svaki slovni znak u broj i uvideti da smo naveli razliiti broj elemenata u svakom redu, odnosno kao da smo napisali istina = [ 74 97; 117 269 105 109; 77 97 116 108 97 98 ]. Ispis eljenog teksta tako da svaka re bude jedna ispod druge obezbediemo nizom matrica, istina = { Ja; uim; tekst}. Struktura predstavlja vrstu niza matrica, s tim to elementi ovog niza ne moraju biti istih dimenzija, pa ak ni istog tipa. Svaki sloj strukture imenujemo po elji. Strukturu S moemo definisati na sledei nain:
S.radnik = Miroslav Adamov; S.rodjen = 1974; S.koecijent = 6.6;

Prvi element strukture nosi naziv radnik i ima tekstualnu promenljivu, drugi element, sa imenom rodjen, ima celobrojnu vrednost, a trei element, pod imenom koeficijent, jeste racionalni broj. Da ne bi sve delovalo ovako jednostavno pobrinuo se sam Matlab tretirajui sve to moe kao matricu. Dakle, ispravno je napisati neto poput:
S(2).radnik = Gregor Markovi; S(2).rodjen = 1976; S(2).koecijent = 4.2;

Ali moe da se koristi i S(3) = struct(radnik, Nikola oljaga, rodjen, 1974, koeficijent, 6). U oba sluaja S je jednodimenzionalna matrica sa tri elementa. Ovi elementi su svi tipa strukture, koja ima tri elementa razliitog tipa (tekst promenljiva za ime, prirodni i racionalni broj). Ovako rasporeeni podaci nam omoguavaju da jednom komandom saznamo imena svih radnika na nekom projektu S.radnik ili njihove koeficijente mesenih primanja S.koeficijent.

Naredbe
Osnovne naredbe Matlab-ovog programskog jezika utiu na tok izvravanja programa. Tokom prorauna je vrlo esto potrebno nekoliko puta uraditi jednu istu stvar, ili (ne)treba uraditi neki deo prorauna pod odreenim uslovima, pa i prekinuti proraun i ispisati poruku o greci. U svim tim sluajevima dolaze do izraaja naredbe za promenu toka kretanja kroz program. Za primere emo koristiti fajl na ijem poetku postoji sledei niz naredbi dodeljivanja vrednosti:
S(1) = struct(radnik, Miroslav Adamov,... rodjen, 1974, koecijent, 6.6); S(2) = struct(radnik, Gregor Markovi,... rodjen, 1976, koecijent, 4.2); S(3) = struct(radnik, Nikola oljaga,... rodjen,1974, koecijent, 6);

20

PC

oktobar 2006

Ma te ma ti ka na PC-ju

If-else naredba zahteva kao argument logiki izraz ija e vrednost biti taan ili pogrean; ako je uslov zadovoljen, onda e naredba koja sledi odmah iza naredbe if biti izvrena, a u sluaju da je izraz netaan bie izvrena naredba koja sledi iza naredbe else. Najjednostavniji primer korienja ove naredbe jeste:

switch S(1).koecijent case 6.6 [ Radnik S(1).radnik je ef tima. ] case 6 [ Radnik S(1).radnik je zamenik efa. ] otherwise [ Radnik S(1).radnik je lan tima. ] end

if rem(S(1).rodjen,4)==0 [Radnik S(1).radnik je roen... prestupne godine.] else [Radnik S(1).radnik je roen... proste godine.] end

Komanda rem izraunava ostatak prilikom deljenja prvog argumenta drugim. U naem primeru e biti izraunat ostatak i ako je on jednak 0, znai da je godina deljiva sa 4, to znai da je prestupna (pod pretpostavkom da u firmi nema stogodinjaka roenih 1900. godine). Switch naredba se moe posmatrati kao kompleksnija if struktura, koju treba primeniti kada se ukae potreba za testiranjem veeg broja vrednosti i izbegavanjem viestrukih if-ova. Recimo, program napisan uz korienje if naredbi mogao bi da glasi:
if S(1).koecijent=6.6 [ Radnik S(1).radnik je ef tima. ] elseif S(1).koecijent=6 [ Radnik S(1).radnik je zamenik... efa tima. ] else [ Radnik S(1).radnik je lan tima. ] end

For naredba se koristi kada treba kreirati petlju koja e obezbediti da neki deo prorauna bude ponovljen odreen broj puta, s tim da se taj broj ponavljanja zna unapred. Recimo da smo gornji primer morali da izvrimo za svakog radnika u strukturi S. U naem primeru sa samo (?) tri radnika to moda i nije preterano obiman posao, ali je svakako zametan i nepotreban kod veeg projektnog tima. Zato emo koristiti konstrukciju iz listinga 3.

Listing 3: Primena switch / case strukture


for i = 1:3 switch S(i).koecijent case 6.6 [ Radnik S(i).radnik je ef tima. ] case 6 [ Radnik S(i).radnik je zamenik... efa tima. ] otherwise [ Radnik S(i).radnik je lan tima. ] end end

Program e biti neto pregledniji i jednostavniji za razumevanje ako napiemo konstrukciju nalik na:

Promenljiva i e protrati du vektora strukture S, za svaki element vektora ispitivati koeficijent mesenih primanja i u zavisnosti od njegove vrednosti ispisivati odgovarajue poruke. Iako je u ovom kratkom primeru koriena promenljiva i, trebalo bi to izbegavati (ba kao i korienje promenljive j). Naime, Matlab malim slovima i i j obeleava imaginarnu jedinicu (sqrt(-1)). While petlja omoguava da se neki deo prorauna ponavlja odreeni broj puta, s tim to broj ponavljanja nije unapred poznat, ve se
oktobar 2006 PC

21

PC SPECIJALNI DODATAK Listing 4: While struktura


i = 1; while S(i).koecijent ~= 4.2 switch S(i).koecijent case 6.6 [ Radnik S(i).radnik je ef tima. ] case 6 [ Radnik S(i).radnik je zamenik... efa tima. ] otherwise [ Radnik S(i).radnik je lan tima. ] end i = i + 1; end

operacije vre dok ne nastupi neki uslov. Zato while zahteva argument ija se logika vrednost ispituje, kao na listingu 4. Petlja traje sve dok je koeficijent mesenih primanja razliit od 4,2 (S(i).koeficijent ~= 4.2). U trenutku kada ovaj koeficijent bude jednak upisanoj vrednosti logiki uslov e biti pogrean i petlja e se zavriti. Break naredbom se izlazi iz bilo koje petlje, bez obzira da li je uslov za izlazak ispunjen, odnosno bez obzira da li je sama petlja izvrena potreban broj puta (listing 5).

mand Window-u; ima ih ukupno 17 (komanda size(iskeyword)). Da ne bismo pamtili sve rezervisane rei, Matlab e nas, ako sluajno ili namerno ukucamo neku od ovih rei, upozoriti tako to e re obojiti drugaije od ostalog teksta. Jedinstveni matini broj, u formularima esto dat kao JMBG, je sainjen od trinaest cifara. Prvih sedam cifara predstavljaju datum roenja konkretne osobe. Narednih pet cifara definiu (bivu) republiku u kojoj je osoba roena, zatim pol i jo neke podatke. Poslednja cifra je kontrolna i njena vrednost se proraunava na osnovu vrednosti prethodnih dvanaest cifara. Naime, prva i sedma cifra broja koji se testira se mnoe sa sedam, druga i osma sa est, trea i deveta sa pet i tako redom, dok se esta i dvanaesta ne pomnoe sa dva. Dobijeni proizvodi se saberu i tom zbiru
Listing 5: Break izlazak iz petlje
for i = 1:3 switch S(i).koecijent case 6.6 [ Radnik S(i).radnik je ef tima. ] break; case 6 [ Radnik S(i).radnik je zamenik... efa tima. ] otherwise [ Radnik S(i).radnik je lan tima. ] end end

Primer: Matini broj


Nove stvari se najlake ue uz konkretan rad pa emo analizirati primer koji bi mogao da simulira realnu situaciju. Napiimo funkciju koja analizira uneti matini broj graana i obavetava korisnika da li je taj broj ispravan. Pre nego to krenemo sa pisanjem programa moramo se upoznati sa takozvanim rezervisanim, odnosno kljunim reima programskog jezika Matlab-a. Naime, Matlab nam dozvoljava da u nazivima svojih promenljivih koristimo bilo koje kombinacije engleskog alfabeta, pa ak i imena promenljivih mogu (kao to smo videli) biti identina imenima funkcija. No, nae promenljive nikako ne smeju da imaju nazive identine programskim naredbama (if, while, switch...). Spisak ovih rezervisanih rei dobijamo upotrebom komande iskeyword u Com-

se doda trinaesta cifra tako da krajnja suma bude deljiva sa 11. Na listingu 6 je prikazan program koji treba upisati u fajl jmbg.m. U prvom redu naeg programa naglaavamo da je u pitanju funkcija kojoj dajemo isto ime koje smo dali i samom fajlu jmbg. Prilikom njenog pozivanja potrebno je upisati matini broj ija se ispravnost ispituje. Funkcija e taj broj smestiti u svoju internu promenljivu broj, to je takoe definisano u prvom redu programa. Ova promenljiva jeste matrica dimenzija 11. Da bismo mnoili svaku cifru posebnim brojem, potrebno je da ih nekako razdvojimo;

22

PC

oktobar 2006

Ma te ma ti ka na PC-ju Listing 6: Analiza matinog broja


function poruka = jmbg(broj) for i = 1:13 MBR(1,i) = mod(broj,10); broj = x(broj / 10); end for i = 0:5 MBR(1,13-i) = MBR(1,13-i) .* (7-i); MBR(1,13-6-i) = MBR(1,13-6-i) .* (7-i); end if mod(sum(MBR),11) == 0 poruka = JMBG je ispravan; else poruka = JMBG je neispravan; end

konanu sumu. Zbog toga se matrica MBR mora transponovati, da bi se tek nakon toga pozvala komanda sum.

Primer: Pregled dugovanja


U sledeem primeru emo raditi sa podacima koje treba uitati iz nekog fajla. Neka su u tom fajlu upisani sledei podaci:
redni_broj nadimak_osobe iznos_duga iznos_uplate

Svaki red u ovom fajlu, u kome su podaci meusobno odvojeni razmakom, predstavlja podatke o jednoj osobi. Konkretan primer ovakvog fajla, kojem emo dati ime SviPodaci.txt, bi bio:
1 2 3 4 5 Peki 1000 680 ole 230 0 Kuzma 110 100 Mia 1200 1050 Zoki 14 13.8

zato formiramo petlju sa 13 ciklusa (za svaku cifru jedan ciklus), koju koristimo da smestimo cifre u elemente matrice MBR. Tu nam pomae Matlab-ova komanda mod, koja izraunava ostatak prilikom deljenja dva broja. Redosled elemenata matrice MBR je obrnut od redosleda cifara matinog broja datog kao argument nae funkcije, ali to ne utie na proraun. Naredna petlja ima est ciklusa i u njoj se elementi matrice mnoe odgovarajuim brojevima. Poslednji element mnoimo sa sedam, pretposlednji sa est i tako dalje. Ovo kretanje po elementima matrice je, ba kao i smanjivanje broja kojim mnoimo konkretan element matrice, realizovano promenljivom i. ak i iskusni programeri koriste jednoslovne promenljive i, j i sline za odbrojavanje ciklusa neke petlje, ali u Matlab-u generalno to treba izbegavati (ve smo rekli da promenljive i i j obeleavaju imaginarnu jedinicu). Na kraju, opet korienjem komande mod, ispitamo da li je ostatak prilikom deljenja konane sume brojem 11 jednak nuli. Ako jeste matino broj je ispravan. Komanda sum izraunava zbir svake kolone zadate matrice. Setimo se da naa matrica MBR sadri elemente jednake ciframa matinog broja pomnoene odgovarajuim brojevima od 2 do 7, i ima dimenzije 113 (takozvani vektor-red), pa upotrebom komande sum(MBR) ne bismo dobili potrebnu,

Napraviemo funkciju koja, u zavisnosti od vrednosti parametra koji joj se prosleuje, izraunava ukupan dug ili pronalazi dunika sa najveim dugom. Listing 7 prikazuje program koji treba upisati u fajl nazvan izracunaj.m. U prvom redu programa kaemo Matlab-u da se radi o funkciji, a ne samo o nanizanim komandama kao u prethodnom primeru m-fajla. Odmah posle znaka jednakosti je neophodno upisati naziv funkcije, koji mora biti isti kao i naziv samog m-fajla. Sledi par zagrada; u naem sluaju e funkcija imati samo jedan argument, pa ga u zagradi i navodimo. Kada piemo funkciju koja zahteva vie ulaznih podataka, u ovoj zagradi treba upisati sve te argumente odvojene zagradama. Treim redom naeg programa se kreiraju etiri vektora, a na osnovu sadraja fajla koji se naziva SviPodaci.txt. Prvi podatak je celodnevni broj (%u) i predstavlja redni broj zapisa, odnosno redni broj reda u kojem se nalaze ostali podaci. Drugi podatak je nadimak (%s) osobe i bie smeten u vektor pod nazivom ime. Trei i etvrti podatak (%f) su iznosi duga i otoktobar 2006 PC

23

PC SPECIJALNI DODATAK Listing 7: Analiza podataka u zavisnosti od parametra


function poruka = izracunaj(vrsta) [rb,ime,duguje,potrazuje] = textread(SviPodaci.txt, %u %s %f %f); a = size(rb); switch vrsta case 1 ukupno = 0; for u = 1:a(1,1) ukupno = ukupno + duguje(u) potrazuje(u); end poruka = { char(Ukupno), a(1,1),... char(osoba duguje:),ukupno,char ( dinara) }; case 2 najvise = 0; for u = 1:a(1,1) dug = duguje(u) potrazuje(u); if najvise < dug najvise = dug; najRB = u; end end poruka = { char(Najvie duguje)... char(ime(najRB)) char(pod rednim brojem) najRB}; otherwise poruka = { char(Neispravan parametar!)}; end

plate tog duga za svaku osobu. U petom redu saznajemo dimenzije vektora rb. Sada e promenljiva a biti vektor-red u kojem e prvi element imati vrednost ukupnog broja zapisa u fajlu SviPodaci, a drugi element e imati vrednost 1, jer je u pitanju vektor. Od sedmog reda poinje switch petlja. Podatak koji se ispituje jeste argument koji se prosleuje prilikom pozivanja funkcije. Ako vrsta ima vrednost 1, onda emo izraunati ukupan dug (prvi deo switch petlje), a ako je vrsta=2, izraunaemo ko je najvei dunik (drugi deo switch petlje). Za svaku drugu vrednost promenljive vrsta program e ispisati upozoravajuu poruku korisniku (poslednji deo switch petlje). U prvom delu switch petlje (case 1) postavljamo sumarnu vrednost duga na 0 (ukupno=0), pa zatim uz pomo for petlje i vre-

dnosti prvog elementa vektor-reda a prolazimo redom od poetka do kraja fajla. U jedanaestom redu naeg programa dug svakog dunika (duguje(u)) dodajemo na ukupnu do sada izraunatu sumu, a od te sume oduzimamo iznos koji je dunik uplatio (potrazuje(u)). Iz for petlje izlazimo kada promenljiva u dostigne vrednost a(1,1), odnosno kada obradimo i poslednjeg dunika. U trinaestom redu generiemo vrednost promenljive poruka. Naziv ove promenljive i re koja se nalazi levo od znaka jednakosti u prvom redu naeg programa moraju biti identini. Prvim redom je naglaeno da piemo funkciju koja ima ulazni parametar vrsta, a izlazni parametar poruka. Sada je potrebno da dodelimo vrednost tom izlaznom parametru. Dakle, a(1,1) krije podatak koliko ima dunika, pa emo taj podatak napisati. Takoe, promenljiva ukupno sadri sumarnu vrednost duga. Na poetku drugog dela switch petlje (case 2) moramo da postavimo vrednost najveeg dosadanjeg duga na nulu (najvise=0). U for petlji emo izraunati ukupan dug trenutnog dunika (duguje(u)-potrazuje(u)), a onda ispitati da li je taj dug vei od dosadanjeg najveeg duga. Ako jeste, onda taj dug postaje najvei do sada, a osoba pod tim rednim brojem (taj podatak se krije u promenljivoj u) postaje najzanimljivija (najRB). I u ovoj for petlji se zadravamo dok ne stignemo do kraja, pa odmah posle toga definiemo vrednost izlaznog parametra tj. promenljive poruka. Ako pozivanjem nae funkcije izracunaj bude prosleen neki argument koji nema vrednost 1 ili 2, korisnik e moi da proita odgovarajua poruku definisanu u treem delu switch petlje, odnosno u 25. redu. Za primer fajla SviPodaci koji smo naveli na poetku, a u zavisnosti od ulaznog parametra dobiemo:
izracunaj(1) ans = Ukupno [5] osoba duguje: [260.2] din izracunaj(2) ans = Najvie duguje Peki pod brojem [1]

24

PC

oktobar 2006

Ma te ma ti ka na PC-ju

izracunaj(3) ans = Niste uneli odgovarajui parametar!

Ako pravimo funkciju namenjenu drugim korisnicima, pa ak i ako emo je upotrebljavati samo mi, svakako bi bilo korisno da napravimo uputstvo za njeno korienje. Tekst tog uputstva sa kratkim objanjenjem namene funkcije upisujemo kao prvi blok (nekoliko redova) komentara naeg programa; svaki red programa koji poinje znakom % (procenat) smatra se komentarom. Pozivanjem komande help ime_funkcije na ekranu e biti ispisan sadraj prvog komentara na koji Matlab naie u samom m-fajlu, bez

obzira gde se sam komentar nalazi (na poetku m-fajla, na sredini...). Sadraj tog komentara u obliku uputstva moe biti izuzetno bitan i u sluajevima kada koristimo sopstvenu funkciju koju smo ranije napisali, pa se ne moemo setiti njenih karakteristika. Prilikom pisanja ovih redova treba posebno obratiti panju na prvi red, jer se on jedini ispisuje kada se upotrebi komanda koja ukratko objanjava sve funkcije u nekom direktorijumu. Na primer, ako smo sve nae programe smestili u direktorijum pod nazivom primeri, komandom help primeri emo dobiti spisak svih naih programa i sadraje prvog reda prvog komentara svakog od tih programa.

Vodi kroz GUI


ao to je svaki rezultat mnogo laki za sagledavanje i analizu, tako je i rad sa gotovim programima i funkcijama daleko laki ako su oni grafiki ureeni i laki za upotrebu. Kada piemo kompletan program i elimo da ga prosledimo drugim, krajnjim korisnicima, poeljno je postoji okruenje koje bi krajnjem korisniku pojednostavilo upotrebu samog programa, a u isto vreme rezultat prikazalo itko i pregledno. U dananje vreme je teko i zamisliti nekadanje programe koji nisu imali grafiki korisniki interfejs (GUI Graphical User Interface). Standardi programiranja u grafikim operativnim sistemima nalau postojanje GUI-a, a dopadljiv i funkcionalan grafiki interfejs ne samo da odluuje da li je ceo program upotrebljiv ili ne, nego nekom programu moe doneti prednost nad konkurencijom. GUIDE (Graphical User Interface Development Environment) je poseban alat u Matlab-u, koji omoguava jednostavno pravljenje grafikog korisnikog interfejsa. Ovaj alat se startuje pozivanjem komande guide ili preko odgovarajue ikone u Toolbar-u. Negova uloga je dvojaka omoguava lako i brzo postavljanje grafikih elemenata (padajuih menija, polja za upis teksta, tastera, ikona...) na radnu

povrinu programa, ali i programiranje svakog ovog elementa da adekvatno reaguje kada krajnji korisnik programa izvri neku akciju, izabere neku opciju ili upie neki podatak. Tokom rada se u GUIDE-u automatski generie fig-fajl, koji sadri podatke o izboru i rasporedu elemenata na radnoj povrini (tzv. formularu), ali i m-fajl u kome je programski deo korisnikog interfejsa, podprogrami koji se pokreu u zavisnosti od akcije krajnjeg korisnika. U istom tom m-fajlu programer upisuje svoje funkcije koje se izvravaju pod odreenim okolnostima i sa konkretnim parametrima koje unese krajnji korisnik. U prozoru koji dobijamo odmah po startovanju GUIDE-a biramo izmeu pravljenja novog GUI-a ili otvaranja postojeeg. U dnu ovog prozora moemo odabrati direktorijum u kojem e biti smeteni fig- i m-fajl. Ukoliko se odluimo za kreiranje novog korisnikog interfejsa, GUIDE nam nudi prazan radni prostor ili prostor u kojem su, na osnovu ugraenih ablona, ve rasporeeni odreeni elementi. No, bez obzira koji od ponuenih ablona da izaberemo, GUIDE e nam prikazati radni prostor u kome moemo postavljati nove elemente ili premetati postojee. U vrhu ovog prozora su
oktobar 2006 PC

25

PC SPECIJALNI DODATAK

padajui meni i toolbar, dok je sa leve strane skupina elemenata koje moemo postaviti na radnu povrinu. Na radnoj povrini, odnosno u korisnikom interfejsu programa se mogu nai sledei elementi: push button standardni taster sa (skraenim) natpisom radnje; ovaj taster se najee pojavljuje u formularima bilo kog programa ili Web sajta; najei natpisi na njemu su OK, Cancel, Next,...) i inicira neku akciju u samom programu; slider element za pomeranje (vertikalno ili horizontalno) prikaza ukoliko isti ne moe ceo da stane na ekran; radio button taster koji moe biti ili ukljuen ili iskljuen a ima svrhu samo u grupi slinih tastera; za njega je karakteristino to to u jednoj grupi moe biti ukljuen samo jedan taster, kao kada od korisnika traimo da izmeu ponuenih opcija (plava, crvena, uta) Color-red Color-green Color-blue FontAngle FontName FontSize FontWeight ForegroundColor-red ForegroundColor-green ForegroundColor-blue HorizontalAlignment Position 0.8 0.8

izabere boju kojom e biti iscrtan grafik; ovakav taster je koristan kada postoje do etiri opcije u jednoj grupi; pop-up menu ima istu ulogu kao prethodni element, ali oblikom podsea na padajui meni, pa ne gubi funkcionalnost ni pri velikom broju opcija, tako da se upotrebljava u sluajevima kada postoji vie opcija radi bolje preglednosti; check box element moe biti ukljuen ili iskljuen kao i radio button, s tim to u jednoj grupi moe biti ukljueno vie ovih elemenata; ako bi pomou ovog elementa traili od krajnjeg korisnika da izabere boju grafika, mogli bismo mu dozvoliti da istovremenim izborom plave i crvene dobije grafik u ljubiastoj boji; listbox kombinacija pop-up menija i checkbox-a: ima oblik menija, ali se u njemu istovremeno moe izabrati vie opcija; primena ovog elementa je gotovo neizbena ako eli-

0.8 Element ne moe biti providan (transparent), pa treba postaviti iste vrednosti kao i za boju radne povrine normal moe biti i italic MS Sans Serif standardna familija slova za Windows formulare 8 veliina slova normal mogu biti i bold slova 0 0 0 odsustvo svih boja ini da slova budu crna right izbor poravnanja teksta u okviru samog elementa [9,8 12,3 20,2 1,5] vektor-red sadri vrednosti koje bismo uneli u parametre x, y, width i height, respektivno txtUnesiteMBR on

String: Unesite matini broj: tekst koji e inicijalno biti ispisan u samom elementu Tag: Visible

Tabela 4: Parametri Static text elementa

26

PC

oktobar 2006

Ma te ma ti ka na PC-ju

Color-red Color-green Color-blue

0.8 0.8 0.8 podeavanje boje pozadine radnog prostora; moemo izabrati bilo koji realan broj od 0 (odsustvo konkretne boje) do 1 (potpuno prisustvo neke boje) off povezivanja formulara naeg programa za radne prozore Matlab-a; ako nam je cilj da napravimo nezavisnu aplikaciju, ova opcija je nepotrebna Ispravnost JMBG-a (naziv programa koji e se videti u Taskbar-u) A4 (automatski e se promeniti vrednosti u polju PaperSize) centimeters arrow izgled kursorske strelice; ovo je standardna vrednost, ali je u nekim elementima poeljna njena izmena 100 30 (vrednosti definiu poziciju formulara) 80 17.5 ove dve vrednosti treba prilagoditi organizaciji elemenata na radnoj povrini off onemoguava krajnjem korisniku da menja dimenzije formulara i tako narui vrednosti postavljene u parametrima Position-width i Position-height axes prikazuje grafiku; to je specijalitet Matlab-a, jer se ne nalazi na formularima klasinih programa; panel ram koji se koristi da vizuelno odvoji elemente sline namene ili da naglasi neki deo formulara samim svojim postojanjem na radnoj povrini ili (u ekstremnim sluajevima) posebnom bojom svoje pozadine; button group ram za grupisanje radio button-a i checkbox-ova; ActiveX Control postavljanje eksternih modula na formular; ovaj element proiruje mogunosti formulara do nesluenih razmera omoguujui postavljanje audio i video zapisa, Web browser-a, Flash animacija, pa ak i praenje bitnih parametara sistema. Kod gotovo svih ovih elemenata je dozvoljena izmena dimenzija, oblika i veliine slova, boje pozadine, pozicije na radnoj povrini itd.
oktobar 2006 PC

DockControls

Name PaperType PaperUnits Pointer Position-x Position-y Position-width Position-height Resize

Tabela 3: Parametri formulara

mo da omoguimo krajnjem korisniku da na jednom mestu ima istovremeni grafiki prikaz vie funkcija, pa mu ostavimo da sam izabere koje funkcije bi eleo da vidi na grafiku; edit text omoguava korisniku da unese eljeni tekst, recimo matini broj koji bi eleo da proveri; podeavanjem odreenih parametara moe imati jedan ili vie redova; static text tekst koji krajnji korisnik ne moe da menja; najee se koristi za oznaavanje naziva susednog elementa (grupe elemenata radio button-a, edit text-a...); toggle button slian elementu push button, s tim da ne izaziva akciju u programu, ve pokazuje da li je neka opcija ukljuena ili ne; retko se koristi u formularima, jer ima slinu ulogu kao element checkbox;

27

PC SPECIJALNI DODATAK

bili standardne (default) vrednosti, ali ih ovde sve moeColor-green 1 mo runo promeniti. 1 bela je standardna boja pozadine za Color-blue Prilikom kreiranja ovu vrstu elementa GUI-a preporuljivo je da elementi dobiju imena preEnable on ma svojoj nameni (na priFontAngle normal mer chboxPlavaBoja, txtFontName MS Sans Serif JMBG...), a to moramo uraditi runo. Matlab-ov GUFontSize 8 IDE, kao i veina vizuelnih FontWeight normal alata, novim elementima ForegroundColor-red 0 na formularu uglavnom daje generika imena praena ForegroundColor-green 0 rednim brojem (tipa checkForegroundColor-blue 0 crna boja slova je takoe standarbox1, popupmenu1...), to je dna kod ovog tipa elemenata sa programerske take gledita nepraktino. HorizontalAlignment left Posle postavljanja elePosition [39,8 12,3 30,2 1,5] menta i definisanja njegoString <prazno polje> vih manje ili vie bitnih osobina, potrebno je napisati Tag edtxtUnosJMBG funkciju koja e se izvriti tekst koji se ispisuje crnim slovima u uTooltipString: JMBG kada krajnji korisnik uradi tom baloniu ukoliko se kursor zadri koji treba da se ispita neku akciju (pritisne taster, iznad ovog elementa; oblik slova, njihoizabere opciju padajueg va veliina i boja, kao i boja balonia se menija...). Dok smo pravili ne mogu menjati u Matlab-u na GUI, Matlab je ve kreTabela 5: Parametri teksta irao odgovarajui m-fajl smetajui u njega vrednosSvi ovi parametri se mogu podeavati u prozo- ti elemenata koje smo definisali u Property Inru Property Inspector. Postoji vie naina za spector-u. Kada kliknemo desnim tasterom na otvaranje ovog prozora, ali ete ga najjednos- konkretan element i izaberemo opciju View tavnije pozvati duplim klikom levog tastera mi- Callbacks, videemo za koje sve akcije se mogu a na konkretan element ili klikom na odgova- napisati funkcije. U tom sluaju nam se otvara rajuu ikonu na toolbar-u. jedini m-fajl sa kojim GUIDE radi prilikom Najlake ete neki od pomenutih eleme- naeg kreiranja GUI-a. Ovaj fajl sadri, pored nata sa leve strane guide-a postaviti njegovim svih funkcija koje piemo, inicijalne prograprevlaenjem na radnu povrinu. Ako u tom me koji se izvravaju im se pokrene program, trenutku dva puta kliknete na element otvorie odnosno startuje GUI. Spisak funkcija koje trese Property Inspector, u kome jasno moete vi- nutno postoje u m-fajlu se moe dobiti klikom deti kako pomeranje elementa po radnoj povri- na ikonu Show function na Toolbar-u, a naknani ili promena njegovih dimenzija utiu na ne- dnim klikom na konkretnu funkciju sa spiska ke od parametara. Svi ovi parametri su samim prikazanih editor e nas odmah prebaciti na postavljanjem elementa na radnu povrinu do- poetak te funkcije. Color-red 1

28

PC

oktobar 2006

Ma te ma ti ka na PC-ju Listing 8: Izmena parametara koji pripadaju drugom elementu


MBR = uint8(get(handles.edtxtUnosJMBG,String)); MBR = MBR .- 48; for i = 1 : 6 MBR(1,i) = MBR(1,i) .* (8-i); MBR(1,6+i) = MBR(1,6+i) .* (8-i); end if mod(sum(MBR),11) == 0 poruka = JMBG je ispravan; else poruka = JMBG je neispravan; end set(handles.txtIzvestaj,String,poruka);

Ulepajmo programe

Prilikom izrade interaktivnog grafikog interfejsa postoje tri faze rada. U prvoj fazi se analizira da li je potreban GUI za program, kao i kojim korisnicima je namenjen proColor-red gram za koji se pravi GUI. Koliko god na program bio kvalitetan i Color-green optimizovan da brzo daje tane Color-blue rezultate, krajnji korisnik nee imati mnogo vajde od samog programa ako mu je GUI nerazumEnable ljiv. Po zavretku prve faza izrade znamo koje elemente treba da FontAngle ima na GUI, pa se u drugoj fazi FontName ti elementi rasporeuju tako da FontSize krajnjem korisniku olakaju upotrebu programa. Takoe treba FontWeight imati na umu da na GUI ne treForegroundColor-red ba da naruava navike krajnjeg ForegroundColor-green korisnika, na primer standardne skraenice sa tastature (Ctrl+C, ForegroundColor-blue Esc,...) ili poloaj tastera. HorizontalAlignment Recimo da elimo da napraPosition vimo grafiki korisniki interString fejs za na program prorauna ispravnosti matinog broja Tag graana. Ovaj program smo TooltipString: ve napisali i jasna nam je njeKliknite za proveru gova funkcionalnost. Program nije komplikovan niti robustan, Tabela 6: Parametri tastera

ali je i u ovom obliku sasvim upotrebljiv. Sa druge strane, prosto je idealan za pravljenje jednostavnog ali funkcionalnog GUI-a. Koji elementi su nam zasigurno potrebni na radnoj povrini? Svakako e nam biti neophodan prostor (edit text) u kojem e krajnji korisnik programa i prateeg GUI-a upisati matini broj koji eli da ispita. Takoe e nam trebati taster (push button), jer se klikom na njega inicira proraun. Naravno, treba rezervisati i prostor za ispisivanje rezultata prorauna. S obzirom da svaki formular napravljen u GUIDE-u u svojoj osnovi ima taster za zatvaranje (prepoznatljivi u gornjem desnom oku), nije neophodan taster (push button) za zatvaranje formulara, pa su nam pomenuta tri elementa dovoljna za beta-verziju naeg programa. Poto sada znamo koje elemente emo postaviti u na formular, pokrenimo GUIDE 0.8 0.8 0.8 ako nije neophodno da taster bude upadljiv, dodeljuje mu se ista boja kao i radnoj povrini on normal MS Sans Serif 8 normal 0 0 0 center [9,8 7,65 60,2 2,4] PROVERI pshProveraJMBG

oktobar 2006

PC

29

PC SPECIJALNI DODATAK

Color-red 0.8 i izaberimo opciju Blank GUI. Opciju Color-green 0.8 Save on startup as: treCo lor-blue 0.8 ba ukljuiti, pa u praFontAngle normal teem edit text polju ukucajmo ili uz poFontName MS Sans Serif mo push button-a sa 10 ovo je rezultat, pa slova mogu da budu Fon tSi ze natpisom Browse odrevea od ostalih dimo lokaciju i naziv FontWeight normal naeg programa. Po otvaranju ForegroundColor-red 1 glavnog prozora kliForegroundColor-green 0 knimo dva puta leForegroundColor-blue 0 ne samo vea, nego i crvene boje vim tasterom mia na radnu povrinu. OtvoHorizontalAlignment center rie se prozor Proper[9,8 7,7 60,2 2,4] vektor-red sadri vrednosPosition ty Inspector u kojem ti koje bismo uneli u parametre x, y, width i moemo podeavati height, respektivno parametre (veliinu, String <prazno polje> boju) samog formulara. Podesimo parameTag txtIzvestaj tre kao u tabeli 3. on element ima boju kao i pozadina i iniciVisible Sada sa leve strajalno u sebi njemu nema teksta, pa parane GUIDE-a naimo metar ne mora da ima vrednost off; korielement Static text i snik pre klika na taster PROVERI nee prevucimo ga miem ni znati da ovaj element postoji na radnu povrinu. Poto je sada aktivan Tabela 7: Parametri stringa koji prima rezultat taj element, sadraj Property Inspector prozora se menja. Iskoristi- je ispravnost unetog matinog broja. Naimo mo ga da unesemo podatke iz tabele 4. element Push Button sa leve strane, postavimo Kao i prilikom rada sa parametrima ra- ga ispod ova dva elementa i upiimo paramedne povrine, prozor Property Inspector nudi tre iz tabele 6. mnogo vie parametara koji se mogu menjaSa ovim parametrima ve postajemo famiti, ali nam oni sada nisu vani. Sledee to tre- lijarni. Na kraju moramo da postavimo element ba da uradimo jeste da sa leve strane GUIDE-a koji e sadrati tekst o ispravnosti unetog manaemo element Edit text i postavimo ga na ra- tinog broja. Za tu ulogu je najbolje da iskoristidnu povrinu sa desne strane ve postavljenog mo jo jedan Static text element, koji inicijalno elementa. Njegovi parametri u Property Inspec- nee imati nikakav tekst. Ovaj element e posle tor-u su dati u tabeli 5. izvrenja naeg programa dobiti tekst u skladu Sada naa radna povrina ima dva bitna sa matinim brojem koji se ispituje. Poetni paelementa. Prvi slui za prijem podataka od kraj- rametri ovog elementa su dati u tabeli 7. njeg korisnika, a drugi obavetava korisniku ta Svi elementi su tu, postavljeni na svoja se od njega oekuje. Potrebno je jo da dodamo mesta. Mada je GUI jasan i nedvosmislen, krajtaster za pokretanje naeg programa koji ispitu- nji korisnik je dobio i letee uputstvo kako

30

PC

oktobar 2006

Ma te ma ti ka na PC-ju

da koristi program time to smo popunili polja Tooltip u nekim naim elementima. Sada moemo da zakljuimo da je druga faza izrade GUI-a zavrena. Ostaje da se u treoj fazi isprogramira interakcija sa krajnjim korisnikom. U zavisnosti od sloenosti programa i prateeg GUI-a, mogue je preplitanje druge i tree faze (u ovom primeru to nije sluaj), jer pozicija nekih elemenata, njihova boja, pojavljivanje ili sakrivanje u formularu mogu zavisiti od toga kako krajnji korisnik koristi formular i koje ulazne podatke unosi. Poto nam vie nee biti potreban prozor Property Inspector, moemo da ga zatvorimo. Na program treba da se pokrene kada krajnji korisnik klikne na pshProveraJMBG (sa natpisom PROVERI), treba da napiemo kod koji e se izvriti u tom sluaju. Za razliku od funkcije koju smo pisali u jednom od prethodnih poglavlja, a koja je matini broj dobijala kao svoj argument, ovde matini broj treba da proitamo iz parametra konkretnog elementa. Problem predstavlja i to to se programski kod pie kada se aktivira jedan element, a parametar koji se iitava pripada drugom elementu. Da problemima tu nije kraj shvatamo kada sagledamo injenicu da se na kraju rezultat ispisuje kao parametar treeg elementa. Sva tri elementa su meusobno nezavisna onoliko koliko dozvoljava formular u kome se nalaze, to znai da vrednosti njihovih parametara nisu meusobno zavisne. Na nama je da programerski stvorimo tu zavisnost i dovedemo program u funkcionalno stanje. Kliknimo desnim tasterom na element pshProveraJMBG i izaberimo opciju View Callbacks/Callback. U okviru editora koji dolazi uz Matlab otvorie nam se m-fajl naeg formulara, a kursor e se automatski pozicionirati na funkciju koja e se aktivirati kada se klikne na taster PROVERI. Do ove pozicije smo mogli doi i na drugi nain klikom na ikonu M-file Editor u Toolbar-u GUIDE-a, pa izborom funkcije pshProveraJMBG_Callback preko ikone Show functions u Toolbar-u editora. Kompletan kod,

sa prateim komentarima, koji vidimo u ovom editoru je automatski generisan od strane GUIDE-a i u principu ga ne treba dirati. Sve od reda u kojem pie function pshProveraJMBG_Callback(hObject, eventdata, handles), pa do pojave narednog reda koji poinje reju function, ili pak do samog kraja m-fajla, jeste kod koji pripada funkciji koja se izvrava kada se klikne na taster PROVERI. Kao to moemo videti, ova funkcija ima tri argumenta, a nama je najbitniji trei handles (prvi slui da oznai element radne povrine koji je trenutno aktivan, a drugi je neiskorien, ali rezervisan za naredne verzije Matlab-a). Argument handles je po tipu struktura, a elementi te strukture su u stvari elementi koje smo postavili na radnu povrinu, na na formular. Ovu struktura je jako bitna kada iz funkcije koja pripada jednom elementu treba da pristupimo i izmenimo parametre i podatke koji pripadaju drugom elementu. Program sa listinga 8 treba upisati kao kod koji pripada funkciji pshProveraJMBG_Callback U poreenju sa programom koji smo pisali u jednom od prethodnih poglavlja, najvea promena je nastala u prvom i u poslednjem redu. Ove promene su direktna posledica pravljenja GUI-a za na program ulazni podatak (matini broj) se ne dobija kao argument pozvane funkcije, a i rezultat se ispisuje na drugaiji nain. Kao to smo ve rekli, struktura handles ima element edtxtUnosJMBG, koji ima svoj parametar String. Ve smo nauili kako pozivamo konkretan element neke strukture, a Matlab-ova komanda get nam nalae da uz pomo jednostrukih apostrofa pozovemo konkretan parametar tog elementa. Taj parametar je char tipa tj. Matlab taj podatak vidi kao tekstualnu promenljivu bez obzira to se u njemu nalazi trinaestocifreni broj. Stoga je potrebno komandom uint8 konvertovati ceo broj u matricu dimenzija 113, iji elementi imaju ASCII vrednosti cifara koje ine uneti matini broj (opisi ASCII kodova uveliko prevazilaze temu ovog umetka, pa se neemo zadravati na njima; bioktobar 2006 PC

31

PC SPECIJALNI DODATAK

tno je naglasiti da cifra 0 ima ASCII kod 48, cifra 1 ima ASCII kod 49 i tako redom do cifre 9 koja ima ASCII kod 57). Poto elementi matrice MBR jo uvek ne sadre cifre matinog broja, oduzeemo od svakog od tih elemenata 48 kao poetni kod serije cifara u ASCII sistemu. Nakon ove operacije dobijamo matricu MBR dimenzija 113 iji elementi redom imaju vrednosti cifara unetog matinog broja. Prisetimo se da su elementi matrice MBR u prethodnom primeru imali obrnut redosled od onog

u samom matinom broju. Ovde to nije sluaj, pa moramo petlju da prilagodimo novonastaloj situaciji. No, algoritam prorauna je u svakom sluaju isti na kraju e se u promenljivoj poruka nai odgovarajui tekst. Sada je potrebno taj tekst ispisati u nevidljivom elementu txtIzvestaj. Opet koristimo strukturu handles, da bismo prili potrebnom elementu odnosno, preciznije reeno, njegovom parametru String. Komanda set dodeljuje tom parametru zadatu vrednost.

Na kraju...
atlab i pratei toolbox-ovi predstavljaju jedinstven softverski alat za projektovanje, izvetavanje i analizu podataka. Teko je rei gde prestaju moi istog Matlab-a, a poinju da rade toolbox-ovi. Razvojem Matlab-a tokom godina, neretko su toolbox-ovi postajali sastavni deo naredne verzije Matlab-a, dokazujui tako svoju vrednost i neophodnost u jednom monom softverskom alatu. Iako smo na kraju ovog teksta, daleko smo od kraja prie o mogunostima Matlab-u. Korisniku/programeru koji ima nameru da se ozbiljnije slui ovim monim alatom najlake e biti da ga savlada radei u njemu i eksperimentiui. Matlab-ov programski jezik spada u red najviih programskih jezika te stoga titi i sistem i korisnika od moguih greaka prilikom programiranja, a u isto vreme olakava ceo posao automatizujui pojedine delove rada. Programeri koji nameravaju da svoje programe distribuiraju krajnjim korisnicima koji nemaju instaliran Matlab, korisnu alatku e nai u nezavisnom programu Matlab Compiler. Verzija 7 Matlab-a je donela novosti po pitanju integracije celokupnog paketa sa postojeim aplikacijama na raunaru ili u celoj mrei. Modul Excel Link obezbeuje da se Matlab-ove mogunosti koriste u Excel-u do nivoa Excel-ovih makroa, a takoe je mogue izvri-

ti sinhronizaciju podataka jednog i drugog programa. Dalje, uz pomo Matlab-ovog modula Report Generator omoguena je izrada kompletnih formulara i izvetaja u formi RTF-a, XML-a i(li) HTML-a, a na osnovu podataka smetenih u bazu podataka (podrani su svi poznatiji serveri). Takoe Matlab nudi mogunost postavljanja Web servera, koji bi omoguavao korisnicima da preko intraneta ili Interneta prosleuju podatke Matlab-u, a rezultate i izvetaje vide kroz browser. Modul Simulink je pria za sebe jo jedno ovakvo uputstvo bi bilo nedovoljno da se u potpunosti objasne sve mogunosti ovog monog alata za modelovanje, simulaciju i analizu dinamikih sistema, kako linearnih tako i nelinearnih. Korienje Simulink-a mnogim inenjerima i istraivaima zamenjuje kompletne laboratorije, a novac uteen izbegavanjem nabavke nepotrebnih mernih instrumenata, generatora i procesora ne treba ni pominjati. Savremeni trendovi poslovanja su ubrzali tempo objavljivanja novih (pod)verzija Matlab-a. Verzija 7.2 (zvanino oznaena kao R2006a) se pojavila tokom prolea ove godine, a svakog asa se oekuje izlazak verzije R2006b sa dodatnim toolbox-ovima i modelima atmosfere, gravitacije i magnetnih polja. Veliki potencijali koje treba pretoiti u konkretne rezultate!

32

PC

oktobar 2006

You might also like