You are on page 1of 45

MATLAB uputstvo za upotrebu

MATLAB
Uputstvo za upotrebu

Novi Sad, 2006.


1

MATLAB uputstvo za upotrebu

Sadraj
Uvod........................................................................................................3 Osnovni principi rada u MATLAB-u .......................................................4
Uvodne napomene ......................................................................................................4 Formati za prikazivanje numerikih podataka............................................................6 Matematike funkcije MATLAB-a ............................................................................8

Korienje HELP-a ................................................................................ 11


Komanda help...........................................................................................................11 Lookfor komanda .....................................................................................................12

Operacije sa poljima .............................................................................. 13


Prosta polja ...............................................................................................................13 Pristup elementima polja ..........................................................................................14 Definisanje polja.......................................................................................................14 Operacije sa poljima .................................................................................................16

Rad sa matricama................................................................................... 18
Specijalne matrice.....................................................................................................25

Grafiki prikaz podataka........................................................................ 28 Naredbe za rad sa tekstom ..................................................................... 33 M - fajlovi.............................................................................................. 35


Pisanje funkcija u MATLAB-u ................................................................................36

Relacioni i logiki operatori................................................................... 38


Relacioni operatori ...................................................................................................38 Logiki operatori ......................................................................................................40

Kontrolne petlje ..................................................................................... 41


For petlje...................................................................................................................41 While petlje...............................................................................................................43 If-else-end strukture..................................................................................................43

Efikasnost izvravanja programa u Matlabu........................................... 44


Merenje vremena izvravanja programa...................................................................44 Poveanje efikasnosti izvravanja programa............................................................45

MATLAB uputstvo za upotrebu

Uvod
Prva, izvorna verzija MATLAB-a, napisana je kasnih sedamdesetih, na univerzitetu New Mexico i Stanford Univerzitetu, sa osnovnom namjenom da slui kao pomono sredstvo na kursevima iz linearne algebre, i numerike analize. Zamiljeno je da ovaj paket bude nadgradnja FORTRAN-a koja bi koristila gotove potprograme FORTRAN-a. Dananje mogunosti MATLAB-a daleko prevazilaze tadanji originalni "Matrix Laboratory". Ogroman broj naunih i tehnikih disciplina neizostavno zahtevaju korienje MATLAB-a. MATLAB pored svojih prvenstveno razvojnih i programabilnih mogunosti poseduje jo jednu zaista monu alatku koja je jedna od osnovnih odlika ovog paketa. To su toolboxovi. Naime, vrlo jednostavno se u MATLAB-u mogu kreirati sopstvene funkcije koje daju reenja na postavljene zahteve. Skup ovako kreiranih funkcija (m-fajlova) objedinjenih u jednu celinu predstavlja osnovnu strukturu toolboxa. Toolboxovi naravno predstavljaju mnogo vie od kolekcije upotrebljivih fajlova, jer je u njima objedinjen trud velikih svetskih istraivaa u raznim podrujima nauke.

MATLAB uputstvo za upotrebu

Osnovni principi rada u MATLAB-u


Uvodne napomene Nakon to ste startovali MATLAB na vaem monitoru se pojavljuje prozor prikazan na sledeoj slici:

Ovaj okvir predstavlja osnovni prostor za rad sa MATLAB-om. Osnovne celine u okviru ovog prozora su: Osnovne matematike operacije: OPERACIJA sabiranje oduzimanje mnoenje deljenje stepenovanje SIMBOL + * / ili \ ^ PRIMER 5+3 23-11 3.14*0.85 56/8 = 8\56 5^2

Evo jednog jednostavnog primera: Neka je potrebno izraunati: 2+4+6. Da bi dobili rezultat dovoljno je otkucati i pritisnuti Enter : 2+4+6 ans = 12
4

MATLAB uputstvo za upotrebu

nakon ega MATLAB daje rezultat (ans je skraenica od engl. rijei answer). Ako je potrebno izraunati sledei izraz: (4*25)+(6*22)+(2*99) kucamo niz naredbi: 4*25+6*22+2*99 ans = 430 Zgodno je ova dva primera rjeiti uvo enjem pomonih varijabli A, B i C. Tada bi se rjeenje ova dva primera dobilo kucanjem sledeeg niza naredbi u MATLAB-u: A=2 A= 2 B=4; C=6 C= 6 D=A+B+C D= 12 E=B*25+C*22+A*99 E= 430 Ovdje su kreirane konstante A, B, C sa vrednostima 2, 4, 6. Treba primetiti da simbol ";" u liniji prihvata rezultat bez njegovog ispisa na ekranu. Osvrnimo se sada ne neke osnovne osobine MATLAB-a. Prilikom rada u komandnom prostoru, MATLAB pamti sve naredbe koje su uneene kao i vrednosti svih varijabli koje se u programu koriste. Ove naredbe ili vrednosti varijabli mogu se vrlo jednostavno proveriti. Na primer, da bi proverili vrednost varijable C potrebno je da to zatraite od MATLAB-a kucajui ime varijable nakon prompta. C C= 6 Ukoliko postoji potreba da se provere imena neke od varijabli ili u krajnjem sluaju sve varijable potrebno je od MATLAB-a zatraiti listu varijabli koristei naredbu who. who Your variables are: A B C

MATLAB uputstvo za upotrebu

Odavde je vidljivo da programski paket MATLAB ne daje vrednosti ovih varijabli ve samo njihova imena. Da bi dobili vrednost neke od varijabli potrebno je nakon prompta otkucati njeno ime. Kod nekih verzija MATLAB-a poslednja linija who naredbe daje podatak o slobodnom prostoru koji zavisi od raspoloive memorije raunara koji koristite. Formati za prikazivanje numerikih podataka Pri radu sa numerikim podacima u MATLAB-u vae sledea pravila. Ako je rezultat integer MATLAB ga prikazuje kao integer. Isto tako, ako je podatak realan broj MATLAB ga prikazuje kao realan broj sa etiri decimalna mesta. U sledeoj tabeli dati su formati koji se mogu koristiti u MATLAB-u. format long format short e format long e format hex format bank format + format rat format short 35.833333333333334 3.5833e+01 3.583333333333334e+01 4041eaaaaaaaaaab 35.83 + 215/6 35.8333 16 cifara 5 cifara plus eksponent 16 cifara plus eksponent hexadecimalni dva decimalna mjesta pozitivan, negativan ili nula rac.aproksimacija uobiajen format

Treba primetiti da MATLAB ne menja unutranju konvenciju o zapisu broja kada se koriste razliiti formati, ve samo prikazuje broj u formatu koji je izabran. Kao i u bilo kojem drugom programskom jeziku i u MATLAB-u postoje izvjesna pravila pri kreiranju imena varijabli. Kao prvo, ime varijable mora biti jedinstvena re bez praznih mijesta. U MATLAB-u nije svejedno da li se u imenu varijable pojavljuju mala ili velika slova. Tako na primer, fruit, Fruit, FrUit i FRUIT su razliite varijable. Nadalje, doputena duina varijabli je najvie 19 karaktera. Svi karakteri nakon 19-og bie ignorisani. Obavezno je da varijabla poinje slovom, tj. da prvi karakter bude slovo iza kojeg mogu da slede slova, brojevi ili simbol "_". U MATLAB-u postoji nekoliko specijalnih varijabli: ans pi eps inf NaN i realmin realmax varijabla u koju se smeta rezultat nakon izvrene operacije broj pi najmanji broj koji dodan jedinici daje broj sa pokretnim zarezom koji je vei od jedan beskonana vrednost (1 0) 0/0 nedefinisana vrednost (Not-a-Number) imaginarna jedinica najmanji pozitivan realan broj najvei pozitivan realan broj

Nakon definisanja varijable u MATLAB-u moe se javiti potreba da se posmatrana varijabla redefinie, odnosno da joj se dodeli neka druga vrednost. Razmotrimo ovdje sljedei jednostavan primer: A=2;

MATLAB uputstvo za upotrebu

B=4; C=6; D=A+B+C D= 12 Ako sada redefiniemo npr. varijablu A i zadamo joj vrednost 6: A=6; D D= 12 vidimo da se rezultat nije promenio tj. da MATLAB nije prihvatio uneenu promjenu. Da bi uneenu promjenu MATLAB prihvatio potrebno je koristiti neku od odgovarajuih naredbi MATLAB-a i zahtevati ponovo izraunavanje zadanog algoritma. Kasnije, kada budu objanjeni m-fajlovi, bie objanjen jednostavan nain da se ponovo izvri redefinisanje grupe MATLAB-ovih varijabli. Sve ovo odnosi se i na ranije navedene specijalne varijable. Nakon startovanja MATLAB-a ovim varijablama su dodeljene vrednosti navedene u prethodnoj tabeli. Ukoliko redefiniete ove varijable, novouneene vrednosti ostaju sve dok se ove varijable ne izbriu ili MATLAB ponovo ne startuje. Zbog svega ovoga se ne preporuuje redefinisanje specijalnih varijabli ukoliko to nije neophodno. Varijable u MATLAB-ovom okruenju se mogu nepovratno izbrisati korienjem naredbe clear. Tako, na primjer naredba: clear A brie varijablu A. Naredba: clear B C brie u isto vrijeme varijable B i C, dok naredba: clear brie sve varijable iz okruenja. Ovde treba biti posebno paljiv, jer MATLAB ne zahtjeva da potvrdite ovu naredbu, nego je odmah izvrava, tj. brie sve varijable bez mogunosti da se obrisane naredbe na bilo koji nain ponovo "oive". Ako je u nizu MATLAB-ovih naredbi potrebno ubaciti komentar u svrhu lakeg praenja toka programa onda se iza naredbe MATLAB-a ili odmah iza prompta navodi simbol procenta (%) iza koga se pie komentar. n=10 n= 10 % n odre uje duinu niza

MATLAB doputa da u jednoj liniji bude napisano vie komandi uz uslov da budu odvojene simbolom "," ili ";". A=2, B=4; C=6 A= 2 C= 6 U ovom sluaju su varijable A i C prikazane u obliku rezultata, jer iza njh nije naveden simbol ";". MATLAB moete u svakom trenutku prekinuti pritiskom Ctrl+C na tastaturi. Ako ste zavrili sa radom otkucate quit i izlazite iz MATLAB-a.

MATLAB uputstvo za upotrebu

Matematike funkcije MATLAB-a MATLAB nudi mnotvo matematikih funkcija koje se koriste pri reavanju problema iz raznih oblasti nauke. Lista matematikih funkcija koje podrava MATLAB data je u sledeoj tabeli. Velika olakica pri radu sa ovim programskim paketom je slinost sa standardnom matematikom notacijom.

Lista matematikih funkcija: abs (x) - apsolutna vrijednost acos (x) - arkus kosinus acosh (x) - arkus kosinus hiperboliki angle (x) - ugao asin (x) - arkus sinus asinh (x) - arkus sinus hiperboliki atan (x) - arkus tangens atan2 (x,y) - arkus tangens atanh (x) - arkus tangens hiperboliki ceil (x) - zaokruivanje prema conj (x) - konjugovani broj cos (x) - kosinus cosh (x) - kosinus hiperboliki exp (x) - ex fix (x) - zaokruivanje ka nuli floor (x) - zaokruivanje prema imag (x) - imaginarni dio log (x) - prirodni logaritam log10 (x) - logaritam sa osnovom 10 real (x) - realni dio rem (x,y) - ostatak pri djeljenju round (x) - najvee cijelo sign (x) - signum funkcija sin (x) - sinus sinh (x) - sinus hiperboliki sqrt (x) - kvadratni korjen tan (x) - tangens tanh (x) - tangens hiperboliki Jo jedna velika prednost MATLAB-a jeste mogunost rada sa kompleksnim brojevima. Da bismo to ilustrovali razmotriemo ovdje kvadratnu jednainu poznatog oblika:
ax 2 + bx + c = 0

Reenja ove jednaine su poznata:


x1,2 = b b 2 4ac 2a

Za a=1, b=5 i c=6, reenje postavljene jednaine dobija se na sledei nain:

MATLAB uputstvo za upotrebu

a=1; b=5; c=6; x1=(-b+sqrt(b^2-4*a*c))/(2*a) x1 = -2 x2=(-b-sqrt(b^2-4*a*c))/(2*a) x2 = -3 a*x1^2+b*x1+c %provera rezultata ans = 0 a*x2^2+b*x2+c %provera rezultata ans = 0 Poslednje dve linije u ovom algoritmu oigledno slue za proveru rezultata. Kod kvadratne jednaine sa ovako izabranim koeficijentima diskriminanta je bila vea od nule, pa su reenja bila realna i razliita. Izaberimo sada za koeficijente jednaine sledee vrijednosti: a=1, b=4 i c=13. Tada e reenje jednaine biti: a=1; b=4; c=13; x1=(-b+sqrt(b^2-4*a*c))/(2*a) x1 = -2.0000+3.0000i x2=(-b-sqrt(b^2-4*a*c))/(2*a) x2 = -2.0000-3.0000i Ovde su x1 i x2 dati u kompleksnom obliku, odnosno u obliku z=a+bi, gdje su a i b realni i imaginarni delovi kompleksnog broja z, respektivno. Evo nekoliko jednostavnih primjera kompleksnih brojeva i operacija nad njima: c1=1-2i c1 = 1.0000 - 2.0000i c1=1-2j c1 = 1.0000 - 2.0000i c2= 3*( 2-sqrt ( -1 ) *3 ) c2 = 6.0000 - 9.0000i c3=sqrt ( -2 ) c3 = 0 + 1.4142i c4=6+sin( .5 )*i c4 = 6.0000 + 0.4794i c5=6+sin( .5 )*j c5 = 6.0000 + 0.4794i

MATLAB uputstvo za upotrebu

Iz ovih primera se vidi da MATLAB ne pravi razliku u oznaavanju imaginarne jedinice, tj. svejedno mu je da li smo je oznaili sa "i" ili sa "j". U nekim programskim jezicima operacije nad kompleksnim brojevima zadaju dosta muke programerima i rad sa kompleksnim brojevima je prilino mukotrpan. Sa MATLABom to nije sluaj jer se svaki kompleksan broj unosi na slian nain kao i realan. U sledeem primeru je ilustrovan rad sa kompleksnim brojevima pri izvravanju nekih jednostavnih matematikih operacija: check_it_out=i2 % varijabla check_it_out check_it_out = -1.0000 + 0.0000i check_it_out=real (check_it_out ) check_it_out = -1 U ovom je primeru pokazano korienje naredbe real koja kao rezultat vraa realni deo kompleksnog broja. Kao poslednji primer, razmotrimo ovde Ojlerov obrazac.
a + ib = Me j

gdje su M-moduo, a -argument dati sa:


M = a2 + b2 b = arctg ( ) a a = M cos b = M sin

Prelaz sa pravougaonih na polarne koordinate i obrnuto vri se pomou naredbi abs, angle, real i imag : c1=1-2i; mag_c1=abs(c1) %moduo kompleksnog broja mag_c1 = 2.2361 angle_c1=angle(c1) %argument kompleksnog broja angle_c1 = -1.1071 deg_c1=angle_c1*180/pi deg_c1 = -63.4349 real_c1=real(c1) real_c1 = 1 imag_c1=imag(c1) imag_c1 = -2

10

MATLAB uputstvo za upotrebu

Korienje HELP-a
Programiranje u MATLAB-u kao i u drugim programskim jezicima zahteva poznavanje itavog niza naredbi ovog programskog paketa. Da biste doli do odre ene naredbe, MATLAB vam moe pomoi na tri naina: koristei naredbu help, koristei naredbu lookfor, koristei help interaktivno iz bar menija.
Komanda help Korienje ove komande je najjednostavniji nain da dobijete informaciju o naredbi koja vam je potrebna. Npr.:

help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also SQRTM. Ali, na upit help cows cows not found. MATLAB jednostavno odgovara da o "cows" ne zna nita. Naredba help odlino funkcionie ukoliko ste MATLAB-u eksplicitno zadali temu ili naredbu koja vas interesuje. HELP tako e nudi i neke smernice koje mogu korisno da poslue u potrazi za potrebnom naredbom. Za ovo je dovoljno otkucati:
help HELP topics: toolbox\local matlab\datafun matlab\elfun matlab\elmat matlab\funfun matlab\general matlab\color matlab\graphics matlab\iofun matlab\lang matlab\matfun matlab\ops matlab\plotxy matlab\plotxyz matlab\polyfun matlab\sounds matlab\sparfun matlab\specfun matlab\specmat matlab\strfun

Local function library. Data analysis and Fourier transform functions. Elementary math functions. Elementary matrices and matrix manipulation. Function functions - nonlinear numerical methods. General purpose commands. Color control and lighting model functions. General purpose graphics functions. Low-level file I/O functions. Language constructs and debugging. Matrix functions - numerical linear algebra. Operators and special characters. Two dimensional graphics. Three dimensional graphics. Polynomial and interpolation functions. Sound processing functions. Sparse matrix functions. Specialized math functions. Specialized matrices. Character string functions.

11

MATLAB uputstvo za upotrebu

matlab\dde matlab\demos toolbox\codegen toolbox\control toolbox\dspblks toolbox\uitools fuzzy\fuzzy fuzzy\fuzdemos toolbox\images nnet\nnet nnet\nndemos toolbox\signal simulink\simulink simulink\simdemos simulink\blocks simulink:2sl wavelet\wavelet wavelet\wavedemo

DDE Toolbox. The MATLAB Expo and other demonstrations. Real-Time Workshop Control System Toolbox. DSP Blockset. User Interface Utilities. Fuzzy Logic Toolbox. Fuzzy Logic Toolbox Demos. Image Processing Toolbox. Neural Network Toolbox. Neural Network Demonstrations and Applications. Signal Processing Toolbox. SIMULINK model analysis and construction functions. SIMULINK demonstrations and samples. SIMULINK block library. SystemBuild 3.0 model import into SIMULINK. Wavelet Toolbox. Wavelet Toolbox Demos.

For more help on directory/topic, type "help topic".

Lista na vaem raunaru moe se donekle razlikovati od ove. U svakom sluaju, gornja lista vam daje mogunost da vrlo brzo do ete do komande koja vas interesuje. Korienjem direktno help komande postoji mogunost dobijanja povratne informacije samo ako ste potpuno sigurni koja naredba vam je potrebna. Ukoliko to niste preostala dva naina mogu biti od velike pomoi.
Lookfor komanda Ova komanda pretrauje sve linije help-a i vraa samo one koje sadre kljunu re koju navedete. Npr.

lookfor complex CPLXPAIR Sort numbers into complex conjugate pairs. CONJ Complex conjugate. IMAG Complex imaginary part. REAL Complex real part. CDF2RDF Complex diagonal form to real block diagonal form. RSF2CSF Real block diagonal form to complex diagonal form. CPLXDEMO Maps of functions of a complex variable. CPLXGRID Polar coordinate complex grid. CPLXMAP Plot a function of a complex variable. GRAFCPLX Demonstrates complex function plots in MATLAB. DSORT Sort complex discrete eigenvalues in descending order. ESORT Sort complex continuous eigenvalues in descending order LOGM2 LOGM2(X) is the matrix natural logarithm of X . Complex CPLXICON Complex Icon function for SIMULINK Complex blocks. SCPLXWKS DSP Blockset S-Function to store complex SIMULINK data in workspace. CCEPS Complex cepstrum.

12

MATLAB uputstvo za upotrebu

Naredba complex nije MATLAB-ova naredba, ali je na ena u deskripciji nekoliko MATLAB-ovih naredbi. Ili na primjer: help conj CONJ Complex conjugate. CONJ(X) is the complex conjugate of X. Na PC-u, help je dostupan u liniji menija sa opcijama Full Product Family Help ili MATLAB Help. Na ovaj nain otvarate MATLAB Help gde dvostrukim klikom mia birate opciju ili naredbu koja vas interesuje.

Operacije sa poljima
Sva dosadanja razmatranja ukljuivala su rad sa brojevima, odnosno skalarima i operacije nad njima. Operacije nad skalarima su osnovne matematike operacije. Sa druge strane, ako je potrebno jednu te istu operaciju izvriti nad vie od jednog skalara ponovljene operacije bile bi povezane sa izvesnim tekoama. Upravo iz tih razloga se dolo do pojma polja (matrica). MATLAB sve varijable posmatra kao matrice i sve operacije izvrava kao matrine operacije. Skalari su samo specijalan sluaj matrica dimenzija 1x1.
Prosta polja Razmatrajmo ovde primer izraunavanja vrednosti funkcije sinusa na polovini perioda. Jasno je da je nemogue izraunati vrednosti ove funkcije u svim takama datog intervala (kojih ima beskonano mnogo), ve se ograniavamo na konaan broj taaka iz datog intervala. Uzmimo na primjer da je korak diskretizacije 0.1 . Mi bismo do rezultata mogli doi kucanjem posebno svake vrednosti argumenta i traiti rezultat. Ovo se me utim mnogo bre reava korienjem polja. Definisanje polja je jednostavno:

x= [ 0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi ] x= Columns 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns 8 through 11 2.1991 2.5133 2.8274 3.1416 y=sin (x) y= Columns 1 through 7 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns 8 through 11 0.8090 0.5878 0.3090 0.0000 Dovoljno je otvoriti srednju zagradu, uneti vrednosti eljenih taaka, odvojenih me usobno razmacima ili zarezima, te zatvoriti srednju zagradu. MATLAB sada "razume" da elite da vam izrauna sinus svakog elementa iz x i da rezultat treba da bude smeten u polje y. Ovo je fundamentalna razlika izme u MATLAB-a i ostalih programskih jezika. Ako se kao element polja unosi kompleksan broj onda se on mora uneti kao jedinstven, bez razmaka ili objedinjen u maloj zagradi. Npr. polje [

13

MATLAB uputstvo za upotrebu

1 -2i 3 4 5+6i ] sadri pet elemenata dok polja [ ( 1 -2i ) 3 4 5+6i ] ili [ 1-2i 3 4 5+6i ] sadre po etiri elementa.
Pristup elementima polja U gornjem primeru je polje x sadravalo ukupno 11 elemenata. To je u stvari matrica vrsta, tj. matrica sa jednom vrstom i 11 kolona ili jednostavno, prosto polje duine 11. Pristup svakom elementu polja je jednostavan. Dovoljno je otkucati ime polja i indeks elementa.

x(3) ans = 0.6283 y(5) ans = 0.9511

% treci element polja x

% peti element polja y

Pristup nizu elemenata polja moe se uraditi na sledei nain: x ( 1:5 ) ans = 0 0.3142 0.6283 0.9425 1.2566 y ( 3: -1 : 1) ans = 0.5878 0.3090 0 U prethodna dva primera, drugi broj u maloj zagradi oigledno oznaava korak, s tim to negativan predznak znai da se elementi uzimaju unazad. x(2 : 2 : 7) ans = 0.3142 0.9425 1.5708 Na ovaj nain smo dobili drugi, etvrti i esti element polja. y ( [ 8 2 9 1] ) ans = 0.8090 0.3090 0.5878

U ovom primeru smo koristili polje [ 8 2 9 1 ] da bismo dobili elemente polja y u redosledu koji mi elimo. Preporuka je da ovdje uradite sami nekoliko primera, te da pokuate pozvati petnaesti element (koji ne postoji), pa da vidite ta e MATLAB uraditi.
Definisanje polja U jednom od ranijih primera polje smo definisali prosto unoenjem pojedinih vrednosti elemenata polja. Taj primer je sadravao svega 11 vrednosti. Me utim, ta da je bilo potrebno uneti 111 vrednosti? Evo dva naina kako ovo jednostavno uraditi;

14

MATLAB uputstvo za upotrebu

x = ( 0 : 0.1 : 1 )*pi x= Columns 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 Columns 8 through 11 2.1991 2.5133 2.8274 3.1416 ili x = linspace ( 0, pi, 11 ) x= Columns 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 Columns 8 through 11 2.1991 2.5133 2.8274 3.1416

1.8850

1.8850

U prvom primeru definisano je polje koje poinje od nule uveava se za 0.1 i zaustavlja se kada poprimi vrijednost 1. Svaki element polja je pomnoen sa pi da bi se dobila eljena vrednost argumenta. U drugom sluaju, koritena je MATLAB-ova naredba linspace sa sledeom sintaksom:
linspace ( poetna_vrijednost, korak, krajnja_vrijednost )

U oba prethodna primera, definisana su polja kod kojih su elementi linearno uveavani za pi. Ako je potrebno da skala elemenata bude logaritamska onda se koristi MATLAB-ova naredba logspace: logspace ( 0, 2, 11 ) ans = Columns 1 through 7 1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 Columns 8 through 11 25.1189 39.8107 63.0957 100.0000 U ovom primeru je definisano polje iji je poetni element 100 , a krajnji 102 . Sintaksa ove naredbe je:
logspace ( poetni_eksponent, poslednji_eksponent, broj_elemenata)

U sluaju da je redosled elemenata polja proizvoljan, definiu se dva ili koliko je potrebno polja koja se potom spajaju u jedinstveno polje. Ovo se moe uraditi na sledei nain: a=1 : 5, b=1 : 2 : 9 a= 1 2 3 4 5 b= 1 3 5 7 9 Na ovaj nain su definisana dva polja a i b. Treba primetiti da su dve linije saete u jednu tako to su naredbe me usobno odvojene zarezom. Spajanje ova dva polja u jedno vri se na sledei nain:

15

MATLAB uputstvo za upotrebu

c=[ba] c= 1 3 5 Naredbom:

d=[ a( 1:2:5 ) 1 0 1] d= 1 3 5 1 0

definisano je polje d koje sadri prvi, trei i peti element polja a i elemente 1,0 i 1. Matematike operacije sabiranja, oduzimanja, mnoenja i delenja polja sa skalarom primenjuju se posebno na svaki element polja. Tako na primer: a-2 ans = -1 0

Ovom naredbom je svaki lan polja umanjen za dva. 2*a-1 ans = 1 3

ovom naredbom je svaki element pomnoen sa dva i od svakog elementa oduzeta jedinica.
Operacije sa poljima Matematike operacije sa poljima su neto komplikovanije od prethodno objanjenih operacija izme u skalara i polja, pogotovo ako su polja razliite duine. Ako su polja iste duine, operacije sabiranja, oduzimanja, mnoenja i delenja obavljaju se izme u elemenata na istim pozicijama u polju. Tako, na primer:

a, b a= 1 2 b= 1 3

3 5

4 7

5 9

daje pregled polja a i b, a potom a+b ans = 2 5

8 11

14

sabira odgovarajue elemente i smjeta u ans. ans-b ans = 1 2

16

MATLAB uputstvo za upotrebu

u ovom primjeru je oigledno ans=a. 2*a-b ans = 1 1

U ovom sluaju je svaki element pomnoen sa dva i od svakog elementa je oduzeta vrednost odgovarajueg elementa polja b. Mnoenje odgovarajuih elemenata ova dva polja vri se korienjem sledee naredbe: a .* b ans = 1 6

15 28 45

Elementi polja a su pomnoeni sa elementima polja b koji imaju iste indekse. Za ovo mnoenje je korien operator ".*" Mnoenje bez take odnosi se na matrino mnoenje. U ovom konkretnim primeru matrino mnoenje (bez take uz operator "*") nema smisla. a*b ??? Error using ==> * Inner matrix dimensions must agree. Operator delenja elemenata jednog polja sa odgovarajuim elementima drugog polja tako e zahteva korienje take. a ./b ans = 1.0000 0.6667 0.6000 0.5714 0.5556 b .\a ans = 1.0000 0.6667 0.6000 0.5714 0.5556
esto je pri radu sa poljima ovakvog tipa potrebno elemente polja kvadrirati ili ih stepenovati proizvoljnim eksponentom. I u ovom sluaju se pored operatora stepenovanja mora koristiti i simbol "." da bi zadani operator stepenovanja bio primenjen na svaki element polja posebno. Primer:

a . ^2 ans = 1 4

9 16

25

Ovde je oigledno svaki lan polja a kvadriran. 2 . ^a ans = 2 4

8 16

32

17

MATLAB uputstvo za upotrebu

Ovom naredbom je broj dva stepenovan redom sa svakim elementom polja a. Evo jo nekih primera: b . ^a ans = 1 9 125 2401 59049 b.^(a-3) ans = 1.0000 0.3333 1.0000 7.0000 81.0000 U prethodnim primerima, polja koja su definisana sadravala su jednu vrstu i nekoliko kolona, odnosno bila su organizovana u vektor-vrstu. Rezultat zadane operacije tako e je bio smeten u vektor-vrstu. MATLAB doputa da se polje definie i kao vektor-kolona, tj. polje koje bi sadravalo jednu kolonu i nekoliko vrsta. Kod definisanja i zadavanja polja na ovaj nain sva pravila ostaju na snazi, samo to su polje i rezultat prikazani kao vektor-kolone. Evo nekih primera u kojima su definisani vektor-kolone. c=[1;2;3;4;5] c= 1 2 3 4 5 Ovde treba primetiti da elementi razdvojeni razmacima ili zarezima definiu elemente jedne vrste, a vie kolona, dok elementi razdvojeni simbolom ";" definiu polje koje ini jedna kolona i nekoliko vrsta. a=1:5 a= 1 2 3 b =a' b= 1 2 3 4 5

U poslednja dva primera korien je simbol " ' " za transponovanje vektor-kolone u vektor-vrstu i obratno.

Rad sa matricama
Poto je matrica osnovni element MATLAB-a postoji mnogo naina za manipulisanje i rad sa matricama. Kada se matrica definie, odnosno unese u program, MATLAB omoguuje itav niz postupaka kojima se unesena matrica po volji moe menjati. Ovo je u stvari klju za efikasno korienje MATLAB-a. Ove

18

MATLAB uputstvo za upotrebu

teme smo se malo dotakli u primerima gdje je pokazan rad sa jednostavnim poljima. Da bi ovo ilustrovali prelazimo odmah na primere: A=[1 2 3;4 5 6; 7 8 9] A= 1 4 7

2 5 8

3 6 9

Definisana je matrica A. U sluaju da je potrebno promeniti neki od elemenata definisane matrice postupamo na sledei nain: A(3,3)=0 A= 1 4 7

2 5 8

3 6 0

gdje je oigledno element tree vrste i tree kolone pretvoren u nulu. A(2,6)=1 A= 1 4 7

2 5 8

3 6 0

0 0 0

0 0 0

0 1 0

U ovom je primeru je na preseku druge vrste i este kolone generisana jedinica. Poto zadana matrica nema ovu dimenziju preostala mesta su popunjena nulama, tako da je matrica i dalje ostala pravougaona. A=[1 2 3;4 5 6; 7 8 9] ; B=A(3: -1: 1 , 1 : 3) B= 7 4 1

8 5 2

9 6 3

Na ovaj nain je kreirana matrica B tako to su vrste matrice A uzete u obrnutom redosledu. B=A(3: -1: 1 , : ) B= 7 4

8 5

9 6

19

MATLAB uputstvo za upotrebu

Efekat ove naredbe je isti kao i prethodne. Simbol ":" oznaava da se naredba odnosi na sve kolone. To je, u stvari skraena notacija za 1:3. C=[A B(: , [1 3] ) ] C= 1 4 7

2 5 8

3 6 9

7 4 1

9 6 3

Ovom naredbom je zadana matrica C tako to je desna strana matrice A dopunjena prvom i treom kolonom matrice B. B=A( 1 : 2 , 2 : 3 ) B= 2 5

3 6

Ovde je definisana matrica B, ali tako to je iz matrice A izbaena trea vrsta i prva kolona. C=[1 3] C= 1

B=A(C , C) B= 1 7

3 9

U ovom primeru je iskoriteno polje C za adresiranje matrice A. Ovde je formirana matrica B tako to je iz matrica A izbaena druga vrsta i druga kolona, odnosno matrica formirana od prve i tree vrsta te prve i tree kolone matrice A. B=A( : ) B= 1 4 7 2 5 8 3 6

20

MATLAB uputstvo za upotrebu

9 Ovom naredbom matrica A pretvorena u vektor kolonu. B=B' B= 1

Ovdje je izvreno transponovanje matrice B. B=A B= 1 4 7

2 5 8

3 6 9

B( : , 2 )=[ ] B= 1 4 7

3 6 9

U ovom primeru je redefinisana matrica B tako to je iz zadane matrice B izbaena druga kolona. Kada se oznai da je neto jednako praznoj matrici ono biva obrisano, naruavajui ujedno i dimenzije matrice. B=B' B= 1 4 3 6

7 9

B( 2 , : ) = [ ] B= 1 4 7 Ovde je oigledno izbaena druga vrsta matrice B. A( 2 , : ) = B A= 1 1 7

2 4 8

3 7 9

Ovdje je u drugu vrstu matrice A ubaena matrica B. B=A( : , [2 2 2 2] )

21

MATLAB uputstvo za upotrebu

B= 2 4 8

2 4 8

2 4 8

2 4 8

Sada je matrica B kreirana etverostrukim dupliranjem svih vrsta drugom kolonom matrice A. A( 2 , 2 )=[ ] ??? In an assignment A(matrix,matrix) = B, the number of rows in B and the number of elements in the A row index matrix must be the same. Ova naredba nije dozvoljena. Dimenzije matrica sa obe strane jednakosti se moraju podudarati. U naem sluaju sa leve strane jednakosti je skalar (matrica dimenzija 1x1), a sa desne strane prazan niz (matrica dimenzija 0x0) te MATLAB javlja greku. B=A( 4 , : ) ??? Index exceeds matrix dimensions. Ni ova naredba nije dozvoljena, jer matrica A nema etiri vrste. C( 1: 6 )=A( : , 2 : 3 ) C= 2

Ovdje je kreiran vektor C ekstrakcijom i transponovanjem druge i tree kolone matrice A. U sledeih nekoliko primjera bie pokazano korienje relacionih operatora pri radu sa poljima i matricama. x=-3:3 x= -3 -2

-1

abs(x)>1 ans = 1 1 0

U ovom primeru je definisan vektor x a kao rezultat su vraene jedinice na svim mestima gde je apsolutna vrednost pojedinog lana vea od jedinice. y=x(abs(x)>1) y= -3 -2 2 3 U prethodnom primeru je definisano polje y u koje su smeteni svi elementi iz x ija je apsolutna vrednost vea od jedinice.

22

MATLAB uputstvo za upotrebu

y=x( [ 1 1 1 1 0 0 0 ] ) y= -3 -2 -1 0 Ovom naredbom su selektovana prva etiri elementa, dok su ostali zanemareni. Ako ovu naredbu uporedimo sa sledeom: y=x( [ 1 1 1 1 ] ) y= -3 -3 -3 -3 onda se vidi da je ovde kreiran y tako to je etiri puta ponovljen prvi lan iz x. y=x([ 1 0 1 0 ] ) ??? Index into matrix is negative or zero. Ova naredba nije doputena jer elementi polja u uglatoj zagradi predstavljaju indekse za vektor x, a indeksi ne mogu biti negativni ili nule. x(abs(x)>1)=[ ] x= -1 0 1 Rezultat ove naredbe je da su iz polja x izbaeni svi elementi ija je apsolutna vrednost vea od jedinice. Ovaj primer pokazuje da se relacioni operator moe koristiti i na levoj strani gornje jednakosti. Sve to je dosad navedeno vai i pri radu sa matricama. b=[5 -3 ; 2 -4 ] b= 5 -3 2 -4 x=abs(b)>2 x= 1 1 0 1 y=b(abs(b)>2) y= 5 -3 -4 Rezultat poslednje naredbe je smeten u vektor kolonu, jer ne postoji nain da se formira matrica sa tri elementa. Ovde ima jo jedan pristup a to je korienje naredbe find. x=-3:3 x= -3 -2

-1

23

MATLAB uputstvo za upotrebu

k=find(abs(x)>1) k= 1 2 6 7 U ovom sluaju je od naredbe find zatraeno da prona e indekse elemenata ija je apsolutna vrednost vea od jedan. Naredba find tako e funkcionie i kod matrica. A=[1 2 3;4 5 6; 7 8 9] A= 1 2 3 4 5 6 7 8 9 [i , j]=find(A>5) i= 3 3 2 3 j= 1 2 3 3 Indeksi i i j su pomone varijable ijim se kombinovanjem dolazi do pozicije u matrici tj. indeksa elementa koji je zadovoljio nejednakost postavljenu u gornjoj naredbi. Tako npr. prve vrednosti indeksa i i j daju poziciju prvog elementa koji je vei od pet, a to je element ne preseku tree vrste i prve kolone. Ako nam dimenzije matrice, odnosno vektora nisu poznate, MATLAB nudi naredbe size i length koje nam daju informaciju o dimenzijama matrice. A=[1 2 3 4;5 6 7 8] A= 1 2 3 4 5 6 7 8 B=pi:0.01:2*pi; s=size(A) s= 2

Ovde je vrednost fukcije size definisana jednom varijablom, pa je kao reenje vraen vektor vrsta, gdje prvi lan daje podatak o broju vrsta a drugi o broju kolona. Osim ovog naina mogue je vrednost funkcije size definisati kao u sledeem primeru.

24

MATLAB uputstvo za upotrebu

[r,c]=size(A) r= 2 c= 4 Dve izlazne varijable su smetene u vektor kolonu. Elementi imaju isto znaenje kao i malopre. Naredba length kao rezultat vraa broj kolona ili broj vrsta u zavisnosti od toga da li matrica ima vei broj vrsta ili kolona. length(A) ans = 4 size(B) ans = 1 315 length(B) ans = 315 Poto vektor ima samo jednu dimenziju u ovom sluaju funkcija length kao rezultat vraa broj elemenata polja B.
Specijalne matrice U MATLAB-u je mogue definisati i neke specijalne matrice, koje su od interesa u raznim oblastima nauke i tehnike.

zeros(3) ans = 0 0 0 0 0 0 0 0 0 Ova naredba definie nula matricu. ones(2,4) ans = 1 1 1 1 1 1

1 1

Ovom naredbom je definisana matrica jedinica. ones(3)*pi ans = 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416

25

MATLAB uputstvo za upotrebu

rand(3,1) ans = 0.2190 0.0470 0.6789 Ovim primerom je definisana matrica iji su elementi sluajni brojevi sa uniformnom raspodelom. randn(2) ans = 1.1650 0.0751 0.6268 0.3516 Elementi ove matrice su sluajni brojevi sa normalnom raspodelom. eye(3) ans = 1 0 0 0 1 0 0 0 1 eye(3,2) ans = 1 0 0 1 0 0 Ovom naredbom je definisana jedinina matrica. Delenje i mnoenje matrica je prikazano u sledeim primerima a=[1 3 -3;2 5 -1]; b=[2 1;-6 2;1 4]; a*b ans = -19 -5 -27 8 b*a ans = 4 11 -7 -2 -8 16 9 23 -7 a/b ??? Error using ==> / Matrix dimensions must agree. Delenje matrica a i b nije bilo mogue izvriti jer se dimenzije matrica ne slau. c=[2 1;3 2]; d=[3 2;4 3]; c/d

26

MATLAB uputstvo za upotrebu

ans = 2.0000 -1.0000 1.0000 0.0000 e=[3 5 2;1 3 2]; f=[2 1 4;-4 -3 1]; e*f ??? Error using ==> * Inner matrix dimensions must agree. Mnoenje matrica nije bilo mogue izvriti jer se dimenzije matrica ne slau. Prvobitna svrha MATLAB-a je bila da pojednostavi rad u mnogim oblastima u kojima se primenjuju osnove operacije linearne algebre. Ovo se posebno odnosi na sisteme linearnih jednaina. Da bi ilustrovali ovaj poseban problem posmatrajmo primjer: 1x1+2x2+3x3=366 4x1+5x2+6x3=804 7x1+8x2+0x3=351 Ovaj sistem se moe predstaviti i u matrinom obliku (matrinoj jednaini) na sledei nain: Ax=b Ova matrina jednaina definie proizvod matrice A i vektora x koji je jednak vektoru b. Egzistencija jeenja ovog sistema i uopte sistema jednaina je fundamentalno pitanje linearne algebre. Ukoliko je sistem reiv postoji mnotvo pristupa kojima se to reenje nalazi. Analitiki, reenje ovog sistema bi bilo: x=A-1b Reenje ovog sistema dobija se kucanjem sledeeg niza naredbi: A=[1 2 3;4 5 6;7 8 0] A= 1 2 3 4 5 6 7 8 0 b=[366 ; 804 ; 351] b= 366 804 351 Kao to je ranije objanjeno, matrica A se moe uneti na nekoliko naina. Za prelazak u novu vrstu moe se koristiti simbol ";" ili prelaz u novi red. Vektor b je vektor kolona jer svaki simbol ";" oznaava poetak nove vrste. Moe se pokazati da ovaj problem ima jedinstveno rjeenje ako je determinanta matrice A razliita od nule. U ovom je primeru det (A)=27 te e reenje sistema Ax=b biti mogue nai. Jedan od naina jeste da se izrauna inverzna matrica A-1 :

27

MATLAB uputstvo za upotrebu

x=inv (A)*b x= 25.0000 22.0000 99.0000 Ovo reenje se moglo dobiti i na sledei nain: x=A\b x= 25.0000 22.0000 99.0000 Drugo reenje tj. korienje operatora "\" preporuljivije je od prethodnog. Ovaj nain reavanja zahteva manji broj unutranjih operacija mnoenja i delenja, te je samim tim ovaj postupak bri. Pogotovo se preporuuje za sisteme sa veim brojem nepoznatih. U sluaju da MATLAB ne moe nai reenje korektno, on javlja greku.

Grafiki prikaz podataka


Jedna od moda najboljih osobina MATLAB-a je ta to ima veoma velike grafike mogunosti. U MATLAB-u postoji velik broj naredbi pomou kojih se grafiko prikazivanje podataka moe prikazati u dve ili tri dimenzije. Ura eni grafici mogu biti sauvani u nekom od standardnih formata i kao takvi biti korieni u nekim drugim programskim paketima. Najjednostavnija naredba za prikazivanje podataka je naredba plot. Prikaimo ovdje funkciju: y=sin(x) za x od 0 do 2 . Prvo je potrebno definisati interval sa konanim brojem taaka izme|u 0 i 2 . x = linspace ( 0, 2*pi, 30 ); y=sin ( x ); plot ( x, y ) nakon ega sledi grafik:

28

MATLAB uputstvo za upotrebu

Ili na primer funkcija: y=x 2 u intervalu od -2 do 2. x =-2 : 0.01 : 2 ; y=x.2 ; plot ( x , y )

Koristei naredbu plot mogue je i vie grafika prikazati odjednom. x = linspace ( 0, 2*pi, 30 ); y=sin ( x ); z=cos ( x ); plot ( x, y, x, z )

29

MATLAB uputstvo za upotrebu

Oznaavanje grafika i osa u MATLAB-u se postie naredbama title, xlabel i ylabel. Evo jednog primera gdje su ilustrovane ove naredbe: x=-4*pi : pi/100 : 4*pi ; y=sin ( x ); plot ( x , y ) title ( ' Grafik funkcije y=sin ( x ) ' ) xlabel ( ' vrednosti promenjive x ' )

Take na koje je podeljen interval u kome se funkcija prikazuje, mogu se posebno oznaiti. x = linspace ( 0, 2*pi, 30 ); y=sin ( x ); plot ( x , y , x , y , '+' )

30

MATLAB uputstvo za upotrebu

U ovom primeru je funkcija y=sin(x) crtana dva puta. Prvi put je dat standardan prikaz date funkcije, nakon ega su vrednosti funkcije na intervalu u kome se posmatra funkcija posebno oznaene. Da je u naredbi funkcije plot bio samo jedan argument, to bi znailo da e se vrijednosti nanositi samo na ordinatu. U tom sluaju, na apsisu se nanose indeksi elemenata (taaka ) na koje je podeljen interval u kome se posmatra zadana funkcija. Dodatni argument "+" definie kako e se vriti crtanje. Ako je ovaj argument izostavljen, grafik se crta tako to se vri linearna interpolacija izme u zadanih taaka. x = linspace ( 0, 2*pi, 30 ); y=sin ( x ); plot ( x , y , '+' )

Ako se nakon otkucanih naredbi u MATLAB-u grafik ne pojavi na ekranu raunara, treba na dnu ekrana kliknuti na ikonu "Figure No. 1", nakon ega se grafik pojavljuje na ekranu. Kao to je reeno, MATLAB moe grafik da prikae i u trodimenzionalnom obliku. Evo jednog primera:
31

MATLAB uputstvo za upotrebu

plot3 ( y , z , x ) , grid

U dosadanjim primerima grafici su prikazivani preko celog ekrana. U MATLAB-u postoji mogunost i da se nacrta vie razliitih grafika na jednom ekranu (maksimalno 4), za ta se koristi naredba subplot koja se navodi pre naredbe za crtanje. Opti oblik ove naredbe je: subplot(m, n, p) to znai da e se ekran podeliti na m delova po horizontali, n delova po vertikali i tekui grafik e se nacrtati u p-tom delu. Na sledeoj slici je ilustrovano na koji se nain koristi subplot da bi se ostvarile razliite podele ekrana.

subplot(2, 2, 1)

subplot(2, 2, 2)

subplot(1, 2, 1) subplot(2, 2, 3) subplot(2, 2, 4)

subplot(1, 2, 2)

subplot(2, 1, 1)

subplot(2, 1, 2)

32

MATLAB uputstvo za upotrebu

Naredbe za rad sa tekstom


Pored MATLAB-ove prvenstveno matematike orjentacije, on poseduje i neke naredbe za manipulisanje tekstom. U MATLAB-u se tekst jednostavno naziva stringovima. Rad sa ovakvim stringovima je slian radu sa prostim poljima. t='How about this character string?' t= How about this character string? Tekst se unosi izme u znakova navoda. Ako je potrebno izdvojiti deo teksta unutar stringa onda se to radi sledeom naredbom: u=t(16:24) u= character Na ovaj nain je iz teksta izdvojena re character. Ovu re je mogue dobiti i u obrnutom redosledu: u=t(24:-1:16) u= retcarahc Kao i kod matrica tekst se moe sastojati i iz nekoliko vrsta. v=[ 'Character strings having more than ' 'one row must have the same number ' 'of coloumns just like matrices! '] v= Character strings having more than one row must have the same number of coloumns just like matrices! pri emu broj kolona mora biti jednak. Nad stringovima je tako e mogue vriti i matematike operacije kao i predstaviti ih u ASCII kodu. Da bi doli do ASCII koda stringa koristimo apsolutnu vrijednost: s='ABCDEFG' s= ABCDEFG m=abs( s ) m= 65 66 67 68 69 m=s+0 m= 65 66

70 71

67 68 69

70 71

Povratak iz ASCII koda vri se na sledei nain:

33

MATLAB uputstvo za upotrebu

setstr (m) ans = ABCDEFG n=s+5 n= 70 71 setstr (n) ans = FGHIJKL

72 73 74

75 76

34

MATLAB uputstvo za upotrebu

M - fajlovi
Iz dosadanjeg izlaganja se vidi da MATLAB odgovara na va postavljeni zadatak onim redosledom kako je to od njega zatraeno. Na neke jednostavne probleme MATLAB efikasno odgovara nakon to otkucamo odre enu sekvencu naredbi. U sluaju veeg broja ovakvih naredbi, pogotovo ako je neko izraunavanje potrebno nekoliko puta vriti za razliite vrednosti parametara programa, onda ovakav posao postaje mukotrpan. Zbog ovoga se u MATLAB-u koriste m-fajlovi. Postupak je jednostavan. Programska sekvenca koja bi se inae unosila nakon MATLAB-ovog prompta, sada se unese u m-fajl i kao takav sauva. Da bi se kreirao m-fajl bira se opcija New iz File menija i selektuje M-file.

M-fajlovi su u stvari fajlovi sa ekstenzijom m. Nakon to je uneen i sauvan fajl se jednostavno izvrava kucanjem njegovog imena iza matlabovog prompta. ime.m Nakon ovoga MATLAB pratei linije programa vri izraunavanje, u zavisnosti od parametara koji su uneeni u program. Prilikom dodeljivanja imena fajlu treba paziti da ime ne bude identino nekoj MATLAB-ovoj naredbi, jer ona ima prioritet nad imenom m fajla. Ako je potrebno imati pregled izvravanja toka programa onda se naredbom echo on to i omoguuje. Ovaj tip fajlova je tako e pogodan za unoenje polja veih dimenzija, npr. rezultata laboratorijskih merenja. Na ovaj nain su podaci sauvani, a jednostavno mogu i da se promene. MATLAB poseduje nekoliko naredbi koje nam daju informaciju o broju ovih fajlova, te naredbe za brisanje, prelazak u neki drugi direktorijum, itd...

35

MATLAB uputstvo za upotrebu

Pisanje funkcija u MATLAB-u Prilikom koritenja MATLAB-ovih funkcija kao to su abs, angle, sqrt, MATLAB je koristio varijable koje smo sami zadavali nakon ega je sledio rezultat. Osim ovoga mi moemo sami da kreiramo funkciju, sauvamo je kao m-fajl i nakon toga je pozivamo i izvravamo.

function y=fakt(n) if n<0 disp('Greka. Faktorijel negativnog broja nije definisan') y=[ ] return end y=1; ind=n; while (ind>0), y=y*ind; ind=ind-1 end Ovaj fajl se zatim sauva kao fakt.m i poziva se kucanjem imena (fakt). Neophodno je da ime m-fajla bude identino imenu funkcije. Ako je potrebno neke vrednosti uneti sa tastature onda se koristi naredba input. Korienje ove naredbe najlake je objasniti na sledeem primeru: pretpostavimo da je potrebno nacrtati funkciju y = x 2 na proizvoljnom intervalu [a ,b ] sa proizvoljnim korakom. Vrednosti a, b kao i vrednost koraka unose se sa tastature u toku izvravanja programa. Rjeenje u MATLAB-u je:
%program za crtanje funkcije y=x*x na proizvoljnom intervalu a=input('Pocetak intervala (a): '); %unosi se a sa tastature b=input('Kraj intervala (b): '); %unosi se b sa tastature korak=input('korak iznosi: '); %unosi se korak sa tastature x=a:korak:b; y=x.^2; plot(x,y) title('Grafik funkcije y=x*x, na intervalu a<x<b'), xlabel('Nezavisno promenjiva x'),ylabel('Zavisno promenjiva y')

a=-5 b=5 korak=0.01

36

MATLAB uputstvo za upotrebu

MATLAB se moe koristiti i pri obradi podataka kao i setova podataka. Po svojoj unutranjoj konvenciji ovi setovi su smeteni u matrice-kolone. Svaka kolona predstavlja razliite vrednosti merene varijable. Npr. pretpostavimo da su dnevne temperature za tri razliita grada date u m-fajlu temps. Startovanjem ovog fajla dobijamo temperature u MATLAB-ovom okruenju. temps = 12 8 15 9 12 5 14 8 12 6 11 9 15 9 8 10 19 7 12 7 14 10 11 8 9 7 8 8 15 8 8 9 10 7 12 7 9 8 12 8 12 8 10 9 13 12 9 10 10 6 14 7 12 5 13 7 15 10 13 11 12 12

18 22 19 23 22 19 15 20 18 18 19 17 23 19 18 20 17 22 19 21 20 17 18 20 22 21 22 18 23 24 22

d=1:31; plot(d,temps) xlabel('Dan u mjesecu'),ylabel('Stepeni celzijusa') title('Najvise dnevne temperature za tri grada')

37

MATLAB uputstvo za upotrebu

plot naredba u ovm primjeru je kao argument imala matricu temps. Rezultat ovoga je grafiki prikaz vrednosti temperatura svake kolone posebno.

Relacioni i logiki operatori


Ovi operatori su esto koriteni u oblastima programiranja. Oni koji su se vie bavili programiranjem upoznati su sa ovim. Svrha ovih operatora je u stvari da odgovore na pitanje da li je neto tano ili netano. esta upotreba ovih operatora jeste u petljama, o kojima e biti rei neto kasnije. Izlazna vrednost ovih operatora jeste "1", ako je izraz taan, odnosno "0", ako izraz nije taan.
Relacioni operatori Relacioni operatori koji se koriste u MATLAB-u dati su u sledeoj tabeli

< >= > >= == ~=

- manji od -manji ili jednak - vei od - vei ili jednak - jednak - razliit od

Relacioni operatori mogu se koristiti za upore ivanje dvaju polja iste duine, kao i za upore ivanje polja skalarom. U ovom sluaju se svaki element polja upore uje sa skalarom i kao rezultat se dobija polje iste duine. A=1:9, B=9-A A= 1 2 3 4 B= 8 7 6 5 tf=A>4 tf =

5 4

6 3

7 2

8 1

9 0

38

MATLAB uputstvo za upotrebu

U posljednjem primjeru su mjesta na kojima je zadovoljena nejednakost prikazana jedinicama. tf=A==B tf = 0 0 0

Traeni elementi polja A su ekvivalentni elementima polja B. Treba uoiti razliku izme u znaka jednakosti i dvostrukog znaka jednakosti. Dvostruki znak jednakosti upore uje dvije varijable i kao rezultat vraa jedinicu ako su one jednake ili nulu ako su razliite. tf=B-(A>2) tf = 8 7 5

0 -1

Vidimo da se operatori mogu koristiti i pri matematikim operacijama. Elemente polja je mogue zameniti specijalnim MATLAB-ovim brojem eps, koji iznosi aproksimativno 2.2exp(-16). Ova konkretna vrijednost je ponekad korisna da bi se izbjeglo djeljenje sa nulom. B=B+(B==0)*eps B= Columns 1 through 7 8.0000 7.0000 6.0000 5.0000 4.0000 Columns 8 through 9 1.0000 0.0000

3.0000

2.0000

Sledei primer izraunava vrednosti funkcije sinc(x) uz upozorenje da je peti broj nula. x=(-3:3)/3 x= -1.0000 -0.6667 -0.3333 sin(x)./x Warning: Divide by zero ans = 0.8415 0.9276 0.9816

0 0.3333 0.6667 1.0000

NaN 0.9816 0.9276 0.8415

Poto izraz 0/0 nije definisan dobijamo upozorenje NaN, sa znaenjem Not a number. Ako se sada nula zameni sa eps x=x+(x==0)*eps; sin(x)./x ans = 0.8415 0.9276 0.9816 1.0000 0.9816 rezultat je korektan.

0.9276

0.8415

39

MATLAB uputstvo za upotrebu

Logiki operatori Logiki operatori se koriste za kombinovanje sa relacionim ili za njihovo negiranje.

& | ~

- logiko "i" - logiko "ili" - negacija

Evo nekoliko primera A=1:9;B=9-A; tf=A>4 tf = 0 0 0 0 tf= ~ (A>4) tf = 1 1 1

tf=(A>2)&(A<6) tf = 0 0 1 1 1

U poslednjem primeru su kao rezultat vraene jedinice za elemente koji su vei od dva i manji od est. Na ovaj nain je mogue generisati deo neke funkcije tako to se vrednosti koje elimo da zadrimo mnoe sa jedinicom, a one koje ne elimo sa nulom (preporuujemo da ovo uradite u obliku m-fajla). x=linspace(0,10,100); y=sin(x); z=(y>=0).*y; z=z+0.5*(y>0); z=(x<=8).*z; plot(x,z) xlabel('x'),ylabel('z=f(x)'), title( 'Diskontinualna funkcija')

40

MATLAB uputstvo za upotrebu

Kao dodatak gore navedenim relacionim i logikim operatorima MATLAB posjeduje tako e niz relacionih i logikih funkcija: xor(x,y) - ex-ili operacija any(x) - vraa jedinicu ako je bilo koji element vektora x nenulte vrednosti ili vraa jedinicu za svaki element neke matrice x koji je nenulte vrednosti all(x) - vraa jedinicu ako su svi elementi vektora x razliiti od nule. Ovo se odnosi i na elemente kolona matrica isnan(x) - vraa jedinicu na mjestu elementa NaNs isinf(x) - vraa jedinicu na mjestu elementa Infs finite(x) - vraa jedinicu na mjestu elementa konane vrednosti.

Kontrolne petlje
Razni programski jezici nude mnotvo struktura koje omoguuju kontrolu toka programa. MATLAB nudi tri vrste ovakvih petlji: for petlje while petlje if else end strukture Zbog njihovog estog korienja one se smetaju u mfajlove, jer je na taj nain izbegnuta potreba za stalnim ponovnim unoenjem ovih struktura.
For petlje Ovaj tip petlji omoguuje da se neka grupa naredbi izvri unapred definisan broj puta. Sintaksa ove petlje je sljedea:

for x=(a:inkrement:b) blok naredbi end for n=1:10 x(n)=sin(n*pi/10); end

41

MATLAB uputstvo za upotrebu

x x= Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 Columns 8 through 10 0.5878 0.3090 0.0000

0.9511

0.8090

For petlja se ne moe ograniiti, odnosno prekinuti redefinisanjem promjenjive unutar same petlje. for n=1:10 x(n)=sin(n*pi/10); n=10; end

x x= Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 Columns 8 through 10 0.5878 0.3090 0.0000 U okviru for petlje se moe definisati bilo kakvo polje data=[3 9 45 6; 7 16 -1 5[ data = 3 9 45 6 7 16 -1 5 for n=data x=n(1)-n(2) end x= -4 x= -7 x= 46 x= 1 Tako e mogu da se koriste i ugnjedene for petlje for n=1:5 for m=5:-1:1 A(n,m)=n2+m2; end disp(n) end

0.9511

0.8090

42

MATLAB uputstvo za upotrebu

1 2 3 4 5 A A= 2 5 10 17 26

5 10 17 8 13 20 13 18 25 20 25 32 29 34 41

26 29 34 41 50

For petlje treba izbegavati kad god je do reenja mogue doi korienjem vektorizovanog pristupa. Oba pristupa vode istom reenju, ali je drugi bri i zahteva esto manje kucanja.
While petlje Sintaksa ove petlje je

while izraz blok naredbi end Blok naredbi izme u while i end se izvrava dok god je izraz istinit. num=0;EPS=1; while (1+EPS)>1 EPS=EPS/2; num=num+1; end num num = 53 EPS=2*EPS EPS = 2.2204e-016 U ovom primeru je prikazan jedan od naina izraunavanja vrednosti eps. Eps kree od jedinice i sve dok je uslov (1+EPS)>1 zadovoljen naredbe unutar while petlje se izvravaju. Eps se stalno deli sa dva i kada postane tako mali da (eps+1) vie nije vee od jedinice petlja se zavrava. Ovo se deava zbog ogranienog broja decimalnih mjesta predvi| nih za predstavljanje realnog broja.
If-else-end strukture Sintaksa: if izraz blok naredbi end

43

MATLAB uputstvo za upotrebu

Npr. a=10; c=a*25 c= 250 if a>5 c=(1-20/100)*c; end c c= 200 U sluaju da postoji i druga alternativa ova struktura ima sledei oblik if izraz blok naredbi koje se izvravaju ako je izraz istinit else blok naredbi koje se izvravaju ako je izraz nije istinit end

Efikasnost izvravanja programa u Matlabu


Matlab pripada grupi interpreterskih programskih jezika. Kada se naredba unosi kucanjem u komandnom prozoru, ona se prvo interpretira a zatim izvrava. Ako se radi o programu, onda se naredbe redom uitavaju, interpretiraju i izvravaju. Ukoliko u programu postoje petlje, svaka instrukcija u petlji se u svakom prolazu uitava, interpretira i izvrava. U sluaju kada se radi sa velikim koliinama podataka, kakav je sluaj u obradi govora ili slike, to moe ozbiljno poveati vreme izvrenja programa. Stoga je od interesa razmotriti mehanizme za procenu sloenosti programa i naine za popravljanje efikasnosti programa.
Merenje vremena izvravanja programa Merenje vremena izvravanja programa, ili dela programa, u Matlabu je omogueno korienjem naredbi tic i toc. One se primenjuju na sledei nain:

tic { blok naredbi toc Prvom naredbom tic se aktivira merenje vremena (toperica). Druga naredba toc oitava sadraj brojaa bez resetovanja. Resetovanje brojaa se vri novom naredbom tic. Naredba toc moe imati i oblik t = toc, ime se omoguava pamenje prolaznih vremena tokom izvravanja nekog sloenog programa. Na primer neka je potrebno generisati matricu sluajnih brojeva 100100, invertovati je i izmeriti vreme izvrenja programa. tic a = rand(100); b = inv(a); toc

44

MATLAB uputstvo za upotrebu

Izvravanjem ovog programa dobija se na ekranu rezultat: Elapsed time is 0.140000 seconds.
Poveanje efikasnosti izvravanja programa Radi poveanja efikasnosti izvravanja programa, to je od ogromne vanosti kod realizacije sloenih algoritama, potrebno je izbegavati upotrebu programskih petlji to je vie mogue. Da bi ilustrovali potrebu za izbegavanjem programskih petlji posmatrajmo generisanje odbiraka diskretne sinusoide pomou programa:

for t=1:5000 y(t) = sin(2*pi*t/10); end Merenjem vremena izvrenja ovog programa dobija se vreme od 0.18 s. Ako sada umesto 5000 odbiraka generiemo 20000 odbiraka sinusoide, novo vreme izvrenja e biti 2.1 s, dakle ne etiri nego 11.7 puta due. Razlog za to je dinamiko poveanje duine vektora y, za po jedan u svakom prolazu kroz petlju. Postoji jednostavan nain za ubrzanje izvrenja opisanog programa. Ako se pre ulaska u petlju rezervie prostor u memoriji za ceo vektor (ili matricu), to se nalake izvodi naredbom za popunjavanje nulama, program se znaajno ubrzava, tako da je vreme izvrenja programa: y = zeros(1,20000); for t=1:20000 y(t) = sin(2*pi*t/10); end samo 0.16 s, dakle ak krae nego za poetnu verziju programa sa 5000 odbiraka. Jo bre izvrenje se moe postii potpunim izbegavanjem izraunavanja u petlji: y = zeros(1,20000); t = 1:20000; y = sin(2*pi*t/10); Ovaj program traje samo 0.04 s.

45

You might also like