You are on page 1of 256

Igor Đurović Zdravko Uskoković

Ljubiša Stanković

MATLAB for Windows

PODGORICA, DECEMBAR 1996.


PREDGOVOR

Ova knjiga je nastala kao rezultat iskustva autora u


pedagoškom i istraživačkom radu sa programskim paketom
MATLAB. Namijenjena je širokom krugu čitalaca, a posebno
studentima, inženjerima, profesorima i naučnim radnicima prirodnih,
matematičkih i tehničkih nauka.

Knjiga je dopuna knjige PC-MATLAB sa elementima MS DOS-


a koja je napisana 1991. Naime u me|uvremenu značajnu prednost
nad MS DOS okruženjem uzela su grafička okruženja posebno
Windows. Tako se danas intenzivno koriste verzije MATLAB za
Windows. Koncepcija knjige u suštini ostala je ista. Dopune se prije
svega odnose na grafičko okruženje, brojne nove funkcije i
mogućnosti grafičkog prikaza, kao i složene mogućnosti upravljanja
graficima i grafičkim okruženjem. Posebne napomene se odnose na
promjene u semanatici samog MATLAB-a koje nijesu znatne.

Knjiga je zamišljena kao udžbenik i kompletan priručnik za


upoznavanje i rad sa MATLAB for Windows. Zbog toga su dati prilozi
sa osnovnim elementima Windowsa i Notepada.

Autori se unaprijed izvinjavaju za eventualne propuste i biće


zahvalni na primjedbama i sugestijama koje bi doprinijele poboljšanju
knjige.

Podgorica, april 1998. Autori

i
SADR@AJ

PREDGOVOR .................................................................................i
SADR@AJ .................................................................................... iii
UVOD............................................................................................ xi

KAKO PO^ETI RAD U MATLAB-u ................................................ 1

GLAVA PRVA
OSNOVNE FUNKCIJE.................................................................. 5
1.1 UNO[ENJE PODATAKA ......................................................................... 5
1.2 FORMATIRANJE MATRICE SPECIJALNE STRUKTURE .................... 7
1.3 FUNKCIJE OP[TE NAMJENE ................................................................ 9
1.3.1 Operatori za pomo} pri radu....................................................... 9
1.3.2 Informacije o varijablama i fajlovima........................................ 11
1.3.3 Brisanje i ~uvanje podataka..................................................... 14
1.3.4 Informacije o sistemu ............................................................... 16
1.4 ISKAZI I VARIJABLE ............................................................................ 17
1.5 BROJEVI I ARITMETI^KI IZRAZI ......................................................... 19
1.6 KOMPLEKSNI BROJEVI I MATRICE ................................................... 20
1.7 IZLAZNI FORMAT................................................................................. 22
1.8 GENERISANJE VEKTORA POMO]U KARAKTERA :
(DVIJE TA^KE) ..................................................................................... 24
1.9 INDEKSI I MANIPULACIJA VRSTAMA I KOLONAMA ........................ 27

GLAVA DRUGA
ELEMENTARNE OPERACIJE .................................................... 33
2.1 TRANSPONOVANJE............................................................................ 33
2.2 SABIRANJE I ODUZIMANJE................................................................ 35
2.3 MNO@ENJE MATRICA........................................................................ 37
2.4 MNO@ENJE POLJA BROJEVA .......................................................... 39
2.5 DETERMINANTA I INVERZNA MATRICA ........................................... 40
2.6 "DIJELJENJE" MATRICA ..................................................................... 42
2.7 DIJELJENJE POLJA BROJEVA ........................................................... 43
2.8 STEPENOVANJE MATRICA ................................................................ 45
2.9 STEPENOVANJE POLJA BROJEVA................................................... 48
2.10 ELEMENTARNE MATRI^NE FUNKCIJE ............................................. 49
2.10.1 Funkcija abs, angle, real, imag i conj....................................... 51

iii
2.10.2 Funkcije za zaokru`ivanje ........................................................ 53
2.10.3 Eksponencijalna, logaritamska, stepena i funkcija
kvadratnog korjena .................................................................. 55
2.10.4 Trigonometrijske, hiperbolne i njima inverzne funkcije ............ 57
2.10.5 Besselove, beta, gama i funkcije gre{ke .................................. 60
2.10.6 Specifi~ne numeri~ke funkcije................................................. 63
2.11 FUNKCIJE ZA MANIPULACIJU MATRICAMA..................................... 66

GLAVA TRE]A
GRAFIKA .................................................................................... 69
3.1 GRAFI^KO PREDSTAVLJANJE MATRICA, VEKTORA I
FUNKCIJA JEDNE PROMJENLJIVE ................................................... 69
3.1.1 Osnovni oblik ........................................................................... 69
3.1.2 Vi{e funkcija na istom crte`u .................................................... 71
3.1.3 Vrste linija i oznaka .................................................................. 75
3.1.4 Ozna~avanje osa i grafika ....................................................... 76
3.1.5 Grafici kompleksnih funkcija .................................................... 77
3.1.6 Skaliranje osa .......................................................................... 78
3.1.7 Grafici polarnih funkcija............................................................ 80
3.1.8 Grafici sa logaritamskom podjelom.......................................... 81
3.1.9 Stepenasti (bar) grafici............................................................. 83
3.1.10 Prikaz diskretnih veli~ina ......................................................... 84
3.1.11 Popunjeni crte`i ........................................................................ 85
3.1.12 Grafici kompleksnih veli~ina .................................................... 86
3.1.13 Grafici sa pokretnim krajem ..................................................... 86
3.2 GRAFI^KOPREDSTAVLJENJE FUNKCIJA DVIJE
PROMJENLJIVE I MATRICA................................................................ 87
3.2.1 Trodimenzionalni linijski crte`................................................... 87
3.2.2 "Trodimenzionalni" grafici mre`astih povr{ina .......................... 88
3.2.3 Grafici obojenih povr{ina .......................................................... 90
3.2.4 Konturni grafici ......................................................................... 91
3.2.5 Prikazivanje funkcija pomo}u kolornih mapa ........................... 95
3.2.6 Prikazivanje cilindara i sfera .................................................... 97
3.3 GRAFI^KI PRIKAZ FUNKCIJA TRI PROMJENLJIVE .......................... 98
3.4 PROMJENA DIMENZIJA GRAFIKA (VI[E GRAFIKA U
GRAFI^KOM PROZORU) ..................................................................... 99
3.5 RAD SA VI[E OTVORENIH GRAFI^KIH PROZORA.......................... 101
3.6 NAREDBE ZA ELEMEMNTARNU KONTROLU BOJA ...................... 102
3.7 GRAFI^KE KOMANDE ....................................................................... 105
3.7.1 [tampanje i memorisanje grafika................................................ 105
3.8 POKRETNE SLIKE - FILMOVI ........................................................... 107
iv
GLAVA ^ETVRTA
ANALIZA PODATAKA............................................................... 109
4.1 MAKSIMALNA I MINIMALNA VRIJEDNOST ..................................... 110
4.2 URE\IVANJE PODATAKA, SREDNJA VRIJEDNOST I
MEDIJANA .......................................................................................... 112
4.3 STANDARDNO ODSTUPANJE, KOVARIJANSA I
KORELACIJA...................................................................................... 113
4.4 SUMA I PROIZVOD ELEMENATA ..................................................... 114
4.5 PRIMJENA SUM I CUMSUM ZA RA^UNANJE
INTEGRALA........................................................................................ 116
4.6 RAZLIKA ELEMENATA I PRIBLI@NO
DIFERENCIRANJE FUNKCIJA .......................................................... 120

GLAVA PETA
PROGRAMIRANJE I M-FAJLOVI ............................................. 125
5.1 PISANJE M-FAJLOVA U NOTEPADU ............................................... 125
5.2 UPRAVLJANJE TOKOM PROGRAMA .............................................. 127
5.2.1 Interakcija sa korisnikom ....................................................... 127
5.2.2 For petlja ................................................................................ 129
5.2.3 While petlja............................................................................. 131
5.2.4 If naredba ............................................................................... 132
5.2.5 Grafi~ki meni.......................................................................... 134
5.2.6 Break naredba ....................................................................... 135
5.2.7 Error naredba......................................................................... 135
5.2.8 Naredbe vezane za logi~ke operacije ................................... 135
5.3 FUNKCIJSKI FAJLOVI ....................................................................... 136
5.4 TEKSTUALNE PROMJENLJIVE (STRINGOVI)................................. 141
5.5 FUNKCIJE ^IJI SU ARGUMENTI DRUGE FUNKCIJE ...................... 147

GLAVA [ESTA
GRAFI^KI OBJEKTI .................................................................. 153
6.1 OSNOVNI EKRAN (ROOT) ................................................................ 153
6.2 GRAFI^KI PROZOR (FIGURE) .......................................................... 156
6.3 KONTROLA OSA................................................................................ 158
6.4 GRAFI^KI OBJEKTI OD KOJIH SE SASTOJI GRAFIK ..................... 163
6.4.1 Linija - line .............................................................................. 163
6.4.2 Popunjeni poligon - patch ...................................................... 165
6.4.3 Povr{ina - surface................................................................... 166
6.4.4 Kolorna slika matrice - image ................................................ 166
5
6.4.5 Tekstualni objekat - text ......................................................... 167
6.5 GRAFI^KE KONTROLE...................................................................... 168
6.5.1 Frame kontrola....................................................................... 168
6.5.2 Text kontrola .......................................................................... 169
6.5.3 Edit kontrola ........................................................................... 169
6.5.4 Popupmenu kontrola.............................................................. 171
6.5.5 Radio kontrola........................................................................ 171
6.5.6 Check kontrola ....................................................................... 172
6.5.7 Slider kontrola ........................................................................ 172
6.5.8 Pushbutton kontrola ............................................................... 173
6.6 UIMENU .............................................................................................. 173
6.7 INTERAKTIVNI PROGRAM ZA CRTANJE 2-D CRTE@A ................ 175
6.7.1 Program d2crtez.m ................................................................ 176
6.7.2 Program za prora~un i crtanje - crtanje.m ............................. 180
6.7.3 Pomo}ni prozor - pomocni.m ................................................. 183
6.7.4 Potprogram - funk.m .............................................................. 184

GLAVA SEDMA
POLINOMI I OBRADA SIGNALA .............................................. 185
7.1 POLINOMI........................................................................................... 185
7.1.1 Definicija polinoma................................................................. 185
7.1.2 Karakteristi~ni polinomi i sopstvene vrijednosti matrice ........ 187
7.1.3 Mno`enje polinoma ................................................................ 188
7.1.4 Izra~unavanje polinoma......................................................... 188
7.1.5 Dijeljenje polinoma................................................................. 189
7.1.6 Razvoj u racionalne razlomke................................................ 190
7.1.7 Interpolacija polinomom ......................................................... 191
7.2 OBRADA SIGNALA ............................................................................ 193
7.2.1 Fourierova analiza ................................................................. 194
7.2.1.1 Teorijski pregled........................................................ 194
7.2.1.2 Ra~unanje................................................................. 195
7.2.1.3 Preure|ivanje rezultata .............................................. 195
7.2.1.4 Inverzna transformacija ............................................ 198
7.2.1.5 Dvodimenziona transformacija ................................. 198
7.2.2 Ra~unanje i crtanje frekventnog odziva ................................ 199
7.2.2.1 Analogni domen ........................................................ 199
7.2.2.2 Diskretni domen ........................................................ 200
7.2.3 Ra~unanje signala na izlazu iz diskretnog sistema............... 201
7.2.4 Kroskorelaciona funkcija i spektralna gustina snage
slu~ajnog signala ................................................................... 202
7.2.5 Dvodimenzionalni signali ....................................................... 203
vi
GLAVA OSMA
LINEARNA ALGEBRA I MATRI^NE FUNKCIJE ....................... 205
8.1 SOPSTVENE VRIJEDNOSTI I SOPSTVENI VEKTORI..................... 206
8.2 Q-Z DEKOMPOZICIJA ....................................................................... 210
8.3 SINGULARNE VRIJEDNOSTI I PRIDRU@ENA KOMPOZICIJA MATRICA
............................................................................................................ 210
8.4 NORME VEKTORA I MATRICA ......................................................... 212
8.5 KONDICIONI BROJ MATRICE........................................................... 215
8.6 TROUGAONA (L-U) DEKOMPOZICIJA ............................................. 216
8.7 HESSENBERGOVA NORMA I SCHUROVA KOMPOZICIJA............ 217
8.8 CHOLESKY-JEVA FAKTORIZACIJA ................................................. 220
8.9 ORTOGONALNA (Q-R) DEKOMPOZICIJA ....................................... 221
8.10 RANG, BAZIS ZA SLIKU I KERNEL LINEARNOG
OPERATORA...................................................................................... 223
8.11 MOORE-PENROSE PSEUDOINVERZIJA MATRICE ....................... 225
8.12 RJE[AVANJE SISTEMA LINEARNIH JEDNA^INA ............................ 226
8.12.1 Homogeni sistem jedna~ina .................................................. 226
8.12.2 Sistem sa ve}im brojem nepoznatih od broja jedna~ina........ 227
8.12.3 Sistem sa ve}im brojem jedna~ina od broja nepoznatih........ 229
8.13 MATRI^NE FUNKCIJE........................................................................ 230

GLAVA DEVETA
RIJETKE MATRICE .................................................................. 233
9.1 KREIRANJE RIJETKE MATRICE....................................................... 233
9.2 RIJETKE MATRICE I FUNKCIJE ....................................................... 236
9.3 KONVERZIJA RIJETKE MATRICE U PUNU I
OBRNUTO .......................................................................................... 237
9.4 GRAFI^KI PRIKAZ RIJETKE MATRICE I DRVETA ........................... 238

GLAVA DESETA
ULAZNO IZLAZNE NAREDBE.................................................. 241
10.1 PREGLED JEDNOSTAVNIH U/I NAREDBI ....................................... 241
10.2 ULAZNO/IZLAZNE NAREDBE NISKOG NIVOA................................ 242
10.2.1 Otvaranje i zatvaranje fajla .................................................... 242
10.2.2 Neformatizovani ulaz/izlaz ..................................................... 243
10.2.3 Faktorizovani ulaz/izlaz.......................................................... 244
10.2.4 Pozicioniranje u fajlu .............................................................. 246
10.3 ZAPISIVANJE FAJLOVA U LOTUS FORMATU ................................ 247
10.4 SNIMANJE I U^ITAVANJE ZVU^NIH PODATAKA ............................ 248
7
GLAVA JEDANAESTA
MATLAB OKRU@ENJE............................................................ 249
11.1 OSNOVNI MATLAB I DODATNI MODULI.......................................... 249
11.2 STRUKTURA MATLABA .................................................................... 249
11.3 MENI KOMANDNOG PROZORA MATLABA ..................................... 250
11.3.1 File meni................................................................................. 250
11.3.2 Edit meni ................................................................................ 251
11.3.3 Options meni .......................................................................... 251
11.3.4 Windows meni........................................................................ 252
11.3.5 Help meni ............................................................................... 252
11.4 OPCIJE MENIJA GRAFI^KOG PROZORA ........................................ 252
11.4.1 File meni................................................................................. 252
11.4.2 Edit meni ................................................................................ 252

GLAVA DVANAESTA
SISTEMSKI ZAHTJEVI I INSTALACIJA MATLABA .................. 253
12.1 SISTEMSKI ZAHTJEVI ....................................................................... 253
12.2 INSTALACIJA MATLABA ................................................................... 253

PRILOG PRVI
LISTA FUNKCIJA MATLABA .................................................... 255
SPISAK OBLASTI KOJE OBUHVATA HELP .................................................. 255
COLOR ............................................................................................................ 255
DATAFUN ........................................................................................................ 256
DDE.................................................................................................................. 257
DEMOS ............................................................................................................ 257
ELFUN ............................................................................................................. 257
ELMAT ............................................................................................................. 258
FUNFUN .......................................................................................................... 259
GENERAL ........................................................................................................ 259
GRAPHICS ...................................................................................................... 260
IOFUN .............................................................................................................. 261
LANG ............................................................................................................... 261
LOCAL ............................................................................................................. 262
MATFUN .......................................................................................................... 262
OPS.................................................................................................................. 263
PLOTXY ........................................................................................................... 264
PLOTXYZ......................................................................................................... 264
POLYFUN ........................................................................................................ 265
8
SOUNDS.......................................................................................................... 266
SPARFUN ........................................................................................................ 266
SPECMAT........................................................................................................ 267
STRFUN........................................................................................................... 267

PRILOG DRUGI
WINDOWS ................................................................................ 269
P2.1 STARTOVANJE WINDOWSA 3.1X I IZGLED OSNOVNOG
EKRANA ............................................................................................. 269
P2.2 PROGRAM MANAGER ...................................................................... 270
P2.2.1 Opcije menija Program Managera ......................................... 272
P2.3 ISTOVREMENI RAD VI[E PROGRAMA - MULTYTASKING ............. 273
P2.4 NAJVA@NIJI WINDOWS PROGRAMI .............................................. 274
P2.5 OSNOVNO O WINDOWSU 95 ........................................................... 276
P2.5.1 Izgled radne povr{ine Windowsa 95 ...................................... 277

PRILOG TRE]I
NOTEPAD ................................................................................. 279

PRILOG ^ETVRTI
NEKE MOGU]NOSTI VERZIJE MATLAB 5............................... 283

LITERATURA ............................................................................ 285

INDEKS ..................................................................................... 287

ix
UVOD
MATLAB je viši programski jezik razvijen sredinom 80-tih. Prva verzija
pisana je u Fortranu, a kao osnova su uzeti paketi LINPACK i EISPACK. Nove
verzije MATLAB-a (1987 i 1989) napisane su u jeziku C, a distribuira ga softverska
kompanija The Math Works Inc.
MATLAB je, za relativno kratko vrijeme, postao standardni programski
paket na vodećim univerzitetima i istraživačkim institutima. Koristi se u uvodnim
kursevima linearne algebre i numeričke analize kao i u kursevima ostalih
matematičkih i tehničkih disciplina. U industriji se koristi za izračunavanja pri
rješavanju praktičnih i istraživačkih problema. Problemi i rješenja se izražavaju na
sličan način kao i u standardnim matematičkim formulacijama i to bez potrebe za
tradicionalnim programiranjem. Na taj način se numerički problemi rješavaju za
samo djelić vremena koje bi bilo potrebno za pisanje programa u nekom od nižih
jezika (Fortran, Basic, C).
Zbog velike popularnosti, razvijene su različite verzije MATLAB-a
prilago|ene pojedinim računarskim sistemima. Ovdje predstavljamo verziju
MATLAB for Windows (grupa verzija 4) koja se koristi u Windows operativnim
sistemima, kako onim pod MS DOS-om (Windows 3.1x), tako i modernijim (NT i
95).
Osnovni elementi svih prethodnih verzija MATLAB-a su identični, a
me|usobno se razlikuju po broju raspoloživih funkcija i po sistemskim
ograničenjima. U ovoj knjizi je prezentiran MATLAB for Windows, čije poznavanje
omogućava direktno korišćenje i svih ostalih implementacija MATLAB-a jer se
njihove dodatne mogućnosti i ograničenja jednostavno otkrivaju.
MATLAB pruža izvanredne mogućnosti kreiranja novih funkcija za
specijalizovane oblasti primjene. Takve funkcije se obično grupišu u posebne
pakete, takozvane Toolbox-ove. Neke od njih nudi i sam proizvo|ač MATLAB-a:
SIGNAL PROCESSING, CONTROL, OPTIMIZATION, IDENTIFICATION,
SYMBOLIC MATH i sl. ^itaocima preporučujemo da kreiraju sopstvene Toolbox-
ove. Sastavni dio MATLAB-a kao posebni modul je i SIMULINK koji služi za
simulaciju dinamike sistema.
Napomenimo da postoje verzije MATLAB-a prilagodjene širokom opsegu
kompjuterskih sistema: Apple Macintosh, Sun, Apollo, HP, DECstations i DEC
VAX, Stardent Titan, Convex, kao i za Alliant i Cray superkompjutere.

xi
MATLAB for Windows

Kako početi rad u MATLAB-u

U ovom kratkom uvodu predpostavljamo da je MATLAB for Windows


već instalisan i da postoji na računaru. MATLAB for Windows postoji za sve
značajnije operativne sisteme, a ovdje se pretpostavlja da se radi na PC-iju
pod operativnim sistemima DOS/Windows 3.1x ili Windows 95. Opi{imo prvo
način startovanja MATLAB-a pod Windowsom 3.1x. Korisnicima ove platforme,
po uključivanju računara, na ekranu se obično pojavi sljedeći znak:
C:\>
koji nazivamo PROMPT, i koji predstavlja znak spremnosti računara da primi
naredbu. Windows 3.1x startujemo sa:
C:\>win
uz pritisak na taster Enter. Prilikom uključivanja Windows-a startuje se osnovna
aplikacija a to je najče{će Program Manager (Slika 1). Uočava se da je ova
aplikacija podijeljena u programske grupe unutar kojih se nalaze ikone. Uočimo
da prozor pored ovih svojih elemenata posjeduje i liniju menija. Ako je MATLAB
pravilno instalisan postoji grupa MATLAB, unutar koje se nalazi ikona
MATLAB. Windows karakteri{e upotreba mi{a. MATLAB se može startovati
dvostrukim klikom mi{a (brzim dvostrukim pritiskom na lijevi taster).
Alternativno, kada je označena ikona MATLAB dovoljno je pritisnuti taster
Enter.
Windows 95 je operativni sistem koji se uobičajeno startuje
uključivanjem računara. Na radnoj povr{ini Windows-a 95 vidimo raspore|ene
ikone. Pod pretpostavkom da je kreirana prečica za MATLAB (Shortcut
MATLAB) postupak startovanja MATLAB-a je isti kao u Windows-u 3.1x. (Slika
2).
Kada se startuje MATLAB, poslije pozdravnog ekrana, pojavljuje se
Matlabov komandni prozor, koji je dat na slici 3. Dakle i ovaj prozor ima svoj
naziv (MATLAB Command Window), liniju menija i radni prostor. Komandni
prompt MATLAB-a je znak >> pored kojeg se nalazi kursor, horizontalna
trepćuća linija.

1
Kako početi

Slika 1: Program Manager Windowsa 3.1x

2
MATLAB for Windows

Slika 2: Windows 95 radna povr{ina

Slika 3: Komandni MATLAB-ov prozor

Pored ovih pojmova uvedimo jo{ jedan neophodan pojam. To je grafički


prozor. Kada se crta neki grafik, otvara se grafički prozor, na primjer kao na
slici 4.

3
Kako početi

Slika 4: Jedan mogući izgled grafičkog prozora

4
MATLAB for Windows

glava prva

OSNOVNE FUNKCIJE
Osnovni objekat nad kojim se vrše razne operacije u MATLAB-u čini
niz brojeva (array of numbers) pore|an u m vrsta i n kolona, koji ćemo uslovno
zvati pravougaona (m x n) matrica. Naime, ovako ure|eni brojevi mogu
predstavljati neki linearni operator, dakle matricu u uobičajenom smislu, ali ih
MATLAB može interpretirati i kao tabelarni prikaz nekih podataka koje treba
obraditi na odre|eni način.
Fleksibilnosti MATLAB-a znatno doprinose i sljedeće osobine:
(1) Ne sadrži iskaze za odre|ivanje dimenzije ili tipa matrice, već se odre|eni
prostor pridružuje automatski, sve do iznosa ograničenog svakim
pojedinačnim računarom.
(2) Svi specijalni slučajevi pravougaone matrice (m=n>1-kvadratna matrica,
m=1-vektor vrsta, n=1-vektor kolona, m=n=1-skalar) prirodno slijede pravila
za opšti slučaj, osim u nekim operacijama kada je za vektore i skalare
odre|eno specijalno značenje. Zato ćemo, ukoliko nije posebno naglašeno,
pod pojmom "matrica" podrazumijevati bilo koji od navedenih slučajeva.
(3) Elementi matrice mogu biti realni ili kompleksni.
Operacije i iskazi u MATLAB-u pišu se, kadgod je to moguće, na prirodan
način kao što bi ih pisali na papiru.

1.1 UNO[ENJE PODATAKA

U MATLAB-u postoji više načina za unošenje matrica. Matrice malih


dimenzija najlakše se unose direktnim definisanjem liste elemenata.
Najprirodnije ih je unijeti po vrstama, pri čemu se uglaste zagrade [ i ] koriste
da ograniče listu elemenata. Elementi su razdvojeni blenkom ili zarezom dok
se znak ; ili tipka <Enter> koristi za odvajanje vrsta matrice.
Primjer 1.1.1 Unošenje izraza
»A=[1 -2 4;5 -6 8;7 -4 2]
rezultira u
5
Osnovne funkcije
A=
1 -2 4
5 -6 8
7 -4 2
Matrica A smještena je u radnu memoriju za kasniju upotrebu. Isti rezultat
imaćemo i unošenjem
»A=[1,-2,4;5,-6,8;7,-4,2]
ili
»A=[ 1 -2 4
5 -6 8
7 -4 2]
Ovaj zadnji način unošenja je pogodan jer imitira pisanje matrice na papiru, a
koristan je i kada imamo posla sa velikim matricama koje možemo razvući na
više ulaznih linija.
Primjer 1.1.2 Unošenje
»C=[123.0934 -24.934 -33.7634 945.3452 -345.8734 -39.246
-24.78 0.357 -45.98 -2.7 23.13 2]
rezultira u
C=
123.0934 -24.9340 -33.7634 945.3452 -345.8734 -39.2460
-24.7800 0.3570 -45.9800 -2.7000 23.1300 2.0000
Ukoliko elemente jedne vrste nije moguće smjestiti u jednoj ulaznoj liniji,
unošenje možemo nastaviti u narednoj, pri čemu sa ... naznačimo prenošenje
na sljedeću liniju.
Primjer 1.1.3 Unošenje
»B=[245.268 -0.6592 -35.9643 27.2754 -965.346 -345.723 ...
-34.97 54.678 35.28]
rezultira u
B=
Columns 1 through 7
245.2680 -0.6592 -35.9643 27.2754 -965.3460 -345.7230 -34.9700
Columns 8 through 9
54.6780 35.2800

6
MATLAB for Windows
Ukoliko unosimo "rijetke" (sparse) matrice, tj. one kod kojih je relativno
velik broj elemenata jednak nuli, pogodno je definisati nenulte elemente
pojedinačno, sa indeksima unutar malih zagrada ( ).
Primjer 1.1.4 Unošenje
»D(1,1)=2;D(1,4)=-3;D(3,5)=7
rezultira u
D=
2 0 0 -3 0
0 0 0 0 0
0 0 0 0 7
Gornji primjer ilustruje pomenutu osobinu MATLAB-a da se dimenzije
matrice automatski prilago|avaju. Pored toga, vidimo da se više iskaza može
napisati u jednoj liniji. Ukoliko su iskazi razdvojeni zarezima, rezultati će biti
prikazani na ekranu, dok znak ; poslije iskaza služi za suspendovanje
prikazivanja rezultata. Napomenimo da MATLAB raspolaže sa skupom funkcija
za rad sa ″rijetkim″ matricama sa kojima ćemo se sresti u narednim
poglavljima.

1.2 FORMIRANJE MATRICA SPECIJALNE STRUKTURE

U MATLAB-u je razvijen odre|eni broj matrica specijalne strukture.


Komande eye(n) i eye(m,n) daju jedinične matrice dimenzije (n x n) i (m x n),
respektivno. Komanda eye(X) daje jediničnu matricu iste dimenzije kao
prethodno formirana matrica X.
Komande ones(n) i ones(m,n) generišu matrice sa svim elementima
jednakim jedinici, a dimenzije su im (n x n) i (m x n), respektivno. ones(X) daje
matricu jedinica iste dimenzije kao matrica X. Komande zeros(n), zeros(m,n) i
zeros(X) na potpuno analogan način generišu matrice sa nulama.
Opcije ones(X), eye(X) i zeros(X) treba izbjegavati jer predstavljaju
ostatak ranijih verzija MATLAB-a. Prilikom njihove upotrebe javlja se sljedeće
upozorenje:
This usage of ones(X) is obsolete and will be eliminated
in future versions. Please use ones(size(X)) instead.
Funkcija magic(n) generiše matricu dimenzija (n x n) sa cjelobrojnim
elementima izme|u 1 i n2, sa osobinom da je zbir elemenata po vrstama i
kolonama konstantan.
7
Osnovne funkcije
Primjer 1.2.1 Komande
»X=ones(4,5),zeros(3),Y=eye(5,3),magic(5)
rezultiraju u
X=
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
ans =
0 0 0
0 0 0
0 0 0
Y=
1 0 0
0 1 0
0 0 1
0 0 0
0 0 0
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Primjećujemo da MATLAB sam kreira veličinu po imenu ans (answer=odgovor,
rezultat), ukoliko joj već nijesmo dodijelili ime operacijom pridruživanja (znak=).
Naravno, u radnom prostoru će ostati samo zadnja veličina pod tim imenom.
Naredba hilb(n) formira kvadratnu matricu dimenzija (n x n) čiji su elementi
vezani sa indeksima, po formuli 1/(i+j-1). Naredba pascal(n) formira kvadratnu
matricu dimenzija (n x n) kojoj elementi normalni na glavnu dijagonalu čine
Paskalov trougao
1
1 1
1 2 1
1 3 1 3
1 4 6 4 1
1 5 10 10 5 1

8
MATLAB for Windows
.....
Primjer 1.2.2 Unošenjem
» E=hilb(4),pascal(5)
dobijamo
E=
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
ans =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
Pored navedenih, matrice se mogu unositi i na druge načine:
- generisanjem pomoću iskaza i funkcija,
- kreiranjem u M-fajlovima,
- unošenjem iz spoljnih fajlova sa podacima.
O ovim mogućnostima MATLAB-a biće riječi kasnije.

1.3 FUNKCIJE OP[TE NAMJENE


1.3.1 OPERATORI ZA POMO] PRI RADU
Kao i svi Windows programi i MATLAB posjeduje bogat Help program.
Naredbom help u MATLAB-u je obezbije|ena "služba pomoći i informacija".
Ovo predstavlja veliku pogodnost posebno za početnike, ali je značajno i za
iskusne programere jer je teško memorisati veliki broj funkcija u MATLAB-u.
Postoji nekoliko verzija ove naredbe. Da bi se dobio spisak oblasti za
koje postoji sažeto uputstvo (pomoć), dovoljno je unijeti
»help
Dobijamo spisak od 21 oblasti koje help obuhvata. Spisak naredbi koje
obuhvataju jednu oblast dobijamo sa:
»help oblast
Informaciju o nekoj konkretnoj komandi ćete dobiti sa
»help komanda

9
Osnovne funkcije

Primjer 1.3.1 Korišćenjem naredbe help pribavićemo informacije o načinu


upotrebe same komande help, kao i o skupu naredbi dde i komande abs.
Unošenje
»help help,help dde,help abs
daje
HELP On-line documentation.
HELP, by itself, lists all primary help topics. Each primary topic
corresponds to a directory name on MATLABPATH.
"HELP topic" gives help on the specified topic. The topic can be
a command name or a directory name. If it is a command name, HELP
displays information on that command. If it is a directory name,
HELP displays the Table-Of-Contents for the specified directory.
It is not necessary to give the full pathname of the directory;
the last component, or last several components, are sufficient.
For example, "help general" and "help matlab/general" both list
the Table-Of-Contents for the directory toolbox/matlab/general.
LOOKFOR XYZ looks for the string XYZ in the first comment line
of the HELP text in all M-files found on MATLABPATH. For all files
in which a match occurs, LOOKFOR displays the matching lines.
MORE ON causes HELP to pause between screenfuls if the help text
runs to several screens.
See also LOOKFOR, WHAT, WHICH, DIR, MORE.

DDE Toolbox.
Version 1.0 1-Dec-93
Copyright (c) 1984-94 by The MathWorks, Inc.

DDE Client Functions.


ddeadv - Set up advisory link.
ddeexec - Send string for execution.
ddeinit - Initiate DDE conversation.
ddepoke - Send data to application.
ddereq - Request data from application.
ddeterm - Terminate DDE conversation.
ddeunadv - Release advisory link.

ABS Absolute value and string to numeric conversion.


ABS(X) is the absolute value of the elements of X. When
X is complex, ABS(X) is the complex modulus (magnitude) of
the elements of X.
See also ANGLE, UNWRAP.
ABS(S), where S is a MATLAB string variable, returns the
numeric values of the ASCII characters in the string.
It does not change the internal representation, only the
way it prints.
See also SETSTR.

Pored ovakvog help-a MATLAB posjeduje help organizovan u obliku


hiperteksta. Naime u liniji menija osnovnog MATLAB prozora postoji opcija
Help koja se može pozvati tasterskom kombinacijom Alt+H ili klikom miša.
Izborom opcije Table of Contents otvara se prozor za pregledom oblasti koje
10
MATLAB for Windows
MATLAB obuhvata. Nazivi oblasti su istaknuti iz ostalog teksta, i klik miša na
naziv oblasti daje pregled svih naredbi koje oblast obuhvata. Klikom na
odgovarajuću naredbu dobijaju se osnovne informacije o njoj. Tokom čitanja
helpa pritiskom na Back možemo se vratiti na prethodnu temu help-a ili sa
History na neku temu koju ste tokom te sesije pokrenuli. Postoji i Index koji
obuhvata abecedni spisak svih naredbi MATLAB-a.
Za ilustrovanje mogućnosti MATLAB-a, prire|eni su uzorci raznih
programa, koji se mogu pozvati naredbama
»demo
»expo
Programi koji su obuhvaćeni ovim demo programima predstavljaju dobru školu
za svakog MATLAB programera. Zato se obavezno treba upoznati sa
tekstovima samih programa o kojima možete čitati u oblasti help demos.
MATLAB početnicima preporučujemo da startuju i uvodni program
»intro

1.3.2 INFORMACIJE O VARIJABLAMA I FAJLOVIMA

Za prikazivanje direktorijuma veličina iz radnog prostora koristi se


naredba who. Ukoliko ste proradili dosadašnje primjere, unošenjem
»who
dobija se:
Your variables are:
A C E Y
B D X ans
Pored ovih, MATLAB posjeduje i pojedine konstante uvedene da bi
potpomogle jednostavniji rad i da bi pratile uobičajeni način matematičke
notacije.
Veličina eps koristi se kao tolerancija pri nekim proračunima kao što su
odre|ivanje singularnosti ili ranga matrice. Njena početna vrijednost je
rastojanje izme|u 1.0 i sljedećeg većeg realnog broja sa pokretnim zarezom. U
IEEE aritmetici koja se koristi na većini personalnih računara, uzima se da je
eps=2-52
što približno iznosi 2.22*10-16. Ukoliko je to neophodno, korisnik može ovoj
promjenljivoj dati bilo koju vrijednost, uključujući i nulu.
11
Osnovne funkcije

Veličina pi je ustvari Ludolfov broj π, koji se unaprijed izračuna na neki


od mogućih načina.
Veličina inf predstavlja skraćenicu od infinity (beskonačno) i koristi se
na veoma malom broju sistema i računarskih jezika. Na nekim računarima
omogućena je IEEE aritmetikom, implementiranom na matematičkom
koprocesoru. Na drugim računarima koristi se softver sa pokretnim zarezom za
simuliranje matematičkog koprocesora. Neki od načina da se generiše inf su
»s=1/0, s1=-1/0
što daje
s=
Inf
s1=
-Inf
Warning:divide by zero
Na mašinama sa IEEE aritmetikom dijeljenje sa nulom ne dovodi do prekida
izvršavanja ili greške. Ispisuje se poruka upozorenja i specijalna veličina koja
se ponaša korektno u kasnijim izračunavanjima.
Veličina NaN je IEEE broj koji je povezan sa Inf, ali ima različito
značenje. Dolazi od izraza Not a Number (nije broj) i može se generisati sa
inf/inf ili 0/0.
Promjenljive pi, eps, NaN, Inf su stalne promjenljive a, pored ovog,
MATLAB podržava koncepciju globalnih promjenljivih. Globalne promjenljive su
one veličine koje važe u svim fajlovima. Podatke o definisanim globalnim
promjenljivim možemo vidjeti naredbom
»who global
Detaljnije informacije o veličinama iz tekućeg radnog prostora mogu se
dobiti naredbom whos odnosno whos global, koja daje ne samo imena
varijabli već i njihove dimenzije i indikaciju prisustva kompleksnih elemenata.
Tako|e ovom naredbom dobijamo informaciju o gustini matrice. Za matrice koje
nijesu rijetke ova je gustina Full dok je za rijetke matrice data u procentima koji
predstavljaju procenat nenultih elemenata matrice.
Za prikazivanje liste direktorijuma M, MEX i MAT-fajlova, može
poslužiti naredba what. Tako naredba
»what
prikazuje sadržaj tekućeg direktorijuma a
12
MATLAB for Windows
»what ime_direktorijuma
prikazuje sadržaj direktorijuma specificiranog imenom.
Naredba which ime_funkcije traži poziciju na disku specificirane MATLAB
funkcije iz M ili MEX fajlova.
Za provjeru postojanja neke veličine ili fajla koristi se naredba exist.
Tako unošenje
»exist('A')
daje 1 ako je A veličina iz radnog prostora, 2 ako je A.M ime nekog fajla na
disku, 3 ako je A.MEX ime funkcije na disku, 4 ako je A prevedena Simulink
funkcija, 5 ako je A ugra|ena funkcija i 0 ako A ne postoji. Naglasimo da ime
varijable ili fajla mora biti izme|u navodnika.
Primjer 1.3.3 Provjerimo da li postoje D, cos i acosh. Unošenjem
»exist('D'),exist(‘cos’),exist('acosh')
dobijamo
ans= 1
ans= 5
ans= 2
što znači da postoji varijabla D i fajl acosh.m i da je cos ugra|ena funkcija.
Za odre|ivanje dimenzija pojedinih veličina služi naredba size. Postoje četiri
varijante ove naredbe koje možemo generalno predstaviti kao: s=size(X),
[m,n]=size(X), m=size(X,1) i n=size(X,2). U prvom slučaju kao izlazni
argumant dobijemo vektor vrstu (označen proizvoljno sa s) sa dva elementa
koji pokazuju broj vrsta i kolona veličine X, respektivno. Ukoliko želimo da
dimenzije varijable X (proizvoljno označene sa m i n) dobijemo posebno,
koristićemo drugu verziju koja ima dva izlazna argumenta. Treća i četvrta
varijanta naredbe size daju nam broj vrsta i kolona matrice X respektivno.
Za odre|ivanje dužine (dimenzije) vektora koristi se naredba length.
Tako l=length(y) daje skalar l koji pokazuje broj elemenata vektora y, bilo da
se radi o vektoru vrsti ili koloni. U slučaju da je y matrica, l predstavlja veći od
broja redova i broja kolona.
Primjer 1.3.4 Odrediti dimenzije promjenljive D i dužinu vektora B. Unošenjem
»size(D),ll=length(D),size(X,1),[m,n]=size(D),d=length(B)
dobijamo

13
Osnovne funkcije
ans =
3 5
ll= 5
ans= 4
m= 3
n= 5
d= 9

1.3.3 BRISANJE I ^UVANJE PODATAKA

Za odstranjivanje (brisanje) promjenljivih iz radne memorije koristi se


naredba clear. Unošenjem
»clear
sve veličine i kompajlirane funkcije odstranjuju se iz radnog prostora. Na taj
način se radni prostor "očisti" kao kad prvi put uključimo MATLAB. Sa
»clear x
iz radnog prostora brišemo samo veličinu ili funkciju sa imenom x, a slično se
može uraditi za nekoliko veličina, na primjer
»clear ime1 ime2 ime3 ...
pri čemu ime1, ... može biti ime varijable ili neke funkcije. Naredbom
»clear functions
brišemo sve tekuće M-funkcije kompajlirane u radnoj memoriji. Naredbom
»clear mex
ukidamo sve povezane mex funkcije a sa
»clear all
brišemo sve promjenljive, mex linkove i funkcije iz radne memorije.
Primjer 1.3.5 Izbrisati iz radne memorije veličine ans i d.
»clear ans d
Brisanje globalnih promjenljivih se obavlja naredbom clear global.
Sa naredbom clear treba oprezno postupati da bi se izbjeglo nenamjerno
brisanje podataka i funkcija. Da bi se osigurali od ovakvih omaški, a i zbog

14
MATLAB for Windows
trajnog čuvanja podataka na disku za neku kasniju upotrebu, koristimo
naredbu save. Tako unošenjem
»save
upisujemo sve tekuće varijable u unaprijed odre|eni MAT-fajl sa imenom
matlab.mat. Naredbom
»save ime
upisujemo sve tekuće veličine iz radnog prostora u fajl ime.mat (ime je,
naravno, proizvoljno), dok naredbom
»save ime x Y Z
upisujemo u fajl ime.mat samo veličine x, Y i Z.
Pošto smo sačuvali na disku veličine koje nas interesuju, možemo
završiti sesiju MATLAB-a. Za prekid rada koriste se ravnopravno tri načina,
naredbama
»exit
»quit
ili izborom opcije Exit iz menija File. Prekid uzrokuje gubitak veličina iz radnog
prostora i izlazak iz MATLAB-a.
Kada se ponovo uključimo u MATLAB, radni prostor može se popuniti
ranije sačuvanim podacima. Ovo se postiže naredbom load, koja predstavlja
inverznu operaciju od save. Naime,
»load
unosi u radni prostor podatke iz fajla matlab.mat, dok
»load ime
puni radni prostor podacima iz fajla ime.mat.

Napomenimo da naredbe save i load možemo koristiti za smještanje i


učitavanje podataka iz ASCII fajlova, o čemu će biti više riječi kasnije.
Prekid rada, ali bez izlaska iz MATLAB-a, može se izvršiti upotrebom
<Ctrl>-<C> ili <Ctrl>-<Break>, tj. istovremenim pritiskom na tipke <Ctrl> i <C>
odnosno <Ctrl> i <Break>.

15
Osnovne funkcije
⎡ −1 2 4 ⎤
Primjer 1.3.6 Unijeti vektore x=[1 -2 3], y=[-3 4 -6] i matricu Z=⎢ ⎥.
⎣ 2 4 6⎦
Sačuvati ove podatke u fajl sa imenom podaci, i po završetku rada unijeti sa
diska veličine x, y i Z.
»x=[1,-2,3];y=[-3,4,-6];Z=[-1,2,4;2,4,6]
»save podaci
»quit
»load podaci

1.3.4 INFORMACIJE O SISTEMU

MATLAB posjeduje niz trajnih promjenljivih koje korisnika informišu o


performansama sistema. Tako naredba
» computer
informiše korisnika sistema na kom sistemu radi, a odgovor će na PC
mašinama sa Windows operativnim sistemom biti
ans =
PCWIN
gdje je PCWIN promjenljiva tipa string (niz karaktera o kojima će biti više riječi
u petom poglavlju).
Trenutno vrijeme se može saznati pomoću trajne promjenljive clock koja
predstavlja vektor sa šest komponenti: godina, mjesec, dan, sat, minut i
sekundu. Proteklo vrijeme u sekundama izme|u dva trenutka se može saznati
naredbom etime (početno_vrijeme,krajnje_vrijeme) a tekući datum u obliku
string naredbom date u formatu dan-mjesec-godina.
Primjer 1.3.7 Prikazati tekuće vrijeme, datum u obliku stringa i vrijeme proteklo
izme|u prve naredbe i sadašnjeg trenutka.
» clock
ans =
1.0e+003 *
1.9960 0.0090 0.0070 0.0210 0.0510 0.0087
» Datum=date
Datum =
7-Sep-96
» etime(clock,ans)
16
MATLAB for Windows
ans =
15.3800
Vidimo da je trenutak izrade ovog primjera bio 07.09.1996 u 21h 51minut i 8.7
sekundi i da je izme|u prve i treće naredbe proteklo 15.38 sekundi.

1.4 ISKAZI I VARIJABLE

MATLAB je jezik izraza (expressions). Izrazi koji korisnik unese


interpretiraju se i izvršavaju od strane sistema MATLAB-a. Generalni izraz u
MATLAB-u može poprimiti neki od sljedećih oblika:
- izraz
- var=izraz
- [var1,var2,..]=izraz
pri čemu je var skraćenica za ime varijable (veličine, promjenljive).
Izrazi su sačinjeni od operatora, specijalnih karaktera (znakova),
funkcija i imena varijabli. Izračunavanje izraza proizvodi matricu, koja se nakon
toga pojavljuje na ekranu i vezuje za neku varijablu radi kasnije upotrebe. Ako
se ime varijable i znak pridruživanja (=) izostave, automatski se kreira varijabla
sa imenom ans, čije ime potiče od answer (odgovor, rezultat).
Iskaz se normalno završava tipkom <Enter>. Ako je, me|utim, zadnji
karakter iskaza semicolon (;), prikazivanje na ekranu se suspenduje iako su
operacije definisane iskazom izvršene u računaru.
Imena varijabli i funkcija moraju početi slovom, iza koga može slijediti
proizvoljan broj slova, cifara ili podvučenih crta( znak _), ali se samo prvih 19
karaktera iz imena pamti.
MATLAB razlikuje velika i mala slova. Tako, na primjer, a i A nijesu iste
varijable. Opšte je pravilo da se ugra|ene MATLAB funkcije moraju pisati malim
slovima dok se funkcije koje se nalaze na disku u formi fajlova mogu pisati i
malim i velikim slovima. Tako je cos(A) funkcija a COS(A) vraća poruku
″undefined function″ (nedefinisana funkcija) dok acosh(A) i AcOsH(A) vraćaju
isti rezultat.
Primijetimo da je MATLAB veoma fleksibilan, u smislu da kao
argument operatora mogu poslužiti veoma složeni izrazi sastavljeni od niza
funkcija i operatora. Pri tome je redosljed izvršavanja pojedinih operacija u
okviru jednog iskaza naznačen običnim zagradama ( ).

17
Osnovne funkcije
Primjer 1.4.1 Izračunati:

sin ln(19 / 12) + cos(2π / 3) tg(5 / 12)


»sin(sqrt(log(19/12)+cos(2*pi/3)*tan(5/12)))
ans = 0.4689
Ranije smo napomenuli da se podaci mogu unositi u više ulaznih linija.
Analogan postupak može se primijeniti i na unošenje složenih izraza. Naime,
ukoliko je izraz toliko složen da ga ne možemo unijeti u jednoj ulaznoj liniji,
možemo ga prenijeti na sljedeću ulaznu liniju korišćenjem ... (nekoliko tačaka)
i tipke <Enter>.
Primjer 1.4.2 Izraz
»s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 ...
+ 1/9 - 1/10 + 1/11 - 1/12;
izračunava parcijalnu sumu alternativnog reda i pridružuje je varijabli s, ali je ne
prikazuje na ekranu. Napomenimo da ovakvu sumu možemo i elegantnije
izračunati, o čemu će kasnije biti riječi.
Izrazi u MATLAB-u mogu imati više izlaznih argumenata (varijabli) i to
u slučajevima kada to prirodno proizilazi iz namjene samog osnovnog
operatora ugra|enog u MATLAB (vidjeli smo ranije [m,n]=size(a), sa izlaznim
argumentima m i n) ili kada se posebno kreiraju funkcije u M-ili MEX-fajlovima.

1.5 BROJEVI I ARITMETI^KI IZRAZI

Ranije smo pomenuli da MATLAB operiše sa realnim i kompleksnim


brojevima. Za brojeve se koristi uobičajena decimalna notacija sa znakom
minus i decimalnom tačkom. Faktor skaliranja u obliku stepena broja deset
može se uključiti kao sufiks, radi konciznijeg predstavljanja broja. Na
računarima koji koriste IEEE aritmetiku sa pokretnim zarezom relativna tačnost
brojeva je eps, što znači oko 16 decimalnih mjesta. Opseg iznosi od realmin do
realmax, gdje su realmin i realmax prethodno definisane MATLAB konstante
koje zavise od računara, mada uobičajeno iznose 2.22x10-308 i 1.8x10308, i
predstavljaju najmanji i najveći broj sa kojim se u MATLAB-u može računati.
Primjer 1.5.1 Navodimo nekoliko mogućih oblika brojeva:
3 -99 0.0002
6.9362818 1.8305e-20 4.035278e23
gdje je sa Ne±m označen broj Nx10±m.
18
MATLAB for Windows
Izrazi se prave korišćenjem uobičajenih aritmetičkih operacija:
+ sabiranje, - oduzimanje, * množenje, / dijeljenje sdesna,
\ dijeljenje slijeva, ^n stepenovanje sa n
i niza elementarnih funkcija ugra|enih u MATLAB, kao što su sin, log, sqrt,
tan, itd. Kasnije ćemo dati kompletnu listu ugra|enih funkcija kao i mogućnosti
kreiranja novih, pomoću M-fajlova.
Napomenimo da dva operatora za dijeljenje daju isti rezultat kada
operišemo sa običnim brojevima (skalarima), a njihovo uvo|enje je bilo
motivisano potrebom koja proizilazi iz operacija sa matricama, o čemu će
kasnije biti više riječi.
Primjer 1.5.2 Izrazi
»1/4,4\1,inv(4)*1
svi daju isti rezultat
ans=
0.25

1.6 KOMPLEKSNI BROJEVI I MATRICE

Ranije smo pomenuli da značajna fleksibilnost MATLAB-a proizilazi iz


činjenice da su dozvoljene operacije sa kompleksnim brojevima. Oni mogu biti
unešeni kao ulazni podaci, a mogu se prirodno pojaviti i kao rezultat primjene
odre|enih funkcija ili operatora sa realnim argumentima.
Zbog različite notacije u literaturi, imaginarna jedinica je u MATLAB-u
prethodno definisana kao permanentna veličina (kao što je to ura|eno sa eps,
pi i sl.), i označena sa i i j. Korišćena je klasična definicija, tako da je:
»i=sqrt(-1)
dok drugi više vole oznaku j:
»j=sqrt(-1)
Mi ćemo ovdje koristiti oznaku i. Kompleksni brojevi se mogu generisati kao:
z=a+b*i, a, b-realni i imaginarni dio
ili u obliku:
w=r*exp(i*fi), r, fi- moduo i argument kompleksnog broja.

19
Osnovne funkcije
Primjer 1.6.1 Unošenje
»z=4+5*i
rezultira u
z =4.0000 + 5.0000i
dok izraz
»w=5*exp(2.5*i)
daje
»w =-4.0057 + 2.9924i
Postoje najmanje dva načina za unošenje kompleksne matrice:
-elementi se unose kao kompleksni, i
-posebno se unose realni i imaginarni dio.
Primjer 1.6.2 Za unošenje matrice sa kompleksnim elementima
⎡−1 + 5i 2 − 6i ⎤
Z =⎢ ⎥
⎣ 3 + 7i 4 + 8i ⎦
možemo ravnopravno koristiti sljedeće izraze:
»a=[-1,2;3,4],b=[5,-6;7,8],Z=a+b*i
što daje
a= -1 2
3 4
b= 5 -6
7 8
Z= -1.0000 + 5.0000i 2.0000 - 6.0000i
3.0000 + 7.0000i 4.0000 +8.0000i
ili
»Z1=[-1+5*i 2-6*i;3+7*i 4+8*i]
sa istim rezultatom:
Z1 =
-1.0000 + 5.0000i 2.0000 - 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
MATLAB za Windows dozvoljava proizvoljan broj bjelina (blenkova i
tabova) izme|u tokena (naziva varijabli i znakova aritmetičkih operacija) što nije
20
MATLAB for Windows
bio slučaj sa ranijim verzijama MATLAB-a. Ova osobina omogućava posebno
pregledno pisanje programa.
Primjer 1.6 3 Izrazi
» w=[-1+4*i 2+5*i],w1=[-1 + 4 * i 2 +5 * i],w2=[-1 + 4 * i 2 + 5 * i]
daju
w=
-1.0000 + 4.0000i 2.0000 + 5.0000i
w1 =
-1.0000 + 4.0000i 2.0000 0 + 5.0000i
w2 =
-1.0000 + 4.0000i 2.0000 + 5.0000i
Vidimo da je MATLAB prvu i treću matricu protumačio na isti način a da je
izostanak blenka ispred broja 5 u drugoj matrici protumačio kao poseban broj.
^est je programerski manir, na koji ovdje upozoravamo, da se pojedine (obično
brojačke promjenljive) nazivaju i i j. Prilikom rada sa kompleksnim brojevima to
može da rezultira neočekivanim poteškoćama, kao u sljedećem primjeru
Primjer 1.6.4 Z nije kompleksna veličina jer su i i j uzeli realne vrijednosti.
» i=2;j=1;
»z=3+5*i
»z =
13

1.7 IZLAZNI FORMAT

Ranije smo naglasili da se rezultat bilo kojeg iskaza MATLAB-a


prikazuje na ekranu, zajedno sa imenima specificiranih veličina ili ans ukoliko
veličinama nijesmo pridružili imena. Izlazni oblik prikazivanja brojeva (rezultata)
može se kontrolisati upotrebom naredbe format. Ona utiče samo na to kako se
matrice prikazuju na ekranu, a ne na to kako se računaju ili smještaju u
memoriju (MATLAB sva izračunavanja vrši u dvostrukoj preciznosti).
Najprostiji slučaj imamo kada su svi elementi matrice cijeli brojevi.
Tada se matrica prikazuje u formi bez decimalne tačke. Tako, na primjer
»x=[-1 0 2]
rezultira u
21
Osnovne funkcije
x=
-1 0 2
Ukoliko najmanje jedan element matrice nije cio broj, postoje nekoliko
mogućih izlaznih formata. Standardni format naziva se format short, a
pokazuje 5 značajnih cifara. Koristi se automatski (by default) ukoliko se ne
specificira neki drugi format. Ostali formati prikazuju više značajnih cifara ili
koriste eksponencijalnu notaciju. Razne oblike prikazivanja izlaznih veličina
ilustrovaćemo na sljedećem primjeru.
Primjer 1.7.1 Unesimo vektor od dva elementa
»y=[4/3 1.2345e-6];
Različiti mogući formati i rezultujuće reprezentacije vektora su:
»format short
»y
y = 1.3333 0.0000
»format short e
»y
y = 1.3333e+000 1.2345e-006
»format long
y =1.33333333333333 0.00000123450000
»format long e
y =1.333333333333333e+000 1.234500000000000e-006
»format hex
y = 3ff5555555555555 3eb4b3fd5942cd96
»format +
y = ++
»format bank
y =1.33 0.00
format + predstavlja kompaktan način prikazivanja velikih matrica,
gdje se simboli +, - i prazni prostori (blenkovi) koriste za pozitivne, negativne i
nulte elemente matrice, respektivno. format bank se koristi kod prikazivanja
finansijskih izvještaja, gdje se iznosi zaokružuju na dvije decimale (dinari i
pare, dolari i centi, itd.). Kod format long zadnja cifra može izgledati netačna,
ali je izlaz ustvari tačna decimalna reprezentacija binarnih brojeva smještenih u
računaru.

22
MATLAB for Windows

Ako koristimo format short ili format long, a najveći element matrice
je veći od 1000 ili manji od 0.001, tada se obično rezultati prikazuju sa običnim
formatom skalirani sa eksponencijalnim faktorom.
Primjer 1.7.2 Unošenje
»c=[21346 0.01]
rezultira u
c = 1.0e+004 *
2.1346 0.0000
dok promjenom formata sa
»format long
imamo sljedeću izlaznu reprezentaciju
c = 1.0e+004 *
2.13460000000000 0.00000100000000
Primjer 1.7.3 Unošenjem
» format rat
» a=[0.234 1/pi]
dobijamo
a=
117/500 113/355
jer format rat vrši predstavljanje brojeva u obliku racionalnih razlomaka.
Pomenimo još dva formata: format compact i format loose koji se koriste kod
prikazivanja većih matrica. Kod drugog formata prikazivanje pojedinih redova
podataka se odvaja praznim redom dok kod prvog formata to nije slučaj.
Alternativno, se može mijenjati format upotrebom menija MATLAB-ovog
komandnog prozora. Aktiviranjem opcije Numeric format u meniju Options
otvara se meni u kojem se pregledno može izabrati traženi format.

1.8 GENERISANJE VEKTORA POMO]U KARAKTERA : (DVIJE


TA^KE)

23
Osnovne funkcije
Karakter : je veoma pogodan i često korišćen u MATLAB-u. Najviše se
upotrebljava za generisanje vektora sa ekvidistantnim elementima. Naime,
izraz oblika
x=i:k k>i i, k-cijeli brojevi
generiše vektor vrstu
x=[i i+1 i+2 ... k-1 k]
dok izraz
y=(i:k)' k>i
generiše vektor kolonu koja u stvari predstavlja transponovani vektor x.
Primjer 1.8.1 Izrazi
»x=3:8
»y=(1:4)'
daju
x=
3 4 5 6 7 8
y=
1
2
3
4
U dobijenim vektorima priraštaj je jednak +1. Ukoliko želimo proizvoljnu realnu
vrijednost priraštaja (koraka), opšti oblik izraza za generisanje vektora vrste je
x=xmin:xk:xmax xmin<xmax
pri čemu su:
xmin, xmax - minimalna i maksimalna vrijednost x-a
xk - priraštaj
Vektor kolona se dobija prostom transpozicijom ovako dobijenog vektora vrste.
Primjer 1.8.2 Izrazi
»a=1.4:2:11
»b=-pi:0.6:pi
daju

24
MATLAB for Windows
a=
1.4000 3.4000 5.4000 7.4000 9.4000
b=
Columns 1 through 7
-3.1416 -2.5416 -1.9416 -1.3416 -0.7416 -0.1416 0.4584
Columns 8 through 11
1.0584 1.6584 2.2584 2.8584
dok izrazi
»c1=0;c2=8.6;c=c1:(c2-c1)/5:c2
generišu vektor
c=
0 1.7200 3.4400 5.1600 6.8800 8.6000
Vektori se mogu generisati i sa negativnim priraštajem.
Primjer 1.8.3
»d=10:-1:5
»f=pi:-pi/4:0
daju
d=
10 9 8 7 6 5
f=
3.1416 2.3562 1.5708 0.7854 0
Ukoliko je xmax < xmin, a priraštaj pozitivan, rezultat je prazna matrica
[ ]. Isto važi za slučaj xmin < xmax i negativan priraštaj.
Primjer 1.8.4
»p1=5:2:1
p1 =
[]
»p2=6:-1:9
p2 =
[]
Karakter : može se koristiti za jednostavno generisanje tabela.
Primjer 1.8.5 Izrazi

25
Osnovne funkcije
»x=[0:0.2:1.6]';
»[x sin(x) cos(x)]
daju
ans =
0 0 1.0000
0.2000 0.1987 0.9801
0.4000 0.3894 0.9211
0.6000 0.5646 0.8253
0.8000 0.7174 0.6967
1.0000 0.8415 0.5403
1.2000 0.9320 0.3624
1.4000 0.9854 0.1700
1.6000 0.9996 -0.0292
Treba pomenuti da MATLAB posjeduje funkcije (biće opisane u trećoj glavi) za
generisanje vektora sličnih mogućnosti kao operator :.

1.9 INDEKSI I MANIPULACIJA VRSTAMA I KOLONAMA

Pojedini elementi vektora ili matrice mogu se izdvojiti navo|enjem


njihovih indeksa u običnim zagradama, pri čemu se za indeksiranje vektora
koristi jedan, a za matrice dva cjelobrojna skalara. Ovo može poslužiti i za
redefinisanje pojedinih elemenata vektora ili matrice.
Primjer 1.9.1
»A=[1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
Izdvajanje elementa (2,3) matrice:
»A(2,3)
ans =
6
Element (3,3) matrice zamijenimo sa zbirom elemenata (1,1) i (1,2) iste
matrice:
»A(3,3)=A(1,1)+A(1,2)
26
MATLAB for Windows
A=
1 2 3
4 5 6
7 8 3
Vidimo da se promijenio samo element (3,3) dok ostali elementi i ime matrice
ostaju nepromijenjeni.
»x=[-1 3 6 -3 4]
x=
-1 3 6 -3 4
Sada ćemo element (3,3) nove matrice A zamijeniti sa četvrtim elementom
vektora x.
»A(3,3)=x(4)
A=
1 2 3
4 5 6
7 8 -3
U MATLAB-u i vektor može igrati ulogu indeksa. Ako su x i y vektori, tada izraz
x(y) znači:
[x(y(1)) x(y(2)) ...x(y(n))]
gdje je n=length(y).
Primjer 1.9.2 Za vektor x iz prethodnog primjera i y=[1 3 2] izraz
»x(y)
daje
ans =
-1 6 3
Ako definišemo vektor y1=[-1 2 3] izraz
»x(y1)
daje poruku o grešci
Index into matrix is negative or zero
jer vektor koji se koristi kao indeks ne smije imati elemente koji su negativni ili
su jednaki nuli. Napomenimo da bi se poruka o grešci javila kod izraza x(y) i u
svim slučajevima kada je m<ym, gdje je m=length(x) a ym je maksimalni
element vektora y. Na primjer,
27
Osnovne funkcije
»x=[-1 2 3];y=[1 5];
»x(y)
daje
Index exceeds matrix dimensions
Vektori mogu preuzeti ulogu indeksa i u matricama, što omogućava
pristup susjednim i nesusjednim vrstama i kolonama i manipulaciju sa njima. U
opštem slučaju, ako su vektori v i w vektori sa cjelobrojnim elementima, izraz
B=A(v,w) generiše novu matricu od elemenata matrice A kao

⎡ a (i1 , j1 ) a (i1 , j2 ) L a (i1 , jk ) ⎤


⎢ a (i , j ) a (i , j ) L a (i2 , jk ) ⎥⎥
⎢ 2 1 2 2
⎢ M M O L ⎥
⎢ ⎥
⎣a (im , j1 ) a (im , j2 ) L a (im , jk ) ⎦

gdje su vektori definisani sa : v=[i1 i2 ... im] i w=[j1 j2 ... jk].


Primjer 1.9.3 Za matricu

⎡1 2 3 ⎤
⎢ ⎥
A=⎢4 5 6 ⎥
⎢⎣7 8 −3⎥⎦

izraz
»B=A([1 3],[2 3])
definiše novu matricu B koja se sastoji od elemenata prve i treće vrste i druge i
treće kolone matrice A, tj. dobijamo
B=
2 3
8 -3
Neka je X matrica dimenzije (10x10). Tada izraz
X(1:4,5)
definiše submatricu dimenzije (4x1), tj. vektor kolonu, koja se sastoji od prva
četiri elementa pete kolone matrice X. Na sličan način, izraz
X(1:5,7:10)

28
MATLAB for Windows
daje submatricu dimenzije (5x4) sačinjenu od elemenata iz prvih pet vrsta i
zadnje četiri kolone matrice X. Provjeriti ove izraze na proizvoljnoj matrici X!
Ukoliko želimo iz neke matrice izvući sve vrste ili kolone, na mjestu
predvi|enom za indekse vrste ili kolone koristimo karakter :.
Primjer 1.9.4 Izrazi
»b=A(:,3)
»b1=A(2,:)
daju treću kolonu i drugu vrstu matrice A, tj.
b=
3
6
-3
b1 =
4 5 6
dok izraz
»B=A(:,:)
daje matricu B jednaku samoj matrici A.
Veoma složeni efekti postižu se upotrebom vektorskog indeksiranja sa
obije strane znaka jednakosti.
Primjer 1.9.5 Za X i Y definisane izrazima
»X=zeros(4,5);Y=rand(4,4)
koji daju matrice: X dimenzije (4x5) čiji su svi elementi nule i Y dimenzije (4x4)
čiji su elementi slučajni brojevi izme|u 0 i 1 (o ovoj funkciji biće više riječi
kasnije)
Y=
0.2113 0.8096 0.4832 0.6538
0.0824 0.8474 0.6135 0.4899
0.7599 0.4524 0.2749 0.7741
0.0087 0.8075 0.8807 0.9626
izraz
»X(:,[1 3 5])=Y(:,1:3)
daje
29
Osnovne funkcije
X=
0.2113 0 0.8096 0 0.4832
0.0824 0 0.8474 0 0.6135
0.7599 0 0.4524 0 0.2749
0.0087 0 0.8075 0 0.8807
tj. vrši zamjenu prve, treće i pete kolone matrice X sa prvom, drugom i trećom
kolonom matrice Y, respektivno.
Primjer 1.9.6 Ilustrovaćemo još jednu mogućnost korišćenja karaktera : i
vektorskog indeksiranja. Za ranije definisanu matricu A, izraz
»A1=A(:,3:-1:1)
daje
A1 =
3 2 1
6 5 4
-3 8 7
čime smo izokrenuli redosljed kolona u matrici A.
Karakter : može se upotrijebiti i za preoblikovanje matrice. Naime, izraz
A(:) koji se nalazi sa desne strane znaka jednakosti, pravi dugi vektor kolonu
koji se sastoji od "nadovezanih" kolona matrice A. Napomenimo da za ovakvu
upotrebu karaktera : matrica A mora biti prethodno definisana.
Primjer 1.9.7 Izrazi
»A=[1 2;3 4;5 6];
»b=A(:)
rezultiraju u
b=
1
3
5
2
4
6
Ako izraz A(:) upotrijebimo sa lijeve strane znaka jednakosti, dobijamo matricu
iste dimanzije kao A, ali sa novim sadržajem definisanim na desnoj strani
izraza.

30
MATLAB for Windows
Primjer 1.9.8 Matrica A iz prethodnog primjera ima dimenziju (3x2), tj. ukupno
6 elemenata. Ako definišemo vektor y sa 6 proizvoljnih elemenata, na primjer
»y=12:-2:2
y = 12 10 8 6 4 2
tada izraz
»A(:)=y
daje
A=
12 6
10 4
8 2
što znači da je matrici A promijenjen sadržaj.
Tako|e treba reći da novi MATLAB ima razvijen niz funkcija za
manipulaciju vrstama i kolonama matrice sa kojima ćemo se sresti u narednom
poglavlju.
Broj operacija sa pokretnim zarezom, koji računar izvrši u jednoj sesiji,
dobija se naredbom flops. Ako želimo da dobijemo broj operacija koje računar
izvrši prilikom rješavanja odre|enog problema, onda se prije početka rada na
tom problemu brojač operacija resetuje sa flops(0).
Završićemo ovo poglavlje sa jednom korisnom napomenom. Ukoliko,
za vrijeme dužih sesija u MATLAB-u, računar pošalje poruku Out of memory, to
znači da više nema mjesta u memoriji za nove varijable i da moramo, prije
nastavka rada, relaksirati memoriju. Jedan od načina za osloba|anje prostora u
memoriji bio bi brisanje nepotrebnih varijabli pomoću komande clear. Drugi,
veoma pogodan, način je unošenje komande pack, koja "sabija" podatke u
memoriji, otvarajući time nove slobodne blokove. Ovo se vrši tako što se sve
varijable prvo sačuvaju na disku, memorija se potpuno očisti a zatim se
"prepakovane" varijable ponovo vrate, ali sada tako da zauzimaju manji prostor
u memoriji. Za korisnike koji se služe PC računarima pod Windows-om (a to
smo, htjeli ne htjeli, većina nas) a posjeduju osrednji računar dobra je
preporuka povećavanje swap prostora na disku što se postiže (naravno van
MATLAB-a) u Control panelu vašeg Windowsa u sekciji 386 Enhanced klikom
na opciju Virtual memory i odgovarajućim podešavanjima u ovom dialog box-u.

31
MATLAB for Windows

glava druga

ELEMENTARNE OPERACIJE SA MATRICAMA I


POLJIMA BROJEVA
Matrične operacije čine znatan dio računskog potencijala MATLAB-a. One
su, kadgod je to moguće, označene na prirodan način kao što bi to uradili na
papiru. Jedino ograničenje proizilazi iz skupa karaktera raspoloživih na računaru.
Pored matričnih operatora, postoji i mogućnost operacija nad ure|enim skupovima
(poljima) brojeva na principu element-po-element. Kod operatora koji matrice i
polja brojeva tretiraju na isti način (transpozicija, sabiranje i oduzimanje) nećemo
praviti razliku pri prezentaciji, a ostale relevantne operatore ćemo prezentirati
odvojeno.

2.1 TRANSPONOVANJE

Transpozicija (zamjena vrsta i kolona) matrice sa realnim elementima vrši


se pomoću znaka '. U specijalnim slučajevima, kada se radi o skalaru, vektoru vrsti
ili vektoru koloni, operacija transpozicije daje skalar, vektor kolonu ili vektor vrstu,
respektivno.
Primjer 2.1.1 Iskazi
» A=[-1 2 4;2 -3 1;-4 -5 -6],B=A'
rezultiraju u
A=
-1 2 4
2 -3 1
-4 -5 -6
B=
-1 2 -4
2 -3 -5
33
Elementarne operacije sa matricama i poljima brojeva
4 1 -6
dok iskazi
» a=[5.2]',x=[-1 3 8]',y=[-1;-2;4]'
daju
a=
5.2000
x=
-1
3
8
y=
-1 -2 4
Ukoliko operaciju transpozicije primijenimo na matricu sa kompleksnim
elementima Z moramo voditi računa o jednoj specifičnosti MATLAB-a. Naime, Z'
vrši tzv. konjugovanu transpoziciju, tj. transponuje matricu i konjuguje svaki njen
element.
Primjer 2.1.2 Izrazi
» Z=[-1+2*i,2+3*i;-3+4*i,5-2*i], W=Z'
daju
Z=
-1.0000 + 2.0000i 2.0000 + 3.0000i
-3.0000 + 4.0000i 5.0000 - 2.0000i

W=
-1.0000 - 2.0000i -3.0000 - 4.0000i
2.0000 - 3.0000i 5.0000 + 2.0000i
Za dobijanje transponovane kompleksne matrice možemo ravnopravno koristiti
jedan od izraza datih u narednom primjeru:
Primjer 2.1.3 Unošenjem
» Y=Z.',W=conj(Z')
dobijamo isti rezultat
Y=
34
MATLAB for Windows
-1.0000 + 2.0000i -3.0000 + 4.0000i
2.0000 + 3.0000i 5.0000 - 2.0000i
W=
-1.0000 + 2.0000i -3.0000 + 4.0000i
2.0000 + 3.0000i 5.0000 - 2.0000i

2.2 SABIRANJE I ODUZIMANJE

Sabiranje i oduzimanje matrica označava se sa + i -, respektivno. Ove


operacije definisane su samo kada matrice koje sabiramo ili oduzimamo imaju iste
dimenzije.
Primjer 2.2.1 Uzmimo matrice A i x, definisane u primjeru 2.1.1. Izraz
» A+x
rezultiraće porukom
??? Error using ==> +
Matrix dimensions must agree.
zbog toga što su dimenzije ovih veličina (3*3) i (3*1), respektivno.
Primjer 2.2.2 Za matrice A i B definisane u primjeru 2.1.1, izrazi
» C=A+B,C1=A-B
daju zbir i razliku matrica A i B
C=
-2 4 0
4 -6 -4
0 -4 -12

C1 =
0 0 8
0 0 6
-8 -6 0
Osobenost MATLAB-a sastoji se u tome što su operacije + i - dopuštene i
za različite dimenzije varijabli, ali samo ukoliko je jedna od njih skalar, npr. M+s
(M-matrica, s-skalar). Ovakav izraz MATLAB interpretira tako što svakom elementu
matrice M dodaje (ili od njega oduzima) naznačeni skalar s, tj. skalar se posmatra
35
Elementarne operacije sa matricama i poljima brojeva
kao konstantna matrica sa dimenzijom prilago|enom matrici koja se sabira (ili
oduzima).
Primjer 2.2.3 Za matrice B, x i skalar a, definisane u primjeru 2.1.1, izrazi
» G=B+a,G1=x-a
daju
G=
4.2000 7.2000 1.2000
7.2000 2.2000 0.2000
9.2000 6.2000 -0.8000
G1 =
-6.2000
-2.2000
2.8000
iako, po pravilima matričnog računa, nijesu korektni.
Primjer 2.2.4 Provjerimo rezultate iz prethodnog primjera matematički korektnim
izrazima
» G=B+a*ones(B),G1=x-a*ones(x)
sa rezultatom
G=
4.2000 7.2000 1.2000
7.2000 2.2000 0.2000
9.2000 6.2000 -0.8000
G1 =
-6.2000
-2.2000
2.8000
uz upozorenje da će ovakav način rada biti ″izbačen″ u kasnijim verzijama
MATLAB-a
This usage of ones(X) is obsolete and will be eliminated
in future versions. Please use ones(size(X)) instead.
Dakle moraćemo koristiti naredbu ones(size(X)). Sva navedena pravila, uključujući
i ono o kompatibilnosti skalara i matrice pri sabiranju i oduzimanju, važe za matrice
i skalare sa kompleksnim elementima.
36
MATLAB for Windows
Primjer 2.2.5 Izrazi
» z=1+2*i;N=z+Z
pri čemu smo kompleksnu matricu Z ranije definisali u primjeru 2.1.2, daju
N=
0 + 4.0000i 3.0000 + 5.0000i
-2.0000 + 6.0000i 6.0000

2.3 MNO@ENJE MATRICA

Matrično množenje u MATLAB-u je označeno sa *. Shodno pravilima


matričnog računa, ova operacija je definisana kada su "unutrašnje" dimenzije
činilaca iste, tj. ako je broj kolona prvog činioca jednak broju vrsta drugog.
Primjer 2.3.1 Prethodno definisani x i A (primjer 2.1.1) ne ispunjavaju navedeni
uslov, pa će iskaz
» c=x*A
proizvesti poruku:
??? Error using ==> *
Inner matrix dimensions must agree.
dok je iskaz
» c=A*x
korektan specijalan slučaj matričnog proizvoda, koji će dati
c=
39
-3
-59
Mogućnosti množenja vektora sa vektorom, tj. takozvani skalarni (unutrašnji) i
spoljni proizvod vektora, ilustrovaćemo na narednom primjeru.
Primjer 2.3.2 Sa definisanim vektorima
» x=[1 2 3],y=[1 -1 2]
x=
1 2 3
y=
37
Elementarne operacije sa matricama i poljima brojeva
1 -1 2
izrazi
» c=x*y',c1=y*x'
daju isti rezultat, tj. skalarni proizvod dva vektora
c=
5
c1 =
5
Spoljni proizvodi rezultiraće iz izraza
» D=x'*y,D1=y'*x

D=
1 -1 2
2 -2 4
3 -3 6

D1 =
1 2 3
-1 -2 -3
2 4 6
pri čemu je očigledno da su matrice D i D1 povezane relacijom D'=D1. Naravno,
izraz
» x*y
daje poruku greške:
??? Error using ==> *
Inner matrix dimensions must agree.
Matrica ili vektor prirodno se množi sa skalarom.
Primjer 2.3.3 Sa prethodno definisanim A i x (primjeri 2.1.1 i 2.3.2), izrazi
» A*pi,6.3*x
rezultiraju sa
ans =
-3.1416 6.2832 12.5664
6.2832 -9.4248 3.1416
38
MATLAB for Windows
-12.5664 -15.7080 -18.8496
ans =
6.3000 12.6000 18.9000

2.4 MNO@ENJE POLJA BROJEVA


Za množenje ure|enih skupova brojeva ne važe pravila matričnog računa,
već se množenje vrši po principu element-po-element, a odgovarajući operator je
označen sa .*. Za ovakvu operaciju činioci moraju imati iste dimenzije ako su
brojevi ure|eni u obliku matrica ili vektora. Naime, ako A i C označavaju dva takva
skupa brojeva, tada E=A.*C daje novi skup brojeva E čiji su elementi proizvodi
korespondentnih elemenata iz skupova A i C.
Primjer 2.4.1 Sa prethodno definisanim A i C (primjeri 2.1.1 i 2.2.1), izrazi
» E1=A*C
» E=A.*C
su, s obzirom na dimenzije varijabli A i C, oba legitimni, samo što su operacije
izvršene po različitim pravilima tako da i daju različite rezultate:
E1 =
10 -32 -56
-16 22 0
-12 38 92
E=
2 8 0
8 18 -4
0 20 72
Primjer 2.4.2 Za ranije definisane varijable A, x, y, (primjeri 2.1.1 i 2.3.2), izraz
» A.*x
daje poruku greške
??? Error using ==> .*
Matrix dimensions must agree.
dok izrazi
» g=x.*y
» g1=x.*(-2)
daju

39
Elementarne operacije sa matricama i poljima brojeva
g=
1 -2 6
g1 =
-2 -4 -6
Vidimo da ukoliko je jedan od činilaca skalar, rezultat primjene operatora
.* će biti isti kao običnog matričnog množenja *, tj. svaki element matrice ili vektora
množi se sa skalarom.
2.5 DETERMINANTA I INVERZNA MATRICA
Determinanta kvadratne matrice X, ⏐X⏐, izračunava se pomoću operatora
det(X).
Primjer 2.5.1 Ako unesemo matricu A sa realnim elementima
» A=[1 5 8;3 -1 2;4 -4 6]
A=
1 5 8
3 -1 2
4 -4 6
izraz
» d=det(A)
daje
d=
-112
a na isti način dobijamo determinantu matrice sa kompleksnim elementima. Naime,
unošenjem matrice
» B=[-1+2*i 1-2*i i;-i 2 1+i;-2 3*i 4+i];
izraz
» d1=det(B)
daje
d1 =
-8.0000 +38.0000i
Primjer 2.5.2 Sa matricama iz prethodnog primjera provjeriti relaciju
⏐AB⏐=⏐A⏐⏐B⏐.

40
MATLAB for Windows
» det(A*B)-det(A)*det(B)
ans =
0
Inverzna matrica X kvadratne nesingularne matrice X, dobija se primjenom
operatora inv(X).
Primjer 2.5.3 Za matrice A i B iz primjera 2.5.1, izrazi
» Ai=inv(A),Bi=inv(B)
daju
Ai =
-0.0179 0.5536 -0.1607
0.0893 0.2321 -0.1964
0.0714 -0.2143 0.1429
Bi =
-0.0836 - 0.2719i 0.2241 + 0.1897i -0.0915 - 0.0597i
0.0663 + 0.0650i 0.2586 + 0.1034i -0.0464 - 0.0955i
-0.0371 - 0.1764i 0.1552 - 0.1379i 0.1260 - 0.0265i
U MATLAB-u ne postoji posebni operator za izračunavanje adjungovane
matrice ali je, na osnovu definicije inverzne matrice, očigledno da izraz
» adjA=inv(A)*det(A)
daje adjungovanu matricu matrice A
adjA =
2.0000 -62.0000 18.0000
-10.0000 -26.0000 22.0000
-8.0000 24.0000 -16.0000
2.6 "DIJELJENJE" MATRICA

U matričnom računu dijeljenje nije definisano (osim ako je djelilac skalar).


U MATLAB-u, me|utim, postoje dva operatora za "dijeljenje" matrica:
/ koji označava takozvano "dijeljenje" s desna, i
\ koji označava takozvano "dijeljenje" s lijeva.

41
Elementarne operacije sa matricama i poljima brojeva
Značenje ovih operatora razmotrićemo, za sada, samo za specijalni slučaj kada se
radi o kvadratnim nesingularnim matricama. Neka je, naime, matrica A kvadratna i
nesingularna. Tada izraz:
X=A\B
odgovara množenju matrice B s lijeva sa A-1, tj. X=A-1B, dok izraz:
X=B/A
odgovara množenju matrice B s desna sa A-1, tj. X=BA-1, pri čemu se primjenom
operatora \ i / rezultati dobijaju direktno, bez računanja inverzne matrice.
Dijeljenje s lijeva A\B definisano je samo u slučaju kada je broj vrsta varijabli A i B
isti.
Primjer 2.6.1 Za matrice A i B iz prethodnog primjera i b=[1 2 3]', izrazi
» x=A\b,X=A\B
imaju smisla i daju
x=
0.6071
-0.0357
0.0714

X=
0.3393 - 0.5893i 1.0893 - 0.4464i -0.0893 + 0.3750i
0.3036 - 0.0536i 0.5536 - 0.7679i -0.5536 + 0.1250i
-0.3571 + 0.3571i -0.3571 + 0.2857i 0.3571 - 0.0000i
dok za c=2 i d=b', izrazi
» x=A\c,X=A\d
nijesu definisani i rezultiraće porukom o neslaganju dimenzija.
Izraz za dijeljenje s desna B/A može se izraziti preko dijeljenja s lijeva kao
B/A=(A'\B')', i ima smisla samo ako je broj kolona varijabli A i B isti.
Primjer 2.6.2 Za veličine iz prethodnog primjera, izrazi
» y=d/A,Y=B/A
imaju smisla, i daju rezultate
42
MATLAB for Windows
y=
0.3750 0.3750 -0.1250
Y=
0.1071 - 0.1429i -0.3214 + 0.4286i -0.0357 + 0.2143i
0.2500 + 0.0893i 0.2500 - 0.7679i -0.2500 + 0.3036i
0.3214 + 0.3393i -1.9643 + 0.4821i 0.8929 - 0.4464i
dok izrazi
»y=c/A
»b/A
nijesu definisani i rezultiraće porukom o neslaganju dimenzija matrica koje se
"dijele". Napomenimo ovdje da izraz X=A\B predstavlja rješenje za AX=B, dok
izraz X=B/A predstavlja rješenje za XA=B. O operatorima \ i / biće više riječi u
osmom poglavlju, gdje ćemo razmotriti njihovu upotrebu pri rješavanju skupa
linearnih jednačina u opštem slučaju.

2.7 DIJELJENJE POLJA BROJEVA


Za dijeljenje ure|enih skupova brojeva važe drugačija pravila pa se
upotrebljavaju i različiti simboli:
./ za dijeljenje s desna, i
.\ za dijeljenje s lijeva.
Tačka u simbolu za dijeljenje označava da se ova operacija vrši na
korespondentnim elementima. Tako, izraz C=A./B (ili njemu ekvivalentan C=B.\A)
znači da su elementi skupa C izračunati po pravilu c(i,j)=a(i,j)/b(i,j), gdje su a(i,j) i
b(i,j) odgovarajući elementi skupova A i B. Na isti način, izrazi D=A.\B (tj. D=B./A)
znače da je d(i,j)=b(i,j)/a(i,j). Iz ovakvih pravila očigledno slijedi: da bi navedeni
izrazi imali smisla A i B moraju imati iste dimenzije.
Jedini, ali veoma praktičan, izuzetak od ovog pravila predstavlja slučaj kada je
dijeljenik ili djelilac skalar. Tako izrazi
D=k./A odnosno D=A.\k znače da je d(i,j)=k/a(i,j), dok izrazi D=A./k odnosno
D=k.\A znače da se elementi skupa D računaju po relaciji d(i,j)=a(i,j)/k.
Primjer 2.7.1 Unesi polja A i B i na|i njihove količnike.
» A=[1 0 -2;-1 2 0],B=[-3 0 4;0 2 -1]

43
Elementarne operacije sa matricama i poljima brojeva

A=
1 0 -2
-1 2 0
B=
-3 0 4
0 2 -1
» C=A./B
Warning: Divide by zero
C=
-0.3333 NaN -0.5000
-Inf 1.0000 0
» D=B./A
Warning: Divide by zero
D=
-3 NaN -2
0 1 -Inf
Pošto A i B iz primjera sadrže neke elemente jednake nuli, dobijamo
poruku o dijeljenju sa nulom, a u rezultatu se javlja Inf ili NaN.
Primjer 2.7.2 Za a=2 i polja A i B iz prethodnog primjera, izračunati a./A i B./a.
Unošenjem
» A1=a./A
dobijamo
Warning: Divide by zero
A1 =
2 Inf -1
-2 1 Inf
dok
» B1=B./a
daje
B1 =
-1.5000 0 2.0000
0 1.0000 -0.5000
Vidimo da je efekat isti kao da smo koristili naredbe:
» A1=a*ones(size(A))./B, odnosno
44
MATLAB for Windows
» B1=B./(a*ones(size(B)))
Postoji jedna značajna razlika ove verzije MATLAB-a u odnosu na DOS
verzije u pogledu dijeljenja skalara poljem brojeva. Naime u MATLAB-u for
Windows izraz:
» 4./A
je korektan i rezultira
Warning: Divide by zero
ans =
4 Inf -2
-4 2 Inf
dok bi u prethodnim verzijama MATLAB-a rezultirao greškom. Uzrok ovoga je bio
taj što je "stari" MATLAB tačku tumačio kao decimalni zarez pa matrične dimenzije
nijesu odgovarale. Obično se primjenjivao trik da se prethodni izraz zapisivao u
obliku 4../A gdje prva tačka i dalje označava decimalni zarez a druga operaciju na
polju brojeva.

2.8 STEPENOVANJE MATRICA


Ako je A kvadratna matrica a p pozitivan cio broj, matrični stepen definiše
se kao
Ap=A⋅A⋅A⋅A⋅...A, p puta
odnosno, za A nesingularnu matricu
A-p= (A-1)p
Stepenovanje kvadratne matrice vrši se pomoću operatora ^, tako da izrazi
A^p i A^(-p) daju p-ti i (-p)-ti matrični stepen od A.
Primjer 2.8.1 Za proizvoljnu nesingularnu matricu A odrediti A2, A-2 i provjeriti da li
važi: A0=I, gdje je I jedinična matrica iste dimenzije kao A.
» A=[-1 2 3;2 -2 1;1 4 2]
A=
-1 2 3
2 -2 1
1 4 2
45
Elementarne operacije sa matricama i poljima brojeva
» B=A^2
B=
8 6 5
-5 12 6
9 2 11
» C=A^0
C=
1 0 0
0 1 0
0 0 1
Ukoliko p nije cio broj, već proizvoljan realan broj, operacija stepenovanja
kvadratne matrice A ima različito značenje i vrši se po drugačijem pravilu. Ap je
definisano preko sopstvenih vrijednosti i vektora (za definiciju ovih pojmova vidi
osmo poglavlje) kao Ap=V⋅Dp⋅V -1, gdje je D dijagonalna matrica koja sadrži
sopstvene vrijednosti matrice A na glavnoj dijagonali, a V je matrica sačinjena od
odgovarajućih sopstvenih vektora matrice A. Samo stepenovanje D jednostavno se
vrši stepenovanjem pojedinih skalarnih elemenata sa glavne dijagonale. Ukoliko A
sadrži kompleksne sopstvene vrijednosti, A će tako|e biti kompleksna matrica.
Primjer 2.8.2 Za matrice
A=
2 -2 3
1 1 1
1 3 -1
B=
-2 2 3
2 -2 1
2 4 2
naći matrične stepene A2.6 i B-1.56.
» A1=A^2.6
A1 =
9.1993 + 0.0000i -0.4674 + 4.2285i 8.6667 - 4.2285i
8.1993 + 0.0000i 2.4483 + 0.3844i 6.7510 - 0.3844i
8.1993 - 0.0000i 4.3218 - 5.3817i 4.8775 + 5.3817i
» B1=B^(-1.56)
B1 =
46
MATLAB for Windows
-0.0730 - 0.0000i -0.0176 + 0.0000i 0.1023 + 0.0000i
0.3043 - 0.0000i -0.0086 - 0.0000i -0.1376 + 0.0000i
-0.1464 + 0.0000i 0.0935 + 0.0000i 0.1493 - 0.0000i
Na sličan način, izraz pA, gdje je p skalar a A kvadratna matrica, računa se preko
sopstvenih vrijednosti i vektora.
Primjer 2.8.3 Za matrice A i B iz prethodnog primjera naći (2)A i (-3.6)B.
» A1=2^A
A1 =
5.0000 -0.6833 3.6833
3.0000 2.4833 2.5167
3.0000 2.2333 2.7667
» B1=(-3.6)^B
B1 =
1.0e+002 *
0.0825 + 0.5963i 0.1176 + 0.8498i 0.1482 + 1.0736i
0.0470 + 0.3472i 0.0684 + 0.4958i 0.0870 + 0.6259i
0.1458 + 1.0508i 0.2070 + 1.4985i 0.2613 + 1.8939i
Izraz AB, gdje su A i B matrice, nije korektan i ukoliko pokušamo da stepenujemo
matricu sa matricom, dobićemo poruku greške. Računar će javiti grešku i u svim
slučajevima kada pokušamo računati matrični stepen a matrica nije kvadratna.

2.9 STEPENOVANJE POLJA BROJEVA

Stepenovanje polja brojeva (element po element), u MATLAB-u je


označeno sa .^. Izraz oblika C=A.^B gdje su A i B matrice, moguć je samo ako su
A i B istih dimenzija, a elementi polja C dobijaju se po relaciji
c(i,j)=a(i,j)b(i,j)
Primjer 2.9.1 Stepenovati, element po element, matrice A i B iz prethodnog
primjera. Pošto su iste dimenzije, izrazi
» C1=A.^B,C=B.^A
daju
C1 =
0.2500 4.0000 27.0000
47
Elementarne operacije sa matricama i poljima brojeva
1.0000 1.0000 1.0000
1.0000 81.0000 1.0000
C=
4.0000 0.2500 27.0000
2.0000 -2.0000 1.0000
2.0000 64.0000 0.5000
Za vektor x=[1 -2 3], izraz
» A.^x
daje poruku
??? Error using ==> .^
Matrix dimensions must agree.
Specijalni slučajevi generalnog izraza C=AB nastupaju kada je u osnovi ili
eksponentu skalar. Tako izrazi C=A.^p i D=p.^A, gdje je p skalar a A matrica
proizvoljne dimenzije, u MATLAB-u imaju smisla a elementi C i D računaju se kao
c(i,j)=a(i,j)p i d(i,j)=pb(i,j)
Primjer 2.9.2 Za x=[-1 -2 2] i y=[0.5 2 3] imamo
» (-3).^x
ans =
-0.3333 0.1111 9.0000
» y1=y.^3
y1 =
0.1250 8.0000 27.0000
» 3.^y
ans =
1.7321 9.0000 27.0000
Primjetimo da bi posljedni izraz u ranijim verzijama MATLAB-a bio protumačen kao
greška (zbog toga što bi tačka bila okarakterisana kao decimalni zarez) dok je
ovdje potpuno korektan.

2.10 ELEMENTARNE MATEMATI^KE FUNKCIJE

Osnovni operatori ugra|eni u MATLAB sadrže i skup elementarnih


matematičkih funkcija čija je lista data u priloženoj tabeli.
48
MATLAB for Windows

Elementarne matematičke funkcije

Kompleksne funkcije

abs apsolutna vrijednost ili moduo real realni dio


angle fazni stav imag imaginarni dio
conj konjugovanje

Numeričke funkcije

fix zaokruživanje prema nuli round zaokr. ka najbl. cijelom broju


floor zaokruživanje prema -∞ rem ostatak pri dijeljenju
ceil zaokruživanje prema ∞ sign funkcija znaka (signum)
gcd najveći zajednički djelilac lcm najmanji zajednički sadržalac
rat racionalna aproksimacija rats racionalni rezultat

Trigonometrijske funkcije

sin sinus sinh hiperbolni sinus


asin arkus sinus asinh arkus sinus hiperbolni
cos kosinus cosh kosinus hiperbolni
acos arkus kosinus acosh arkus kosinus hiperbolni
tan tangens tanh tangens hiperbolni
atan arkus tangens atan2 arkus tangens četiri
kvadranta
atanh arkus tangens hiperbolni sec sekans
sech sekans hiperbolni asech arkus sekans hiperbolni
csc kosekans csch kosekans hiperbolni
acsc arkus kosekans acsch arkus kosekans hiperbolni
cot kotangens coth cotangens hiperbolni
acot arkus kotangens acoth arkus kotangens hiperbolni

Eksponencijalne funkcije
49
Elementarne operacije sa matricama i poljima brojeva

exp eksponencijalna funkcija log prirodni logaritam


log10 logaritam sa osnovom 10 sqrt kvadratni korijen
expint eksponencijalna integralna f-ja log2 logaritam sa osnovom 2
pow2 stepen dvojke

Beselove, beta, gama i eliptičke funkcije

besselj Beselova funkcija prve vrste bessely Beselova funkcija druge vrste
besseli modifik. Beselova f-ja prve vrste besselk modif. Besel. f-ja druge vrste
bessel Beselova f-ja komplex. argum. betainc nekompletna beta funkcija
beta beta funkcija gamma gama funkcija
betaln logaritam beta funkcije gammaln logaritam gama funkcije
gammain nekompletna gama funkcija ellipke kompletna eliptička funkcija
c
ellipj Jakobijeva eliptička funkcija

Funkcija greške

erf funkcija greške erfc komplementarna f-ja greške


erfcx skalirana komplem. f-ja greške erfinv inverzna funkcija greške

Ako sa f(X) označimo generalnu matematičku funkciju, možemo sumirati neke


osnovne osobine ove grupe operatora:
1) Zadati argument X (koji može biti skalar, vektor ili matrica) tretira se kao polje
brojeva, tj. za

⎡ X 11 X 12 L X 1n ⎤
⎢X X 22 L X 2 n ⎥⎥
X =⎢
21
⎢ M M O M⎥
⎢ ⎥
⎣ X m1 X m2 L X mn ⎦

imamo

50
MATLAB for Windows

⎡ f ( X 11 ) f ( X 12 ) L f ( X 1n ) ⎤
⎢ f (X ) f ( X 22 ) L f ( X 2 n ) ⎥⎥
f (X) = ⎢
21
⎢ M M O M ⎥
⎢ ⎥
⎣ f ( X m1 ) f ( X m2 ) L f ( X mn ) ⎦

2) X može imati realne ili kompleksne elemente.


3) Složeni izrazi i nove funkcije grade se pomoću elementarnih funkcija i operacija
za manipulaciju sa poljima brojeva +,-,.*,./,.\,.^.

2.10.1 FUNKCIJE ABS, ANGLE, REAL, IMAG I CONJ

Na jednom primjeru ilustrovaćemo značenje i sintaksu naredbi abs, angle,


real, imag i conj.
Primjer 2.10.1 Za dato polje brojeva Z
Z=
-1.0000 + 2.0000i 1.0000 - 3.0000i
3.0000 + 4.0000i 2.0000 - 6.0000i
izraz
» az=abs(Z)
daje
az =
2.2361 3.1623
5.0000 6.3246
tj. apsolutne vrijednosti elemenata polja Z. Izraz
» an=angle(Z)
daje
an =
2.0344 -1.2490
0.9273 -1.2490
tj. uglove (fazne stavove) elemenata Z izražene u radijanima. Ukoliko želimo dobiti
njihove vrijednosti u stepenima, primijenićemo

51
Elementarne operacije sa matricama i poljima brojeva
» an*180/pi
što daje
ans =
116.5651 -71.5651
53.1301 -71.5651
Izraz
» Re=real(Z)
daje realni dio polja (ili matrice) Z, tj.
Re =
-1 1
3 2
a na sličan način:
» Im=imag(Z)
daje imaginarni dio
Im =
2 -3
4 -6
dok se konjugovana matrica (polje) dobija pomoću izraza
» Zc=conj(Z)
Zc =
-1.0000 - 2.0000i 1.0000 + 3.0000i
3.0000 - 4.0000i 2.0000 + 6.0000i

2.10.2 FUNKCIJE ZA ZAOKRU@IVANJE

U MATLAB-u postoje četiri operatora za zaokruživanje na cijele brojeve.


Operatore i njihovo značenje možemo ilustrovati sljedećim dijagramima:

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2


round(x) zaokruživanje na najbliži cio broj

52
MATLAB for Windows

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2


fix(x) zaokruživanje prema nuli

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

floor(x) zaokruživanje prema -∞

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2


ceil(x) zaokruživanje prema +∞

Primjer 2.10.2 Neka je matrica (ili polje brojeva) data sa


A=
-3.5600 5.2300
2.6700 -1.2400
Primjena pojedinih operatora za zaokruživanje daje:
» R=round(A)
R=
-4 5
3 -1
» F=fix(A)
F=
-3 5
2 -1
» C=ceil(A)
C=
-3 6
3 -1
» F1=floor(A)
F1 =
-4 5
2 -2
53
Elementarne operacije sa matricama i poljima brojeva
Kompleksni brojevi se zaokružuju tako što se posebno zaokruže realni i imaginarni
djelovi. Ako uzmemo Z iz prethodnog primjera, izraz
» Z1=Z*2*pi
daje
Z1 =
-6.2832 +12.5664i 6.2832 -18.8496i
18.8496 +25.1327i 12.5664 -37.6991i
pa operatori za zaokruživanje round i ceil daju
» round(Z1)

ans =
-6.0000 +13.0000i 6.0000 -19.0000i
19.0000 +25.0000i 13.0000 -38.0000i
» ceil(Z1)
ans =
-6.0000 +13.0000i 7.0000 -18.0000i
19.0000 +26.0000i 13.0000 -37.0000i
2.10.3 EKSPONENCIJALNA, LOGARITAMSKA, STEPENA I
FUNKCIJA KVADRATNOG KORIJENA

Eksponencijalna funkcija definisana je operatorom exp. Tako exp(X) daje


ex za svaki element polja X. Za kompleksni broj z=x+iy, exp(z) računa kompleksnu
eksponencijalnu funkcija ez=ex(cos y + isin y).
Primjer 2.10.3 Ilustrovaćemo primjenu eksponencijalne funkcije za polja

⎡− 356
. 5.23 ⎤ ⎡−1 + 2i 1 − 3i ⎤
A=⎢ ⎥ i Z =⎢ ⎥
⎣ 2.67 − 124
. ⎦ ⎣ 3 + 4i 2 − 6i ⎦
» exp(A)
ans =
0.0284 186.7928
14.4400 0.2894
» exp(Z)

54
MATLAB for Windows
ans =
-0.1531 + 0.3345i -2.6911 - 0.3836i
-13.1288 -15.2008i 7.0948 + 2.0646i
log(X) daje prirodne logaritme elemenata polja X. Ukoliko je z=rejα
negativan ili kompleksan broj, izraz log(z) računa kompleksni prirodni logaritam,
po formuli ln z= ln r+ iα.
Logaritam za osnovu 10 od elemenata polja X definisan je sa operatorom
log10(X).
Primjer 2.10.4 Za polja A i Z iz prethodnog primjera, dobijamo:
» log(A)
ans =
1.2698 + 3.1416i 1.6544
0.9821 0.2151 + 3.1416i
» log(Z)
ans =
0.8047 + 2.0344i 1.1513 - 1.2490i
1.6094 + 0.9273i 1.8444 - 1.2490i
» log10(A)
ans =
0.5514 + 1.3644i 0.7185
0.4265 0.0934 + 1.3644i
» log10(Z)
ans =
0.3495 + 0.8835i 0.5000 - 0.5425i
0.6990 + 0.4027i 0.8010 - 0.5425i
Operator sqrt(X) daje kvadratni korijen elemenata matrice X, pri čemu se
kompleksni rezultat dobije za negativne elemente, po definiciji
z = r [cos(α / 2 + kπ ) + i sin(α / 2 + kπ )], k = 0,1 .
Primjer 2.10.5 Naći kvadratni korijen polja A i Z iz prethodnog primjera.
» sqrt(A)
ans =
0 + 1.8868i 2.2869
1.6340 0 + 1.1136i
» sqrt(Z)
55
Elementarne operacije sa matricama i poljima brojeva
ans =
0.7862 + 1.2720i 1.4426 - 1.0398i
2.0000 + 1.0000i 2.0402 - 1.4705i
Specifične funkcije ove grupe su log2 i pow2. log2 kao funkcija jednog argumenta
log2(X) daje logaritam sa osnovom 2 elemenata matrice. pow2(X), funkcija jednog
argumenta daje matricu čiji su elementi 2x. Za matrice sa realnim argumentima
može se zahtjevati da funkcija log2(X) ima dva izlazna argumenta:
[f,e]=log2(X)
Vrijednost matrice f su brojevi izme|u 0.5 i 1 takvi da važi X=f ⋅ 2e. Funkcija
x=pow2(f,e) ima suprotan efekat.
Primjer 2.10.6 Naći logaritam sa osnovom 2 matrice A korišćene u prethodnim
primjerima, četvrti stepen broja 2 i na nizu brojeva od 1 do 16 demonstrirati ostale
mogućnosti naredbi log2 i pow2.
» log2(A)
ans =
1.8319 + 4.5324i 2.3868
1.4168 0.3103 + 4.5324i
» x=pow2(4)
x=
16
» [f,e]=log2(1:16)
f=
Columns 1 through 7
0.5000 0.5000 0.7500 0.5000 0.6250 0.7500 0.8750
Columns 8 through 14
0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750
Columns 15 through 16
0.9375 0.5000
e=
Columns 1 through 12
1 2 2 3 3 3 3 4 4 4 4 4
Columns 13 through 16
4 4 4 5
» x=pow2(f,e)
x=
Columns 1 through 12
56
MATLAB for Windows
1 2 3 4 5 6 7 8 9 10 11 12
Columns 13 through 16
13 14 15 16
2.10.4 TRIGONOMETRIJSKE, HIPERBOLNE I NJIMA INVERZNE
FUNKCIJE
Operatori sin(X), cos(X), tan(X), cot(X), sec(X) i csc(X) daju
trigonometrijske funkcije za argumente definisane u radijanima. I oblast
definisanosti i oblast vrijednosti ovih funkcija uključuju kompleksne brojeve. Za
kompleksne argumente z=x+iy važe sljedeće definicije:
sin z=(eiz-e-iz)/2i cos z=(eiz+e-iz)/2
tan z=sin z/cos z cot z=cos z/sin z
sec z=1/cos z csc z=1/sin z
Operatori asin(X), acos(X), atan(X), acot(X), asec(X) i acsc(X) daju
inverzne trigonometrijske funkcije u radijanima. Za realne vrijednosti x, takve da je
abs(x)<1, funkcije asin(x) i acos(x) daju vrijednosti u opsegu [0, π] i [-π/2, π/2],
respektivno, dok atan(x) i acot(x) daje vrijednosti u opsegu [-π/2, π/2], za realne
vrijednosti x. Za x≥1 asec(x) i acsc(x) daje vrijednosti u opsegu [0, π] i [-π/2, π/2]
respektivno. Za realne x, sa abs(x)>1, kao i za kompleksne vrijednosti x, acos(x) i
asin(x) daju kompleksne vrijednosti po pravilu

cos−1 ( x ) = −i ln( x + i 1 − x 2 )

sin −1 ( x) = −i ln(ix + 1 − x 2 )
Na sličan način, za kompleksne x, operatori atan(x) i acot(x) daje
kompleksne vrijednosti po pravilu
⎛ ⎞ ⎛ ⎞
tan −1 ( x) = i ln⎜ i + x ⎟ cot −1 ( x) = i ln⎜ ix + 1⎟
2 ⎝i − x ⎠ 2 ⎝ ix − 1⎠
Funkcija atan2(Y,X) daje tzv. četvorokvadrantni arkus tangens. Vidimo da
zahtijeva dva ulazna argumenta, jer vrijednosti Y i X odre|uju kvadrant u kome se
pridružena varijabla X+iY nalazi, tako da za računanje arkus tangensa nije
dovoljno poznavati samo odnos Y/X. Rezultat se dobija u opsegu [-π, π].
57
Elementarne operacije sa matricama i poljima brojeva
U m-fajlu postoje i hiperbolne funkcije sinh, cosh, tanh, coth, sech i csch kao i
inverzne hiperbolne funkcije asinh, acosh, atanh, acoth, asech i acsch.
Primjer 2.10.7 Za polja A i Z iz primjera 2.10.3, ilustrovaćemo pojedine od
navedenih elementarnih matematičkih funkcija:
» sin(A),sin(A+2*pi),sin(Z),sin(Z+2*pi)
ans =
0.4063 -0.8690
0.4543 -0.9458
ans =
0.4063 -0.8690
0.4543 -0.9458
ans =
1.0e+002 *
-0.0317 + 0.0196i 0.0847 - 0.0541i
0.0385 - 0.2702i 1.8342 + 0.8394i
ans =
1.0e+002 *
-0.0317 + 0.0196i 0.0847 - 0.0541i
0.0385 - 0.2702i 1.8342 + 0.8394i
» asin(Z)
ans =
-0.4271 + 1.5286i 0.3076 - 1.8642i
0.6340 + 2.3055i 0.3181 - 2.5426i
» tan(Z), cot(A), 1./tan(A)
ans =
-0.0338 + 1.0148i 0.0045 - 1.0021i
-0.0002 + 0.9994i 0.0000 - 1.0000i
ans =
-2.2489 -0.5694
-1.9609 -0.3434
ans =
-2.2489 -0.5694
-1.9609 -0.3434
» atan2(imag(Z),real(Z))
ans =
2.0344 -1.2490
58
MATLAB for Windows
0.9273 -1.2490
» angle(Z)
ans =
2.0344 -1.2490
0.9273 -1.2490
» sec(A), sec(A),1./cos(A)
ans =
-1.0944 2.0210
-1.1225 3.0789
ans =
-1.0944 2.0210
-1.1225 3.0789
ans =
-1.0944 2.0210
-1.1225 3.0789
» sinh(A)
ans =
-17.5674 93.3937
7.1854 -1.5831
Vidimo da za Z=X+iY operatori angle(Z) i atan2(Y,X) daju isti rezultat.
2.10.5 BESSELOVE, BETA, GAMA I FUNKCIJE GRE[KE
Operatori besselj, bessely, besseli i besselk služe za izračunavanje
Besselovih funkcija. Diferencijalna jednačina oblika
x y"+ xy'+(x2 -α2)y = 0,
naziva se Beselova jednačina, a njena rješenja poznata su pod imenom Beselove
funkcije. besselj(alfa,X) izračunava Beselovu funkciju prve vrste reda α>0 za
svaki element polja X. bessely(alfa,X) izračunava Beselovu funkciju druge vrste
reda α<0 (α= - alfa) za svaki element polja X . Treba pomenuti da je podržana i
funkcija bessel koja, za realne argumente X, predstavlja funkciju besselj a za
imaginarne funkciju besseli.
Za izračunavanje gama funcije koriste se operatori gamma(x),
gamminc(x,a) i gammaln(x). Operatoru gamma(x) odgovara funkcija

γ ( x ) = ∫ t x − 1e − t d t
0

59
Elementarne operacije sa matricama i poljima brojeva
poznata kao gama funkcija, za koju važi značajna osobina gamma(n+1)=n! za n
cijeli broj. gammaln(x) predstavlja logaritam gama funkcije. Nekompletna gama
funkcija se računa (operator gammainc(x,a)) po sljedećoj formuli
x

γ 1 ( x , a ) = ∫ t a −1e − t dt
0

Beta funkcija se računa operatorom beta(x,y) a njen logaritam operatorom


betaln(x,y). Beta funkcija je data sljedećim izrazom
1

β( x , y ) = ∫ t x −1 (1 − t ) y −1 dt
0

U teoriji vjerovatnoće veoma se često koristi pojam funkcije greške.


Funkcija greške (operator erf(x)) je data kao
x

erf( x) = 2 ∫ e −t dt
2

π0
Operator komplemantarne funkcije greške je erfc(x)=1-erf(x) dok se inverzna
funkcija greške dobija operatorom y=erfinv(x) (gdje je x=erf(y) i y∈(−∞,∞) i
x∈(-1,-1)).
Primjer 2.10.8 Nacrtati Beselovu funkciju prve i druge vrste prvog reda za
x=0:0.25:10.
» x=0:.25:10;
» figure(1),plot(x,besselj(1,x))
» y=0:.25:20;
» figure(2),plot(y,bessely(1,y))
Dakle prilikom crtanja se otvaraju dva grafička prozora u kojima se crtaju
Besselova funkcija prve i druge vrste. O funkcijama plot i figure biće više riječi u
narednom poglavlju.
0.6 0.5
0.5
0
0.4
0.3 -0.5

0.2
-1
0.1
-1.5
0
-0.1 -2
-0.2
-2.5
-0.3
-0.4 -3
0 2 4 6 8 10 0 5 10 15 20

60
MATLAB for Windows
a) b)
Slika 2.1 Grafik Beselove funkcije: a) prve vrste, b) druge vrste
Primjer 2.10.9 Nacrtati nekompletnu gama funkciju za x=0.02:0.02:1 i a=2 za
svako x.
» x=0.02:.02:1;
» plot(x,gammainc(x,2*ones(size(x))))
0.3

0.25

0.2

0.15

0.1

0.05

0
0 0.2 0.4 0.6 0.8 1

Slika 2.2: Nekompletna gama funkcija


Primjer 2.10.10 Naći beta funkciju argumenata 3 i 2 i provjeriti funkciju betaln.
» beta(3,2)
ans =
0.0833
» betaln(3,2),log(beta(3,2))
ans =
-2.4849
ans =
-2.4849
Primjer 2.10.11 Nacrtati funkciju greške i komplementarnu funciju greške za
argumente x=-3:0.1:3. Demonstrirati inverznu funciju greške za argumenta od -1
do 1.
» plot(-3:.1:3,erf(-3:0.1:3))
» plot(-3:.1:3,erfc(-3:0.1:3))
» x=erfinv(-1:.2:1)
x=
Columns 1 through 7
-Inf -0.9062 -0.5951 -0.3708 -0.1791 0 0.1791

61
Elementarne operacije sa matricama i poljima brojeva
Columns 8 through 11
0.3708 0.5951 0.9062 Inf
1 2
0.8 1.8
0.6 1.6
0.4 1.4
0.2 1.2
0 1
-0.2 0.8
-0.4 0.6
-0.6 0.4
-0.8 0.2
-1 0
-3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3

a) b)
Slika 2.3. a) Funkcija greške; b) Komplementarna funkcija greške
2.10.6. SPECIFI^NE NUMERI^KE FUNKCIJE

Broj prikazan u pokretnom zarezu se može prikazati u obliku razlomaka.


Funkcija rat(x) prikazuje racionalni broj u obliku sume razlomaka. Drugi oblik ove
naredbe je [a,b]=rat(x,greska) vraća vrijednost a i b za koju važi:

a / b − x ≤ greska x
Ako se argument greska izostavi, njegova se vrijednost uzima po pravilu opisanom
u help-u. Druga naredba za racionalnu aproksimaciju je rats(x,l) koja vraća prosti
razlomak koji aproksimira broj x (odnosno svaki element matrice x) a l predstavlja
mjeru tačnosti sa kojom će se aproksimacija izvršiti. Ako se l izostavi
podrazumjeva se vrijednost l=13, za bolju preciznost treba uzeti veće l.
Primjer 2.10.12 Demonstrirati naredbe rat i rats.
Unošenje
» rat(0.234), rat(pi)
rezultira sa
0 + 1/(4 + 1/(4 + 1/(-3 + 1/(11))))
3 + 1/(7 + 1/(16))
Dakle važi približna relacija:

62
MATLAB for Windows

π = 3+ 1
7+ 1
16
Drugi oblik naredbe rat
» [a,b]=rat(pi)
a=
355
b=
113
što znači da je π≈355/113. Isti izraz sa zadatom većom tačnošću daje
» [a,b]=rat(pi,2^(-52))
a=
245850922
b=
78256779
Unošenje
» rats(1.234)
rezultira sa
ans =
617/500
dok sa povećanom ili smanjenom tačnošću dobijamo
» rats(pi,20)
ans =
312689/99532
» rats(pi,2)
ans =
3
Tako|e su veoma značajne funkcije gcd (najveći zajednički djelilac), lcm
(najmanji zajednički sadržalac), rem (ostatak pri dijeljenju) i sign (znak broja).
Funkcija gcd(a,b) za cijele brojeve a i b nalazi najmanji zajednički djelilac (broj sa
kojim se mogu podijeliti oba broja bez ostatka). Oblik ove naredbe [A,B,C]=
gcd(a,b) daje A najmanji zajednički djelilac B i C tako da važi: A=aB+bC. Funkcija
lcm(a,b) za cijele brojeve a i b daje broj u kojem se a i b sadrže bez ostatka.
63
Elementarne operacije sa matricama i poljima brojeva
rem(a,b) daje ostatak pri dijeljenju a sa b. Funkcija znaka sign vraća -1 za one
elemente matrice koji su negativni, +1 za pozitivne i 0 za nulte elemente matrice.
Primjer 2.10.13 Na primjerima demonstrirati opisane funkcije
» G=gcd(17,6)
G=
1
» G=gcd(25,35)
G=
5
» [G,C,D]=gcd(25,35)
G=
5
C=
3
D=
-2
» GCD(0,0)
ans =
0
Dakle brojevi 17 i 6 su uzajamno prosti. Po definiciji se usvaja da je gcd(0,0)=0.
Demonstrirajmo i funkciju lcm:
» lcm(23,34), lcm(12,42)
ans =
782
ans =
84
Odredimo ostatak pri dijeljenju 23 i 3, 234 i 3, pa demonstrirajmo funkciju sign.
» rem(23,3)
ans =
2
» rem(234,3)
ans =
0
» sign([-23 0 12])
64
MATLAB for Windows
ans =
-1 0 1

2.11. FUNKCIJE ZA MANIPULACIJU MATRICAMA

Već smo se sreli sa nekim operacijama za manipulaciju kolona i vrsta


matrica (operator : i transponovanje). Ponekad ovo nije dovoljno ili nije dovoljno
efikasno. Stoga postoje sljedeće funkcije za manipulaciju matricama: rot90, flipud
i fliplr. Funkcija rot90(A) "rotira" matricu A za 90° u smjeru kazaljke na satu, dok
verzija ove funkcije rot90(A,n) "rotira" matricu A za n x 90° u smjeru kazaljke na
satu. Dakle, rot90(A,4) vraća polaznu matricu a rot90(A,-1) rotira matricu za 90° u
smjeru suprotnom kretanju kazaljke na časovniku. Funkcija flipup(A) mijenja
redosljed vrste. Prva vrsta novodobijene matrice je poslednja matrice A, i zatim se
re|aju vrste ka prvoj vrsti matrice A. Slična ovoj je funkcija fliplr(A) koja mjenja
redosljed kolona matrice.
Primjer 2.11.1 Na matrici A=[11 12 13 14;21 22 23 24;31 32 33 34] demonstrirati
opisane naredbe za manipulaciju matricama.
» A=[11 12 13 14;21 22 23 24;31 32 33 34];
» A,rot90(A)
Rezultira kao:
A=
11 12 13 14
21 22 23 24
31 32 33 34
ans =
14 24 34
13 23 33
12 22 32
11 21 31
Unošenjem
» rot90(A,4)
dobijamo početnu matricu
ans =
65
Elementarne operacije sa matricama i poljima brojeva
11 12 13 14
21 22 23 24
31 32 33 34
Za rotaciju u smjeru suprotnom kazaljki na satu koristimo
» rot90(A,-1)
ans =
31 21 11
32 22 12
33 23 13
34 24 14
Demonstrirajmo naredbe flipud i fliplr. Unošenjem
» flipud(A),fliplr(A)
dobijamo
ans =
31 32 33 34
21 22 23 24
11 12 13 14
ans =
14 13 12 11
24 23 22 21
34 33 32 31
Uočimo da dobijene matrice imaju iste dimenzije kao početna matrica. flipud
možemo realizovati pomoću operatora:
» A(size(A,1):-1:1,:)
ans =
31 32 33 34
21 22 23 24
11 12 13 14
Naredbi fliplr odgovara
» A(:,size(A,2):-1:1)

66
MATLAB for Windows

glava treća

GRAFIKA
MATLAB posjeduje mogućnost dobrog grafičkog predstavljanja funkcija
jedne promjenjive, kao i izuzetno jednostavnog i kvalitetnog predstavljanja funkcija
dvije promjenjive. U rudimentarnom obliku, koliko to dozvoljava površina ekrana,
MATLAB je u stanju da predstavi i funkcije tri promjenljive. Predstavljanje funkcija
dvije promjenljive može biti u obliku "trodimenzionih (mrežastih) crteža", 2-D
obojenih površina, kolornih mapa i putem izo linija. U okviru ove glave dat je
pregled grafičkih mogućnosti MATLAB-a kao i opcije za grafičko procesiranje.
"Upravljanje" grafičkim okruženje, kao i samim graficima opisano je u šestoj glavi.
3.1 GRAFI^KO PREDSTAVLJANJE MATRICA, VEKTORA I
FUNKCIJA JEDNE PROMJENJIVE

3.1.1 OSNOVNI OBLIK


Najjednostavniji oblik predstavljanja vektora vrste ili vektora kolone je
korišćenjem naredbe plot.
Primjer 3.1.1 Nacrtati y=[1 2 4 8 16 32]
Postupak je sljedeći:
» y=[1 2 4 8 16 32];
» plot(y)
16

14

12

10

0
1 1.5 2 2.5 3 3.5 4 4.5 5

Slika 3.1. Grafik vektora vrste


Sa slike 3.1. možemo zapaziti da je za nezavisno promjenjivu uzet redni
broj elementa u vektoru y. Ako nezavisno promjenljivu označimo sa x onda je
69
Grafika
računar uzeo x=[1 2 3 4 5 6] i nacrtao grafik spajajući tačke (1,y(1)), (2,y(2)),
(3,y(3)), (4,y(4)), (5,y(5)) i (6,y(6)).
U opštem slučaju sa plot(y) se crta grafik spajajući tačke (i,y(i)) za
i=1,2,3...,N, gdje je N dužina vektora y. Vektor y može biti i vektor kolona. Provjeriti
da se dobija isti grafik ako zadamo y1=y' i nacrtamo plot(y1).
Prilikom crtanja grafika, otvara se grafički prozor za koji važe opšta pravila
svih Windows prozora. Na komandni prompt se moguće vratiti na više načina, a od
njih pominjemo dva: pritisnuti Alt, a zatim pritiskati Tab dok se ne pojavi natpis
MATLAB Command Window; nakon toga se otpuste oba tastera. Na isti način
možemo se vratiti u grafički prozor. Za prelazak u otvoreni grafički prozor pored
kombinacije Alt+Tab može poslužiti opcija Window MATLAB-ovog komandnog
prozora.
Nezavisno promjenljiva može biti zadata posebno. U tom slučaju se crtanje
vektora y u zavisnosti od x vrši sa plot(x,y).
Primjer 3.1.2 Ako su pri nekom mjerenju za vrijednosti nezavisno promjenljive
x=[-2 -1 0 1 3 4 7 6] dobijene vrijednosti koje su zapisane odgovarajućim redom u
y=[-1 -0.5 0 1 3 6 9 8], nacrtati y(x).
» x=[-2 -1 0 1 3 4 7 6];
» y=[-1 -0.5 0 1 3 6 9 8];
» plot(x,y)
9
8
7
6
5
4
3
2
1
0
-1
-2 0 2 4 6 8

Slika 3.2. Grafik funkcije y(x)


Grafik se u ovom slučaju dobija spajanjem tačaka (x(i),y(i)) za i=1,2,...,N,
gdje je N broj elemenata vektora x i y. Ukoliko broj elemenata u x i y nije isti
umjesto grafika dobićemo poruku greške da se dimenzije ne slažu. Vektori x i y ne

70
MATLAB for Windows
moraju oba biti vektori vrste ili vektori kolone, već jedan može biti kolona a drugi
vrsta, i obrnuto. Probati plot(x,y').
Posebno je značajna primjena operatora plot za crtanje grafika funkcija sa
jednom promjenljivom y=f(x).
Primjer 3.1.3 Nacrtati grafik funkcije y=xsin2(πx) u intervalu -4≤x≤4.
» x=-4:.1:4;
» y=x.*sin(pi*x).^2;
» plot(x,y)
4

-1

-2

-3

-4
-4 -3 -2 -1 0 1 2 3 4

Slika 3.3. Grafik funkcije y=xsin2(πx) za -4≤x≤4 sa korakom 0.1

3.1.2 VI[E FUNKCIJA NA ISTOM CRTE@U

Postoji i mogućnost predstavljanja kolona matrice dimenzija (mxn). Ako


matrica y ima n kolona onda naredbom plot(y) dobijamo n krivih od kojih svaka
predstavlja grafik po jedne kolone matrice y.
Primjer 3.1.4 Nacrtati grafik pojedinih kolona matrice:

71
Grafika

⎡ 1 −1 3 ⎤
⎢ 2 3 0 ⎥⎥

⎢ 2 5 − 1⎥
y=⎢ ⎥
⎢ 5 4 − 2⎥
⎢−1 3 0 ⎥
⎢ ⎥
⎢⎣ − 2 2 1 ⎥⎦

» y=[1 -1 3;2 3 0;2 5 -1;.5 4 -2 0; -1 3 0;-2 2 1];


» plot(y)
Vidimo da je svaka kolona predstavljena različitim tipom, odnosno bojom
linije. Kao nezavisno promjenljiva uzet je redni broj elementa u koloni. Tako je prvi
grafik dobijen spajanjem tačaka (i,y(i,1)) za sve vrijednosti i.
5

-1

-2
1 2 3 4 5 6

Slika 3.4. Grafičko predstavljanje matrice po kolonama

I u ovom slučaju je moguće predstaviti sve kolone u funkciji nezavisno


promjenljive x.
Primjer 3.1.5 Nacrtati grafik pojedinih kolona matrice y u funkciji vrijednosti x.

72
MATLAB for Windows

⎡ 1⎤ ⎡ 1 −1 3 ⎤
⎢2⎥ ⎢ 2 3 0 ⎥⎥
⎢ ⎥ ⎢
⎢4⎥ ⎢ 2 5 − 1⎥
x=⎢ ⎥ y=⎢ ⎥
⎢ 5⎥ ⎢ 0.5 4 − 2⎥
⎢7⎥ ⎢−1 3 0 ⎥
⎢ ⎥ ⎢ ⎥
⎢⎣ 8 ⎥⎦ ⎢⎣ − 2 2 1 ⎥⎦

» x=[1 2 4 5 7 8];
» y=[1 -1 3;2 3 0;2 5 -1;5 4 -2; -1 3 0;-2 2 1];
» plot(x,y)
Dužina vektora x i kolona matrice y mora biti ista. Ako to nije slučaj, onda
će računar provjeriti da možda dužina vrsta u matrici y nije ista kao i dužina vektora
x. Ukoliko jeste, onda će nacrtati vrste matrice y u funkciji od x, a ako nije, javiće
grešku da se dimenzije ne slažu.
5

-1

-2
1 2 3 4 5 6 7 8

Slika 3.5. Grafik matrice y(x)


Prethodni postupak se može iskoristiti za crtanje više funkcija na istom
grafiku.
Primjer 3.1.6 Nacrtati funkcije y=x2 i y=x3 u intervalu -1≤x≤1.
» x=-1:0.02:1;
» y1=x.^2;
» y2=x.^3;
» y=[y1;y2]';
» plot(x,y)
73
Grafika

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1

Slika 3.6. Dvije funkcije na istom grafiku


Više funkcija se može nacrtati na istom grafiku i na sljedeći način:
plot(x1,y1,x2,y2,...,xn,yn).
Primjer 3.1.7 Nacrtati na istom grafiku funkcije: y=x za -1≤x≤1, y=xex za 0≤x≤1,
y=sin(πx) za -1≤x≤0.
» x1=-1:.1:1;
» y1=x1;
» x2=0:.1:1;
» y2=x2.*exp(x2);
» x3=-1:.1:0;
» y3=sin(pi*x3);
» plot(x1,y1,x2,y2,x3,y3)
3

2.5

1.5

0.5

-0.5

-1
-1 -0.5 0 0.5 1

Slika 3.7. Crtanje više funkcija na istom grafiku


3.1.3 VRSTE LINIJA I OZNAKA

74
MATLAB for Windows
U dosadašnjim primjerima odabiranje tipa linija za crtanje grafika je vršeno
automatski ili, kako se često kaže, po defaultu. Tip linije za crtanje pojedinih grafika
se može zadavati po želji. Na raspolaganju su puna linija, isprekidana, tačkasta,
crta-tačka-crta, kao i označavanje vrijednosti sljedećim znacima: ., o, x, *, +.
Naredba plot(x1,y1,'-',x2,y2,'-.',x3,y3,'o') daje prvu funkciju iscrtanu punom
linijom, drugu linijom crta-tačka-crta, a treću označenu simbolom o. Tipovi linija i
simbola koji se mogu koristiti dati su u tabeli 3.1.
Tipovi linija Tipovi simbola
puna linija - tačka .
tačkasta : slova o ili x
tačka crta -. plus +
crtkana -- zvijezdica *

Tabela 3.1. Tipovi linija i simbola za naredbu plot


Možemo mijenjati i boju kojom je nacrtana pojedina kriva. Tako na primjer
plot(x1,y1,'g',x2,y2,'*r') daje zeleni grafik funkcije y1(x1), a funkiju y2(x2) označava
crvenim zvjezdicama. Moguće boje su date u tabeli 3.2.
Boje
žuta (yellow) y
magenta (magenta) m
cijan (cyan) c
crvena (red) r
zelena (green) g
plava (blue) b
bijela (white) w
crna (black) k

Tabela 3.2. Boje i njihove skraćenice


Napomenućemo da ukoliko printer nije u boji onda se linije različitih boja
na printeru prenose različitim tipovima linija.

3.1.4 OZNA^AVANJE OSA I GRAFIKA

75
Grafika
Moguće je označiti ose grafika, ispisati njegov naziv, kao i unijeti
proizvoljan broj oznaka na proizvoljnim mjestima.
Nacrtajmo grafik y=sin(x) u intervalu -2π≤x≤2π.
» x=linspace(-2*pi,2*pi,40);
» plot(x,sin(x))
Prije svega uočimo da funkcija x=linspace(a,b,n) služi za kreiranje vektora
koji je isti kao vektor x=a:(b-a)/(n-1):b. Ako se n izostavi pretpostavlja se vrijednost
n=100. Pošto smo na ekranu dobili grafik, poslije pritiska na bilo koju tipku,
vraćamo se na komandni displej. Naziv grafika ćemo unijeti sa:
» title(' Grafik funkcije y=sin(x) ')
Ose možemo označiti kucajući:
» xlabel(' vrijednost nezavisno promjenljive x ')
» ylabel(' vrijednost funkcije ')
Proizvoljan tekst, na primjer abc, na grafiku, na mjestima sa
kooordinatama (x1,y1), (x2,y2),...,(xn,yn) se unosi sa:
» text([x1 x2 ... xn],[y1 y2 ... yn],'abc')
Koordinate su zadate u jedinicama koje važe za tekući grafik. U našem primjeru sa
sinusoidom unesen je tekst dvije periode u poziciji po (x,y)=(0.5,0.5).
» text(0.5,0.5,'dvije periode')
Ukoliko na svakom mjestu treba unijeti tekst različite sadržine, npr. text1,
text2,...,textn, onda to činimo sa:
» text([x1 x2 ... xn],[y1 y2 ... yn],['text1';'text2'; ... ;'textn'])
Postoji mogućnost da se tekst unese na poziciju koja se može specificirati mišem.
Poslije zadavanja naredbe
» gtext('Stavi poziciju')
na grafiku se pojavi oznaka pokazivača miša kojim kliknemo na poziciju gdje
želimo da se nalazi tekst.

76
MATLAB for Windows
Grafik funkcije y=sin(x)
1
0.8
0.6
dvije periode
0.4
0.2
0
Stavi poziciju
-0.2
-0.4
-0.6
-0.8
-1
-8 -6 -4 -2 0 2 4 6 8
vrijednost nezavisno promjenljive x

Slika 3.8. Označavanje osa, naziva i unošenje teksta na grafiku


Tako|e, napomenimo da se sličan način za unošenje teksta, označavanje osa i
naslova grafika može primjeniti za sve 2-D i 3-D grafike.
Mreža na grafiku se crta naredbom:
» grid
3.1.5 GRAFICI KOMPLEKSNIH FUNKCIJA

Naredbu plot možemo koristiti i u slučaju kompleksnih funkcija ili matrica.


Ako je z kompleksna funkcija onda je plot(z) isto što i plot(real(z),imag(z)),
odnosno isto što i crtanje imaginarnog dijela u funkciji od realnog. Tako, na primjer
unošenjem:
» t=linspace(-pi,pi);
» z=exp(i*t);
» plot(z)
dobijamo isto što i sa plot(cos(t),sin(t)), odnosno plot(x,y), gdje je x=cos(t) i
y=sin(t), (x2+y2=1).

77
Grafika

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0

-0.2 -0.2

-0.4 -0.4

-0.6 -0.6

-0.8 -0.8

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-1 -0.5 0 0.5 1

Slika 3.9. Grafik kompleksne funkcije z=eit za -π≤t≤π.


Kada je riječ o kompleksnim funkcijama recimo da se one ipak najčešće
predstavljaju na taj način što se odvojeno crtaju amplituda i faza kompleksne
funkcije u zavisnosti od nezavisno promjenljive, što se dobija sa:
plot(t,abs(z),t,angle(t)). Drugi često zahtijevani oblik je predstavljanje realnog i
imaginarnog dijela u funkciji nezavisno promjenljive, što se dobija sa
plot(t,real(z),t,imag(z)).

3.1.6 SKALIRANJE OSA

Mogli smo uočiti na prethodnom primjeru da, iako je grafik koji smo crtali u
analitičkom obliku predstavljao krug, nijesmo to dobili i na grafiku. Ukoliko želimo
da zadati krugovi i na grafiku ostanu krugovi, odnosno da zadati kvadrati budu
kvadrati i na crtežu, onda treba unijeti axis('square'). Naredbom axis('equal')
podešavamo da je priraštaj po x i y osi isti. Na prvobitne dimenzije okvira grafika
78
MATLAB for Windows
vraćamo se sa axis('normal'). Na slici 3.9. prikazani su grafici koji se dobijaju u
ovom slučaju.
» t=linspace(-pi,pi);
» z=exp(i*t);
» axis('square')
» plot(z)
» axis('normal')
» axis('equal')
Ose x i y se postavljaju automatski na osnovu maksimalne i minimalne
vrijednosti koordinata x i y. Ako želimo sami zadati u kojim okvirima će biti nacrtan
grafik onda to činimo naredbom axis([xmin xmax ymin ymax]). Okvir za crtanje
grafika će biti postavljen od xmin do xmax i od ymin do ymax. Unijeti okviri se
zadržavaju i za naredne grafike sve do njihove promjene ili vraćanja na
automatsko skaliranje. Vraćanje na automatsko skaliranje se vrši sa axis('axis').
Naredbom axis('normal') poništavaju se sva ograničenja vezana za grafik.
Naredbom axis dobijamo informaciju o trenutnim dimenzijama grafika.
Primjer 3.1.8 Nacrtati funkciju y=sin(x) za -4≤x≤4, sa automatskim skaliranjem
osa, a zatim postaviti da opseg po y-osi bude od -1.5 do 1.5.
» x=-4:.2:4;
» plot(x,sin(x))
» axis([-4 4 -1.5 1.5])
» plot(x,sin(x))
» axis
Dakle, kao rezultat naredbe axis u ovom slučaju pored grafika dobija se i tekući
opseg:
ans =
-4.0000 4.0000 -1.5000 1.5000
Ako ne želimo da prikažemo koordinantne ose otkucaćemo axis('off'), dok
za ponovni povratak zadajemo axis('on'). Naredba [A,B,C]=axis('state') vraća
vijednosti koje ukazuju na trenutno skaliranje crteža. A može biti 'auto'
(automatsko skaliranje) ili 'manual' (ručno), B ukazuje da li se prikazuju
koordinantne ose ('on' ili 'off') i C može imati vrijednosti 'xy' ili 'ij', a koristi se za
prikazivanje funkcija dvije promjenljive ili matrice, i biće naknadno objašnjeno.
79
Grafika
Napomena: Ne zaboravite da se poslije jednog grafika vratite na automatsko
skaliranje ili promijenite skaliranje osa.
Treba pomenuti i mogućnost zumiranja grafika (prikazivanja jednog njegovog
dijela) pomoću miša. Ova akcija se obavlja naredbom zoom on i klikom mišem na
dio grafika koji želimo prikazati. Na cijeli grafik se vraća naredbom zoom out.
Primjer 3.1.9. Nacrtati funkciju y=x1/3 za 0≤x≤20 i izvršiti zumiranje. Vratiti se na
grafik default veličine.
» x=0:.1:20;
» y=x.^(1/3);
» plot(x,y)
» zoom on
» zoom out
3
2.6
2.5 2.4

2 2.2

2
1.5
1.8
1
1.6
0.5 1.4

0 1.2
0 5 10 15 20 4 6 8 10 12

Slika 3.10. Zumirani grafik i grafik prirodne veličine


3.1.7 GRAFICI POLARNIH FUNKCIJA

Funkcija ρ=ρ(ϕ) zadata u polarnom koordinantnom sistemu, crta se


naredbom polar(ϕ,ρ).
Primjer 3.1.10 Nacrtati kardioidu r=a(1+cos(ϕ)), za i=2 i -π≤ϕ≤π.
» a=2;
» phi=-pi:pi/40:pi;
» r=a*(1+cos(phi));
» polar(phi,r)
» polar(phi,r,'g*')

80
MATLAB for Windows
Vidimo da i ovdje kao kod naredbe plot važe pravila za iscrtavanje linija i boja.
Poslednjom naredbom se crta kardioida u zelenoj linija kao niz zvijezdica.
904
120 60
3

150 2 30

180 0

210 330

240 300
270

Slika 3.11. Grafik funkcije u polarnom koordinatnom sistemu


Na grafiku se može označiti naslov, dok je radijalna mreža neposredno
ugra|ena.

3.1.8 GRAFICI SA LOGARITAMSKOM PODJELOM

Grafici funkcija mogu biti predstavljeni i u logaritamskim razmjerama i to


logaritamski samo po x-osi, samo po y-osi ili po obije ose.
Nezavisno promjenljiva, odnosno vektor u logaritamskoj razmjeri se može
generisati naredbom x=logspace(d1,d2,n). Prethodna naredba generiše n
vrijednosti vektora x od 10d1 do 10d2. Ako zadamo x=logspace(d1,d2), onda se
uzima n=50. Moguće je koristiti i x=logspace(d1,pi,n) što daje n vrijednosti od 10d1
do π.
Crtanje grafika sa logaritamskom podjelom nezavisno promjenljive se vrši
sa semilogx(x,y).
Primjer 3.1.11 Nacrtati y=1/(x3+x2-x+1) za 0.1≤x≤100.
» x=logspace(-1,2,50);
» y=1.0./(x.^3+x.^2-x+1);
» semilogx(x,y,'g-')
» grid

81
Grafika
Logaritamska razmjera se može napraviti i po y-osi naredbom
semilogy(x,y).
2 3 2
Primjer 3.1.12 Nacrtati y=ex +x-1 i y1=ex -2 x za 0≤x≤5.
» x=0:.1:5;
» y=exp(x.^2+x-1);
» y1=exp(x.^3-2*x.^2);
» semilogy(x,y,x,y1)
» grid
1.4

1.2

0.8

0.6

0.4

0.2

0 -1 0 1 2
10 10 10 10

Slika 3.12. Crtanje u logaritamskoj razmjeri po x-osi


35
10
30
10
25
10
20
10
15
10
10
10
5
10
0
10
-5
10
0 1 2 3 4 5

Slika 3.13. Logaritamska raspodjela po y-osi


Konačno, moguća je logaritamska raspodjela i po x-osi i po y-osi,
naredbom loglog(x,y).
Primjer 3.1.13 Nacrtati y=1/(x.^3+x.^2+x+1) za 0.1≤ x ≤10.
» x=logspace(-1,1,50);

82
MATLAB for Windows
» y=1./(x.^3+x.^2+x+1);
» loglog(x,y)
» grid
0
10

-1
10

-2
10

-3
10

-4
10 -1 0 1
10 10 10

Slika 3.14. Logaritamska raspodjela po x i y-osi

3.1.9 STEPENASTI (BAR) GRAFICI


Stepenasti ili bar grafici se dobijaju naredbom bar(y)
Primjer 3.1.14 Nacrtati y=sin(x) za -π≤x≤π.
» x=-pi:pi/20:pi;
» y=sin(x);
» bar(y)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0 10 20 30 40 50

Slika 3.15. Bar grafik


Slična funkciji bar je i funkcija stairs koja crta stepenasti grafik ali bez
vertikalnih linija.

83
Grafika
2
Primjer 3.1.15 Nacrtati stepenasti dijagram funkcije y=e-x /2 sin(x) u granicama
-4≤x≤4.
» x=-4:.1:4;
» y=exp(-x.^2/2).*sin(x);
» stairs(x,y)
0.6

0.4

0.2

-0.2

-0.4

-0.6
-4 -3 -2 -1 0 1 2 3 4

Slika 3.16. Stepenasti grafik

3.1.10 PRIKAZ DISKRETNIH VELI^INA


U praksi se veoma često radi sa diskretnim veličinama. To su veličine koje
su definisane samo u tačno utvr|enim vrijednostima nezavisno promjenljive. Za
prikaz diskretnih vrijednosti u MATLAB-u se može koristiti i funkcija stem.
Primjer 3.1.16 Nacrtati diskretnu funkciju x(n)=(3/4)n za n od 1 do 20, kao i
vrijednost korijena ove funkcije.
» n=1:20;
» x=(3/4).^n;
» stem(n,x)
» stem(n,sqrt(x),':')

84
MATLAB for Windows

0.8 0.9
0.7 0.8

0.6 0.7
0.6
0.5
0.5
0.4
0.4
0.3
0.3
0.2 0.2
0.1 0.1
0 0
0 5 10 15 20 0 5 10 15 20

Slika 3.17. Prikazivanje stem funkcijom diskretnih promjenljivih


Pomoću ove funkcije nije moguć istovremeni prikaz više funkcija. Tako bi
naredba stem(x,y,x1,y1) vratila poruku o grešci - previše ulaznih argumenata.
3.1.11 POPUNJENI CRTE@I
Kod prikazivanja funkcija jedne promjenljive ponekad je veoma značajno
označiti područnje ispod grafika. Za popunjavanje se u MATLAB-u koristi funkcija
fill(x,y,'b'). Ovom naredbom crta se funkcija y=f(x) i u boji b popunjava prostor
izme|u funkcije y=x i date funkcije. Da bi se popunio prostor izme|u crteža i x ose
moramo se poslužiti malim trikom koji će biti prikazan u sljedećem primjeru.
Primjer 3.1.17 Nacrtati funkciju y=exp(-x2) u granicama 0≤x≤4 i prostor ispod
grafika obojiti crvenom bojom.
» fill([0 0:.1:4 4 0],[0 exp(-(0:.1:4).^2) 0 0],'r')
Vidimo da je nezavisno promjenljiva definisana od 0 do 4 i da se vraća na nulu i u
skladu sa time je definisana vrijednost funkcije.
1

0 .9

0 .8

0 .7

0 .6

0 .5

0 .4

0 .3

0 .2

0 .1

0
0 0 .5 1 1 .5 2 2 .5 3 3 .5 4

Slika 3.18. Popunjavanje ispod crteža pomoću naredbe fill

85
Grafika

3.1.12 GRAFICI KOMPLEKSNIH VELI^INA

U MATLAB-u je razvijeno nekoliko mogućnosti istovremenog grafičkog


prikaza amplitude i faze kompleksnih funkcija jedne promjenljive. Funkcija
compass(z) prikazuje u obliku strelica sa početkom u koordinantnom početku
amplitudu i fazu kompleksne funkcije. Dužina strelice predstavlja njenu amplitudu,
a pravac ukazuje na fazu kompleksne promjenljive. Ovoj funkciji je slična funkcija
feather(z), s tim što se sada počeci strelica nalaze u ekvidistantnim tačkama.
Funkcija compass(z) je identična funkciji compass(real(z), imag(z)).
Primjer 3.1.18 Prikazati kompleksnu funkciju Z=tejsin(t) za vrijednosti argumenta
-2π≤t≤2π pomoću funkcija compass i feather.
» t=-2*pi:pi/20:2*pi;
» Z=t.*exp(j*sin(t));
» compass(Z,'m-')
» feather(Z)
25
20
2
15
10
0
5
0
-2 -5
-10
-4 -15
-20
-6 -25
-6 -4 -2 0 2 4 6 0 10 20 30 40 50 60 70 80

Slika 3.19. Prikaz faze i ugla kompleksnih veličina pomoću funkcija compass i
feather

3.1.13 GRAFICI SA POKRETNIM KRAJEM

U MATLAB-u je razvijena funkcija comet koja grafik crta postepeno, sa


posebno označenim krajem. Funkcija comet(x,y) vrši iscrtavanje funkcije u funkciji
radijusa ϕ.

86
MATLAB for Windows

Primjer 3.1.19 Nacrtati uopštenu hipocikloidu zadatu u funkciji parametra ϕ na


sljedeći način: x=(b-a)cosϕ+λacos((b-a) ϕ/a) i y=(b-a)sinϕ-λasin((b-a)ϕ/a),
b>a>0. Uzeti b=6, a=1 i λ=2.5.
» b=6;a=1;l=2.5;
» phi=0:pi/40:2*pi;
» x=(b-a)*cos(phi)+l*a*cos((b-a)*phi/a);
» y=(b-a)*sin(phi)-l*a*sin((b-a)*phi/a);
» comet(x,y)

-2

-4

-6

-8
-8 -6 -4 -2 0 2 4 6 8

Slika 3.20. Grafički prikaz funkcije sa pokretnim krajem

3.2 GRAFI^KO PREDSTAVLJANJE FUNKCIJA DVIJE


PROMJENLJIVE I MATRICA

Funkciju dvije promjenljive z=f(x,y) možemo predstaviti na više načina:


linijskim crtežima, mrežastim dijagramima, osjenčenim površinama, konturnim
crtežima, kao i nekim specijalizovanim grafičkim funkcijama.

3.2.1 TRODIMENZIONALNI LINIJSKI CRTE@

Funkcija plot3(x,y,z), gdje su x, y i z vektori istih dužina, crta linije z(x,y) u


3-D prostoru. I ovdje važe pravila za oblik linija kojim se crta kao kod funkcije plot.
Primjer 3.2.1 Nacrtati spiralu promjenljivog radijusa.
» t=0:pi/50:10*pi;
87
Grafika
» plot3(t.*sin(t),t.*cos(t),t)

40

30

20

10

0
40
20 40
0 20
0
-20 -20
-40 -40

Slika 3.21. Spirala sa rastućim poluprečnikom


Postoje i funkcije fill3 i comet3 koje su adekvatne odgovarajućim
funkcijama jedna promjenljive. [to se označavanja grafika tiče, kod funkcija dvije
promjenljive ništa se značajnije ne mijenja u odnosu na funkcije jedna promjenljive.
I ovdje postoje funkcije title, xlabel, ylabel, text, gtext i grid, a, razumljivo, dodata
je i funkcija zlabel. [to se tiče skaliranja osa, naredba axis ima sada tri para
argumenata koji predstavljaju granice grafika po sve tri ose. Ovdje postoji
mogućnost da se sa axis('ij') pre|e u mod crtanja gdje je koordinantni početak u
gornjem lijevom uglu. Sa axis('xy') vrši se vraćanje u grafički mod sa
koordinantnim početkom u lijevom donjem uglu (ovo je po defaultu).

3.2.2 "TRODIMENZIONI" GRAFICI MRE@ASTIH POVR[INA

Elementarna funkcija za predstavljanje mrežom je mesh(z). Nezavisno


promjenljive se generišu naredbom:
meshdom(xmin:korakx:xmax,ymax:koraky:ymax)
gdje su sa min i max označene gornje i donje granične vrijednosti nezavisno
promjenljivih, a sa korak korak odabiranja. Tako|e se nezavisno promjenljive mogu
kreirati naredbom meshgrid(x,y), koja je adekvatna naredbi meshdom kada je
redosljed elemenata u vektoru y obrnut onom iz funkcije meshgrid. Naredba
meshgrid(x,x) je adekvatna naredbi meshgrid(x). Opšti oblik neredbe
mesh(x,y,z,c) crta grafik sa koordinatama vektora x i y funkciju z u bojama c.
Naredbi mesh(x,y,z) je adekvatna naredba mesh(x,y,z,z)
Primjer 3.2.2 Nacrtati funkciju z=sin(x2+y2)/(x2+y2) za -π<x,y<π.
88
MATLAB for Windows
» [x,y]=meshdom(-pi:pi/10:pi,-pi:pi/10:pi);
» z=sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
» mesh(z)
Prilikom definisanja promjenljive z dodata je vrijednost veoma male
veličine eps da bi se izbjegla pojava nedefinisanog izraza za x=0 i y=0, oblika
sin(0)/0.
Komanda mesh ima i alternativne oblike; tako mesh(z,[az el]) daje grafički
prikaz funkcije z(x,y) sa azimutom (horizontalnom rotacijom) az stepeni i
elevacijom (vertikalnom rotacijom) el stepeni. Ukoliko ne zadamo ove vrijednosti
(kao što to nijesmo učinili u prethodnom primjeru) automatski se uzima az=-37.5o i
el=30o. Ista ova operacija se može obavljati sa naredbom view(az,el) ili
view([az,el]). Alternativno, ova naredba sa tri argumenta daje pogled u pravouglim
koordinatama. Trenutnu matricu transformacije dimenzija dobijamo sa T=view, a
trenutni azimut i elevaciju dobijamo sa [az,el]=view. Opcija view(2) daje
dvodimenzionalni prikaz az=0o i el=90o dok se sa view(3) vraćamo na default
vrijednosti az=-37.5o i el=30o.

0.5
1
0
0 -1 25
0 20
-0.5 5
30 15
10
20 30 10
20 15
10 20 5
10
0 0 25 0

Slika 3.22. Mrežasti crtež funkcije dvije promjenljive


a) mesh(z) b) mesh(z,[40,80])
Funkcija meshz je veoma slična funkciji mesh. Crta mrežastu površ sa
linijama koje su paralelne z-osi.
Primjer 3.2.3 Napisati naredbe kojima se iscrtava hiperbolički paraboloid (sedlasta
površ) z=x2-y2 u granicama od -2 do 2 i po x-osi i po y-osi.
» [x,y]=meshdom(-2:.2:2,-2:.2:2);
» z=x.^2-y.^2;
» meshz(z)
89
Grafika

-2

-4
20
15 20
10 15
10
5 5
0 0

Slika 3.23. Sedlasta površ - hiperbolički paraboloid

Crtanje mrežaste površi može da se obavlja i pomoću funkcije waterfall


koja iscrtava mrežu samo po jednoj koordinati.
Prmjer 3.2.4 Nacrtati funkciju z=xyexp(-x2) pomoću funkcije waterfall.
» z=x.*y.*exp(-x.^2);
» waterfall(z)
» waterfall(z),view([20 75])
Druga varijanta prikazuje funkciju waterfall pod odgovarajućim azimutom i
elevacijom; ovdje ne funkciioniše waterfall(z, [20 75]). Ostala su pravila kao kod
funkcije mesh.

3.2.3 GRAFICI OBOJENIH POVR[INA


Za crtanje obojenih površina koriste se funkcije surf, surfl i surfc.
Najvažnija funkcija ovog oblika je surf čiji je opšti oblik surf(x,y,z,c) crta matricu z
u funkciji x i y u bojama definisanim sa c. Ako se c izostavi podrazumjeva se c=z.
Funkcija surf(z) ima isti oblik kao mesh.
Primjer 3.2.5 Nacrtati sombrero obojenu površinu iz primjera 3.2.2.
» surf(z)

90
MATLAB for Windows

0.5

-0.5
30
20 30
20
10 10
0 0

Slika 3.24. Surf površina


Funkcija surfl adekvatna je funkciji surf, pri čemu se može podešavati
položaj izvora svijetlosti, parametri osvjetljavanja i difuzije okoline.
3.2.4 KONTURNI GRAFICI
Predstavljanje funkcija dvije promjenjive konturnim (izo) linijama se vrši
naredbom contour(z).
Primjer 3.2.6 Nacrtati konturni dijagram funkcije z=xysin(x2+y2)/(x2+y2) za
-π≤x,y ≤π.
» [x,y]=meshdom(-pi:pi/10:pi,-pi:pi/10:pi);
» z=x.*y.*sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
» contour(z)
Broj ravni presjeka se može proizvoljno mijenjati naredbom contour(z,n), gdje je n
broj izo ravni. Kod funkcije contour(x,y,z,n,s), vektori x i y su nezavisno
promjenljive, a s je string koji definiše tip linije kojim se crta po istim pravilima
kojima se crtaju kod funkcije plot.
» contour([-pi:pi/10:pi],[-pi:pi/10:pi],z,2,'r-')

91
Grafika

20 3

18
2
16
14 1
12
0
10
8 -1
6
-2
4
2 -3
5 10 15 20 -3 -2 -1 0 1 2 3

Slika 3.25. Konturni crtež funkcije dvije promjenljive


a) contour(z)
b) contour([-pi:pi/10:pi],[-pi:pi/10:pi],z,2,'r-')

Konturne linije mogu biti nacrtane kroz tačno odre|ene vrijednosti funkcije
z. Tako, na primjer, ako želimo povući konturne linije kroz z=0.5, z=0.27 i z=-0.1,
naredba je:
» contour(z,[0.35 0.07 -0.1])
U opštem slučaju, naredbom contour(z,[z1 z2 z3...zn]) crtamo konture kroz
zadate vrijednosti zi za i=1,2,...,n.
Vrlo interesantna kombinacija se može napraviti jednovremenim korišćenjem
naredbi contour i quiver.
Naredbom quiver(z), gdje je z kompleksna matrica, prikazujemo amplitudu
i pravac svakog elementa matrice z koristeći strelice. Dužina strelice je
proporcionalna amplitudi elementa.
Ukoliko zadamo dvije realne ulazne matrice x i y, naredba quiver(x,y) daje
grafik kao da smo zadali quiver(x+i*y). Tip linija za crtanje strelica možemo
mijenjati (kao i prilikom primjene naredbe plot) sa quiver(x,y,'tip linije').
Da bi ilustrovali primjenu naredbe quiver objasnićemo još jednu naredbu,
gradient. Naredbom:
[px,py]=gradient(z)
numerički dobijamo parcijalne izvode matrice z: px=dz/dx i py=dz/dy.

92
MATLAB for Windows
Ukoliko želimo zadati stvarna rastojanja odbiraka dx i dy u matrici z u
pravcu x i y ose, treba koristiti [px,py]=gradient(z,dx,dy). Automatski se uzima
dx=dy=1.
Primjer 3.2.6 Nacrtati ekvipotencijalne linije i linije polja ako je potencijal zadat sa
z=sin(px)sin(py) za -1≤x,y≤1. (E=-grad(z)).
» [x,y]=meshdom(-1:.08:1,-1:.08:1);
» z=sin(pi*x).*sin(pi*y);
» [zx,zy]=gradient(z);
» contour(z),hold on,quiver(-zx,-zy);hold off

25

20

15

10

5 10 15 20 25

Slika 3.26. Ekvipotencijalne linije i linije polja


Naredbe hold on i hold off će biti objašnjene kasnije. U sklopu diskusije o
prikazima mrežastih površina i obojenih površi vidjeli smo da postoje funkcije
meshc i surfc. Ove dvije funkcije, pored odgovarajućih grafika, prikazuju i konturni
crtež u ravni x0y.
Primjer 3.2.7 Prikazati funkciju z=xexp(-x2-y2) u granicama -2≤x,y≤2 istovremenim
prikazom mrežaste površine i konturnog crteža, odnosno istovremenim prikazom
obojene površine i konturnog crteža.
» [x,y]=meshdom(-2:.2:2,-2:.2:2);
» z=x.*exp(-x.^2-y.^2);
» meshc(z)
» surfc(z)

93
Grafika

0.5 0.5

0 0

-0.5 -0.5
30 30
20 30 20 30
20 20
10 10 10 10
0 0 0 0

Slika 3.27. 2-D grafik meshc i surfc


Funkcija contour kao i bilo koja grafička komanda ima svoj rezultat. U
slučaju naredbe contour izlaz je niz brojeva koji predstavljaju pojedine izolinije
konturnog grafika. Veoma često je potrebno označiti brojne vrijednosti koje
predstavljaju pojedine izo linije. To se postiže naredbom clabel.
Primjer 3.2.8 Pomoću izolinija prikazati funkciju z=x/(x2+y2+1) za -2≤x,y≤2.
Prikazati i labele izolinija.
» [x,y]=meshdom(-2:.2:2,-2:.2:2);
» z=x./(x.^2+y.^2+1);
» A=contour(z);
Konturni crtež je nacrtan a u promjenljivoj A čuvaju se podaci o linijama koje čine
crtež. Sa
» clabel(A)
vrši se upisivanje vrijednosti labela. Naredbom
» clabel(A,'manual')
vrši se ručno - manuelno upisivanje pojedinih labela pritiskom miša na izoliniju.
Kada se želi završiti unos dovoljno je kliknuti na dio grafičkog prozora van
konturnog dijagrama.

94
MATLAB for Windows
-0.2
20
18
16 -0.1 0.3
0.1
14
12
0.4
10 -0.4
8
6
-0.3 0.2
4 0
2
5 10 15 20

Slika 3.28. Konturni crtež sa unijetim labelama izolinija


Postoji još jedna funkcija za prikaz konturnih crteža contour3 kojom se
prikazuje konturni crtež u 3-D.
Primjer 3.2.9 Prikazati funkciju z=exp(-x2-y2) kao konturni crtež u tri dimenzije.
» z=exp(-x.^2-y.^2);
» contour3(z)
» contour3(z,40)

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0
20 30
15 20 20 30
10 15 20
10 10
5 5 10
0 0 0 0

Slika 3.29. Konturni crteži u 3-D: a) contour3(z), b) contour3(z,40)


3.2.5 PRIKAZIVANJE FUNKCIJE POMO]U KOLORNIH MAPA
Grafici funkcije dvije promjenljive mogu se prikazati i pomoću različitih
boja. Za to služe funkcije imagesc(x,y,z) i pcolor(x,y,z) (alternativno ove funkcije
mogu biti imagesc(z) i pcolor(z)). x i y predstavljaju nezavisno promjenljive a z
funkcije dvije promjenljive x i y.

95
Grafika
Primjer 3.2.10 Nacrtati pomoću funkcije imagesc funkciju dvije promjenljive
z=xysin(x2+y2) gdje su -2≤x,y≤2.
» x=-2:.2:2;
» y=-2:.2:2;
» [X,Y]=meshdom(x,y);
» z=X.*Y.*sin(X.^2+Y.^2);
» imagesc(x,y,z)
-2

-1.5

-1

-0.5

0.5

1.5

2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Slika 3.30. imagesc prikaz funkcije


Istu funkciju možemo prikazati i pomoću funkcije pcolor:
» pcolor(x,y,z)

Slika 3.31. pcolor prikaz funkcije


Funkcijom shading bliže specificiramo način primjene naredbe pcolor. Naredbom
shading interp dobijamo kolornu mapu bez mreže u kojoj se svaka tačka
interpolira, dok shading flat prikazuje crtež bez mreže sa istom bojom unutar

96
MATLAB for Windows
kvadrata. Default podešavanje sa slike 3.30, sa mrežom i istom bojom unutar
kvadrata, dobijamo sa shading faceted.
-2

-1.5

-1

-0.5

0.5

1.5

2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Slika 3.32. a) shading interp; b)shading flat


3.2.6 PRIKAZIVANJE CILINDARA I SFERA
Za prikazivanje cilindara služi funkcija cylinder. Funkcija
[x,y,z]=cylinder([R K],n) odre|uje koordinate (ali ne crta) cilindar sa poluprečnikom
R i sa koeficijentom rasta K u n tačaka. Podrazumijevane vrijednosti su su R=1,
K=1 i n=20. Funkcija cylinder([R K],n) vrši i crtanje cilindra.
Primjer 3.2.11 Demonstrirati na nekoliko primjera korišćenje funkcije cylinder.
» cylinder([2 1])
» cylinder([1 1])
» cylinder([1 5])
» [x,y,z]=cylinder([1 1],30);
» surf(x,y,z)

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0
2 2
1 2 1 2
0 1 0 1
0 0
-1 -1 -1 -1
-2 -2 -2 -2

Slika 3.33. Prikaz cilindra: a) R>K; a) R<K

97
Grafika
Analogna funkcija postoji za prikazivanje sfera. Oblik naredbe
[x,y,z]=sphere(n) odre|uje vrijednosti koordinata sfere x, y i z ali ne crta sferu.
Vrijednost n=20 se podrazumjeva. Funkcija sphere(n) će izvršiti i crtanje sfere.
3.3 GRAFI^KI PRIKAZ FUNKCIJA TRI PROMJENLJIVE
Očigledno je na ekranu teško prikazati funkciju tri promjenljive a ponekad
je teško i zamisliti neki pogodan način prikazivanja funkcije tri promjenljive.
MATLAB se služi sljedećom logikom: domen nezavisno promjenljivih predstavlja
kvadar, svakoj vrijednosti funkcije kao kod kolornih mapa odgovara odre|ena boja;
ne mogu se prikazati sve vrijednosti već samo presjeci sa nekim ravnima. Za
kreiranje trodimenzionalne oblasti nezavisno promjenljivih služi naredba meshgrid
dok za crtanje funkcije služi naredba slice.
Primjer 3.3.1 Prikazati funkciju tri promjenljive v=xexp(-x2- y2- z2) u granicama
-1≤x,y,z≤1.
» [x,y,z]=meshgrid(-1:.2:1,-1:.2:1,-1:.2:1);
» v=x.*exp(-x.^2-y.^2-z.^2);
» slice(v,[3 6 11],11,[1 5],11)

Slika 3.34. Prikaz funkcije tri promjenljive


Na slici 3.34. vidimo slice prikaz funkcije tri promjenljive. Kroz ravni normalne na
ose u odbircima [3 6 11], 11 i [1 5], po x, y i z osi respektivno, prikazani su kolorni
dijagrami. Posljednji parametar predstavlja broj redova u volumenu v jer kao što
znamo MATLAB posjeduje mogućnost prikazivanja samo matrica dok se 3-D polje
prikazuje u obliku matrice. Recimo, naredbom [x,y,z]=meshgrid(vx,vy,vz)
dobijamo matrice x, y i z. Dimenzije ovih matrica su (nx* ny) x nz (gdje su nx, ny i
nz dužine vektora vx, vy i vz).

98
MATLAB for Windows

3.4 PROMJENA DIMENZIJA GRAFIKA


(VI[E GRAFIKA U GRAFI^KOM PROZORU)
U dosadašnjim primjerima smo dobijali grafik nacrtan preko čitavog ekrana
čije su dimenzije bile automatski postavljene. Moguće je izvršiti podjelu ekrana na
nxm djelova i crtati grafike u svakom od njih posebno. To se čini naredbom
subplot(mnp) ili subplot(m,n,p), koja dijeli ekran na m djelova po horizontali i n
djelova po vertikali, a grafik se crta u p-tom dijelu ekrana. Moguće vrijednosti za m i
n su od 1 do 9. Tako sa subplot(221),plot(x,y) dijelimo ekran na 2x2 i crtamo
grafik u prvom dijelu, a sa subplot(212),plot(x,y) dijelimo ekran na 2x1 i crtamo
grafik u drugom dijelu.
Primjer 3.4.1 Nacrtati na četiri odvojena grafika funkcije: y=x za -1≤x≤1, y=ex za
0≤x≤1 i z=sin(2π(x2+y2)) za -1≤x,y≤1 konturno i mrežom.
» x1=-1:.1:1;
» y1=x1;
» subplot(221),plot(x1,y1)
» x2=0:.05:1;
» y2=x2.*exp(x2);
» subplot(222),plot(x2,y2)
» [x3,y3]=meshdom(-1:.1:1,-1:.1:1);
» z=sin(2*pi*(x3.^2+y3.^2));
» subplot(223),mesh(z)
» subplot(224),contour(z)
1 3

0.5
2
0
1
-0.5

-1 0
-1 0 1 0 0.5 1

20
1
15
0
10
-1
40 5
40
20 20
0 0 5 10 15 20

Slika 3.35. Crtanje više grafika na jednom ekranu

99
Grafika
Treba napomenuti da podjela ekrana, zadata naredbom subplot, ostaje i
za naredne grafike. Tako bi poslije zadnjeg primjera ekran ostao podijeljen na četiri
dijela i svi grafici bi bili crtani na četvrtini ekrana. Zadavanje nove podjele se
definiše zadavanjem novih parametara u subplot. Na čitav ekran se vraćamo sa
subplot(111). Napomenimo da se zadavanjem orijentacije za štampanje grafika (o
čemu će biti riječi), dimenzije odštampanog grafika mogu dodatno mijenjati.
Na ovaj način naredbom subplot dobijamo grafike jednake veličine. Na
drugi način naredbom axes možemo dobiti grafike koji su nejednake veličine.
Naredbom axes('position',[px py sx sy]) definišemo poziciju grafika od tačke px po
x-osi i py po y-osi (relativne koordinate-donji lijevi ugao ekrana je koordinata (0,0)
gornji desni ugao je (1,1)) a sx i sy su veličine grafika u relativnom iznosu. Treba
reći da funkcija axes definiše ose grafika a da je position jedna od osobina osa. O
ovim osobinama biće više riječi u šestom poglavlju.
Primjer 3.4.2 Nacrtati tri odvojena grafika: y=x2-2x+1 za -1≤x≤1 od [0.1 0.1 0.3 0.4],
prikazati funkciju z=xysin(2πx2) u granicama [0.45 0.1 0.45 0.8] mrežastim
dijagramom i u granicama [0.1 0.55 0.4 0.35] konturni dijagam.
» x1=-1:.1:1;
» y1=x1.^2-2*x1+1;
» axes('position',[0.1 0.1 0.3 0.4])
» plot(x1,y1)
» [x2,y2]=meshdom(-1:0.1:1,-1:0.1:1)
» z2=x2.*y2.*sin(2*pi*x2.^2);
» axes('position',[.45 .1 .45 .8])
» mesh(z2)
» axes('position',[0.1 0.55 0.4 .35])
» contour(z2)

20
15
1
10
5 0.5

4 5 10 15 0 20

3 -0.5

2 -1
30
1 20 30
20
10 10
0
-1 0 1 0 0

Slika 3.36. Više grafika nejednake veličine na ekranu

100
MATLAB for Windows

3.5 RAD SA VI[E OTVORENIH GRAFI^KIH PROZORA

U programskom paketu MATLAB postoji mogućnost rada sa više


istovremeno otvorenih grafičkih prozrora. Grafički prozor se definiše naredbom
figure, i to na jedan od sljedeća dva načina: rednim brojem otvorenog prozora
figure(rdbroj) ili imenom figure('Name','Ime prozora').
Primjer 3.5.1 U prvom grafičkom prozoru prikazati funkciju y=x u granicama -1≤x≤1
a u drugom prikazati funkciju y=x2 u istim granicama kao na prethodnom grafiku.
» figure(1)
» x=-1:.1:1;
» plot(x,x)
» figure(2)
» plot(x,x.^2)
Grafički prozor u MATLAB-u posjeduje niz osobina čije se vrijednosti mogu
dobiti naredbom get; na primjer, osobine prvog grafičkog prozora dobijamo sa:
» get(1)
Grafički prozor posjeduje vrijednost koja zapravo predstavlja vrijednost
pomoću koje se može upravljati grafikom. Na primjer, definišimo treći grafički
prozor:
» a=figure(3);
a osobine ovog grafičkog prozora se mogu dobiti sa get(3) ili sa
» get(a)
Prozor koji je trenutno aktivan može se dobiti sa gcf
» gcf
ans =
3
Vrijednost pojedine osobine može se saznati na sljedeći način
get(d,'Osobina1', 'Osobina2', 'Osobina3',...) gdje d definiše grafički prozor a
Osobina definiše traženu osobinu. Tako informaciju o veličini u kojoj se mjere
grafici na ekranu dobijamo sa:
» get(1,'Units')
101
Grafika
ans =
pixels
Znači tekući grafik se mjeri u pikselima (ekranskim tačkicama). Prozor se iz
komandne linije može zatvoriti naredbom close. Tako naredba:
» close(3)
briše treći grafički prozor. Kao što smo rekli, grafički prozori se mogu definisati i
imenom na jedan od sljedeća dva načina:
» figure('Name','Dodatak')
gdje, kao što vidimo, Name predstavlja osobinu prozora - njegovo ime koje stoji u
naslovnoj liniji prozora. Ovakava prozor se može zatvoriti na sljedeći način
» close('Dodatak')
dok se svi grafički prozori zatvaraju naredbom
» close all
Osobinama grafičkog prozora kao i o detaljima upravljanjem grafičkog
prozora biće posvećena šesta glava.

3.6 NAREDBE ZA ELEMENTARNU KONTROLU BOJA

MATLAB posjeduje niz naredbi i mogućnosti za kontrolu grafika i ostalih


elemenata grafičkog okruženja. Veoma važan dio tih mogućnosti odnosi se na
upravljanje bojama. Zbog važnosti ovih mogućnosti veliki dio upravljanja bojama
može se obavljati kroz zasebne funkcije koje ćemo ovdje opisati.
Naravno, upravljanje bojama odnosi se prije svega na one grafičke
komande kod kojih je boja važan činilac kakve su mesh, surf, pcolor itd. Jednu
funkciju ove vrste smo već upoznali (shading). Važna funkcija za kontrolu
definisanja boja grafika je funkcija colormap(paleta). Ovom funkcijom se definiše
kojim će skupom boja biti prikazani grafici na ekranu. Predefinisane vrijednosti za
promjenljivu paleta su date u sljedećoj tabeli.
paleta Opis palete
hsv Nijanse zasićenosti

102
MATLAB for Windows

gray Linearna siva boja


hot Crno-crveno-žuto-bijela kombinacija
cool Osjenčena cijan i magenta kombinacija
bone Nijanse sivog sa dodatcima plave boje
coppe Linearna bakarna boja
pink Pastelno osjenčena ljubičasta mapa
prism Prizmatična kolorna mapa
jet Varijanta hsv
flag Naizmjenično plavo-crvena-bijela

Tabela 3.3. Pregled raspoloživih kolornih mapa


Primjer 3.6.1 Na mrežastom dijagramu funkcije z=xsin(x2+y2)/(x2+y2) demonstrirati
naredbu colormap.
» [x,y]=meshdom(-2:.2:2,-2:.2:2);
» z=x.*sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
» mesh(z)
» colormap(hsv)
» colormap(gray)
» colormap(hot)
» colormap(cool)
» colormap(bone)
» colormap(copper)
» colormap(pink)
» colormap(prism)
» colormap(jet)
» colormap(flag)
Treba napomenuti da su hsv, gray,..., flag matrice dimenzija 64x3. Svaka vrsta
matrica predstavlja jednu boju. Boje su predstavljene sa tri broja od 0 do 1: prvi
broj predstavlja crveno, drugi zeleno, treći plavo (ovakav model se naziva rgb).
Pored predefinisanih matrica, iz tabele 3.3 argument funkcije colormap može
predstavljati bilo koja matrica sa tri kolone. Tako naredba
» colormap([0 1 0])
103
Grafika
daje crtež u jednoj boji - u ovom slučaju to je zelena. Problem sa naredbom
colormap je to što se novim pozivom naredbe
» colormap(flag)
ne dobija kolorni crtež u 64 već je i dalje u jednoj boji. Vraćanje na matrice
dimenzija 64x3 se može uraditi eksplicitnim definisanjem dimenzija matrice
» colormap(ones(64,3))
» colormap(flag)
Važeću kolornu mapu možemo dobiti naredbom T=colormap. Naredbom
brighten(sv) dobijamo tamniju, za -1≤sv<0, odnosno svijetliju, za 1≥sv>0, kolornu
mapu. Kolorni grafici, i pored svoje "ljepote", često su nejasni. Naime, često se ne
zna kojoj boji odgovara koja veličina funkcije. Iz tog razloga koristi se fukcija
colorbar koja uz grafik, u formi legende, iscrtava pravougaonik sa označenim
vrijednostima pojedinih boja. Dvije osnovne varijante ove funkcije su:
colorbar('horiz') i colorbar('vert') kojima se iscrtava legenda boja horizontalno ili
vertikalno.
Za funkcije koje dio svog grafičkog prikaza obavljaju u formi različitih boja
može se podešavati raspon boja koje su ove kolorne mape u stanju da prikažu.
Informaciju o rasponu boja koji je trenutno aktivan može se dobiti naredbom
» caxis
ans =
-0.8415 0.8415
Vidimo da su boje skalirane izme|u vrijednosti -0.8415 i 0.8415. Manuelno
skaliranje se obavlja istom naredbom u obliku
caxis([0 0.7])
Ovom naredbom vrijednosti funkcije koje su manje od 0 predstavljaju se bojom
koja odgovara vrijednosti 0, a slično važi i za gornju granicu 0.7. Na automatsko
skaliranje se prelazi naredbom
caxis('auto')

3.7 GRAFI^KE KOMANDE

Iz grafičkog prozora u komandni prozor se vraćamo pritiskom na bilo koje


dugme. Sa komandnog ekrana se prikazuje trenutno aktivni grafički prozor sa

104
MATLAB for Windows
figure(gcf). Za starije korisnike MATLAB-a potpuno je ravnopravna naredba shg
(skraćeno od show graph). Sadržaj grafičkog prozora može se izbrisati potpuno
ravnopravno naredbama clf i clg. Ako se zada naredba clf reset i clg reset, pored
brisanja grafika do|e i do resetovanja njegovih osobina (osobine grafika se
postavljaju na početnu vrijednost). Brisanje grafika unutar trenutnih osa postiže se
naredbom cla a naredbom cla reset, se pored brisanja grafika, postavljaju osobine
grafika na početnu vrijednost. Ukoliko želimo nove grafike crtati preko prethodnih,
a da oni ne budu izbrisani, onda treba unijeti hold on. Ova naredba se poništava
sa hold off. Funkcija ishold vraća jedinicu ako je hold on uključen, a nulu ako je
isključen.

3.7.1 [TAMPANJE I MEMORISANJE GRAFIKA

I u ovoj verziji MATLAB-a postoji naredba meta za memorisanje grafika.


Me|utim, ovdje joj je namjena nešto drugačija nego u prethodnim DOS verzijama
MATLAB-a. Funkcija meta čuva grafik u postskript formatu. Naredba
meta fajl
snima tgekući grafik u postskript formatu pod imenom fajl.ps. Naredba ima i oblik
meta fajl -prekidač
Gdje su mogući prekidači dati u tabeli 3.4.
Prekidač Format
-dps Postskript format (default)
-dpsc Kolor postskript format
-dps2 Postskript format nivoa 2
-dpsc2 Kolor postskript format nivoa 2

Tabela 3.4. Mogući prekidači i formati u naredbi meta


Ipak, za memorisanje grafika i kompletnu grafičku obradu obično se koristi naredba
print. Naredba
print fajl
potpuno je adekvatna naredbi meta. Opšti oblik naredbe print je:
print [fajl] [-sredstvo] [-opcija]

105
Grafika
Naredbom print snima se u fajl pripremljen za štampu na nekom od sredstava uz
neku od opcija. Sredstva, pored onih kod naredbe meta, su i za enkapsulirani
postskript deps, depsc, deps2, depsc2 kao i veliki broj štampača koji su podržani
(HP Laser Jet, HP Paint Jet, Cannon, Epsonovi štampači itd), kao i fajlovi tipa gif ili
pcx formata. Opcije su snimanje fajla u formatu HP plotera hgl - formatu -dhpgl,
Adobe ilustrator fajlovi -dill, snimanje grafičkog objekta u .M fajlu -dmfile. Za slanje
grafika na trenutno instalisani monohromatski štampač -dwin ili kolorni štampač -
dwinc. Tako|e moguće je smjestiti fajl u meta formatu u Clipboard -dmeta (ako se
navede naziv fajla snimiće se pod ekstenzijom .WMF) ili u bitmapiranom formatu u
Clipboard -dbitmap (ili u fajl pod ekstenzijom .BMP).
Primjer 3.7.1 Demonstrirati neke od opcija naredbe print.
» print -dmeta
» print -dbitmap
Sa gornje dvije naredbe se u Clipboard (privremenu memoriju) smješta sadržaj
ekrana. Ako se navede naziv fajla dobijamo u prvom slučaju fajl tipa WMF -
Windows meta file a u drugom slučaju BMP - bitmapirani fajl. Oba ova fajla mogu
importovati gotovi svi komercijalni programi, tekst procesori, Corel, itd. Naredbom
» print -dwin
šalje se sadržaj grafičkog prozora na trenutno instalisani monohromatski štampač,
dok naredbom
» print fajl1 -dhpgl
kreiramo fajl1.hgl koji je tako|e pogodan za dalju obradu. Kombinacija naredbi
(izme|u kojih se mogu naći naredbe za iscrtavanje grafika)
» print fajl1
» print fajl1 -append
dovešće do snimanja fajla fajl1.ps, a drugom naredbom će postojećem grafiku biti
dodat novi (dakle stari fajl neće biti prebrisan kao po defaultu). Ako želimo sačuvati
grafik za naredne sesije primijenićemo naredbu
» print fajl1 -dmfile
pomoću koje dobijamo MATLAB funkciju fajl1.m koja se u nekoj od narednih sesija
može pozvati naredbom
» fajl1
čime će sadržaj grafičkog prozora biti rekonstruisan.
106
MATLAB for Windows
Grafik će po pravilu biti iscrtan tako da je širina papira manja od njegove
visine. Orijentacija se mijenja naredbom
» orient landscape
dok se na default portrait orijentaciju vraće sa
» orient portrait

3.8 POKRETNE SLIKE - FILMOVI

MATLAB posjeduje interesantnu mogućnost kreiranja pokretnih slika -


filmova. Procedura za kreiranje filma izgleda ovako: Prvo se naredbom
M=moviein(n) inicijalizuje prostor za smještanje n slika (frejmova) koje će činiti
budući film. Matrica M posjeduje poslije ove naredbe n kolona. Zatim se nacrta
pojedinačni grafik nekom grafičkom komandom. Da bi dobijeni grafik činio i-tu sliku
filma i-toj koloni matrice M pridružuje se sadržaj grafika naredbom M(:,i)=getframe.
Na kraju se odgovarajući film prikazuje naredbom movie(M,N) gdje je N opcioni
parametar koji odre|uje koliko puta će se prikazati matrica M. Podrazumjevana
vrijednost je N=1. Za N<0 film se prikazuje obrnutim redosljedom slika.
Primjer 3.8.1 Prikazati Zemljinu kuglu u rotaciji.
Da bi se izvršio ovaj zadatak poslužićemo se podacima koje koristi demo
program earthmap. Ovaj program su kreirali MATLAB programeri da bi prikazali
mogućnosti MATLAB-a. Dakle da bi realizovali ovaj primjer poslužićemo se
datotekom topo.mat u kojoj se nalaze podaci koje koristi i program earthmap.
Poslije učitavanja datoteke, postavljamo vrijednost palete boja naredbom
colormap na vrijednost topomap1 koja nam je pogodna za prikaz Zemljine kugle.
Vrijednost topomap1 je učitana iz datoteke topo. Pomoću naredbe sphere
odre|ujemo vrijednosti pojedinih koordinata na sferi. Zemlju ćemo prikazati u n=24
slike, vršeći rotaciju od po 360/n=15 stepeni. Kombinacijom naredbi surface i view
prikazujemo Zemlju kao Texturnu-mapu sa podacima iz datoteke topo.mat u
promjenljivoj topo pod odre|enim uglom. Zatim svaku sliku smještamo u matricu M i
narednom movie prikazujemo. Napomenimo da ove naredbe nećete moći odraditi
na slabijim računarima zbog velikog zahtjevanog memorijskog prostora i
zahtjevnosti računanja za ove operacije.
clear all
load topo
107
Grafika
colormap(topomap1)
[x,y,z]=sphere(24); n=24;M=moviein(n);
for j=-37.5:360/n:307.5
cla,axis auto
surface(x,y,z,'Facecolor','Texture','Cdata',topo)
view([j 30])
axis square,axis xy,axis off
i=j/15+3.5;
M(:,i)=getframe;
end
movie(M)
Na slici 3.37 su prikazane dva kadra kreirana prethodnim primjerom.

Slika 3.37 Dvije sekvence filma iz prethodnog primjera

108
MATLAB for Windows

glava četvrta

ANALIZA PODATAKA
U ovom dijelu prezentiraćemo neke osnovne funkcije za statističku obradu
podataka. Pošto se podaci obično unose u obliku ure|enog skupa brojeva,
neophodno je usvojiti orijentaciju (po vrstama ili kolonama) pri njihovoj obradi. U
MATLAB-u je usvojena konvencija po kojoj su podaci (mjerenja, uzorci,
opservacije) za različite varijable smješteni u odgovarajuće kolone. Na primjer,
skup podataka koji se sastoji od 15 uzoraka za 7 različitih varijabli unosi se u
obliku matrice dimenzija (15x7).
Kao što smo vidjeli u poglavlju 1, postoji više načina za unošenje
podataka. Ukoliko treba unijeti veliki broj podataka, direktno interaktivno unošenje
nije pogodno jer, vrlo vjerovatno, dovodi do grešaka. Zbog toga se preporučuje
razbijanje matrice podataka u manje blokove koje se kasnije jednostavnim
pridruživanjem vrsta ili kolona spajaju u jednu cjelinu. Još jednostavniji način je
putem korišćenja editora teksta, o čemu će kasnije biti riječi.
Grupa funkcija za osnovne statističke obrade prikazana je u tabeli 4.1.

Analiza podataka po kolonama


max maksimalna vrijednost cumsum kumulativna suma
min minimalna vrijednost cumprod kumulativni proizvod
mean srednja vrijednost diff aproksimativni izvod
std standardna devijacija table1 tabelarni pogled
median medijana table2 2-D tabelarni pogled
sort sortiranje corrcoef korelacioni koeficijenti
sum suma elemenata cov kovarijansa
prod proizvod elemenata spline kubna interpolacija

Tabela 4.1. Funkcije za analizu podataka po kolonama

4.1 MAKSIMALNA I MINIMALNA VRIJEDNOST


109
Analiza podataka
Za podatke unešene u obliku vektora, funkcije max i min, kao i većina
ostalih funkcija, ne prave razliku izme|u vrste i kolone. Za podatke unešene u
obliku matrice operacije se vrše po kolonama, a rezultati za pojedine kolone
dobijaju se kao odgovarajući elementi vektora vrste kao izlaznog argumenta
operatora.
Za vektor x, max(x) i min(x) daju maksimalnu i minimalnu vrijednost
elemenata x, respektivno, dok
[m,i]=max(x) i [m,i]=min(x)
pored maksimalne (minimalne) vrijednosti elemenata x daju i odgovarajući indeks.
Za kompleksne elemente x-a računaju se apsolutne vrijednosti, pa se na osnovu
njih daju maksimalne (minimalne) vrijednosti.
Ako je X matrica, max(X), odnosno min(X) daju vektor vrstu koji sadrži
maksimalne (minimalne) vrijednosti pojedinih kolona matrice X. Operatori
[M,i]=max(X), [M,i]=min(X)
pored vektora maksimalnih (minimalnih) vrijednosti pojedinih kolona daju i
odgovarajuće indekse.
Izraz C=max(X,Y), gdje su X i Y matrice jednake dimenzije, daje matricu C sa
elementima c(i,j)=max(x(i,j),y(i,j)).
Primjer 4.1.1 Za
x=
-0.2000 0.5000 1.3000 4.0000
y=
-2.0000
3.4000
1.6000
8.0000
z=
-2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 + 2.0000i 3.0000 + 4.5000i
pojedini operatori daju:
» m1=max(x)
m1 =
4
110
MATLAB for Windows
» [m,i]=min(y)
m=
-2
i=
1
» [zm,j]=max(z)
zm =
3.0000 + 4.5000i
j=
4
» c=max(y',z)
c=
-2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 + 2.0000i 8.0000
Primjer 4.1.2 Za matrice
A=
-1.0000 2.0000 3.0000
4.0000 3.1000 2.0000
1.0000 5.0000 6.0000
B=
1 -1 2
-3 4 5
-4 2 9
ilustrovaćemo primjenu pojedinih operatora:
» [M,j]=max(A)
M=
4 5 6
j=
2 3 3
» [M1,j1]=min(B)
M1 =
-4 -1 2
j1 =
3 1 1
» C=max(A,B)
C=
1 2 3
111
Analiza podataka
4 4 5
1 5 9

4.2 URE\IVANJE PODATAKA, SREDNJA VRIJEDNOST I


MEDIJANA

Za vektor x, operator sort(x) daje novi vektor sa elementima vektora x, ali


pore|anim po veličini. Verzija istog operatora sa dva izlazna argumenta,
[x1,i]=sort(x), pored x1 (sortirani vektor x) daje i vektor i koji sadrži indekse
pore|anih elemenata, tj. važi relacija x1=x(i).
Ako je X matrica, sort(X) daje matricu koja sadrži kolone matrice X sa
njihovim elementima pore|anim po veličini. Naredba [Y,I]=sort(X) daje i matricu I
koja sadrži indekse elemenata korišćene pri sortiranju.
Kada su elementi kompleksni brojevi, sortiranje se vrši po apsolutnoj vrijednosti.
Operator mean računa srednju vrijednost. Za x=[x1 x2 ... xn] izraz m=mean(x)
daje aritmetičku sredinu elemenata vektora x, tj.
n
m= 1
n ∑x
1
i

Za matrice, mean(X) daje vektor vrstu koji sadrži srednje vrijednosti pojedinih
kolona.
Operator median računa medijanu za vektore ili matrice. Za vektor,
medijana se definiše kao onaj njegov element od kojeg ima jednak broj većih i
manjih elemenata tog vektora. Ovo, naravno, važi pod uslovom da vektor ima
neparan broj elemenata. Za slučaj da je broj elemenata vektora x paran, izraz
median(x) daje aritmetičku sredinu dva srednja elementa.
Za matrice, median(X) daje vektor vrstu koji sadrži medijane pojedinih kolona
matrice X.
Primjer 4.2.1 Za matrice A i B iz primjera 4.1.2, imamo:
» sort(A)
ans =
112
MATLAB for Windows
-1.0000 2.0000 2.0000
1.0000 3.1000 3.0000
4.0000 5.0000 6.0000
» [C,I]=sort(B)
C=
-4 -1 2
-3 2 5
1 4 9

I=
3 1 1
2 3 2
1 2 3
» Y=mean(A)
Y=
1.3333 3.3667 3.6667
» X=median(B)
X=
-3 2 5
4.3 STANDARDNO ODSTUPANJE, KOVARIJANSA I KORELACIJA

Operator std računa standardno odstupanje (devijaciju). Za vektore, izraz


y=std(x) daje skalar y po relaciji
n
y= 1
n ∑( x
i =1
i
− x sr )

gdje je n dimenzija vektora x a xsr srednja vrijednost njegovih elemenata. Za


matrice, std daje vektor vrstu koji sadrži standardne devijacije pojedinih kolona.
Operator cov računa kovarijansu. Za vektor x, cov(x) računa varijansu.
Ako je X matrica čije kolone sadrže pojedine varijable a vrste pojedine uzorke
(mjerenja, opservacije), izraz C=cov(X) računa matricu kovarijanse C. Izraz
c=diag(cov(X)) računa vektor c sa varijansama svake kolone matrice X, dok izraz
sqrt(diag(cov(X))) daje standardne devijacije.

113
Analiza podataka
Operator corrcoef računa korelacione koeficijente. Za matricu X, izraz
corrcoef(X) daje matricu korelacionih koeficijenata matrice X. Ako je C=cov(X),
tada corrcoef(X) daje matricu čiji je (i,j)-ti element definisan sa
C(i,j)/sqrt(C(i,j)*C(j,j)).

4.4 SUMA I PROIZVOD ELEMENATA


Za vektor x, izraz y=sum(x) daje skalar y koji predstavlja zbir elemenata x-
a. Za matricu X, izraz s=sum(X) daje vektor vrstu s koji sadrži sume elemenata
pojedinih kolona matrice X. Na potpuno analogan način operator prod daje
proizvod elemenata vektora ili matrice.
Primjer 4.4.1 Za vektor x=[1 5 0 -2 3] i matricu A
A=
-1.0000 2.0000 3.0000
4.0000 3.1000 2.0000
1.0000 5.0000 6.0000
imamo:
» y=sum(x)
y=
7
» s=sum(A)
s=
4.0000 10.1000 11.0000
Očigledno je da se zbir svih elemenata matrice A dobija sa sum(sum(A)), tako da
u našem slučaju izraz
» S=sum(sum(A))
daje
S=
25.1000

Trag matrice A jednostavno dobijamo sa


» Tr=sum(diag(A))
Tr =

114
MATLAB for Windows
8.1000
Proizvod elemenata pojedinih kolona matrice A dobićemo sa
» p=prod(A)
p=
-4 31 36
dok se proizvod svih elemenata matrice A dobija sa
» P=prod(prod(A))
P=
-4464
k

∑1/ n
k

Primjer 4.4.2 Za k=10, izračunati sume redova


n =1
3
i ∑ (ln n) / n
n =1

» n=1:10;
» s=sum(1./n.^3);
»s
s=
1.1975
» S=sum(log(n)./n)
S=
2.6922
Kumulativne sume, odnosno proizvodi, dobijaju se pomoću operatora
cumsum i cumprod. Naime, za vektor x izrazi s=cumsum(x) i p=cumprod(x)
daju vektore s i p iste dimenzije kao x, čiji su elementi definisani sa
i i

si = ∑ x j odnosno pi = ∏ x j .
j= j =1

Ako je X matrica, izrazi S=cumsum(X) i P=cumprod(X) daju matrice S i P


istih dimenzija kao X, čije kolone se sastoje od kumulativnih suma odnosno
proizvoda elemenata kolona matrice X.
Primjer 4.4.3 Za vektor x=[1 2 3 4 5 6 7] imamo
» s=cumsum(x)

s=
1 3 6 10 15 21 28
» p=cumprod(x)
p=
115
Analiza podataka
Columns 1 through 6
1 2 6 24 120 720
Column 7
5040
Očigledno je da vektor p sadrži faktorijele brojeva od 1 do 7. Za matricu B
B=
1 -1 2
-3 4 5
-4 2 9
izrazi
» cumsum(B)
» cumprod(B)
daju
ans =
1 -1 2
-2 3 7
-6 5 16
ans =
1 -1 2
-3 -4 10
12 -8 90
4.5 PRIMJENA SUM I CUMSUM ZA RA^UNANJE INTEGRALA

Za funkciju f(x) odre|eni integral može se, po pravougaonom pravilu,


približno izraziti kao
b n −1

I= ∫ f ( x )dx ≈ ∑ f ( xi )∆xi
a i =1

pri čemu je interval (a,b) podijeljen na n jednakih podintervala. Na sličan način, za


funkciju dvije promjenljive z=f(x,y) dvojni integral može se aproksimirati sa
b d

I2 = ∫ ∫ zdxdy ≈ ∑ ∑ f ( x , y )∆x ∆y
a c i j
i j i j

116
MATLAB for Windows
Na osnovu ovih izraza očigledno je da se približno integraljenje može vršiti pomoću
operatora sum. Za date granice a i b, prvo ćemo usvojiti broj sektora n i definisati
korak k=(b-a)/n. Nezavisno promjenljiva x definiše se u opštem slučaju kao
x=a:k:b-k, pa se za datu funkciju y=f(x) odre|eni integral jednostavno dobija kao
I=sum(y)*k.
Primjer 4.5.1 Za funkciju y=sin x+4 naći integral od -2 do 2. Uzećemo n=40, pa za
tu vrijednost n imamo:
» k=(2-(-2))/40;
» x=-2:k:2-k;
» y=sin(x)+4;
» I=sum(y)*k
I=
15.9091
Postoji i funkcija trapz(x,y) koja računa integral funkcije po trapeznom pravilu.
Vektori x i y moraju imati iste dimenzije. Ukoliko se izostavi vektor x podrazumijeva
se jedinični razmak izme|u vrijednosti funkcije y. Ukoliko je y matrica koja ima
kolona koliko i vektor x elemenata, ovom funkcijom se računa odvojeno integral
svake kolone matrice y.
2

Primjer 4.5.2 Naći integral I = ∫ x dx po trapeznom pravilu a potom u istim


2

−2

granicama naći integrale funkcija y=sin(x)+4 i y=sin(x2).


» x=-2:4/40:2;
» y=x.^2;
» I=trapz(x,y)
I=
5.3400
» y1=[sin(x)+4;y;sin(x.^2)]';
» trapz(x,y1)
ans =

16.0000 5.3400 1.6052


Za dvostruki integral primjenjuje se slična procedura. Usvojimo broj
sektora po x i y osi, pa za date granice a, b, c, d definišemo korake po x i y osi kao
kx=(b-a)/nx, ky=(d-c)/ny - nx, ny - broj sektora po x i y osi.
117
Analiza podataka
Sada možemo definisati nezavisno promjenljive x i y pomoću operatora meshdom
kao
[x,y]=meshdom(a:kx:b-kx,c:ky:d-ky)
pa se dvostruki integral jednostavno dobija kao I2=sum(sum(z))*kx*ky.
Primjer 4.5.3 Naći dvostruki integral funkcije z=sinxsiny, za x∈[-1,2] i y∈[-1,3].
Usvojićemo korake kx=ky=0.1 pa se integral lako dobija sa:
» [x,y]=meshdom(-1:.1:2-.1,-1:.1:3-.1);
» z=sin(x).*sin(y);
» I2=sum(sum(z)).*.1.*.1
I2 =
1.2847
Do sada smo razmatrali računanje odre|enog integrala. Na sličan način
može se naći i odre|eni integral sa promjenljivom gornjom granicom. Ovakav
integral je ustvari jednak neodre|enom integralu sa fiksnom konstantom integracije,
tj. funkciji
b

F ( x ) = ∫ f ( x )dx , u intervalu [a,b].


a

Kao i ranije, definišemo korak k i nezavisno promjenljivu x kao x=a:k:b-k. F(x) u


diskretnim tačkama xi dobija se zatim jednostavno pomoću operatora cumsum
kao
F=cumsum(f(x))*k.
Primjer 4.5.4 Naći neodre|eni integral funkcije y=f(x)=sin(πx2), u intervalu [-1,1].
Uzećemo k=0.1 i sa sljedećim nizom naredbi:
» x=-1:0.1:1;
» y=sin(pi*x.^2);

» F=cumsum(y)*0.1;
» subplot(221)
» plot(x,y),grid,xlabel('x'),ylabel('funkcija y')

118
MATLAB for Windows
» subplot(222)
» plot(x,F),grid,xlabel('x'),ylabel('integral F')
» print sl1 -dmeta
dobijamo funkciju F(x) koju možemo nacrtati zajedno sa funkcijom y, kao što je
prikazano na slici 4.1.
Na sličan način može se izračunati i grafički prikazati dvojni neodre|eni
integral oblika
b d

F ( x , y ) = ∫ ∫ z( x , y )dxdy u oblasti definisanoj sa x∈[a,b], y∈[c,d].


a c

1 1

0.9 0.9

0.8 0.8

0.7 0.7

0.6 0.6

0.5 0.5

0.4 0.4

0.3 0.3

0.2 0.2

0.1 0.1

0 0
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
x x

Slika 4.1 Grafik funkcije y=sin(πx2) i njenog integrala za x∈[-1,1]


Za usvojene korake kx i ky, sljedeći niz naredbi:
[x,y]=meshdom(a:kx:b,c:ky:d)
z=f(x,y)
F=cumsum(cumsum(z))
mesh(z)
mesh(F)
u opštem slučaju računa i grafički prikazuje funkciju F(x,y).
Primjer 4.5.5 Za funkciju z=x3+y3 izračunati i grafički prikazati neodre|eni integral u
oblasti definisanoj sa x∈[-1,1], y∈[-2,2]. Usvojićemo kx=0.1 i ky=0.2 pa sa skupom
naredbi:
» [x,y]=meshdom(-1:0.1:1,-2:.2:2);
» z=x.^3+y.^3;

119
Analiza podataka
» F=cumsum(cumsum(z))*0.1*0.2;
» subplot(223)
» mesh(z)
» subplot(224)
» mesh(F)
dobijamo funkciju F(x,y) koju možemo grafički prikazati, zajedno sa funkcijom
z(x,y), kao što je prikazano na sljedećoj slici.

10 15

5
10
0
5
-5

-10 0
30 30
20 30 20 30
20 20
10 10
10 10
0 0 0 0

Slika 4.2 Trodimenzioni grafik funkcije z=x3+y3 i njenog integrala

4.6 RAZLIKA ELEMENATA I PRIBLI@NO DIFERENCIRANJE


FUNKCIJA
Za x=[x1 x2 x3 .... xn] izraz y=diff(x) daje vektor y čiji su elementi
definisani sa yi= xi+1-xi, i=1,2,..,n-1. Znači, elementi vektora y predstavljaju razlike
susjednih elemenata vektora x. Vektor y je za jedan element "kraći" od vektora x,
tj. length(y)=length(x)-1. Ovo važi bez obzira da li se radi o vektoru vrsti ili koloni.
Ako je X matrica, opercija Y=diff(X) daje matricu Y čije kolone se sastoje od
razlika susjednih elemenata kolona matrice X, tako da Y ima jednu vrstu manje od
matrice X. Navedena operacija može se ponoviti m puta, dodavanjem opcionog
ulaznog argumenta. U ovakvoj verziji, operator diff ima oblik diff(X,m).
Primjer 4.6.1 Za vektor
x=
1 8 27 64 125
izrazi
» y1=diff(x)
120
MATLAB for Windows
» y2=diff(x,2)
» y3=diff(x,3)
daju
y1 =
7 19 37 61
y2 =
12 18 24
y3 =
6 6
Očigledno je da važi: y2=diff(y1), y3=diff(y2), itd.
Za matricu
A=
1 2 3 4
6 -1 3 5
4 2 -4 5
-1 -3 2 8
izrazi
» B=diff(A)
» C=diff(A,2)
daju
B=
5 -3 0 1
-2 3 -7 0
-5 -5 6 3
C=
-7 6 -7 -1
-3 -8 13 3
S obzirom na definiciju izvoda funkcije jedne promjenljive y=f(x) u tački xi, izraz za
aproksimaciju izvoda
dy y − yi −1
( xi ) ≈ i
dx xi − xi −1
pokazuje da se operator diff može koristiti za približno diferenciranje.

121
Analiza podataka

Prvi izvod se približno dobija sa diff(y)/dx, gdje dx=∆x predstavlja priraštaj


x-a (korak), a može se naći i sa diff(y)./diff(x).
Proizvoljni m-ti izvod funkcije y=f(x), označen sa ym, nalazimo na potpuno
analogan način sa ym=diff(y,m)./dx^m.
Primjer 4.6.2 Za funkciju y=xsin x odrediti i nacrtati prvi izvod za -2π≤ x≤ 2π.
» x=-2*pi:pi/10:2*pi;
» y=x.*sin(x); %Racunamo funkciju
» y1=diff(y)./diff(x); %Racunamo izvod funkcije
» subplot(221)
» plot(x,y,x(1:length(x)-1),y1),grid
» text(-4,-4,'funkcija'),text(-4,4,'izvod')
» print sl3 -dmeta
Zadnje četiri naredbe služe za crtanje, obradu i pamćenje grafika funkcije i njenog
izvoda. Primjećujemo da pri crtanju grafika izvoda funkcije moramo "skratiti" vektor
x za jedan element, jer inače računar javlja grešku.
6

4 izvod

-2

-4 funkcija

-6
-8 -6 -4 -2 0 2 4 6 8

Slika 4.3 Grafik funkcije y=xsin x i njenog prvog izvoda


Primjer 4.6.2 Odrediti i nacrtati prvi, drugi i treći izvod funkcije y=2x3, u intervalu
x∈[-3,3].
» x=-3:0.1:3;
» y=2*x.^3;
» y1=diff(y)./diff(x);
» y2=diff(y,2)/0.1^2;
» y3=diff(y,3)/0.1^3;
» l=length(x);
» plot(x,y,x(1:l-1),y1,x(2:l-1),y2,x(2:l-2),y3),grid

122
MATLAB for Windows
» print sl4 -dmeta
Primijetimo da se pri crtanju m-tog izvoda, u opštem slučaju, nezavisno
promjenljiva "skraćuje" za m elemenata. Razlog leži u kompatibilnosti dimenzija
izvoda i nezavisno promjenljive.
60

40

20

-20

-40

-60
-3 -2 -1 0 1 2 3

Slika 4.4 Grafik funkcije y=2x3 i njena prva tri izvoda

123
MATLAB for Windows

glava peta

PROGRAMIRANJE I M-FAJLOVI
Do sada smo sve operacije obavljali na komandnoj liniji, što smo
označavali sa ». To je bio najjednostavniji način za upoznavanje sa pojedinim
funkcijama i mogućnostima MATLAB-a. Me|utim, mogli smo zapaziti da ono što je
zapisano biva uništeno poslije izlaska iz MATLAB-a. Zbog toga se nameće
potreba za pisanjem programa koji će ostati zapisan i trajno sačuvan. Takvi
programi u MATLAB-u imaju obaveznu ekstenziju .m, pa se nazivaju i m-fajlovi.
Program možemo napisati u nekom od editora, a mi ćemo u primjerima koristiti
veoma rasprostranjeni Notepad.
Poslije osnovnih napomena, u ovoj glavi su obra|ene funkcije za
upravljanje tokom programa, kao što su for, while, if, break i return, kao i druge
pogodne naredbe za kreiranje m-fajlova. Obra|en je rad sa funkcijskim fajlovima,
kao i rad sa tekstualnim promjenljivim.
5.1 PISANJE M-FAJLOVA U NOTEPAD-U
U MATLAB-u se mogu izvršavati naredbe MS-DOS-a i Windows-a. Te
naredbe se označavaju uskličnikom !. Ove naredbe imaju suštinski tri oblika:
!naredba, otvara se prozor aplikacije koja je pozvana (ili MS-DOS prozor) a
povratak u MATLAB je moguć tek nakon gašenja ove aplikacije, !naredba&, slično
kao gore ali je moguć povratak u MATLAB bez zatvaranja pozvane aplikacije i
!naredba| pozvana aplikacija se otvara na nivou ikone.
Na primjer, program Notepad se može pozvati sa:
» !notepad
Da bi se otvorio novi fajl, u MATLAB-u se koristi opcija File/New/M-file,
čime se otvara neimenovani prazan fajl Untitled.
Poslije toga, pritiskom na <F1> ili izborom neke od opcija iz stavke Help
menija, možemo dobiti pomoć i dodatna objašnjenja.

125
Programiranje i M-fajlovi
Pisanje programa se vrši na uobičajen način. Strelicama se pomijera
kursor, u novi red se ide pritiskom na tipku Enter, sa kojom se može stvarati i
dodatni red izme|u dva već napravljena reda. Brisanje karaktera se vrši tipkom
<Bck Spc> (karakter unazad), odnosno tipkom <Del> (karakter gdje se kursor
nalazi). Sa svim ostalim mogućnostima se možete upoznati u prilogu.
Nakon završetka rada sa editorom, program se snima aktiviranjem opcije
File/Save, prilikom čega je neophodno zadati ime fajla. Imena MATLAB fajlova su
obavezno sa ekstenzijom .m.
Poželjno je na početku programa ispisati komentare. Linija sa komentarom
počinje znakom %. Komentari se mogu ispisivati i u programu radi njegovog
jednostavnijeg praćenja.
Primjer 5.1.1 Napisati program za crtanje grafika funkcije f(x)=cos(x) -π≤x≤π.
Program sačuvati pod imenom proba.
Pošto smo već ušli u editor za program sa File/New/M-file, kucamo redom:
% Crtanje grafika funkcije f(x)=cos(x)
x=-pi:pi/20:pi;
y=cos(x);
plot(x,y)
end
Treba napomenuti da na kraju programa može biti end, a ne mora. Program ćemo
sačuvati sa File/Save. Kada se fajl prvi put snima treba unijeti njegovo ime (ovdje
je to proba.m). U MATLAB se možete vratiti sa Alt+Tab (tasterima zajednički
pritisnutim dok se ne pojavi MATLAB COMMAND WINDOW gdje se ovi tasteri
otpuste) ili zatvarajući istovremeno fajl sa File/Exit. Otvaranje već napisanog fajla
se može postići sa File/Open M-file pa se zatim izabere fajl sa diska koji se želi
otvoriti. Fajl se može potražiti po drugim diskovima na računaru, po direktorijumima
tekućeg diska ili u spisku datih fajlova. Ako je fajl koji se želi prepraviti me|u
posljednjim sa kojim se radilo, on se nalazi u MATLAB-ovom File meniju pod
rednim brojem od 1 do 4. Povratak u fajl koji je otvoren i nije zatvoren u Windows-u
je moguć tako|e sa Alt+Tab.
Program se izvršava ukucavanjem imena bez ekstenzije. U našem
primjeru:
» proba

126
MATLAB for Windows
U MATLAB-ovoj notaciji ove fajlove možemo zvati script-fajlovi ili
jednostavnije rečeno programi. Važno je istaći da se pozivanje nekog drugog m-
fajla može izvršiti i unutar programa unoseći samo njegovo ime. Poslije izvršavanja
tog pozvanog m-fajla sve varijable ostaju u radnom prostoru i sljedeće naredbe ih
mogu koristiti kao poznate. Program može pozivati sam sebe. Tako bi u našem
slučaju, ako poslije naredbe plot(x,y), a prije end, unesemo liniju sa imenom
našeg fajla proba, fajl pri izvršavanju naredbi sam sebe pozivao i tako radio
beskonačno puta. Ovakav postupak kada se primjeni na funkcije naziva se
rekurzijom i može biti veoma koristan.
Komentar otkucan na početku programa dobija se sa help proba.
U MATLAB-u se mogu koristi i drugi editori teksta. U Options/Editor
Preference možemo definisati neki drugi editor u koji će se ulaziti opcijama File
menija.

5.2 UPRAVLJANJE TOKOM PROGRAMA

5.2.1 INTERAKCIJA SA KORISNIKOM

U grupu naredbi koje nam omogućavaju da u toku izvršavanja programa


unosimo promjenljive i djelove programa, svrstaćemo naredbe input i keyboard.
Uopšte gledano, tu ćemo svrstati i naredbe koje nam omogućavaju da pratimo,
mada pasivno, rad programa, a to su echo i diary, kao i mogućnost privremenog
zaustavljanja rada naredbom pause.
Naredba input ima oblik:
input('tekst po zelji ')
Poslije ove naredbe računar ispisuje dati tekst, pravi pauzu i čeka da unesemo
broj, (ili vektor ili matricu) (o unošenju teksta će biti kasnije riječi). Uneseni broj
računar smješta pod imenom ans, pa je u velikom broju slučajeva potrebno
željenoj varijabli pridružiti vrijednost ans. Na primjer, ukoliko smo unijeli varijablu
koju u programu označavamo sa a, onda poslije linije sa naredbom input slijedi
linija sa:
a=ans;

127
Programiranje i M-fajlovi
Promjenljivoj, na primjer a, koja se zadaje naredbom input može se i
direktno dodijeliti vrijednost sa:
a=input('tekst po zelji');
Naredba keyboard je znatno opštija i moćnija od naredbe input, ali se
rje|e koristi. Naredbom input možemo unijeti samo broj (matricu) ili tekst, dok
naredba keyboard privremeno obustavlja izvršavanje programa i vraća nas na
tastaturu. Tako možemo otkucati i izvršiti više naredbi, a onda se sa return vratiti i
nastaviti sa izvršavanjem programa.
Primjer 5.2.1 Naredbu keyboard ilustrovaćemo na primjeru crtanja parabole
y=a+bx2 u granicama x∈[0,2].
» keyboard
K» a=1;
K» b=2;
K» x=0:.01:2;
K» plot(x,a+b*x.^2)
K» end
K» return
»
Uočimo da poslije pozivanja naredbe keyboard, MATLAB prompt mijenja
oblik u K».
Naredbom pause privremeno zaustavljamo izvršavanje programa dok ne
pritisnemo neku (bilo koju) tipku za nastavak rada. Naredba pause(n) pravi pauzu
u izvršavanju programa od n sekundi.
Primjer 5.2.2 Napisati program koji će na osnovu učitane faze sinusoide nacrtati
grafik funkcije f(x)=x2 sin(x+ϕ) u intervalu -π≤x≤π, a zatim i izračunati integral u
istom intervalu po pravougaonom pravilu sa 40 odbiraka.
Poslije ulaska u editor sa File/New/M-file kucamo:
fi=input('unesi fazu sinusoide ')
a=-pi;
b=pi;
h=(b-a)/20;
x=a:h:b-a;
y=(x.^2).*sin(x+fi);
plot(x,y)
pause(3)
128
MATLAB for Windows
int=sum(y)*h
end
Nakon iskucavanja teksta, sa File/Exit iza|e se iz Notepad-a, a prilikom izlaska
dobija se pitanje: Fajl je mijenjan da li želite da sačuvate promjene? Na ovo pitanje
treba odgovoriti potvrdno i dati ime fajlu sa ekstenzijom .m. Program je moguće
izvršiti pozivom njegovog imena.
Ukoliko ne bi koristili liniju sa naredbom pause računar bi odmah poslije
crtanja grafika nastavio sa radom. Ova naredba nam omogućava da imamo 3
sekunde da vidimo grafik.
Postoji mogućnost da se sa pause off onemogući zaustavljanje računara
u pause-modu. Ovaj mod se ponovo uključuje sa pause on.
Naredba echo ili echo on nam omogućava da pratimo izvršavanje
programa. Na ekranu računar ispisuje naredbe koje se u tom trenutku izvršavaju.
Pogodna je za otkrivanje grešaka u programu. Naredba echo se poništava sa
echo off. Ako se želi specificirati da se dobije echo pojedinih funkcija to će se
postići sa echo 'funkcija' on, gdje je funkcija odgovarajuća MATLAB funkcija. Ova
opcija se isključuje sa echo 'funkcija' off. Ako se želi izvršavanje echo naredbe
unutar svih funkcijskih fajlova to se može postići sa echo on all, odnosno
isključenje sa echo off all. Uključivanje i isključivanje echo-a se može postići i
aktiviranjem stavke menija Options/Turn Echo on (ili off).
Naredba diary nam omogućava da napravimo dnevnik onoga što radimo.
Ako ukucamo diary ime.tip onda će računar od tog trenutka zapisivati sve što
radimo i što računar ispisuje kao rezultate ili poruke greške na ekranu. Sve što je
zapisano nalazi se u fajlu ime.tip. Dnevnik isključujemo sa diary off. Ovo je
posebno pogodno za demonstrativne svrhe i za pisanje izvještaja sa
objašnjenjima.
5.2.2 FOR PETLJA
Mogućnost ponavljanja dijela programa zadati broj puta se u MATLAB-u
ostvaruje upotrebom for petlje. Ta petlja je ekvivalentna do petlji u fortranu ili for
petlji u basicu. for petlja se završava narebom end.
Primjer 5.2.3 Izračunati vrijednost determinante:

129
Programiranje i M-fajlovi

3k 4 8 11
−1 − k 5 3
d=
k 0 3 7
6 4 2k 1
za vrijednosti k=1, 2, 3, 4, 5 i 6.
for k=1:6
a=[3*k,4,8,11;-1,-k,5,3;k,0,3,7;6,4,2*k,1];
d=det(a)
end
Opšti oblik for petlje je:
for v=vektor ili matrica
naredbe
end
For petlja se izvršava tako što promjenljiva v uzima redom elemente
vektora v ili kolone matrice v (ako je v matrica) i izvršava naredbe za uzetu
vrijednost v. Jasno je da elementi vektora mogu biti i necjelobrojni i sa negativnim
priraštajem.
for x=2:-0.1:-2
y=x.^2;
end
Kada se radi o vektorima onda je for petlja ista kao i do ili for petlja u
ostalim programskim jezicima. Za razliku od njih, u MATLAB-u se for petlja može
izvršavati i sa matricama.
Moguća je višestruka upotreba for petlji.
Primjer 5.2.4 Formirati matricu 7x7 čiji su elementi a(i,j)=i*j.
for i=1:7
for j=1:7
a(i,j)=i*j;
end
end
»a
Pomijeranje naredbi u for petlji, prilikom pisanja programa, vršeno je radi
bolje preglednosti.
130
MATLAB for Windows
Treba napomenuti da se u MATLAB-u veliki broj petlji može izbjeći
zahvaljujući tome što MATLAB automatski radi sa vektorima. Tako je, na primjer,
matrica a(i,j)=i*j mogla biti formirana sa samo dvije naredbe
[i,j]=meshdom(1:7,7:-1:1); a=i.*j;.
5.2.3 WHILE PETLJA
Dio programa se može ponoviti i neodre|eni broj puta, sve dok je zadati
uslov zadovoljen. Za to se koristi while petlja. Opšti oblik while petlje je:
while izraz
naredbe
end
Primjer 5.2.5 Izračunati sumu s = ∑ an gdje je an = ( −1) n 1
n2
, uzimajući sve članove
n

koji su po apslolutnoj vrijednosti veći od 0.0001.


% racunanje sume reda sa zadatom tacnoscu
s=0; % pocetna vrijednost sume
n=1; % pocetna vrijednost rednog broja elementa
while abs((-1)^n/n^2)>10^(-4)
s=s+(-1)^n/n^2;
n=n+1;
end
s
end
Dio programa izme|u while i end izvršava se sve dok je izraz koji slijedi
poslije while istinit. Prilikom definisanja izraza kao sastavnog dijela while petlje
mogu se koristiti relacione i logičke operacije date u tabeli 5.1.
U vezi sa logičkim operacijama treba napomenuti da je u MATLAB-u izraz
logički istinit ako je različit od nule. Tako operacija | (ili) vraća logičku jedinicu kao
rezultat ako je barem jedan od operanada različit od nule a operacija & (i) vraća
logičku jedinicu ako su oba operanda različita od nule.
Poslije while može slijediti izraz koji je uvijek istinit kao na primjer 1==1 ili
1>0. U tom slučaju bi se naredbe u while petlji izvršavale beskonačno puta. I ovaj
oblik ponekad može biti od koristi.
Relacione i logičke operacije

131
Programiranje i M-fajlovi

== jednako (=)
>= veće ili jednako (≥)
<= manje ili jednako (≤)
č= nije jednako (≠)
& logičko i
| logičko ili
č logičko ne
xor(a,b) ekskluzivno ili

Tabela 5.1. Relacione i logičke operacije


Primjer 5.2.6 Napisati program za računanje kuba brojeva unijetih sa tastature.
Postupak ponavljati neodre|en broj puta.
while 1==1
input('unesite broj ')
ans^3
end
5.2.4 IF NAREDBA
Uslovno izvršavanje dijela programa se ostvaruje if naredbom. Ako želimo
izvršiti dio programa samo ukoliko je zadovoljen neki izraz onda to činimo sa:
if izraz
naredbe
end

Primjer 5.2.7 Napisati program za izračunavanje elemenata matrice (5x5),


a(i,j)=sin(2ij-i) za i≠j, a a(i,j)=sin(2ij-i)+1/2 za i=j.
n=5;
for i=1:n
for j=1:n
a(i,j)=sin(2*i*j-i);
if i==j
a(i,j)=a(i,j)+0.5;
end
end
end
132
MATLAB for Windows
a
end
Moguće je izvršiti jedan dio programa označen sa naredbe1 ukoliko je
izraz istinit, a drugi dio naredbe2 ukoliko nije. To se ostvaruje koristeći if u
kombinaciji sa else.
for izraz
naredbe1
else
naredbe2
end
Primjer 5.2.8 Formirati vektor s=[1 4 2 4 2 4 2 4 2 4 1].
% racunanje vektora s pogodnog za simpsonov metod
% izracunavanja integrala
n=11;
s(1)=1;
s(n)=1;
for i=2:n-1
if rem(i,2)==0 % rem(m,n) daje ostatak dijeljenja m sa n
s(i)=4;
else
s(i)=2;
end
end
s
end

Zadavanje dva uslova se ostvaruje sa if i elseif uz else. U tom slučaju


računar izvršava naredbe1 koje slijede poslije if, ako je izraz uz if zadovoljen.
Drugi uslov se zadaje izrazom uz elseif i u slučaju zadovoljenja tog izraza izvršava
se blok naredbi koji slijedi poslije elseif. Ako nijedan od izraza nije zadovoljen
onda se izvršava blok naredbi poslije else.
if izraz1
naredbe1
elseif izraz2
naredbe2

133
Programiranje i M-fajlovi
else
naredbe3
end
Primjer 5.2.9 Izračunati elemente matrice a(i,j)=i-j za i≠j i i<j, a(i,j)=-a(j,i) za i>j i
a(i,j)=i^2 za i=j.
n=7;
for i=1:n
for j=1:n
if i<j
a(i,j)=i-j;
elseif i==j
a(i,j)=i^2;
else
a(i,j)=-a(j,i);
end
end
end
a
end

5.2.5 GRAFI^KI MENI


Kada se u programu javlja slučaj višestrukog grananja može se koristiti
naredba za kreiranje grafičkog prozora menu('Naslov prozora','Prva opcija','Druga
opcija',...,'Poslednja opcija'). Dakle kreira se grafički prozor i menijem pod
naslovom Naslov prozora i dugmadima na kojima pišu opcije. Kada se klikne na
neku od opcija zatvara se prozor a izlaz iz naredbe je broj koji ukazuje koja je
opcija izabrana.
Primjer 5.2.10 Napisati program kojim se crta sombrero površ uz mogućnost izbora
načina grafičkog predstavljanja.
[x,y]=meshdom(-2*pi:.2:2*pi,-2*pi:.2:2*pi);
z=sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
Izbor=menu('Izbor grafickog prikaza',...
'contour','mesh','surf','pcolor');
if(Izbor==1),contour(z)
elseif(Izbor==2),mesh(z)
elseif(Izbor==3),surf(z)
else,pcolor(z)
134
MATLAB for Windows
end
Ovim naredbama kreira se prozor na slici 5.1 i u zavisnosti od izbora crta se
dvodimenzionalni grafik.

Slika 5.1 Prozor u kojem se bira opcija


5.2.6 BREAK NAREDBA
Iz for, while i if petlje se može izaći i prije njihovog regularnog
završavanja naredbom break.
5.2.7 ERROR NAREDBA
Prekid izvršavanja programa se može ostvariti i naredbom error koja ima
oblik:
error('obavjestavanje o razlogu prekida, po zelji')
Nailaskom na takvu naredbu računar prekida dalji rad, uz ispisivanje unijetog
teksta koji slijedi iza naredbe error (vidi primjer 5.3.2).
5.2.8 NAREDBE VEZANE ZA LOGI^KE OPERACIJE
Obradimo neke funkcije vezane za logičke operacije
any(X) Vraća jedinicu ako je bilo koja vrijednost u matrica različita od nule.
exist('X') Provjerava da li postoji program ili funkcija X. (Objašnjeno u prvom
poglavlju).
all(X) Vraća jedinicu ukoliko su sve vrijednosti u matrici (ili vektoru) X
različite od nule.
find(X) Za vektor X vraća indekse vektora X koji su različiti od nule. Za
matricu [i,j]=find(X) daje vrijednosti koeficijenata matrice X koje
ispunjavaju logički uslov po kolonama i vrstama.

135
Programiranje i M-fajlovi
Primjer 5.2.11 Za matricu slučajnih brojeva odrediti one koeficijente i i j koji
zadovoljavaju logički uslov X>0.5.
» x=rand(5)
x=
0.5717 0.9554 0.8420 0.0910 0.7098
0.8024 0.7483 0.1598 0.2746 0.9379
0.0331 0.5546 0.2128 0.0030 0.2399
0.5344 0.8907 0.7147 0.4143 0.1809
0.4985 0.6248 0.1304 0.0269 0.3175
» [i,j]=find(x>0.5);
» i'
i=
1 2 4 1 2 3 4 5 1 4 1 2
» j'
ans =
1 1 1 2 2 2 2 2 3 3 5 5
isnan(X) Vraća jedinicu za elemente matrice koji su NaN. (Posljedica računanja
tipa 0/0 i sl.)
isinf(X) Vraća jedinicu za elemente matrice koji su Inf (beskonačno).
finite(X) Vraća jedinicu za konačne elemente matrice (nijesu Inf i NaN).
isempty(X) Vraća jedinicu ako je X prazna matrica X=[].
issparse(X) Vraća nulu ako je matrica rijetka.
isstr(X) Vraća jedinicu ako je matrica zapravo string - tekstualni niz.
isglobal(X) Vraća jedinicu ako je promjenljiva X globalna promjenljiva (to jest ako
važi u svim programima i funkcijama).
5.3 FUNKCIJSKI FAJLOVI
Izuzetna pogodnost koju pruža MATLAB je mogućnost kreiranja novih
funkcija i lako pravljenje i pozivanje potprograma. Fajlovi kojima kreiramo nove
funkcije nazivaju se funkcijski fajlovi i obavezno u prvoj liniji imaju naredbu
function. Osnovnu strukturu funkcijskog fajla prikazaćemo na primjeru definisanja
funkcije si(x)=sin(x)/x.
Primjer 5.3.1 Definisati funkcijskim fajlom funkciju si(x)=sin(x)/x, gdje x može biti
skalar, vektor ili matrica.

136
MATLAB for Windows
Napomenimo da se funkcijski fajl obavezno mora nazvati po imenu funkcije koja se
njime kreira dakle u ovom slučaju si.m.
function s=si(x)
% Definisanje funkcije si(x)=sin(x)/x
s=sin(x+eps)./(x+eps);
end
Funkcijski fajl si poziva se sa si(a), gdje a može biti skalar, vektor ili
matrica. Rezultat je definisana funkcija sin(a)/a.
Sve promjenljive u function fajlu su lokalnog karaktera: x je ulazna, a s je
izlazna varijabla koja se dobija u obliku ans poslije pozivanja funkcijskog fajla
(probajte » si(2) ili » x=-7:.2:7; plot(x,si(x))).
Tekst označen komentarom %, koji slijedi poslije linije function, dobija se
sa » help si i služi kao objašnjenje definisane funkcije.
Funkcijski fajlovi se mogu praviti i sa više ulaznih i izlaznih varijabli.
Primjer 5.3.2 Napisati potprogram za računanje vektorskog proizvoda dva
trodimenziona vektora.
function c=vekpr(a,b)
% racunanje vektorskog proizvoda c=axb
if length(a)č=3 | length(b)č=3
error('duzina vektora a ili b nije 3')
end
c(1)=a(2)*b(3)-a(3)*b(2);
c(2)=a(3)*b(1)-a(1)*b(3);
c(3)=a(1)*b(2)-a(2)*b(1);
end
Poslije izlaska uz zapisivanje fajla vekpr.m, možemo probati kako on radi.
Na primjer » r=vekpr([1 2 3],[-1 0 5]).
U prethodnom funkcijskom fajlu korišćena je poruka greške. Ako dužina
vektora a ili vektora b nije 3, program prekida dalje izvršavanje naredbi uz poruku
"duzina vektora a ili b nije 3".
Treba napomenuti da MATLAB ima ugra|enu funkciju cross koja računa
vektorski proizvod, tako bi unošenje
» cross([1 2 3],[-1 0 5])
137
Programiranje i M-fajlovi
dalo isti rezultat kao naša funkcija.
U function fajlovima, koje smo do sada razmatrali, imali smo samo jednu
izlaznu promjenljivu. Broj izlaznih promjenljivih, me|utim, može biti veći i može se
dobiti naredbom nargout, dok se broj ulaznih promjenljivih dobija sa nargin.
x2 y2 z2
Primjer 5.3.3 Odrediti najbližu i najdalju tačku na elipsoidu a 2 + b2 + c2 = 1, od date
ravni Ax+By+Cz+D=0. Ako je broj izlaznih argumenata veći od dva onda izračunati
i rastojanja tačaka na elipsi i ravni. Ose elipse zadati u vektoru e=[a b c], a ravan u
vektoru m=[A B C D].
Najbliže i najudaljenije tačke su one u kojima je vektor normale na elipsu
n=[2x/a2 2y/b2 2z/c2] kolinearan sa vektorom normale ravni [A B C] tj.:
2x/a2 =kA 2y/b2=kB 2z/c2 =kC
Konstanta k se odre|uje iz uslova da tačka [x y z] leži na elipsi.
k2=4/(A2a2+B2b2+C2c2)
function [x1,x2,d1,d2]=raste(e,m)
% Odredjivanje najblize i najudaljenije tacke na elipsoidu od
% zadate ravni, kao i rastojanje tih tacaka od ravni
k1=2/sqrt((e*m(1:3)')^2);
k2=-2/sqrt((e*m(1:3)')^2);
%
x1=k1*m(1:3).*e.^2/2;
x2=k2*m(1:3).*e.^2/2;
if nargout>2
d1=abs(x1*m(1:3)'+m(4))/sqrt(sum(e.^2));
d2=abs(x2*m(1:3)'+m(4))/sqrt(sum(e.^2));
end
end
Prethodni funkcijski fajl može se pozivati sa promjenljivim brojem izlaznih
argumenata. Ako ga pozovemo sa [x1,x2]=raste([1 2 2],[1 0 -1 3]) onda će
računati samo tačke x1 i x2, na elipsoidu sa osama a=1 b=2 i c=2 respektivno,
koje su najbliže odnosno najdalje od ravni sa koeficijentima A=1 B=0 C=-1 i D=3 i
njih dati kao izlazne varijable. Ako ga pozovemo sa [x1,x2,d1,d2]=raste([1 2 2],[1
0 -1 3]) onda će računati i koordinate tačaka i njihovo rastojanje do ravni.
Funkcijski fajl ne mora imati izlazne promjenljive. Ako je potrebno izvršiti
odre|ene operacije sa zadatim varijablama (na primjer radi crtanja grafika na

138
MATLAB for Windows
ekranu) pri čemu treba računati pomoćne varijable, koje nas u daljem radu ne
interesuju, to se može izvršiti funkcijskim programom bez izlaznih promjenljivih.
Primjer 5.3.4 Napraviti funkcijski fajl za crtanje diskretnih signala.
function dplot(x,y)
% pozivom dplot(x,y) crtamo diskretnu funkciju y(n)=y(x) za x=ndx u
% funkciji rednog broja odbirka
%
d=(max(x)-min(x))/(length(x)-1);
i=round(x./d);
i1=[1 1 1]'*i;
i1=i1(:);
y1=[0 1 0]'*y;
y1=y1(:);
plot(i1,y1)
end
Diskretni signal sin(pi/10*n) možemo nacrtati sa
» x=-2*pi:pi/10:2*pi; » dplot(x,sin(x)).
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-20 -15 -10 -5 0 5 10 15 20

Slika 5.2 Grafik diskretnog signala


Broj ulaznih argumenata tako|e može biti promjenljiv.
Primjer 5.3.5 Izračunati težinu tijela mase m. Ako se kao ulazni parametar zada
samo m onda uzeti da je tijelo na površini Zemlje. Ako se zada i r onda uzeti da je
tijelo na visini r od površine Zemlje, a ako se zada m, r i M onda uzeti da se tijelo m
nalazi na rastojanju r od planete mase M.
function q=tezina(m,r,M)
%
% racunanje tezine tijela. Ako je zadato samo m na povrsini Zemlje.
% Ako je zadato m i r onda na visini r iznad Zemlje,
139
Programiranje i M-fajlovi
% a ako je zadato m, r i M onda na rastojanju r od planete mase M.
% Uzeto je Mzem=4.9156*10^24, Rzem=6371377 i gama=6.672*10^(-11)
%
if nargin==1
q=m*9.81;
elseif nargin==2
q=6.672*10^(-11)*m*4.9156*10^24/(6371377+r)^2;
else
q=6.672*10^(-11)*m*M/r^2;
end
end
Promjenljivi broj ulaznih parametara često se koristi i pri pozivanju
function fajlova za računanje varijabli sa odre|enom tačnošću.
Primjer 5.3.6 Korišćenjem razvoja u red napraviti program za računanje sin(x) sa
zadatom tačnošću etac za relativno male vrijednosti x. Ako nije zadata tačnost
računati sin(x) sa tačnošću 0.00001.
Razvoj sinusa u red oko nule je oblika:
sin(x)=x-x3/3!+x5/5!-x7/7!+...+(-1)n-1x2n-1/(2n-1)!+...
function s=sinred(x,etac)
%
% sinred(x,etac), racunanje sinusa pomucu reda, ako nije zadata
% tacnost onda se uzima da je etac=0.00001
%
if nargin==1
etac=10^(-5);
end
s=x; f=x; n=1;
while f>etac
n=n+1;
f=(-1)^(n-1)*x^(2*n-1)/prod(1:2*n-1);
s=s+f;
end
end
Na kraju ovog odjeljka daćemo i nekoliko napomena.
Kada neki m-fajl koristimo prvi put, on se kompilira i smjesti u memoriju i
tako je dostupan za kasniju upotrebu.
140
MATLAB for Windows
Prilikom pozivanja nekog fajla, na primjer proba, MATLAB-ov interpreter
pravi sljedeće korake:
1.-------Provjeri da li je proba varijabla. Ako jeste, uzima njenu vrijednost za
računanje, ako nije
2.-------provjeri da li je proba ugra|ena funkcija. Ako jeste, koristi je, a ako nije
3.-------traži fajl proba.mex u tekućem direktorijumu. Ako ga na|e izvršava ga, a ako
ga ne na|e,
4.-------traži fajl proba.mex u direktorijumima po definisanom putu pretraživanja (u
MATLABRC.M) i ako ga na|e izvršava ga, a ako ga nema
5.-------traži fajl proba.m u tekućem direktorijumu. Ako ga na|e izvršava ga, a ako
ga ne na|e,
6.-------traži fajl proba.m u direktorijumima po definisanom putu pretraživanja (u
MATLABRC.M) i ako ga na|e izvršava ga, a ako ga nema
7.-------javlja grešku, proba je nepoznato.
Na osnovu prethodnog, važno je imati u vidu da fajlovi koje pravimo ne smiju imati
imena ugra|enih funkcija ili korišćenih varijabli, kao ni imena već postojećih fajlova.

5.4 TEKSTUALNE PROMJENLJIVE (STRINGOVI)


Do sada smo posmatrali isključivo varijable koje uzimaju numeričke
vrijednosti. MATLAB, kao uostalom i mnogi drugi programski jezici, može raditi i sa
tekstualim varijablama. Tako možemo zadati varijablu s čiji će sadržaj biti tekst
"MATLAB".
» s='MATLAB'
s=
MATLAB
Apostrof na početku i kraju označava da neku promjenjljivu treba tretirati
kao tekst. Svako slovo varijable s smješta se kao jedan elemenat vektora, pa je s
vektor dimenzija (1x6).
» size(s)
ans =
1 6
Vrijednosti ASCII koda koje odgovaraju pojedinim slovima dobijaju se sa abs.
» c=abs(s)
c=
77 65 84 76 65 66

141
Programiranje i M-fajlovi
ASCII vrijednosti se pretvaraju u karaktere sa setstr. Ovo je operacija
inverzna operaciji abs, za slučaj tekstualnih promjenljivih.
» setstr(c)
ans =
MATLAB
Složeni vektori mogu se graditi kao i kod operacija sa brojevima, dodajući
vrste ili kolone.
d='VER4.2';
» e=[c,blanks(2),d]
e=
MATLAB VER4.2
» f=[c;d]
f=
MATLAB
VER4.2
Funkcija blanks(n) kreira string koji se sastoji od n praznih polja (space-
ova). Naredba deblank ima suprotno dejstvo naredbi blanks to jest briše bjeline u
stringu (space-ove i Tab-ove).
Ukoliko ne želimo da računar ispisuje ime varijable onda možemo koristiti
naredbu disp.
» disp(e)
MATLAB VER4.2
Unošenje tekstulanih promjenljivih se vrši naredbom:
» input('proizvoljan tekst',s')
gdje s označava da se radi o tekstualnim varijablama.
Primjer 5.4.1 Napraviti m-fajl koji će simulirati bacanje 5 kocaka za igranje jamba.
% program jamb
% program koji simulira bacanja kocki u jambu. Poslije
% prvog bacanja treba otkucati redne brojeve kocki koje
% se ponovo bacaju.
input('zelis li objasnjenje da ili ne', 's')
if ans=='da'
help jamb
142
MATLAB for Windows
disp('pritisnuti bilo koju tipku za nastavak...')
pause
clc
end
ans='a';
while(ansč='k')
y=ceil(rand(1,5)*6)
input(' koje kocke bacas ponovo [x x x] (ako ne bacas [0]) ')
if ansč=[0]
y(ans)=[];
y(5-length(ans)+1:5)=ceil(rand(1,length(ans))*6);
end
disp(y)
input(' pritisni bilo koju tipku za nastavak ili k za kraj...','s')
clc
end
Naredba iz fajla clc briše komandni prozor i vraća na komandni prompt.
Veoma važna naredba za rad sa stringovima je eval(s). Ova naredba
znači da računar izvrši tekst u promjenljivoj s kao naredbu.
» s='sin(x).*x.^3'
Ovako napisana varijabla s je tekst. Me|utim ako zadamo x:
» x=2
onda naredbom eval(s) izvršavamo sadržaj varijable s:
» eval(s)
što je isto kao da smo otkucali:
» sin(x).*x.^3
Varijabla s može imati i više vrsta, koje moraju biti iste dužine. eval(s(i,:)) u
tom slučaju izvršava naredbe koje su sadržane u pojedinim vrstama. Poslužimo se
funkcijom str2mat kojom se formira matrica čije su vrste pojedini stringovi i izvrši
se automatsko popunjavanje nulama pojedinih vrsta.
» s=str2mat('x=2','y=3','z=x.^2+y');
» eval(s(1,:))
x=
2
143
Programiranje i M-fajlovi
» eval(s(2,:))
y=
3
» eval(s(3,:))
z=
7
Naredba int2str(j) pretvara cjelobrojnu vrijednost j u tekstualnu varijablu i
tretira je kao tekst.
» r=int2str(5);
» s='ime';
» t=[s r]
t=
ime5

Ova naredba može biti posebno interesantna kada želimo unutar for petlje
sačuvati više grafika, više promjenljivih ili učitavati više varijabli koje se razlikuju u
imenu. Na primjer, kada unutar petlje dobijamo n grafika i želimo ih sačuvati pod
imenima slll1.ps, slll2.ps, slll3.ps ... sllln.ps, onda to možemo učiniti sa:
» x=-2:.1:2;
» for i=1:4
y=x.^i;
plot(x,y)
eval(['print slll' int2str(i)])
end

U prethodnom primjeru računar računa i crta stepene funkcije y=xi za i=1, 2, 3, 4,


a onda dobija naredbu eval(['print slll' int2str(i)]), što znači: izvrši sadržaj vektora
print sllli za i=1, 2, 3, 4, što je isto kao i niz naredbi print slll1, print slll2, print
slll3, print slll4, pri čemu imamo automatsko dodavanje broja i kao dijela teksta u
imenu fajla. Probajte » dir *.ps i vidjećete da su kreirani fajlovi slll1.ps, slll2.ps,
slll3.ps i slll4.ps. Ukažimo da je naredba dir adekvatna MS-DOS naredbi i služi za
izlistavanje sadržaja direktorijuma. Ovo naredba biće opisana u jedanaestom
poglavlju.
Na isti način mogu se sačuvati i promjenljive za razne vrijednosti i,
naredbom eval(['save y' int2str(i)]), ili učitati sa eval(['load y' int2str(i)]).
144
MATLAB for Windows
Moguće je koristiti i višestruke petlje i višestruke indekse, npr. sl11.ps,
sl12.ps, sl21.ps, itd., naredbom eval(['print sl' int2str(i) int2str(j)]).
Stringove možemo porediti naredbom strcmp(a,b) koja vraća jedinicu ako
su stringovi a i b isti, a nulu u suprotnom. Naredba findstr('a','b') nalazi sve
pozicije u stringu a gdje se pojavljuje string b. Npr. naredbama
» recenica='dvadeset deveti avgust hiljadu devetsto devedeset prve godine';
» findstr(recenica,'a')
ans =
3 17 28
nalazi se pozicija u stringu recenica sve pozicije gdje se pojavljuje slovo a. Npr.
pozicije u kojima se u istom stringu pojavljuje string 'dev' se dobijaju naredbom
» findstr(recenica,'dev')
ans =
10 32 41

Ako stringa b nema u stringu a rezultat je prazna matrica


» findstr(recenica,'deseti')
ans =
[]
Naredba upper(a) pretvara sva slova u stringu u velika, a naredba lower(a)
pretvara slova u mala:
» a='sTRIng';
» A=upper(a)
A=
STRING
» AA=lower(a)
AA =
string
Funkcija isletter(a) vraća nulu za one karaktere stringa koji nijesu slova a za slova
vraća jedinicu, dok funkcija isspace(a) vraća jedinicu za one karaktere koji su
bjeline (space-ovi ili tab-ovi) a za ostale vraća nulu. Funkcija strrep(a,b,c) u stringu
a mijenja string b sa stringom c. Posmatrajmo sljedeći primjer
» a='Niz karaktera koji se mjenja';
» strrep(a,'koji','promjenljiv')
145
Programiranje i M-fajlovi
ans =
Niz karaktera promjenljiv se mjenja
Dakle u nizu a mijenjamo riječ koji sa riječi promjenljiv. Naredbom strtok(a,b)
odsjeca u stringu a onaj dio do pozicije gdje se pojavljuje string b, tako naredbom
» strtok(a,'r')
ans =
Niz ka
iz niza a odsjeca se niz do prvog pojavljivanja slova r.
U MATLAB-u postoje i funkcije koje konvertuju podatke, tako funkcija
num2str(x) konvertuje broj x u string koji ima iste elemente.

5.5 FUNKCIJE ^IJI SU ARGUMENTI DRUGE FUNKCIJE


U MATLAB-u postoje funkcije čiji argumenti mogu biti druge funkcije.
Takva je funkcija feval(s,x) kojom se izračunava funkcija pod imenom s (ugra|ena
ili definisana function fajlom) za vrijednosti x.
» s='sin'
» feval(s,[-1:.5:1])
Primjer 5.5.1 Napraviti funkcijski potprogram za izračunavanje integrala po
Simpsonovom pravilu, u granicama od a do b sa tačnošću tac.
Snimimo function fajl simp.m čiji je sadržaj:
function in=simp(f,a,b,tac)
%
% Racunanje integrala funkcije f u granicama od a do b sa tacnoscu
% tac. Ako nije data tacnost uzeto je da je tac=0.001
in=10^99;
is=0;
n=4;
if nargin==3
tac=0.001;
end
while abs(in-is)>tac
is=in;
n=2*n;
% definisanje vektora s=[1 4 2 4 2 4 2 ... 2 4 1]
146
MATLAB for Windows
s1=[4*ones(1,n/2-1);2*ones(1,n/2-1)];
s=[1 s1(:)' 4 1];
h=(b-a)/n;
x=a:h:b;
y=eval(f);
in=sum(y.*s)*h/3;
end
end
Izračunajmo sada integral funkcije f(x)=xsin(x)cos(x) u intervalu od -1 do
1. To ćemo učiniti prosto naredbom » f='x.*sin(x).*cos(x)'; » simp(f,-1,1). Tačnost
je automatski 0.001. Zadata tačnost, npr. 0.00001, postiže se sa » simp(f,-
1,1,0.00001). U ovom primjeru treba reći da bi korektnije bilo definisati relativnu
umjesto apsolutne greške. Naredba while bi u tom slučaju bila:
while abs((in-is)/in)>tac.
U MATLAB-u postoje dvije ugra|ene funkcije za izračunavanje odre|enog
integrala:
b

I= ∫ f ( x)dx
a

u obliku I=quad(f,a,b,tac, korak) ili I=quad8(f,a,b,tac,korak), gdje je f naziv


funkcije, a donja granica, b gornja granica, tac željena tačnost i korak korak
integracije (koji se može izostaviti i tada se uzima neka default vrijednost). Razlika
izme|u ova dva algoritma je u brzini konvergencije koja je kod funkcije quad8 veća
ali je istovremeno složenost izračunavanja povećana.

Primjer 5.5.2 Izračunati integral funkcije f(x)=sin(x) od 0 do π, sa tačnošću


0.000001.
» quad('sin',0,pi,0.000001)
Napominjemo da se na ovaj način mogu računati jedino integrali ugra|enih funkcija
ili funkcija definisanih m-fajlovima.
Primjer 5.5.3 Izračunati integral funkcije f(x)=xsin(x) od 0 do π, sa tačnošću
0.000001.
Potrebno je definisati funkciju f(x)=xsin(x), koju ćemo zvati sx(x).
function s=sx(x)

147
Programiranje i M-fajlovi
s=x.*sin(x);
end
Poslije izlaska iz editora, integral računamo sa:
» quad('sx',0,pi,0.001)
Nulu funkcije definisane m fajlom ili ugra|ene funkcije, u okolini tačke x=a,
možemo dobiti sa fzero(f,a,tac).
Primjer 5.5.4 Naći nule funkcije y=x3+x2-2x-1 za x<0. U funkcijskom fajlu ff.m
definišimo funkciju:
function y=ff(x)
y=x.^3+x.^2-2*x-1;
end
Nacrtajmo ovu funkciju
» x=-2:.01:2;
» plot(x,ff(x)),grid

i sa slike vidimo da se jedna nula nalazi u blizini tačke -1.5 a druga u okolini tačke
-0.5. Na|imo nule oko ovih tačaka sa tačnošću 0.001.
» fzero('ff',-1.5,0.001)
ans =
-1.8017
» fzero('ff',-0.5,0.001)
ans =
-0.4459
9

0
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Slika 5.3 Grafik funkcije y=x +x2-2x-1 3

148
MATLAB for Windows
Tako|e u MATLAB-u postoje veoma korisne funkcije za rješavanje
diferencijalnih jednačina metodom Runge-Kutta. Za to služe funkcije ode23
(metode nižeg reda) i ode45 (metode višeg reda). Postoje i adekvatne funkcije
ode23p i ode45p koje pored izračunavanja rješenja diferencijalne jednačine vrši i
iscrtavanje grafika. Dakle pomoću ovih funkcija riješavamo diferencijalnu
jednačinu:
y'=f(y,t)
gdje je t nezavisna promjenljiva. Funkcija f(y,t) mora biti implementirana u .m fajlu.
Naredba MATLAB-a kojom se rješavaju diferencijalne jednačine je
[t,y]=ode23('f',to,tk,yo,tol,kon), gdje je f funkcija, to i tk granice u kojima se traži
rješenje, yo je početna vrijednost u tački to. tol je greška, dok je kon kontrolni broj
(ako je različit od nule, iteracije se ne ispisuju). Posljednja dva argumenta su
opcioni - mogu se izostaviti. Izlaz t i y predstavljaju nezavisnu i zavisnu
promjenljivu.

Primjer 5.5.5 Riješiti diferencijalnu jednačinu y'=cos(t)-tsin(t) za 0≤t≤3 i ako je


y0=1. (Očigledno je riješenje ove diferencijalne jednačine y=tcos(t)). Prvo se u fajlu
sss snimi funkcija cos(t)-tsin(t) pa nakon snimanja ovog fajla funkcijom ode23
riješimo diferencijalnu jednačinu.
function yp=sss(t,y)
yp=cos(t)-t.*sin(t);
end
» [t,y]=ode23('sss',0,3,1);
» plot(t,y)
Primjer 5.5.6 Riješiti diferencijalnu jednačinu y'=-yt za -1≤t≤3 i ako je y0=0.
function yp=sss(t,y)
yp=-y.*t;
end
» [t,y]=ode23('sss',-1,3,0);
» plot(t,y)
Naredba ode23 može da posluži za rješavanje sistema od dvije jednačine sa dvije
ili više nepoznatih.
Primjer 5.5.7 Riješiti sistem diferencijalnih jednačina: y1'=y2+sqrt(y1) i
y2'=-y1+sin(y1/2) za početne vrijednosti y10=0 i y20=1 za -2≤t≤2.
function yp=sss(t,y)
149
Programiranje i M-fajlovi
yp(1)=y(2)+sqrt(y(1));
yp(2)=-y(1)-sin(y(1)/2);
end
» [t,y]=ode23('sss',-2,2,[0 1]);
» plot(t,y)
Veoma je interesantna funkcija fmin('s',xo,xk) kojom se traži minimum funkcije s u
intervalu od xo do xk. Na primjer za funkciju
function y=fff(x)
y=x.^3-x-1;
end
na|imo minimum u intervalu 0≤x≤4
» fmin('fff',0 ,4)

ans =
0.5774
Pored ove funkcije postoji i funkcija fimns koja služi za traženje minimuma funkcije
više promjenljivih. Ove dvije funkcije imaju mnoštvo opcija sa kojim se možete
upoznati u helpu. U MATLAB-u postoji funkcija fplot koja služi za crtanje funkcije u
nekom zadatom intervalu. Ovu funkciju ćemo objasniti kroz sljedeće primjere.
Naredbom
» fplot('sin',[0 4*pi])
iscrtava se funkcija sin(x) u intervalu 0≤x≤4π, dok se naredbom
» fplot('sin(x)',[0 4*pi],'-+')
prikazuje ista funkcija u istom intervalu pomoću markera -+. Naredbom
» fplot('[sin(x),cos(x)]',[0 4*pi],'-x')
prikazuju se funkcije sin(x) i cos(x) u intervalu 0≤x≤4π sa markerima '-x'. Naredba
» fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o')
crta apsolutnu vrijednost sume reda e-jxn za n od 0 do 9 u granicama 0≤x≤2π sa
markerima '-o'. Na slici 5.4a prikazana je ova funkcija. Funkcija y=tan(x) u
granicama -2π≤x≤2π i -2π≤y≤2π se crta naredbom (slika 5.4.b)
» fplot('tan',[-2*pi 2*pi -2*pi 2*pi],'-*')
Naredbom
» fplot('[tan(x),sin(x),cos(x)]',[-2*pi 2*pi -2*pi 2*pi])

150
MATLAB for Windows

se u granicama -2π≤x≤2π i -2π≤y≤2π, crtaju funkcije sin(x), cos(x) i tan(x) što je


prikazano na slici 5.4c Funkcija 1/sin(x) u granicama 0.01≤x≤0.1 sa tačnošću 10-3
se crta naredbom (slika 5.4d)
» fplot('sin(1 ./ x)', [0.01 0.1],1e-3)
Nacrtajmo i funkciju -(x2-2x+1)/(x2+x-2) u granicama -4≤x≤4 i -10≤y≤10
» fplot('-(x.^2-2*x+1)./(x.^2+x-2)', [-4 4 -10 10])
i primijetimo da ova funkcija ima singularitet u x=-2 (vertikalnu asimptotu) i u x=1
(postoji granična vrijednost). Na slikama 5.4e i 5.4f prikazane su funkcije
-(x2-2x+1)/(x2-x-2) i -(x2-2x+1)/(x2-1)
» fplot('-(x.^2-2*x+1)./(x.^2-x-2)', [-4 4 -10 10])
» fplot('-(x.^2-2*x+1)./(x.^2-1)', [-4 4 -10 10])
10
6
9

8 4

7
2
6

5 0

4
-2
3

2 -4
1

0 -6
0 1 2 3 4 5 6 -6 -4 -2 0 2 4 6

a) b)
1
6
0.8
4 0.6

0.4
2
0.2

0 0

-0.2
-2
-0.4

-4 -0.6

-0.8
-6 -1
-6 -4 -2 0 2 4 6 0.02 0.04 0.06 0.08 0.1

c) d)

151
Programiranje i M-fajlovi
10 10

8 8

6 6

4 4

2 2

0 0

-2 -2

-4 -4

-6 -6

-8 -8

-10 -10
-4 -3 -2 -1 0 1 2 3 4 -4 -3 -2 -1 0 1 2 3 4

e) f)
Slika 5.4. Korišćenje funkcije fplot

152
MATLAB for Windows

glava šesta

GRAFIČKI OBJEKTI
U ovom poglavlju će biti objašnjene funkcije za kontrolu pojedinih
elemenata grafičkog okruženja MATLAB-a: osnovnog ekrana, grafičkog prozora,
koordinatnog sistema, linija, površina, kolorne matrice podataka, popunjenih
poligona, teksta, ulazno izlaznog menija i grafičkih kontrola. Posebno je važno
upravljanje pojedinim grafičkim objektima koji se kreiraju uobičajenim grafičkim
funkcijama. U sklopu ovog poglavlja vodilo se računa o grafičkim komandama koje
prilikom rada kreiraju jedan odnosno više objekata.
Na kraju poglavlja dat je kompleksan primjer u kom je obuhvaćen rad sa
najvažnijim grafičkim objektima i njihovim osobinama.
6.1 OSNOVNI EKRAN (ROOT)

Svakom grafičkom objektu u MATLAB-u dodijeljen je numerički


identifikator (handle) koji jedinstveno odre|uje objekat i pomoću kojeg se sa
objektom rukuje-upravlja. Napomenimo da numerički identifikatori pojedinih
objekata koji su dati u knjizi mogu uzimati vrijednosti koje se ne poklapaju sa onim
koje su date kao rezultat. Osnovni ekran je tako|e grafički objekat kojeg karakteriše
identifikator 0. Tekuće osobine osnovnog ekrana se mogu dobiti naredbom:
» get(0)
gdje su osobine osnovnog ekrana:
CurrentFigure = [1]
Diary = off
DiaryFile = diary
Echo = off
Format = short
FormatSpacing = loose
PointerLocation = [547 3]
PointerWindow = [0]
ScreenDepth = [4]
153
Grafički objekti
ScreenSize = [1 1 640 480]
Units = pixels
ButtonDownFcn =
Children = [1]
Clipping = on
Interruptible = no
Parent = []
Type = root
UserData = []
Visible = on
Objasnimo neke od osobina osnovnog prozora:
CurrentFigure Trenutno aktivni grafički prozor. Ova osobina se
može dobiti i sa gcf. Promjena tekućeg grafičkog
prozora se može postići sa gcf=broj. Grafički
prozori koji se otvaraju redom dobijaju brojeve od
jedan pa nadalje.
Diary Da li je uključeno kreiranje dnevnika. Ako nije,
vrijednost ove osobine je 'off', a ako jeste 'on'.
DiaryFile Fajl u kom se smješta dnevnik. Default vrijednost
osobine je 'diary'.
Echo Pokazuje stanje naredbe echo.
Format Koji je način prikazivanja brojeva uključen. Npr.
'short', default vrijednost koja odgovara naredbi
format short.
FormatSpacing Definiše format zapisivanja matrica. Moguće
vrijednosti ove osobine su 'compact' i 'loose' koje
odgovaraju naredbama format compact i format
loose.
PointerLocation Pozicija pokazivača miša.
PointerWindow U kom se prozoru trenutno nalazi pokazivač miša.
Ako je to osnovni prozor vrijednost ove osobine je
0.
ScreenSize Veličina ekrana. Vektor sa četiri elementa koji
determinišu početne i krajnje tačke grafičkog
prozora.
Units Jedinica u kojoj se mjeri grafički prozor. Moguće
vrijednosti su 'pixels' - ekranska tačka,
154
MATLAB for Windows
'normalized' - normalizovane vrijednosti, donji
lijevi ugao grafičkog prozora (0,0) a gornji desni
(1,1), 'inches' - inči (1inč=2.54cm), 'centimeters' -
centimetri i 'points' - 1/72 inča.
Children Vektor numeričkih identifikatora grafičkih prozora.
Parent Numerički identifikator roditelja tekućeg grafičkog
objekta. Osnovni ekran nema roditelja pa je
vrijednost ove osobine prazna matrica [].
Naredba get omogućava da se dobiju i pojedine osobine grafičkog
prozora, npr.
» get(0,'Diary')
daje sadržaj osobine Diary. Za postavljanje osobina koristi se naredba set. Npr.
naredbi
» figure(2);
» set(0,'CurrentFigure',2)
adekvatna je naredba
» gcf=2
odnosno, naredbi
» set(0,'Diary','on','DiaryFile','dnevnik.txt')
adekvatna je naredba
» diary dnevnik.txt
Potpuno su adekvatne i naredbe
» set(0,'Format','long')
» format long
Postoji tako|e i niz osobina koje se mogu samo pročitati i kod kojih pokušaj
mijenjanja prouzrokuje grešku. Tako se ne može promijeniti vrijednost osobine
ScreenSize.
» set(0,'ScreenSize',[1 1 234 432])
??? Error using ==> set
Read-only properties can't be modified.
Napomenimo da nazive osobina npr. ScreenSize možemo pisati bez
razlike i malim i velikim slovima. U ovom pregledu su obra|ene osobine koje se
mogu mijenjati kako naredbom set tako i nekom od već definisanih naredbi. Postoji

155
Grafički objekti
čitav niz osobina grafičkih objekata kojima se može prići samo naredbom set i sa
njima ćemo se još srijetati.
Naredbom set(0) možemo da vidimo moguće vrijednosti koje mogu
uzimati pojedine osobine.
6.2 GRAFI^KI PROZOR (FIGURE)

Grafički prozor se kreira sa naredbom figure. Sa nekim specifičnostima


ove naredbe smo se već srijetali u okviru trećeg poglavlja. Ako se ne navodi broj
grafičkog prozora, sa naredbom figure kreiraju se prozori počev od 1 pa redom
nadalje. Prvi grafički prozor se može kreirati tako što se neka funkcija grafički
prikaže ili se prazan grafički prozor dobija naredbom figure(1). Osobine ovakvog
prozora se dobijaju naredbom
» get(1)
Color Boja pozadine. Može se zadati karakterom po
pravilima iz naredbe plot, npr:
» set(1,'Color','w')
daje bijelu pozadinu, ili se boja pozadine definiše
vektorom od tri broja izme|u 0 i 1 po RGB pravilu
» set(1,'Color',[0.3 0.8 1])
Colormap Veličina kolorne mape. (Obično 64x3).
CurrentAxes Numerički identifikator trenutnog koordinantnog
sistema koji se za tekući grafički prozor može
dobiti naredbom gca.
CurrentObject Identifikator tekućeg grafičkog objekta.
MinColormap Minimalan broj boja koje predstavljaju kolornu
mapu.
MenuBar Definiše da li će grafički prozor imati standardan
Windows meni sa opcijama File, Edit, Window i
Help (vrijednost osobine 'figure') ili bez ovih
funkcija ('none').
Name Ime grafika.
NumberTitle Definiše prikazivanje rednog broja figure u naslovu
grafičkog prozora. Ako je 'on' prikazan je broj, a
ako je 'off' ne prikazuje se redni broj.
156
MATLAB for Windows
PaperType Tip papira na koji se može štampati grafički
objekat. Predefinisan je usletter, a moguće je uzeti
i više drugih tipova me|u kojima a4, b5 itd.
Primjer 6.2.1 Kreirajmo dva grafička prozora imena Prozor2 sa i bez broja prozora
sa različitim bojama pozadine.
» figure('Color',[0.3 0.8 1],'Name','Prozor2','NumberTitle','off')
» figure('Color','r','Name','Prozor2')
NextPlot Osobina definiše gdje će biti prikazan naredni
grafik. Vrijednosti ove osobine mogu biti: 'add'
dodaje grafik u tekući grafički prozor, 'new' otvara
novi grafički prozor i u njemu prikazuje novi grafik,
'replace' stari grafik mijenja sa novim.
PaperUnits Jedinice u kojima se mjeri veličina papira koja
odgovara grafičkom prozoru.
PaperOrintation Orijentacija papira, može biti uspravljena 'portrait'
ili položena 'landscape'. Ova se osobina može
podešavati naredbom orient.
PaperPosition Pozicija papira (vektor sa četiri elementa) - to jest
margine na štampajućem papiru.
PaperSize Veličina papira (vektor sa dva elementa).
PaperType Tip papira. Mogu biti 'usletter' - 8x11 1/2 inča, 'a4'
- 21x29.7cm, itd.
Pointer Oznaka pokazivača miša. Strijelica je sa 'arrow' a
časovnik 'watch'. Pokazivač miša je u obliku
časovnika kada je računar zauzet nekom
operacijom pa se na ovaj način onemogućava
zadavanje operacija mišem.
Position Pozicija grafičkog prozora na ekranu (vektor sa
četiri elementa).
Units Jedinice u kojima se mjeri veličina papira.
Primjer 6.2.2 Formirati grafičke prozore različitih veličina sa različitim mjernim
jedinicama.
» figure('Name','Vel1','Units','inches','Position',[2.5 2.5 5.5 5.5])
» figure('Name','Vel2','Units','Pixels','Position',[45 45 120 210])
» figure('Name','Vel3','Units','Normalized','Position',[0.2 0.2 0.6 0.4])
» figure('Name','Vel4','Units','Points','Position',[100 100 400 300])
157
Grafički objekti
Type Tip grafičkog objekta (ovdje 'figure').
Visible Ako je 'on' prozor je vidljiv odnosno 'off' ako je
nevidljiv.
Children Objekti kreirani unutar grafičkog prozora.
Parent Roditelj, objekat iz kojeg je kreiran grafički prozor.
6.3 KONTROLA OSA

Veoma važan grafički objekat je koordinantni sistem sa osama. Osama se


može upravljati naredbom axes. Tako|e, značajne naredbe za upravljanje osama
su cla i gca. Naredba gca daje numerički identifikator koji je priključen tekućim
osama. Naredba cla briše sve objekte unutar tekućih osa, dok se naredbom cla
reset brišu svi objekti unutar trenutnih osa i vraćaju osobine grafičkog prozora na
default predefinisane. Za brisanje grafičkih objekata, pa i osa može da posluži
naredba delete. Naime delete(a) briše grafički objekat kome je dodijeljen
numerički identifikator a. Npr. naredbom
» delete(gca)
brišu se tekuće ose. Ista naredba se može primijeniti na bilo koji grafički objekat,
tako da naredba
» delete(gcf)
briše tekući grafički prozor. Naredbom delete file, briše se fajl sa diska. U tom
pogledu ova je naredba potpuno analogna DOS naredbi DEL.
Osobine tekućih osa se mogu ravnopravno postavljati sa
set(gca,osobina1,vrijednost1,osobina2,vrijednost2,...)
axes(osobina1,vrijednost1,osobina2,vrijednost2,...)
Osobine tekućeg grafika se mogu dobiti sa
» get(gca)
Moguće je istovremeno sa kreiranjem koordinantog sistema, dodijeliti
nekoj promjenljivoj vrijednost numeričkog identifikatora koji opisuje te ose
» a=axes('Box','on','Position',[0.2 0.2 0.6 0.6])
a=
76.0004
Naredbom
158
MATLAB for Windows
» axes(a)
čini se tekućim koordinantni sistem čiji je identifikator a. Naredbom axes, bez
argumenata, crta se prazan koordinantni sistem. Vrijednostima pojedinih osobina
se u tom slučaju dodjeljuju neke predefinisane vrijednosti. U ovom slučaju
koordinantni sistem zauzima čitav grafički prozor.
Najvažnije osobine grafičkog objekta su:
AspectRatio Vektor sa dva elementa, prvi definiše odnos
dužina vertikale sa horizontalnom osom a drugi
odnos jedinica u kojima se mjere koordinante ose.
Predefinisano je [-Nan -Nan].
Box Pravougaonik oko tekućih osa. Ako je 'on' crta se
pravougaonik oko osa a sa 'off' se ne crta.
Primjer 6.3.1 Nacrtati krivu y=x3-2x2 u intervalu -4≤x≤4 i onemogućiti iscrtavanje
pravougaonika oko osa.
» x=-4:.1:4;
» y=x.^3-2*x.^2;
» plot(x,y)
» set(a,'box','off')
Clim Vektor sa dva elementa koji definišu
predstavljanje u pseudo bojama. Ova se veličina
može postavljati naredbom caxis.
Color Boja grafika u kome se iscrtavaju koordinante ose.
Primjer 6.3.2 Grafik iz prethodnog zadatka nacrtati na zelenoj pozadini.
» set(a,'color','g')
ColorOrder Matrica dimenzija m x 3, kojom se definiše
redosljed boja kojim će se isrtavati linije na
ekranu. Ako se ništa ne zada, pretpostavljaju se
prvih šest boja iz MATLAB palete. Ove se osobine
mogu postavljati kao u naredbi plot sa 'r', 'w', itd...
FontAngle Ugao pod kojim se prikazuje tekst.
FontName Font u kojem će se ispisivati tekst na osama. Npr.
'helvetica'.
FontSize Veličina fonta u tačkama - pointima.
FontStrikeThrough Prekriženi font. Moguće vrijednosti 'on' ili 'off'.
159
Grafički objekti
FontWeight Stil fonta. Predefinisana vrijednost je 'normal', a
moguće vrijednosti su 'light' (posvjetljena slova),
'bold', (podebljana slova).
FontUnderline Podvučeni font. Moguće vrijednosti 'on' ili 'off'.
FontWeight Debljina fonta. Moguće vrijednosti 'normal' i
'bold'.
Primjer 6.3.3 Na prethodni grafik nanijeti font Swiss veličine 30 prekrižen.
» set(a,'FontName','Swiss','FontSize',30,'FontStrikeThrough','on')
GridLineStyle Odre|uje oblik linija koje služe za mrežu. Moguće
vrijednosti '-', '--', '-.', ':' i '.'. Ova se mreža iscrtava
naredbom grid.
LineWidth Debljina linije kojom se iscrtavaju ose.
Primjer 6.3.4 Prikazati na prethodnom grafiku mrežu u obliku pune linije. Neka
debljina osa bude 2.
» set(a,'GridLineStyle','-','LineWidth',2)
» grid
NextPlot Definiše poziciju iscrtavanja novog grafika. 'new' -
grafik se crta u novom koordinantnom sistemu,
'add' - dodaje se u postojeći, 'replace' - mijenja
tekući grafik u koordinantnom sistemu.
Position Vektor sa četiri elementa koji definišu poziciju
koordinantnog sistema na ekranu.
TickDir Pozicija crtica kojim se označavaju pojedine
vrijednosti na koordinatnim osama. Predefinisano
je 'in' (crtice orjentisane unutar grafika) i 'out'
(crtice orjentisane van grafika).
TickLength Dužina crtice kojom se označavaju pojedine
vrijednosti na koordinantnim osama.
Title Naslov prozora. Ovo je tekstualni objekat čiji se
numerički identifikator dobija naredbom
» get(gca,'Title')
Osobine ovog objekta se dobijaju naredbom
» get(get(gca,'Title'))
dok se osobine postavljaju naredbom
160
MATLAB for Windows
» set(get(gca,'Title'),'Osobina1','Vrijednost1',...)
Tekstualni objekti su i labele koordinatnih osa - osobina XLabel, YLabel i ZLabel.
Units Veličine u kojima se mjere veličine koordinatnih
osa. Moguće jedinice su 'pixels', 'normalized',
'inches', 'centimiters' i 'points'.
View Vektor sa dva elementa koji služi za preslikavanje
3-D grafika u 2-D zonu. Može se postavljati
naredbom view, i vezan je za grafike tipa 'mesh',
'watterfall' i 'surf'.
Za definisanje x-ose se koriste naredbe:
XColor Boja x-ose.
XDir Orjentacije x-ose. Moguće vrijednosti su 'normal'
x-osa orjentisan u pravcu porasta vrijednosti x i
'reverse' suprotno.
XGrid Može imati vrijednosti 'on' i 'off'. Ako je 'on'
iscrtava se mreža normalna na x-osu.
XScale Definiše način skaliranja x-ose. Moguće vrijednosti
su 'linear' i 'log'.
XTick Markeri koji se nalaze na nekim tačkama grafika.
XTickLabels Definiše poziciju labele na x-osi gdje postoji XTick.
Primjer 6.3.5 Na grafik iz prethodnih zadataka nanijeti oznake na x-osi a, b, i c.
Ujedno neka boja x-ose bude plava.
» set(a,'XTickLabels',['a' 'b' 'c']','XColor','b')
XTickaLabelMode Moguće vrijednosti 'manual' - ručno postavljanje
labela, 'auto' - automatsko postavljanje labela.
XLim Vektor sa dva elementa od kojih prvi definiše
donju granicu a drugi gornju granicu x-ose. Ova se
osobina može postavljati i naredbom axis.
Iste osobine kao za x-osu postoje i za druge dvije koordinantne ose. Ove
se osobine razlikuju samo po prvom slovu imena.
Children Numerički identifikatori svih objekata kreiranih
koordinatnih osa.

161
Grafički objekti
Primjer 6.3.6 Unutar osa nacrtati funkcije y=x2 i y=2x+4 i naći identifikatore ovih
objekata.
» a=axes;
» x=-4:0.1:4;
» plot(x,x.^2,x,2*x+4)
» get(a,'Children')
ans =
62.0001
61.0001

Parent Numerički identifikator grafičkog prozora u kom su


se kreirale ose.
Visible Definiše vidljivost osa.
Primjer 6.3.7 Učiniti nevidljivim ose date numeričkim identifikatorom a iz
prethodnog zadatka.
» set(a,'Visible','off')
6.4. GRAFI^KI OBJEKTI OD KOJIH SE SASTOJI GRAFIK

Osnovni objekti od kojih se sastoji grafik su: linija (line), površina


(surface), kolorna slika matrice (image), popunjeni poligon (patch) i tekstualni
objekti (text). Ovi grafički objekti se mogu dobiti naredbama line, patch, surface i
image. Me|utim nama su interesantniji grafički objekti koji nastaju crtanjem nekih
uobičajenih grafika.
6.4.1 LINIJA - LINE

Grafički objekti tipa linije se dobijaju kao rezultat slijedećih naredbi: plot,
polar, semilogx, semilogy, loglog, stem, compass, plot3, contour, itd... Svim
ovim naredbama, osim contour, dobija se onoliko objekata koliko se funkcija na
jednom grafiku crta. Naredbom contour dobija se onoliko objekata koliko je
izolinija na ekranu.
Primjer 6.4.1 Odrediti numeričke identifikator prilikom crtanja jedne funkcije
naredbom plot i prilikom crtanja dvije funkcije naredbom plot. Nacrtajmo prvo
funkciju y=sin(x2).

162
MATLAB for Windows
» x=-1:0.02:1;
» a=plot(x,sin(x.^2))
Numerički identifikator linije grafika je
a=
62.0002
Odredimo numeričke identifikatore funkcija nacrtanih na jednom grafiku
y=sin(x2) i y=sin(x2)/(x+3).
» b=plot(x,sin(x.^2),'r',x,sin(x.^2)./(x+3))

b=
69.0004
70.0004
Naredbom contour dobija se više objekata tipa linija.
Primjer 6.4.2 Nacrtati izodijagram z=sin(x2+y2-2xy) u granicama -2≤x≤2 i -2≤y≤2.
Odrediti numerički identifikator svih linija u grafiku.
» [x,y]=meshdom(-2:.1:2,-2:.1:2);
» z=sin(x.^2+y.^2-2*x.*y);
» [a,b]=contour(z);
Numerički identifikatori izolinija smješteni su u vektoru b
»b
b=
74.0002
75.0001
76.0001
77.0001
78.0001
79.0001
80.0001
81.0001
82.0001
Naredbom get(a(1)) dobijaju se osobine objekta tipa linija.
Naredbama meshc i surfc, pored više objekata tipa linija, stvara se jedan
objekat koji predstavlja površinu i tipa je surface.

163
Grafički objekti
Primjer 6.4.3 Nacrtati meshc dijagram promjenljive z iz prethodnog primjera i
odrediti tip ovako kreiranih grafičkih objekata.
» a=meshc(z)

a=
75.0002
80.0002
81.0002
82.0002
83.0002
84.0002
85.0002
86.0002
87.0001
88.0001
» get(a(1),'Type')
ans =
surface
» get(a(2),'Type')
ans =
line
Prvi kreirani grafički objekat je tipa površine (surface) dok su ostali tipa linije (line).
Neke od značajnijih osobina objekta tipa linije (line) su:
Color Boja linije.
LineStyle Oblik linije.
LineWidth Debljina linije.
Xdata Podaci po x-osi. Slične su osobine Ydata i Zdata
(ova posljednja kod naredbe plot3).
Parent Roditeljski koordinatni sistem.
Type Za ovaj grafički objekat 'line'.
Primjer 6.4.4 Nacrtati funkciju y=sin(x) za -2π≤x≤2π i podesiti širinu linije na 2 i
neka je grafik predstavljen bojom [0.3 0.8 1].
» x=-pi:0.02:pi;
» a=plot(x,sin(x));
» set(a,'LineWidth',2,'Color',[0.3 0.8 1])
6.4.2 POPUNJENI POLIGON - PATCH
164
MATLAB for Windows
Popunjeni poligon se dobija naredbama fill i fill3. Funkcija waterfall daje
više objekata tipa patch. Važne osobine ovih grafika su:
EdgeColor Boja granične linije.
FaceColor Boja površi.
LineWidth Debljina granične linije.
Type Za ovaj grafički objekat tip je 'patch'.
Naredbe Xdata, Ydata, Zdata, Children, Parent i ostale, analogne su kao
kod ostalih grafičkih objekata.
Primjer 6.4.5 Nacrtati funkciju y=sqrt(x) kao poligon popunjen crvenom bojom.
Zatim podesiti boje površine i granice, a debljinu granice postaviti na 5.
» x=1:20;
» a=fill(x,sqrt(x),'r')
a=
62.0001
» set(a,'FaceColor',[1 0.3 0.8],'EdgeColor',[0 0.3 0.8],'LineWidth',5)
6.4.3 POVR[INA - SURFACE
Objekat tipa površina (surface) se dobija kao rezultat sljedećih grafičkih
komandi: mesh, surf, pcolor. Tako|e se ovaj tip grafičkog objekta dobija kao prvi
objekat pri naredbama meshc i surfc.
EdgeColor Boja linija. Može imati i vrijednosti 'none', 'flat',
'interp' ili se može precizirati vrijednost boje kojom
se linije iscrtavaju. Ove vrijednosti imaju potpuno
isti smisao kao u naredbi shading.
FaceColor Boja površi unutar granica romba koji čine čvorišta
četiri susjedne tačke.
MeshStyle Mreža kojom se isacrtavaju mesh dijagrami.
'both' mreža po obje koordinate, 'row' samo po
redovima i 'column' samo po kolonama.
Primjer 6.4.6 Nacrtati surf dijagram z=sin(x2+y2+eps)/(x2+y2+eps) u granicama
-2≤x,y≤2. Definisati zatim boju površina izme|u linija kao crvenu 'r' i boju linija kao
[0 1 0.2].
» [x,y]=meshdom(-2:.1:2,-2:.1:2);
» z=sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
» a=surf(z)
165
Grafički objekti
» set(a,'Edgecolor',[0 1 0.2],'Facecolor','r')
6.4.4 KOLORNA SLIKA MATRICE - IMAGE
Ovaj tip grafičkog objekta se može kreirati naredbom imagesc. Tip
grafičkog objekta (Type) je image. Upravljanje sa ovim grafičkim objektom se
obavlja na sličan način kao sa line, surface i patch.
6.4.5 TEKSTUALNI OBJEKAT - TEXT
Tekstualni objekat se može kreirati naredbom text, i tom prilikom može se
nekoj promjenljivoj dodijeliti numerički identifikator ovog objekta
» a=text(30,30,1,'Naslov grafika')
Analogno prethodnom razmatranju, osobine ovog objekta se mogu dobiti
naredbom
» get(a)
Veliki broj osobina tekstualnog objekta je zajednički za ostale objekte.
Pomenimo neke specifične osobine ovog tipa objekata:
HorizontalAligment Horizontalno poravnavanje. Moguće vrijednost su
'left' (default), 'right' i 'center'.
VerticalAligment Vertikalno poravnavanje. Moguće vrijednosti 'top',
'bottom', 'cap', 'baseline' i 'middle' (default).
Rotation Ugao rotacije tekstualnog objekta.
Kod teksualnog objekta, postoji tako|e niz osobina koje se odnose na font.
Tip ovog objekta je 'text'.
Već je napomenuto da kada se kreiraju ose istovremeno se kreira i više
tekstualnih objekata (Title, Xlabel, Ylabel, Zlabel), čiji se numerički identifikator
može dobiti naredbom
» get(gca,'xlabel')
dok se osobine tekstualnog objekta dobijaju naredbom
» get(get(gca,'xlabel'))
odnosno sadržaj osobine FontSize sa
» get(get(gca,'xlabel'),'FontSize')
Analogno se mogu postavljati osobine ovakvog objekta sa
» set(get(gca,'xlabel'),'FontSize',20)

166
MATLAB for Windows

Primjer 6.4.7 Za 0≤x≤1 naredbom plot nacrtati funkciju y=exp(-x2)sin(x2). Nakon


toga unijeti xlabel-u sa sadržajem 'Potpis ispod crteža' u plavoj boji i podvučeno.
» x=0:0.01:1;
» y=exp(-x.^2).*sin(x.^2);
» plot(x,y)
» set(get(gca,'xlabel'),'String','Potpis ispod crteza','Color','b','FontUnderline','on')
6.5 GRAFI^KE KONTROLE

Naredba je karakteristika tekstualnog okruženja. Grafičko okruženje


podrazumjeva interaktivni rad, to jest da se niz operacija, parametara može
zadavati klikom miša na odgovarajuće grafičke kontrole. MATLAB tako|e podržava
ovu koncepciju. Grafičke kontrole koje se mogu koristiti u MATLAB-u su: frame
(površina), text (polje sa tekstom), edit (polje za unos teksta), popupmenu (meni),
check (prekidač), radio (prekidač), slider (klizač), pushbutton (taster). Grafičke
kontrole se formiraju naredbom uicontrol. Svakoj kontroli se pridružuje numerički
identifikator pomoću kojeg se upravlja kontrolom.
6.5.1 FRAME KONTROLA

Frame kontrola se koristi za iscrtavanje površine koja će da nosi ostale


kontrole. Ova kontrola sa default osobinama se formira naredbom
» a=uicontrol('Style','frame')
sa get(a) se dobijaju osobine ove kontrole. Sve osobine kontrola su iste samo što
od kontrole do kontrole neke od njih imaju drugačiju namjenu. Osobine ove
kontrole se postavljaju naredbom set. Važnije osobine ove kontrole su
BackgroundColor Boja površine;
Position Vektor sa četiri elementa čiji prvi par pokazuje
donji lijevi ugao a drugi par je dimenzija površine;
Style 'frame';
Units Veličina u kojoj se mjeri veličina površine;
Type 'uicontrol'.
Pored ovih postoji i niz drugih osobina za ovu kontrolu manje značajnih.
Primjer 6.5.1 Kreirati grafički prozor i na njemu unijeti frame kontrolu koja će služiti
kao nosilac ostalih kontrola.

167
Grafički objekti
» PrvaGP=figure('NumberTitle','off','Name','Program za 2-D prikaze',...
'Resize','off','Position',[6 6 628 412]);
» Frame1=uicontrol(PrvaGP,'Style','frame','Position',[400 1 340 410],...
'BackgroundColor',[0.62 0.22 0.40]);
6.5.2 TEXT KONTROLA

Text grafička kontrola se formira naredbom


» a=uicontrol('Style','text');
Važnije osobine ove kontrole su
BackgroundColor Boja pozadine;
ForegroundColor Boja slova;
HorizontalAlignment Horizontalno poravnavanje;
Position Pozicija kontrole;
String Tekst koji se upisuje u kontrolu;
Style 'text';
Units Mjerna veličina;
Type 'uicontrol';
Visible 'on' kontrola je vidljiva, 'off' kontrola je nevidljiva.
Primjer 6.5.2 Prethodno definisanu text kontrolu pozicionirati na početnu tačku
(200,200) širine i visine 100x20 pointa sa upisanim tekstom 'Proba' u žutoj boji
preko pozadine u crvenoj boji.
» set(a,'Position',[200 200 100 20],'BackgroundColor',[1 0 0],...
'ForegroundColor',[0 1 1],'String','Proba')
6.5.3 EDIT KONTROLA
Edit kontrola se kreira naredbom
» a=uicontrol('Style','edit');
gdje je a numerički identifikator pomoću kojeg se može upravljati kontrolom.
Značenje osobina BackgroundColor, ForegroundColor, HorizontalAlignment i Type
je isto kao kod text kontrole. Razlika ove i text kontrole se ogleda u činjenici što se
tekstualni sadržaj ove kontrole može mijenjati tako što se na nju klikne mišem i
unese novi tekst čime se mijenja sadržaj osobine string.
Primjer 6.5.3 Kreirajmo edit kontrolu u kojoj piše 'Pocetak' kliknimo na nju i upišimo
'Kraj'. Naredbom get pogledajmo zatim sadržaj String osobine kontrole

168
MATLAB for Windows
» a=uicontrol('Style','edit','Position',[120 200 100 20],'String','Pocetak')
» get(a,'String')
ans =
Kraj
Veoma važna osobine ove (pa i drugih kontrola) je Callback gdje se
upisuje niz naredbi koji će se izvršiti kada se aktivira ova kontrola. Na primjer u
edit kontrolu upišimo String1
» String1='Pocetak';
» a=uicontrol('Style','edit','Position',[120 200 100 20],...
'String',String1,'Callback','String1=get(a,''String'')')
a=
61.0001
Klikom na kontrolu i upisom stringa mjenja se i promjenljiva String1, npr.
neka se prvo upiše 'Nastavak', pa zatim 'Kraj'.
»
String1 =
Nastavak
String1 =
Kraj

Primijetimo da kada se javi potreba da se u okviru Callback koristi apostrof


ovdje se mora unijeti dvaput. Ako se sadržaj Callback stringa prostire u više redova
uokviruje se srednjim zagradama, redovi počiju apostrofom a završavaju
apostofom, pa se postavlja zarez i tri tačke pa novi red. Posljednji red završava se
apostrofom.
Primjer 6.5.4 Neka se u grafičkom prozoru unesu tekst kontrola sa promjenljivom
'N=' i edit kontrola u kojoj se u početku nalazi string '20'. Neka je početna vrijednost
promjenljive N=20 i neka se pomoću edit kontrole upisom brojeva u nju unosi i
mijenja sadržaj promjenljive N.
» N=20;
» uicontrol('Style','text','Position',[120 200 40 20],'String','N=')
» a=uicontrol('Style','edit','Position',[160 200 60 20],...
'String','20','Callback','N=str2num(get(a,''String''))')
Unesimo u edit kontrolu vrijednost 234 i pročitajmo sadržaj promjenljive N
N=
169
Grafički objekti
234
6.5.4 POPUPMENU KONTROLA
Ova kontrola se koristi za iscrtavanje menija u kojem se bira jedna od
ponu|enih opcija. Opcija koja je trenutno izabrana prikazana je u zatvorenom
meniju. Sa menijem se radi tako što se klikne na strelicu na dolje i izabere
odovarajuća opcija. Osobine BackgroundColor, ForegroundColor, Position, Units,
Callback, Type imaju isto značenje kao u dosadašnjim kontrolama. Osobina String
definiše sadržaj opcija kontrole dok je Style 'popupmenu'.
Primjer 6.5.5 U grafički prozor definisan primjerom 6.5.1 unijeti popupmenu koji
ima opcije 'mesh', 'surf', 'waterfall', 'contour', 'meshc', 'surfc', 'interp' i 'flat'.
Neka je početna vrijednost promjenljive Grafik=1 (što znači da je izabrana default
vrijednost - prva vrijednost u meniju 'mesh').
» Grafik=1;
» Menielementi=str2mat('mesh','surf','waterfall','contour',...
'meshc','surfc','interp','flat');
» Popup1=uicontrol(PrvaGP,'Style','popupmenu','String',Menielementi,...
'Position',[435 300 100 20],'Callback','Grafik=get(Popup1,''Value'');');
Otvorite meni i kliknite na 'surf', kako je u promjenljivu Grafik smješten
sadržaj Value osobine popupmenija ova promjenljiva uzima vrijednost 2.
» Grafik
Grafik =
2

6.5.5 RADIO KONTROLA


Ova kontrola je kružnog oblika. Aktivira se klikom na nju a istim postupkom
i deaktivira. Kada je kontrola aktivna ima upisan crni krug. Ovakve kontrole se
koriste u grupama i obično je samo jedna od njih aktivna. Klik na jednu od ovih
kontrola obično izaziva "gašenje" ostalih. Style ove kontrole je 'radio'.
Najznačajnija osobina ove kontrole je 'Value' koja ima vrijednost 0 ako prekidač
nije uključen i 1 u suprotnom.
Primjer 6.5.6 Kreirati u grafičkom prozoru iz prethodnog primjera dvije radio
kontrole koje jedna drugu isključuju, ujedno neka klik na prvu kontrolu (koja je u
početku uključena) prouzrokuje da promjenljiva SQRT uzme vrijednost 0 a klik na
drugu daje SQRT=1.

170
MATLAB for Windows
» SQRT=0;
» Radio1=uicontrol(PrvaGP,'Style','Radio','Position',...
[445 254 15 15],'Value',1,'Callback',...
'set(Radio1,''Value'',1);set(Radio2,''Value'',0);SQRT=0;',...
'Backgroundcolor',[0.8 0.8 0.8]);
» Radio2=uicontrol(PrvaGP,'Style','Radio','Position',...
[505 254 15 15],'Value',0,'Callback',...
'set(Radio2,''Value'',1);set(Radio1,''Value'',0);SQRT=1;',...
'Backgroundcolor',[0.8 0.8 0.8]);
6.5.6 CHECK KONTROLA
Check kontrola, slično kao radio, predstavlja prekidač. Razlika u odnosu
na radio kontrolu je ta što se ova kontrola koristi samostalno i predstavlja jednu
opciju sa dvije mogućnosti. Pravougaonog je oblika i kada je kontrola uključena u
njoj je upisan znak x. Po načinu rada ova kontrola je slična sa radio kontrolom.
6.5.7 SLIDER KONTROLA
U Windows okruženju veoma često se pojedine naredbe zadaju pomoću
klizača. U MATLAB-u klizač je kontrola sa stilom 'slider'. Izgled klizača prikazan je
na slici 6.1.

Slika 6.1 Klizač kontrola


Kvadratić na klizaču predstavlja trenutnu vrijednost neke veličine. Klikom
na strelice kvadratić se pomijera u jednom ili drugom pravcu. Klikom na površ
klizača oko kvadratića pomjeraj je nešto veći u datom smjeru, a kvadatić se može i
prevući do željene pozicije.
Osobine koje izdvajaju klizač od ostalih kontrola su
Max maksimalna vrijednost koja se može postići
klizačem. Klizač u krajnje desnoj ili gornjoj poziciji.
Default vrijednost ove osobine je 1.
Min minimalna vrijednost koja se može postići
klizačem. Klizač u krajnje lijevoj ili donjoj poziciji.
Default vrijednost 0.
Value vrijednost trenutne pozicije klizača izme|u Min i
Max.
171
Grafički objekti
Primjer 6.5.7 Povezati slider kontrolu sa edit kontrolom iz primjera 6.5.4. Neka se
promjena veličine M može obavljati klizačem i edit kontrolom i neka ove dvije
kontrole ažuriraju jedna na drugu.
» M=20;
» Tekst1=uicontrol(PrvaGP,'Style','text','Position',[405 390 25 15],...
'String','M=','Backgroundcolor',[0.8 0.8 0.8]);
» Edit1=uicontrol(PrvaGP,'Style','edit','Position',[427 390 30 15],...
'String','20','Callback',...
['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',...
'M=str2num(get(Edit1,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]);
» Slider1=uicontrol(PrvaGP,'Style','Slider','Position',[460 388 145 20],...
'min',20,'max',256,'Value',0,'Callback',...
'M=fix(get(Slider1,''value''));set(Edit1,''string'',num2str(fix(M)));');
6.5.8 PUSHBUTTON KONTROLA
Pushbutton je taster (dugme) u Windows okruženju čijim se pritiskom
odvija neka operacija. ^ak i ako ste relativno neiskusni Windows korisnik sreli ste
se sa velikim brojem ovih dugmadi na kojima najčešće piše OK, Help, Cancel, itd.
Nesumnjivo najznačajniji dio ove kontrole predstavlja Callback string.
Primjer 6.5.8 Kreirati pushbutton sa upisanim stringom 'Close' koji dovodi do
zatvaranja tekućeg grafičkog prozora. Ovaj pushbutton pridružiti prozoru čiji je
identifikator PrvaGP.
» PushClose=uicontrol(PrvaGP,'Style','pushbutton','Position',[550 20 60 30],...
'String','Close','Background',[0.8 0.8 0.8],'Callback','close(gcf);');
6.6 UIMENU

U dosadašnjem radu vidjeli smo da grafički prozor može biti sa


standardnim menijem ili bez njega. Dodatne opcije menija se mogu dodavati
naredbom uimenu. Oblik ove naredbe je
a=uimenu('Label','NaslovOpcije','Osobina1','Vrijednost1',...)
Numerički identifikator a služi za upravljanje ovom opcijom menija. U
okviru jedne opcije menija mogu se formirati podmeniji naredbom
b=uimenu(a,'Label','NaslovOpcije','Osobine','Vrijednosti',...)
172
MATLAB for Windows
gdje je a numerički identifikator menija a b je identifikator opcije tog menija. I meni
opisan identifikatorom b može posjedovati svoje podopcije.
Primjer 6.6.1 Dodati standardnom meniju grafičkog prozora PrvaGP meni Options i
u njemu nekoliko podopcija.
» Meni(1)=uimenu(PrvaGP,'Label','Options');
» Meni(2)=uimenu(Meni(1),'Label','Funkcija1');
» Meni(3)=uimenu(Meni(1),'Label','Funkcija2');
» Meni(4)=uimenu(Meni(1),'Label','Funkcija3');
» Meni(5)=uimenu(Meni(1),'Label','Izbor funkcije');
» Meni(6)=uimenu(Meni(1),'Label','Colormap');
gdje su podopcije Funkcija 1, Funkcija 2, Funkcija 3, Izbor funkcije i Colormap.
Uobičajeno sve opcije menija imaju u imenu jedno podvučeno slovo koje služi za
brzo startovanje opcije sa tastature. Ispred tog slova treba stavljati znak &.
Primjer 6.6.2 U prethodnom primjeru podvući različite karaktere koji služe za
startovanje opcija sa tastature.
» Meni(1)=uimenu(PrvaGP,'Label','&Options');
» Meni(2)=uimenu(Meni(1),'Label','Funkcija&1');
» Meni(3)=uimenu(Meni(1),'Label','Funkcija&2');
» Meni(4)=uimenu(Meni(1),'Label','Funkcija&3');
» Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije');
» Meni(6)=uimenu(Meni(1),'Label','&Colormap');
U ovom primjeru podvučeni su karakteri O, 1, 2, 3, I i C. Važnije osobine menija su:
Enable koja ima vrijednost 'on' ako se opcija menija može startovati, 'off' ako se
opcija ne može startovati, Position pozicija u meniju. Veoma često se jedan meni
dijeli u sekcije, skupine srodnih opcija, koje se dijele separatorima (linijama).
Separator je naziv istoimene opcije uimenu-a koja može biti uključena i isključena
('on' ili 'off'). Pored pojedinih trenutno aktivnih opcija postavlja se znak čekiranja √.
Ovo se podešava osobinom menija Checked koja može imati vrijednosti 'on' i 'off'.
Primjer 6.6.3 Opcije menija Funkcija 1, Funkcija 2, Funkcija 3 i Izbor funkcije čine
grupu i neka je na početku čekirana prva opcije i neka se me|usobno isključuju.
Meni(1)=uimenu(PrvaGP,'Label','&Options');
Meni(2)=uimenu(Meni(1),'Label','Funkcija&1','Checked','on','Callback',...
'set(Meni(2:5),''Checked'',''off'');set(Meni(2),''Checked'',''on'');');
Meni(3)=uimenu(Meni(1),'Label','Funkcija&2','Checked','off','Callback',...
173
Grafički objekti
'set(Meni(2:5),''Checked'',''off'');set(Meni(3),''Checked'',''on'');');
Meni(4)=uimenu(Meni(1),'Label','Funkcija&3','Checked','off','Callback',...
'set(Meni(2:5),''Checked'',''off'');set(Meni(4),''Checked'',''on'');');
Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije','Checked','off','Callback',...
'set(Meni(2:5),''Checked'',''off'');set(Meni(5),''Checked'',''on'');');
Meni(6)=uimenu(Meni(1),'Label','&Colormap','Separator','on');
Vidimo da i ovaj grafički objekat ima Callback string kojim se može pozvati
niz operacija aktiviranjem datog objekta.
6.7 INTERAKTIVNI PROGRAM ZA CRTANJE 2-D CRTE@A
U ovom programu će biti prezentiran program D2CRTEZ.M u kojem će se
crtati funkcija z=f(x,y) -2π≤x,y≤2π, i koji predstavlja sublimat primjera iz ove glave.
U okviru grafičkog prozora može se izabrati oblik 2-D crteža kao i broj odbiraka po
x i y osi (M i N). Izbor tipa grafičkog predstavljanja se obavlja pomoću popupmenu
kontrole. Podešavanje broja odbiraka se obavlja paralelno pomoću slider i edit
kontrole. Dvije radio kontrole se koriste da bi se preciziralo da li se crta funkcija
z=f(x,y) ili kvadratni korijen funkcije. Pored 2-D crteža paralelno sa stranicama
ovog crteža može se crtati funkcije sum(z) i sum(z'). Izbor da li će ovi crteži biti
prikazani se obavlja sa dvije check kontrole. U frame-u postoje i tri push dugmeta:
Start - za početak crtanja grafika, Print - smještanje grafičkog prozora u Clipboard i
Close za zatvaranje grafičkog prozora. U meniju grafičkog prozora dodata je opcija
Options u kojoj se bira funkcija koja se crta (tri predefinisane ili sa Izbor funkcije
upisom funkcije u otvorenom pomoćnom grafičkom prozoru) i kolorne mape
prikaza (Colormap).
Program se sastoji od definicije grafičkog prozora (D2CRTEZ.M),
programa sa definicijom pomoćnog grafičkog prozora (POMOCNI.M), fajl sa
definicijama funkcija (FUNK.M) i program u kome se vrši proračun i crtanje funkcije
z=f(x,y) (CRTANJE.M).
6.7.1 PROGRAM D2CRTEZ.M
Nakon brisanja sadržaja radnog prostora, postavljaju se inicijalne
vrijednosti N i M (broja odbiraka po x i y), Grafik (definiše tip grafičkog prikaza -
predefinisano Grafik=1 - mesh), SQRT (za SQRT=0 crta se funkcija z=f(x,y) a za
SQRT=1 crta se z=f1/2(x,y)), promjenljiva definiše funkciju koja se crta (vrijednosti
od 1 do 3 predefinisane vrijednosti i 4 definiše neku fukciju definisanu od
korisnika), Paleta je kolorna mapa koja se koristi (predefinisano 'hsv'), Broj

174
MATLAB for Windows
promjenljiva u kojoj se smješta broj iscrtavanja funkcija, NovaFunkcija predstavlja
od korisnika definisanu funkciju
clear all;
M=20;
N=20;
Grafik=1;
SQRT=0;
Funkcija=1;
PaLeTa='hsv';
Broj=0;
NovaFunkcija='exp(-x.^2-y.^2)';
Zatim definišimo grafički prozor (PrvaGP) i frame kontrolu koja će biti
podloga ostalih kontrola (primjer 6.5.1)
PrvaGP=figure('NumberTitle','off','Name','Program za 2-D prikaze',...
'Resize','off','Pointer','watch','Position',[6 6 628 412],'Color',[0 0 0.2]);
Frame1=uicontrol(PrvaGP,'Style','frame','Position',[400 1 340 410],...
'BackgroundColor',[0.62 0.22 0.40]);
Za definisanje broja odbiraka po x i y (M i N) koriste se dva para slider,
edit i text kontola kao u primjeru 6.5.7
Tekst1=uicontrol(PrvaGP,'Style','text','Position',[405 390 25 15],...
'String','M=','Backgroundcolor',[0.8 0.8 0.8]);
Edit1=uicontrol(PrvaGP,'Style','edit','Position',[427 390 30 15],...
'String','20','Callback',...
['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',...
'M=str2num(get(Edit1,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]);
Slider1=uicontrol(PrvaGP,'Style','Slider','Position',[460 388 145 20],...
'min',20,'max',256,'Value',0,'Callback',...
'M=fix(get(Slider1,''value''));set(Edit1,''string'',num2str(fix(M)));');
Tekst2=uicontrol(PrvaGP,'Style','text','Position',[405 350 25 15],...
'String','N=','Backgroundcolor',[0.8 0.8 0.8]);
Edit2=uicontrol(PrvaGP,'Style','edit','Position',[427 350 30 15],...
'String','20','Callback',...
['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',...
'N=str2num(get(Edit2,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]);
Slider2=uicontrol(PrvaGP,'Style','Slider','Position',[460 348 145 20],...
175
Grafički objekti
'min',20,'max',256,'Value',0,'Callback',...
'N=fix(get(Slider2,''value''));set(Edit2,''string'',num2str(fix(N)));');

U popupmenu-u bira se način grafičkog prikaza (primjer 6.5.5)

Menielementi=str2mat('mesh','surf','waterfall','contour',...
'meshc','surfc','interp','flat');
Popup1=uicontrol(PrvaGP,'Style','popupmenu','String',Menielementi,...
'Position',[435 300 100 20],'Callback','Grafik=get(Popup1,''Value'');');

Dvije radio kontrole definišu vrijednost promjenljive SQRT

Tekst3=uicontrol('Style','text','Position',[405 254 40 15],'String','SQRT',...


'BackgroundColor',[0.8 0.8 0.8]);
Tekst4=uicontrol('Style','text','Position',[445 254 40 15],'String','Da',...
'BackgroundColor',[0.8 0.8 0.8]);
Radio1=uicontrol(PrvaGP,'Style','Radio','Position',...
[485 254 15 15],'Value',1,'Callback',...
'set(Radio1,''Value'',1);set(Radio2,''Value'',0);SQRT=1;',...
'Backgroundcolor',[0.8 0.8 0.8]);
Tekst5=uicontrol('Style','text','Position',[505 254 40 15],'String','Ne',...
'BackgroundColor',[0.8 0.8 0.8]);
Radio2=uicontrol(PrvaGP,'Style','Radio','Position',...
[545 254 15 15],'Value',0,'Callback',...
'set(Radio2,''Value'',1);set(Radio1,''Value'',0);SQRT=0;',...
'Backgroundcolor',[0.8 0.8 0.8]);
i ispod toga dvije check kontrole definišu crtanje 1-D grafika plot(sum(z)) i
plot(sum(z'))
Tekst6=uicontrol('Style','Text','String','plot(sum(z))','Position',[405 204 70 15],...
'BackgroundColor',[0.8 0.8 0.8]);
Check1=uicontrol('Style','Check','Position',[475 204 15 15],...
'BackgroundColor',[0.8 0.8 0.8]);
Tekst7=uicontrol('Style','Text','String','plot(sum(z''))','Position',[495 204 75 15],...
'BackgroundColor',[0.8 0.8 0.8]);
Check2=uicontrol('Style','Check','Position',[570 204 15 15],...
'BackgroundColor',[0.8 0.8 0.8]);
176
MATLAB for Windows
Na dnu frame kontrole nalaze se tri pushbuttona. Start poziva program
CRTANJE.M,
PushStart=uicontrol(PrvaGP,'Style','pushbutton','Position',[410 20 60 30],...
'String','Start','Background',[0.8 0.8 0.8],'Callback','crtanje');
Print smješta sadržaj grafičkog prozora u Clipboard
PushPrint=uicontrol(PrvaGP,'Style','pushbutton','Position',[480 20 60 30],...
'String','Print','Background',[0.8 0.8 0.8],'Callback','print -dmeta');
dok Close zatvara grafički prozor i u MATLAB-ovom komandnom prozoru prikazuje
broj izvršenih grafičkih prikaza
PushClose=uicontrol(PrvaGP,'Style','pushbutton','Position',[550 20 60 30],...
'String','Close','Background',[0.8 0.8 0.8],'Callback',...
'close(gcf);disp([''Bilo je '',num2str(Broj),'' izracunavanja''])');
Standardni MATLAB meni je naredbom
Meni(1)=uimenu(PrvaGP,'Label','&Options');
proširen sa menijem Options, dok se naredbama
Meni(2)=uimenu(Meni(1),'Label','Funkcija&1','Checked','on','Callback',...
'Funkcija=1;set(Meni(2:5),''Checked'',''off'');set(Meni(2),''Checked'',''on'');');
Meni(3)=uimenu(Meni(1),'Label','Funkcija&2','Checked','off','Callback',...
'Funkcija=2;set(Meni(2:5),''Checked'',''off'');set(Meni(3),''Checked'',''on'');');
Meni(4)=uimenu(Meni(1),'Label','Funkcija&3','Checked','off','Callback',...
'Funkcija=3;set(Meni(2:5),''Checked'',''off'');set(Meni(4),''Checked'',''on'');');
Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije','Checked','off','Callback',...
'pomocni;');
ovaj meni proširuje opcijama Funkcija 1, Funkcija 2, Funkcija 3 i Izbor Funkcije.
Klik na prve tri funkcije definiše crtanje predefinisanih funkcija, dok klik na četvrtu
otvara prozor u kome korisnik može unijeti proizvoljnu funkciju koja se želi nacrtati.
Prilikom izbor četvrte opcije poziva se program POMOCNI.M. Opcija Colormap
otvara dodatni meni u kome se može izabrati kolorna mapa za crtanje podataka
Meni(6)=uimenu(Meni(1),'Label','&Colormap','Separator','on');
Meni(7)=uimenu(Meni(6),'Label','&hsv','Checked','off','Callback',...
['PaLeTa=''hsv'';set(Meni(7:11),''Checked'',''off'');',...
'set(Meni(7),''Checked'',''on'');']);
Meni(8)=uimenu(Meni(6),'Label','&gray','Checked','off','Callback',...
177
Grafički objekti
['PaLeTa=''gray'';set(Meni(7:11),''Checked'',''off'');',...
'set(Meni(8),''Checked'',''on'');']);
Meni(9)=uimenu(Meni(6),'Label','h&ot','Checked','on','Callback',...
['PaLeTa=''hot'';set(Meni(7:11),''Checked'',''off'');',...
'set(MENU(9),''Checked'',''on'');']);
Meni(10)=uimenu(Meni(6),'Label','&cool','Checked','off','Callback',...
['PaLeTa=''cool'';set(Meni(7:11),''Checked'',''off'');',...
'set(Meni(10),''Checked'',''on'');']);
Meni(11)=uimenu(Meni(6),'Label','&jet','Checked','off','Callback',...
['PaLeTa=''jet'';set(Meni(7:11),''Checked'',''off'');',...
'set(Meni(11),''Checked'',''on'');']);
Na kraju programa pokazivač miša se postavlja na strelicu, čime se
omogućuje rad sa objektima unutar grafičkog prozora.
set(PrvaGP,'Pointer','arrow');
Na slici 6.2 je prikazan osnovni grafički prozor sa kontrolama.

Slika 6.2 Izgled grafičkog prozora sa kontrolama


6.7.2 PROGRAM ZA PRORA^UN I CRTANJE - CRTANJE.M

Oblast nezavisno promjenljive se definiše naredbom


[x,y]=meshdom(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi);

178
MATLAB for Windows
U zavisnosti da li je funkcija jedna od tri predefinisane, ili se uzima od
korisnika definisana, i uzimajući u obzir promjenljivu SQRT računa se funkcija
z=f(x,y)
if(SQRT==0&Funkcijač=4)
z=funk(x,y,Funkcija);
elseif(SQRT==1&Funkcijač=4)
z=sqrt(funk(x,y,Funkcija));
elseif(SQRT==0&Funkcija==4)
eval(['z=',NovaFunkcija,';']);
else
eval(['z=',NovaFunkcija,';']);
z=sqrt(z);
end
Ako je prethodno već bilo crtanja promjenljiva Broj je veći od nule pa treba
izbrisati tekuće ose i tekuće grafike (čiji se numerički identifikatori čuvaju u
promjenljivim Graf i Ose)
if(Broj>0)
delete(Graf);
set(Ose,'Visible','off');
end
Zatim se postavlja odgovarajuća kolorna mapa i veličina osa
colormap(PaLeTa);
Ose=axes('Position',[0.25 0.12 0.35 0.5]);
U zavisnosti od izbora tipa grafičkog prikaza u popupmeniju crta se
odgovarajući 2-D grafik uz istovremeno smještanje novokreiranih grafičkih objekata
u promjenljivu Graf
if(Grafik==1)
Graf=mesh(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
elseif(Grafik==2)
Graf=surf(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
elseif(Grafik==3)
Graf=waterfall(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
elseif(Grafik==4)
[priv,Graf]=contour(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
elseif(Grafik==5)
179
Grafički objekti
Graf=meshc(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
elseif(Grafik==6)
Graf=surfc(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
else
Graf=pcolor(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z);
if(Grafik==7)
shading interp;
elseif(Grafik==8)
shading flat;
end
end

Za različite tipove grafika na razne načine se definišu granice axis i pogled


na grafik view
if(Grafik==1|Grafik==2|Grafik==3)
view([10 80])
axis([-2*pi 2*pi -2*pi 2*pi min(min(z)) max(max(z))])
elseif(Grafik==5|Grafik==6)
view([10 50])
axis([-2*pi 2*pi -2*pi 2*pi min(min(z)) max(max(z))])
else
axis([-2*pi 2*pi -2*pi 2*pi])
end
U zavisnosti od sadržaja check kontrola vrši se crtanje 1-D grafika uz
dopunjavanje vektora u kojem se čuvaju ose (Ose) i vektora sa grafikom (Graf)
if(get(Check1,'Value')==1)
Ose=[Ose;axes('Position',[0.25 0.76 0.35 0.2])];
Graf=[Graf;plot(-2*pi:4*pi/M:2*pi,sum(z))];
axis([-2*pi 2*pi min(sum(z)) max(sum(z))])
end
if(get(Check2,'Value')==1)
Ose=[Ose;axes('Position',[0.05 0.12 0.15 0.5])];
Graf=[Graf;plot(sum(z'),-2*pi:4*pi/N:2*pi)];
axis([min(sum(z')) max(sum(z')) -2*pi 2*pi])
end
Na kraju ovog programa inkrementira se broj izračunavanja

180
MATLAB for Windows
Broj=Broj+1;
Na slici 6.3 dat je grafik na kojem je data prva predefinisana funkcija. Svi
parametri grafika se mogu sa njega pročitati.

Slika 6.3 Grafički prozor sa dijagramima


6.7.3 POMO]NI PROZOR - POMOCNI.M
U okviru ovog programa koji je realizovan kao skript fajl korisnik programa
može da izabere proizvoljnu funkciju. Sadržaj ove funkcije se smješta u
promjenljivu NovaFunkcija. Početna funkcija je, kao što smo već vidjeli, z=exp(-x2-
y2). Ovaj prozor se sastoji od text kontrole u kojoj je piše f(x,y), edit kontrole u kojoj
se po MATLAB pravilima zapisuje funkcija dvije promjenljive i dvije pushbutton
kontrole. OK kojom se potvr|uje izbor funkcije i Cancel kojom se poništava.
Na početku ovog programa crta se grafički prozor bez menija i sa
naslovom 'Unos 2-D funkcije'
DrugiGP=figure('Position',[60 300 500 65],'NumberTitle','off','Name',...
'Unos 2-D Funkcije','Resize','off','Pointer','watch','Color',...
[0.95 0.95 0.95],'InvertHardcopy','off','Menubar','none');
Klik na OK dovodi do potvrde opcije Izbor funkcije u Options meniju,
postavlja vrijednost promjenljive Funkcija na 4, u promjenljivu NovaFunkcija
smješta sadržaj edit kontrole i potom zatvara pomoćni grafički prozor
OK1=uicontrol(DrugiGP,'Style','Pushbutton','Position',...
[130 10 70 20],'String','OK','Enable','off','Callback',...
['NovaFunkcija=get(Edit3,''String'');set(Meni(2:5),''Checked'',''off'');',...
'set(Meni(5),''Checked'',''on'');Funkcija=4;close(gcf)']);

181
Grafički objekti
Cancel zatvara ovaj grafički prozor bez promjene ostalih parametara
Cancel=uicontrol(DrugiGP,'Style','Pushbutton','Position',...
[245 10 70 20],'String','Cancel','Enable','off','Callback','close(gcf);');
Definicija text i edit kontrole je
Tekst8=uicontrol(DrugiGP,'Style','Text','Position',[20 38 40 15],'String',...
'f(x,y)=','BackgroundColor',[0 0 0.8],'ForegroundColor',[1 1 1]);
Edit3=uicontrol(DrugiGP,'Style','Edit','Position',[58 38 400 15],...
'String',NovaFunkcija,'BackgroundColor',[0 0 0.8],'ForegroundColor',[1 1 1]);

Tokom crtanja pomoćnog grafičkog prozora onemogućena je upotreba


miša što se ostvaruje naredbama
set([OK1 Cancel],'Enable','on');
set(gcf,'Pointer','arrow');
Na slici 6.4 prikazan je pomoćni grafički prozor.

Slika 6.4 Pomoćni grafički prozor


6.7.4 POTPROGRAM FUNK.M
U ovom funkcijskom programu nalaze se tri predefinisane funkcije čiji se
izbor obavlja na osnovu promjenljive Izbor. Predefinisane funkcije su
z=f(x,y)=sin(x2+y2+eps)/(x2+y2+eps), z=f(x,y)=xy sin(x2+y2+eps)/(x2+y2+eps),
z=f(x,y)=x2-y2
Rezultat ovog fajla vraća se programu CRTANJE.M. Sadržaj potprograma
FUNK.M je
function z=funk(x,y,Izbor);
if(Izbor==1)
z=sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
elseif(Izbor==2)
182
MATLAB for Windows
z=x.*y.*sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps);
elseif(Izbor==3)
z=x.^2-y.^2;
end

183
MATLAB for Windows

glava sedma

POLINOMI I OBRADA SIGNALA


U ovoj glavi obra|eni su polinomi, odnosno mogućnosti MATLAB-a u radu
sa polinomima. U drugom dijelu su opisane funkcije za obradu signala, me|u
kojima najznačajnije mjesto zauzima brza Fourierova transformacija.
7.1. POLINOMI

7.1 DEFINISANJE POLINOMA

Polinom n-tog reda možemo predstaviti u obliku:


y=c(1)xn+c(2)xn-1+ ... +c(n)x+c(n+1)
Tako predstavljen polinom je odre|en svojim koeficijentima c(i), i=1,2,..,(n+1).
Koeficijenti se u MATLAB-u mogu zapisati u obliku vektora, pa se i polinom može
predstaviti vektorom čiji su članovi koeficijenti polinoma.
Primjer 7.1.1 Polinom y=2x4-3x3+x se zapisuje vektorom:
» c=[2 -3 0 1 0]
Nule polinoma čiji su koeficijenti u vektoru c, dobijaju se naredbom
roots(c). U prethodnom primjeru dobijamo:
» p=roots(c)
p=
0
1.0000 + 0.0000i
1.0000 - 0.0000i
-0.5000
Polinom se može zadati i preko nula, odnosno u faktorizovanom obliku:
y=(x-n(1))(x-n(2))...(x-n(i))
Koeficijenti polinoma se dobijaju naredbom poly(n).
Primjer 7.1.2 Odrediti koeficijente polinoma y=(x-1)(x-3)(x+1)(x-2).
185
Polinomi i obrada signala
» n=[1 3 -1 2];
» c=poly(n)
c=
1 -5 5 5 -6
Može se pokazati da ove naredbe usljed primjenjenih algoritama pokazuju
odre|ena odstupanja. Tako, naredbom roots(poly(x)) trebao bi da se dobije
polazni vektor; usljed akumulisanja greške pri računanju, rezultati se ponekad ne
podudaraju.
Primjer 7.1.3 Polinom je zadat sa dvadeset nula od jedan do dvadeset. Naći
koeficijente ovog polinoma i korijene.
» roots(poly(1:20))
ans =
20.0005
18.9954
18.0191
16.9470
16.0877
14.8824
14.1120
12.9259
12.0424
10.9836
10.0051
8.9989
8.0002
7.0000
6.0000
5.0000
4.0000
3.0000
2.0000
1.0000
7.1.2. KARAKTERISTI^NI POLINOM I SOPSTVENE VRIJEDNOSTI
MATRICE

Ulazni argument naredbe poly može biti i matrica. U tom slučaju poly(a)
daje koeficijente karakterističnog polinoma matrice a. Ako je matrica a data sa:
186
MATLAB for Windows

⎡ a (11
, ) a (1,2) L a (1, n) ⎤
⎢ a (2,1) a (2,2) L a (2, n) ⎥⎥
a=⎢
⎢ M M O M ⎥
⎢ ⎥
⎣ a (n,1) a (n,2) L a ( n, n) ⎦

onda je njen karakteristični polinom:


, )−λ
a (11 a (1,2) L a (1, n)
a (2,1) a (2,2) − λ L a ( 2, n)
p( λ ) =
M M O M
a (n,1) a (n,2) L a ( n, n) − λ
Sopstvene vrijednosti matrice su jednake nulama karakterističnog
polinoma.
Primjer 7.1.4 Odrediti koeficijente karakterističnog polinoma matrice a, kao i njene
sopstvene vrijednosti.
⎡ 1 2 − 1⎤
a = ⎢⎢ 2 4 7 ⎥⎥
⎢⎣ − 3 1 2 ⎥⎦

» a=[1 2 -1;2 4 7;-3 1 2];


» poly(a)
ans =
1.0000 -7.0000 0.0000 63.0000
» lambda=roots(ans)
lambda =
4.7831 + 1.2927i
4.7831 - 1.2927i
-2.5663
7.1.3 MNO@ENJE POLINOMA

Dva polinoma čiji su koeficijenti zadati vektorima c1, odnosno c2, se


množe naredbom conv(c1,c2).
Primjer 7.1.5 Pomnožiti polinome:

187
Polinomi i obrada signala
y1=x3+2x2-3x i y2=-2x4+3x2+5x+4
Polinom y=y1*y2 ima koeficijente c koji su:
» c1=[1 2 -3 0];
» c2=[-2 0 3 5 4];
» c=conv(c1,c2)
c=
-2 -4 9 11 5 -7 -12 0
pa je:
y=y1*y2=-2x7-4x6+9x5+11x4+5x3-7x2-12x
Više polinoma se mogu množiti uzastopnom primjenom naredbe conv.

7.1.4 IZRA^UNAVANJE POLINOMA

Vrijednost polinoma se može izračunati za vrijednosti x (x može biti skalar


ili vektor) naredbom polyval(c,x). Ako je x skalar onda se izračunava vrijednost
polinoma za dato x, a ako je x vektor onda se izračunava vrijednost polinoma za
svaki element x-a.
Primjer 7.1.6 Nacrtati funkciju y koja je jednaka polinomu 4-tog reda sa nulama
[1 3 -1 2 3], u intervalu -1≤x≤4.
» n=[1 3 -1 2 3];
» c=poly(n)
c=
1 -8 20 -10 -21 18
» x=-1:.1:4;
» y=polyval(c,x);
» plot(x,y)
Ako želimo izračunati polinom čiji su elementi x matrice, onda se to postiže
naredbom polyvalm(c,x).
Primjer 7.1.7 Izračunati vrijednost polinoma y=2x2-x+1, ako je x matrica:

⎡ 1 3⎤
x=⎢ ⎥
⎣2 7⎦

188
MATLAB for Windows

» x=[1 3;2 7];


» y=polyvalm([2 -1 1],x)
y=
14 45
30 104
7.1.5 DIJELJENJE POLINOMA
Posmatrajmo količnik dva polinoma y1 i y2 čiji su koeficijenti definisani
vektorima c1 i c2.
c1(1) x n + c1(2) x n−1 + ...+ c1( n) x + c1( n + 1)
y=
c2(1) x m + c2(2) x m−1 + ...+ c1( m) x + c1(m + 1)
Ukoliko je stepen brojioca veći ili jednak od stepena imenioca, onda je prethodni
izraz moguće transformisati u:
y1( x ) r ( x)
y= = + q( x)
y 2( x ) y 2( x )
gdje je q(x) količnik polinoma y1 i y2, a r(x) ostatak.
Koeficijenti polinoma q(x) i p(x) se dobijaju naredbom [r,q]=deconv(y1,y2).
Primjer 7.1.8 Podijeliti polinome čiji su koeficijenti zadati vekorima c1 i c2.
» c1=[1 2 -3 0];
» c2=[-2 0 3 5 4];
» [q,r]=deconv(c2,c1)
q=
-2 4
r=
0 0 -11 17 4
[to znači da je:
− 2 x 4 + 3x 2 + 5x + 4 − 11x 2 + 17 x + 4
= − 2x + 4
x 3 + 2 x 2 − 3x x 3 + 2 x 2 − 3x

7.1.6 RAZVOJ U RACIONALNE RAZLOMKE

189
Polinomi i obrada signala
Naredbom residue odre|ujemo polove, koeficijente razvoja i slobodni član
pri razvoju količnika dva polinoma c1 i c2 u racionalne razlomke.
c1( x ) r (1) r ( 2) r ( n)
= + + ...+ + k ( x)
c2( x ) x − p(1) x − p(2) x − p( n)
Primjer 7.1.9 Razviti u racionalne razlomke izraz:
1
x − 9 x + 25x − 15x 2 − 26 x + 24
5 4 3

» c1=1;
» c2=[1 -9 25 -15 -26 24];
» [r,p,k]=residue(c1,c2)
r=
0.0333
-0.1250
0.1667
-0.0833
0.0083
p=
4.0000
3.0000
2.0000
1.0000
-1.0000
k=
[]
Primjer 7.1.10 Ponoviti prethodni primjer ako je u brojiocu x7.
» c1=[1 0 0 0 0 0 0 0];
» c2=[1 -9 25 -15 -26 24];
» [r,p,k]=residue(c1,c2)
r=
546.1333
-273.3750
21.3333
-0.0833
-0.0083
p=
4.0000
190
MATLAB for Windows

3.0000
2.0000
1.0000
-1.0000
k=
1 9 56
Može se ostvariti i inverzna operacija. Na osnovu razvoja, definisanog sa r,
p, k, oblik količnika dva polinoma dobija se sa
» [c1,c2]=residue(r,p,k)
7.1.7 INTERPOLACIJA POLINOMOM
Polinom n-tog reda, koji aproksimira podatke date u vektorima x i y u
smislu najmanjih kvadrata, dobija se naredbom c=polyfit(x,y,n).
Primjer 7.1.11 Odrediti polinom 4-tog reda koji aproksimira podatke date vektorima
x i y, a zatim nacrtati dobijeni polinom za date podatke.
» x=[.1 .3 .4 .44 .5 .7 .8];
» y=[1 1.5 1.6 1.4 1.1 1.1 1.5];
» c=polyfit(x,y,4)
c=
13.2447 1.3735 -20.3555 10.3114 0.1641
» xf=.1:.01:.8;
» yf=polyval(c,xf);
» plot(xf,yf,x,y,'o')
Proceduru fitovanja i crtanja krivih i podataka možemo napraviti koristeći
funkcijski fajl. Napravićemo fajl interpol.m.
function interpol(x,y,n,znak,ni)
% interpol(x,y,n,znak,ni) interpolira podatke x i y polinomima
% n-tog reda i crta ih.Vrijednosti x i y crta simbolom definisanim
% u znak. Polinom se izracunava u ni tacaka i crta punom linijom
% interpol(x,y,n,znak) uzima automatski ni=100
% interpol(x,y,n) uzima automatski znak='*' i ni=100
%
c=polyfit(x,y,n)
if nargin<5
ni=100;
191
Polinomi i obrada signala
end
xp=min(x):(max(x)-min(x))/ni:max(x);
yp=polyval(c,xp);
if nargin==3
znak='*';
end
plot(x,y,znak,xp,yp)
end
Primjer 7.1.12 Interpolirati podatke x i y polinomom 5-tog reda.
» x=[0 0.11 0.24 0.29 0.35 0.58 0.79 0.95];
» y=[0.1 0.46 0.95 1.67 2.38 2.22 1.54 1.03];
» interpol(x,y,5)
2.5

1.5

0.5

0
0 0.2 0.4 0.6 0.8 1

Slika 7.1 Podaci i fitovana kriva iz primjera 7.1.12


7.2 OBRADA SIGNALA
Sve funkcije sa kojima smo do sada radili bile su diskretne, iako se lako
desi da zaboravimo na njihovu prirodu, posmatrajući njihove kontinualne grafike na
ekranu. U svim slučajevima smo, bilo radi odre|enog računanja, bilo radi crtanja,
zadavali diskretne vrijednosti nezavisno promjenljive (najčešće x od xmin do xmax
sa odre|enim korakom diskretizacije). Pojedine primjere obrade signala smo već i
do sada upoznali: nalaženje maksimalnog i minimalnog elementa, sortiranje,
nalaženje srednje vrijednosti niza, standardne devijacije, izvoda, integrala... Pored
tih, reklo bi se opštih funkcija za obradu nizova, odnosno signala, postoji i niz
posebnih funkcija namijenjenih obradi diskretnih signala, predstavljenih u obliku
nizova (vektora). U tabeli 7.1 daćemo samo one koje se nalaze u osnovnom
MATLAB-u. Dodatne, specijalizovane funkcije za obradu signala se mogu
instalisati u okviru SIGNAL TOOLBOX-a.
192
MATLAB for Windows

Funkcije za obradu signala


fft brza Fourierova transformacija
ifft inverzna brza FT
fftshift preure|ivanje rezultata FFT
fft2 dvodimenziona FFT
ifft2 inverzna dvodimenziona FFT
conv konvolucija signala
conv2 dvodimenziona konvolucija signala
deconv dekonvolucija
cov kovarijansa
filter direktna realizacija diskretnog sistema
freqz frekventni odziv diskretnog sistema
freqs frekventni odziv analognog sistema
xcorr kroskorelaciona funkcija
xcorr2 dvodimenziona kroskorelaciona funkcija

Tabela 7.1. Funkcije za obradu signala


7.2.1 FOURIEROVA ANALIZA
7.2.1.1 Teorijski pregled
Kratko ćemo se osvrnuti na osnovne elemente Fourierove analize.
Periodičnu funkciju sa periodom 2l možemo razviti u Fourierov red (pod uslovom
da su zadovoljeni Dirichletovi uslovi):

f ( x) = ∑Fe
k =−∞
k
jkxπ / l

gdje su Fourierovi koeficijenti


2l

Fk = 1
2l ∫ f ( x )e
0
− jkxπ / l
dx

Aproksimacija ove vrijednosti može se ostvariti zamjenom integrala sa sumom,


korišćenjem pravougaonog pravila.
N

Fk ≅ ∑ f (n∆x)e
n =1
− jk∆xπ / l
∆x

193
Polinomi i obrada signala

gdje je ∆x korak odabiranja koji bi, po teoremi o odabiranju, trebao biti ∆x≤1/fm,
gdje je fm maksimalna frekvencija u signalu f(x). Pošto je broj odbiraka signala,
unutar periode 2l, jednak N, to je l/∆x=N/2. Uzimajući da je f(n)=f(n∆x) ∆x/2l,
dobijamo:
N

Fk ≅ ∑ f$(n)e − jk∆xπ / l
n =1

što je, po definiciji, diskretna Fourierova transformacija. Prema tome, koeficijenti


Fourierovog reda mogu se aproksimirati vrijednostima diskretne Fourierove
transformacije signala f(n)=f(n∆x)∆x/2l. Rednom broju odbirka k odgovara
učestanost:
k⎯
⎯→ ω = kπ / l = 2 kπ / ( N∆x)
i to samo za k≤N/2. Za k veće od N/2 dobijaju se preslikane negativne učestanosti.
Na sličan način se mogu dobiti i odbirci Fourierove transformacije
neperiodičnog signala koja ima oblik:

F ( jω ) = ∫ f ( x )e
− jωx
dx
−∞

Uzimajući da je signal bitno različit od nule samo u intervalu od 0 do 2l i


zamjenjujući integral sumom, dobijamo:
N

F ( jω ) = ∑ f (n∆x)e
n =1
− jωn∆x
∆x

Odbirke Fourierove transformacije za ω=k∆ω dobijamo kao:

∑ ~f (n)e
N N

F (k ) = ∑n =1
f (n∆x )e − jk∆ωn∆x ∆x =
n =1
− jkn 2 π / N

gdje je f(n)=f(n∆x)∆x, a znamo da je ∆ω∆x=2π/N.


Ponovo smo dobili da se odbirci Fourierove transformacije mogu
aproksimirati diskretnom Fourierovom transformacijom. Rednom broju odgovara
učestanost:
k⎯
⎯→ ω = 2 kπ / ( N∆x )

7.2.1.2 Računanje
Diskretna Fourierova transformacija signala označenog sa f (čije
vrijednosti su elementi vektora f) za razne vrijednosti k računa se po standardnom
194
MATLAB for Windows

algoritmu razbijanja po frekvenciji naredbom fft(f). Ovaj algoritam se primjenjuje za


broj odbiraka koji je stepen broja 2, N=2m (N=4, 8, 16, 32, 64, 128, 256,...). U
slučaju da je broj odbiraka različit od ovog broja primjenjuje se sporiji algoritam
direktnog izračunavanja. Postoji i drugi oblik naredbe za izračunavanje Fourierove
transformacije fft(f,M) gdje se, ako je M>length(f), vrši dopunjavanje signala
nulama (zero padding), a za M<length(f) vrši se odsijecanje signala do dužine M.
Za M=length(f) naredba fft(f,M) je ista kao naredba fft(f).
Dopunjavanje nulama ne utiče na oblik Fourierove transformacije, već
samo na gustinu odabiranja. Kod Fourierovog reda dolazi do promjene periode, pa
time i rasporeda harmonika.

7.2.1.3 Preure|ivanje rezultata


Pošto su rezultati dobijeni tako da samo do N/2 imaju prirodni raspored, to
ih je radi crtanja neophodno preurediti. To se ostvaruje naredbom fftshift(F) gdje
je F već izračunata Fourierova transformacija signala f. U skladu sa preure|ivanjem
potrebno je prenumerisati i frekventnu osu.
Primjer 7.2.1 Odrediti koeficijente Fourierovog reda funkcije date na slici 7.2.
0.016

0.014

0.012

0.01

0.008

0.006

0.004

0.002

0
-4 -2 0 2 4 6 8

Slika 7.2. Periodični signal f(x)


Prvo treba odrediti korak odabiranja (imajući u vidu teoremu o odabiranju). Broj
odbiraka unutar periode je jednak broju koeficijenata Fourierovog reda koje
računamo. Da bi mogli koristiti fft algoritme taj broj mora biti oblika 2m. Uzmimo da
je n=64. Odbirke funkcije ćemo računati u tačkama xi=i∆x=i4/64. Interval jedne
periode 0≤x≤4 ćemo podijeliti na dva dijela 0≤x<2 i 2≤x<4 i računati odbirke u tim
djelovima.
» l=2;
» n=64;

195
Polinomi i obrada signala
» dx=2*l/n;
» x1=0:dx:l-dx;
» f1=(-0.5*x1+1)*dx/(2*l);
» x2=l:dx:2*l-dx;
» f2=(0.5*x2-1)*dx/(2*l);
» f=[f1 f2];
» F=fft(f);
Time smo dobili Fourierovu transformaciju signala f(x). Prvih n/2
harmonika su zaista harmonici funkcije f(x), a preostali dio od n/2+1 do n su
preslikane negativne vrijednosti. Zbog toga je, radi crtanja spektra u obliku u kojem
se najčešće predstavlja, potrebno preurediti rezultate, ali i prenumerisati redni broj
harmonika.
» Fp=fftshift(F);
» k=-n/2:n/2-1;
» plot(k,abs(Fp))
» stem(k,abs(Fp))
Tako smo konačno dobili amplitudsku karakteristiku signala f(x) koja je prikazana
na slici 7.3.
0.5

0.45

0.4

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0
-40 -30 -20 -10 0 10 20 30 40

Slika 7.3 Spektar (amplitudska karakteristika)


periodičnog signala f(x)
Primjer 7.2.2 Odrediti odbirke Fourierove transformacije signala f(x)=sin2(xπ) za
0≤x<1 i f(x)=0 drugdje.
Da bismo odredili vrijednosti odbiraka Fourierive transformacije treba, prije
svega, odrediti korak odabiranja. Ponovo se tačan račun može izvesti jedino na
osnovu teoreme o odabiranju. Mi ćemo se ovdje poslužiti procjenom i proizvoljno
uzeti korak odabiranja, koji će biti dovoljno mali da se signal izme|u dva odbirka
puno ne mijenja. U intervalu za 0≤x<1 uzimamo vrijednosti zadate funkcije,
196
MATLAB for Windows

pomnožene korakom odabiranja, a izvan tog intervala, još proizvoljan broj


vrijednosti f(x)=0. [to više tačaka uzmemo, gustina odbiraka Fourierove
transformacje će biti veća. U ovom slučaju za primjenu fft algoritama nije
nephodno uzet broj odbiraka 2m već se može koristiti i nešto sporiji algiritam sa
proračun FT. Uzmimo n=50 i odredimo odbirke Fourierove transformacije.
» n=50;
» l=0.5;
» dx=2*l/n;
» x=0:dx:2*l-dx;
» f=(sin(pi*x)).^2*dx;
» F=fft(f);
» Fp=fftshift(F);
» k=-length(Fp)/2:length(Fp)/2-1;
Umjesto rednog broja odbiraka bolje je imati na nezavisno promjenljivoj osi
vrijednosti učestanosti ω ili frekvencije fr, koje su izračunate prema izrazima datim
u 7.2.1.1.
» fr=k/(n*dx);
» plot(fr,abs(Fp))
0.5

0.45

0.4

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0
-3 -2 -1 0 1 2 3

Slika 7.4 Amplituda Fourierove transformacije signala f(x)

7.2.1.4 Inverzna transformacija


Inverzna diskretna Fourierova transformacija ima oblik:
1 N

f$(n) =
N
∑ F ( k )e
n =1
jkn 2 π / N

197
Polinomi i obrada signala
i daje signal na osnovu transformacije. Razlikuje se od direktne jedino po znaku u
eksponentu i zbog dijeljenja sa N.
Inverzna diskretna Fourierova transformacija transformacije F se dobija sa
ifft(F).

7.2.1.5 Dvodimenziona transformacija


Dvodimenziona diskretna Fourierova transformacija definiše se analogno
jednodimenzionoj, a poziva se sa fft2(f), ili sa ifft2(F), za inverznu transformaciju.
Postoji i oblik ovih naredbi fft2(f,M,N)
Primjer 7.2.3 Izračunati i nacrtati dvodimenzionu transformaciju signala
z(x,y)=sinxsiny za -π≤x,y<π.
Uzećemo n=32 odbirka unutar oblasti (periode).
» [x,y]=meshdom(-pi:2*pi/32:pi-pi/16,-pi:2*pi/32:pi-pi/16);
» z=sin(x).*sin(y);
» mesh(z)
» Z=fft2(z); % Racunanje dvodimenzione FT
» Zp=fftshift(Z); % Pomjeranje rezultata
» mesh(abs(Zp)) % Crtanje amplitudske karakteristike

1 300
250
0.5
200
0 150
100
-0.5
50
-1 0
40 40
30 40 30 40
20 30 20 30
20 20
10 10 10 10
0 0 0 0

Slika 7.5 Dvodimenzioni signal i njegova FT


7.2.2 RA^UNANJE I CRTANJE FREKVENTNOG ODZIVA
7.2.2.1 Analogni domen
Frekventni odziv sistema u analognom domenu definisanog funkcijom
prenosa:

198
MATLAB for Windows

a (1) s n + a (2) s n −1 + ...+ a (n) s + a (n + 1)


H ( s) =
b(1) s m + b(2) s m−1 + ...+ a (m) s + a (m + 1)
dobija se sa h=freqs(a,b,w), gdje je w frekvencija, a h vrijednost frekventnog
odziva. Ako se želi nacrtati amplitudski i frekventni dijagram poziva se ova funkcija
bez izlaznog argumenta freqs(a,b,w). Ova funkcija se nalazi u okviru SIGNAL
TOOLBOX-a.
Primjer 7.2.4 Nacrtati amplitudsku i faznu karakteristiku sistema čija je funkcija
prenosa data sa:
s + 0.5
H ( s) = 2
s + s+1
za učestanosti ω od 0.1 do 100, u četrdeset tačaka.
» a=[1 .5];
» b=[1 1 1];
» w=logspace(-1,2,40);
» h=freqs(a,b,w);
» semilogx(w,abs(h))
» grid
» semilogx(w,angle(h)*180/pi)
» grid
Bez računanja odziva h crteži sa slike 7.6 (amplitudska i fazna karakteristika
analognog sistema) su se mogli dobiti naredbom
» freqs(a,b,w)
1.2 20

1 0

0.8 -20

0.6 -40

0.4 -60

0.2 -80

0 -100
-1 0 1 2 -1 0 1 2
10 10 10 10 10 10 10 10

Slika 7.6 Amplitudska i fazna karakteristika analognog sistema


7.2.2.2 Diskretni domen
Za diskretni sistem opisan sa:

199
Polinomi i obrada signala

a (1) + a (2) z −1 + ...+ a (n) z − n +1


H ( z) =
b(1) + b(2) z −1 + ...+ b(m) z − m+1
frekventni odziv se dobija sa y=freqz(a,b,w), gdje je w vrijednost učestanosti za
koje se računa frekventni odziv. Funkcija freqz bez izlaznog argumenta crta
amplitudsku i faznu karakteristiku. Interesantan oblik ove funkcije je
[h,w]=freqz(a,b,N,'whole') kojom se odre|uje vrijednost vektora h i w (odziva i
frekvencije) u N tačaka na čitavom jediničnom krugu.
Primjer 7.2.5 Nacrtati amplitudsku i faznu karakteristiku diskretnog sistema:
0.00001 + 0.016709 z −1 + 0.044636z −2 + 0.00735z −3
H ( z) =
1 − 2.40112 z −1 + 2.3594 z − 2 − 1083
. z − 3 + 019343
. z −4
» a=[0.00001 0.016709 0.044636 0.00735];
» b=[1 -2.40112 2.3594 -1.083 0.19343];
» w=-pi:pi/30:pi;
» h=freqz(a,b,w);
» plot(w,abs(h))
» grid
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
-4 -3 -2 -1 0 1 2 3 4

Slika 7.7 Amplitudska karakteristika diskretnog sistema


7.2.3 RA^UNANJE SIGNALA NA IZLAZU IZ DISKRETNOG
SISTEMA
Ako je diskretni sistem opisan jednačinom datom u 7.2.2.2, onda se signal
na izlazu iz tog diskretnog sistema, za dati ulazni signal x, dobija kao
y=filter(a,b,x).
Primjer 7.2.6 Izračunati impulsni odziv diskretnog sistema datog sa:
200
MATLAB for Windows

0.00001 + 0.016709 z −1 + 0.044636z −2 + 0.00735z −3


H ( z) =
1 − 2.40112 z −1 + 2.3594 z − 2 − 1083
. z − 3 + 019343
. z −4
Za računanje impulsnog odziva uzećemo da je ulazni signal
x=[1 zeros(1,50)].
» x=[1 zeros(1,50)];
» a=[0.00001 0.016709 0.044636 0.00735];
» b=[1 -2.40112 2.3594 -1.083 0.19343];
» y=filter(a,b,x);
» plot(y)
» grid
Izlazni signal se može računati i na osnovu impulsnog odziva h(n) i
ulaznog signala x(n). Kao što je poznato, izlazni signal je jednak konvoluciji signala
x i h, tj. y=conv(x,h).
0.25

0.2

0.15

0.1

0.05

-0.05
0 10 20 30 40 50 60

Slika 7.8 Impulsni odziv diskretnog sistema


7.2.4 KROSKORELACIONA FUNKCIJA I SPEKTRALNA GUSTINA
SNAGE SLU^AJNIH SIGNALA
Kroskorelacija dva slučajna signala x(n) i y(n) definiše se kao matematičko
očekivanje proizvoda signala x i konjugovano kompleksne vrijednosti signala y:
r(n)=Ešx(m)y*(m-n)ć, Kroskorelacija se računa sa r=xcorr(x,y). Autokorelacija
signala x je definisana sa: r(n)=Ešx(m)x*(m-n)ć i računa se sa r=xcorr(x).
Primjer 7.2.7 Izračunati i nacrtati autokorelacionu funkciju signala x(n) koji se
dobija kao jedna realizacija slučajnog signala sa uniformnom raspodjelom od 0 do
1.

201
Polinomi i obrada signala
» x=rand(1,50);
» r=xcorr(x);
» plot(r)
Uočimo razliku da je u ovoj verziji rand slučajni signal sa uniformnom
raspodjelom na intervalu (0,1) dok je randn normalni, bijeli, Gausov šum sa
varijansom 1. Spektralna gustina snage signala x definisana je kao Fourierova
transformacija autokorelacione funkcije, i računa se sa sx=fft(r).
18

16

14

12

10

0
0 20 40 60 80 100

Slika 7.9 Autokorelaciona funkcija


Ovim oblicima kroskorelacione funkcije mogu se pridružiti oblici sa
odre|enim opcijama koje se definišu stringom xcorr(x,'string'). Za signal x dužine
M, ako je string biased računa se 1/M vrijednosti autokorelacione funkcije, za
unbiased 1/(M-|k|), gdje je k indeks odgovarajuće pozicije, dok coeff daje
normalizovanu vrijednost tako da je maksimalna vrijednost 1.
Primjer 7.2.8 Naći unbiased autokorelaciju signala iz prethodnog primjera.
» ru=xcorr(x,'unbiased');
» plot(ru)
0.35

0.3

0.25

0.2

0.15

0.1

0.05

0
0 20 40 60 80 100

Slika 7.10 Unbiased autokorelaciona funkcija


7.2.5 DVODIMENZIONI SIGNALI

202
MATLAB for Windows

Jedan broj funkcija za obradu signala definisan je i za dvodimenzione


signale. Te funkcije su date u tabeli 7.1, a korišćenje im je slično kao i za
jednodimenzione slučajeve.
Na kraju, još jedanput ćemo istaći da je veliki broj algoritama, metoda
projektovanja diskretnih sistema, funkcija prozora i funkcija za obradu slučajnih
signala, sadržan u SIGNAL TOOLBOX-u.

203
MATLAB for Windows

glava osma

LINEARNA ALGEBRA I MATRIČNE FUNKCIJE

Centralni numerički problem u linearnoj algebri predstavlja rješavanje


sistema linearnih jednačina oblika
a11x1+a12x2+...+a1nxn=y1
a21x1+a22x2+...+a2nxn=y2
............................
am1x1+am2x2+...+amnxn=ym
tj. u vektorsko-matričnoj formulaciji: za datu matricu A∈Rmxn i vektor y∈Rm, naći
vektor x∈Rn koji zadovoljava relaciju Ax=y.
Ako se definiše slika linearnog operatora predstavljenog sa A kao
Im(A)=šy∈R | y=Ax za neko x∈Rć
i kernel operatora A kao
Ker(A)=šx∈R | Ax=0ć
poznato je da navedeni problem ima rješenje ako i samo ako je ispunjen uslov
y∈Im(A), a rješenje je jedinstveno ako i samo ako je Ker(A)=š0ć.
Alternativno, ako definišemo rang matrice r(A) kao broj linearno
nezavisnih kolona (ili vrsta) i formiramo proširenu matricu W=[A | y], važi:
1o za r(A)≠r(W) nema rješenja, tj. sistem je nekonzistentan;
2o za r(A)=r(W) postoji najmanje jedno rješenje, i to:
(i) jedinstveno rješenje, kada je r(A)=r(W)=n
(ii) beskonačno mnogo rješenja, kada je r(A)=r(W)<n.
Ovakva karakterizacija skupa rješenja, me|utim, nije dovoljna sa
numeričke tačke gledišta. Aritmetika sa konačnom preciznošću i približno tačni
ulazni podaci u praktičnim primjenama, nameću slijedeća pitanja:
(a) Ako se A i y "malo" promijene, kako to utiče na rješenje?
205
Linearna algebra i matrične funkcije
(b) [to znači kada je matrica A "skoro singularna"?
(c) Ukoliko b∉Im(A), kako možemo odrediti x tako da je Ax "blizu" y?
Da bi kvantifikovali odgovore na ovakva pitanja potreban je jezik kojim ćemo
precizirati pojmove kao što su: "male promjene", "blizu singularnosti",
"rastojanje u vektorskom prostoru", itd. To nam omogućava pojam norme
vektora i matrica.
MATLAB raspolaže skupom moćnih i numerički pouzdanih operatora
za tretiranje problema iz linearne algebre: karakterizaciju linearnih operatora i
vektorskih prostora i podprostora, odre|ivanje sopstvenih vrijednosti i vektora,
odre|ivanje singularnih vrijednosti, itd. Ovdje nećemo ulaziti u detalje iz teorije,
već ćemo navesti najvažnije operatore i pojedine definicije pojmova. Iscrpni
tretman teorijskih i numeričkih problema iz ove oblasti može se naći u literaturi.

8.1 SOPSTVENE VRIJEDNOSTI I SOPSTVENI VEKTORI

Sopstvene vrijednosti matrice A∈Rnxn su definisane kao n korijena


njenog karakterističnog polinoma p(z)=|zI-A|. Skup ovih korijena šz1,z2,..,znć
nazivamo spektrom matrice A. Za zi iz spektra A, pridruženi vektor vi koji
zadovoljava relaciju Avi=zivi, i=1,2,..,n, naziva se sopstveni vektor matrice A.
Ako od vektora vi, i=1, ... , n, formiramo matricu V=[v1 v2 ... vn], tada očigledno
važi AV=VD, gdje je D=diagšz1,z2,...,znć dijagonalna matrica formirana od
sopstvenih vrijednosti koja se naziva i Jordanova forma matrice A. Ukoliko u
spektru A postoji konjugovano kompleksni par sopstvenih vrijednosti
zk,k+1=σk+ iωk, tada i pridruženi par sopstvenih vektora ima oblik vk,k+1=q+is.
Ukoliko hoćemo da radimo samo sa realnim vrijednostima, kompleksnu
Jordanovu formu i odgovarajuću matricu sopstvenih vektora možemo zamijeniti
sa tzv. Jordanovim blokovima na k-tom i k+1-om mjestu u matrici D, i realnim
vektorima q i s u matrici V. Tako se iz kompleksne dobija realna Jordanova
forma. Za višestruke sopstvene vrijednosti potrebno je izvršiti odre|ene
modifikacije, koje se mogu naći u literaturi.
Operator eig nalazi sopstvene vrijednosti i sopstvene vektore. Tako
izraz s=eig(A) daje vektor kolonu s koji sadrži sopstvene vrijednosti matrice A.
Ukoliko imamo dva izlazna argumenta, tj. [V,D]=eig(A), dobićemo dijagonalnu
matricu D, sa sopstvenim vrijednostima na glavnoj dijagonali, i matricu V čije
kolone su sopstveni vektori od A, tako da važi A*V=V*D. Pošto sopstveni
vektori nijesu jednoznačni, ovaj operator ih daje u normalizovanoj formi tako da
nijedan element nije veći od 1. Napomenimo da matrica V definiše
transformaciju sličnosti koja matricu A prevodi u dijagonalnu, tj. Jordanovu,
formu.
206
MATLAB for Windows
Za simetrične matrice, sopstvene vrijednosti su uvijek realne, dok za
nesimetrične često postoje kompleksni parovi sopstvenih vrijednosti. U tom
slučaju, ukoliko želimo da radimo sa realnim vrijednostima, kompleksnu
Jordanovu formu možemo prevesti u realnu upotrebom operatora cdf2rdf
(skraćenica od: complex diagonal form to real diagonal form).
Primjer 8.1.1 Ilustrovaćemo operator eig na simetričnoj matrici
A=
3.6000 2.5000 -1.1000 1.3000
2.5000 1.2000 2.1000 3.1000
-1.1000 2.1000 0.9000 2.5000
1.3000 3.1000 2.5000 2.7000

i nesimetričnoj matrici
B=
-1 -4 0
1 -1 0
4 2 -3
» s=eig(A)
daje sopstvene vrijednosti:
s=
-2.1873
-1.0553
3.8634
7.7792
dok
» [X,L]=eig(A)

daje sopstvene vrijednosti u L i sopstvene vektore u X


X=
0.4063 0.0828 -0.7948 0.4431
-0.6939 0.4489 0.0059 0.5630
0.5938 0.5029 0.5372 0.3253
0.0283 -0.7340 0.2821 0.6171
L=
-2.1873 0 0 0
0 -1.0553 0 0
0 0 3.8634 0
0 0 0 7.7792

207
Linearna algebra i matrične funkcije
Ako želimo samo sopstvene vrijednosti možemo ih, npr. za matricu B,
dobiti i sa
» r=roots(poly(B))
kao što je istaknuto u glavi 7. Sopstvene vrijednosti i vektore matrice B
dobijamo sa
» [X,D]=eig(B)
X=
0 0 + 0.5443i 0 - 0.5443i
0 0.2722 0.2722
1.0000 0.6804 + 0.4082i 0.6804 - 0.4082i
D=
-3.0000 0 0
0 -1.0000 + 2.0000i 0
0 0 -1.0000 - 2.0000i
pri čemu vidimo da su, zbog prisustva kompleksnih spostvenih vrijednosti,
matrice X i D kompleksne. Prevešćemo ih u realnu Jordanovu formu sa
» [Xr,J]=cdf2rdf(X,D)
Xr =
0 0 0.5443
0 0.2722 0
1.0000 0.6804 0.4082
J=
-3 0 0
0 -1 2
0 -2 -1
Operator eig može poslužiti i za računanje generalisanih sopstvenih
vrijednosti i vektora. Ako su A i B kvadratne matrice dimenzije (nxn), tada se
generalisane sopstvene vrijednosti λ definišu kao netrivijalna rješenja
jednačine g(z)=|A-zB|=0. Pridruženi vektor x, koji odgovara skalaru λ i
zadovoljava relaciju Ax=λBx, naziva se generalisani sopstveni vektor.
Napomenimo da broj generalisanih sopstvenih vrijednosti zavisi od ranga
matrice B: ima ih n ukoliko je r(B)=n a za r(B)<n skup generalisanih sopstvenih
vrijednosti može biti konačan, beskonačan ili prazan (za detalje konsultovati
literaturu).
Naredba oblika s=eig(A,B) daje vektor s koji sadrži generalisane
sopstvene vrijednosti, dok oblik iste naredbe sa dva izlazna argumenta
[V,D]=eig(A,B) daje matricu X sa generalisanim sopstvenim vektorima i
dijagonalnu matricu D sa generalisanim sopstvenim vrijednostima na
dijagonali. Za ovako na|ene vrijednosti važi relacija AV=BVD.

208
MATLAB for Windows
Primjer 8.1.2 Za matrice
A=
2 1 2
1 3 -1
1 1 2
B=
1 2 3
4 5 6
7 8 10
naći generalisane sopstvene vrijednosti i vektore.
» eig(A,B)
daje
ans =
-0.9609
0.1806
13.4470

dok izraz
» [x,d]=eig(A,B)
daje i generalisane sopstvene vektore:
x=
0.8795 -0.6201 0.2663
-0.3470 0.5927 -0.8338
-0.3257 0.5140 0.4836
d=
-0.9609 0 0
0 0.1806 0
0 0 13.4470
8.2 Q-Z DEKOMPOZICIJA

Za kvadratne matrice A i B, Q-Z dekompozicija računa gornje


trougaone matrice Au i Bu, matricu generalisanih sopstvenih vektora V i
matrice Q i Z koje zadovoljavaju relacije: QAZ=Au i QBZ=Bu. Ovakva
dekompozicija se inače koristi kao me|ukorak pri računanju generalisanih
sopstvenih vrijednosti i vektora, i data je kao posebni operator radi mogućnosti
korišćenja me|u-rezultata.
Primjer 8.2.1 Za matrice A i B iz prethodnog primjera naći Q-Z dekompoziciju.
» [Au,Bu,Q,Z,V]=qz(A,B)
209
Linearna algebra i matrične funkcije
Au =
0.7872 2.7150 0.2632
0.0000 3.0310 -0.3820
0.0000 0.0000 2.9338
Bu =
-0.8192 3.0125 0.9542
0 16.7847 3.4013
0 0 0.2182
Q=
0.9662 0.2088 -0.1510
0.0345 0.4761 0.8787
0.2554 -0.8542 0.4528

Z=
0.8795 0.4744 0.0373
-0.3470 0.6928 -0.6321
-0.3257 0.5430 0.7740

V=
0.8795 -0.6201 0.2663
-0.3470 0.5927 -0.8338
-0.3257 0.5140 0.4836

8.3 SINGULARNE VRIJEDNOSTI I PRIDRU@ENA DEKOMPOZICIJA


MATRICA

Singularne vrijednosti predstavljaju jedan od najvažnijih pojmova u


matričnoj numerici, a u zadnje vrijeme koriste se i kao analitički aparat u
mnogim primjenama. Za datu matricu A∈Rmxn postoje ortogonalne kvadratne
matrice U=[u1 u2 ... um] i V=[v1 v2 ... vn] i dijagonalna matrica
S=diagšs1,s2,...,spć, p=minšm,nć, takve da važi relacija UAV=S. Skalari σi,
i=1, 2, ... , p, nazivaju se singularne vrijednosti matrice A, a vektori ui, i=1, ...
,m, i vj, j=1, ... ,n, nazivaju se lijevi i desni singularni vektori, respektivno.
Pokazuje se da izme|u nenultih singularnih vrijednosti matrice A i sopstvenih
vrijednosti λi matrice ATA važi relacija σi=λi, i=1, 2, ..., p.
Za računanje singularnih vrijednosti koristi se operator svd. Izraz
s=svd(X) daje vektor s koji sadrži singularne vrijednosti, dok izraz sa
višestrukim argumentima oblika [U,S,V]=svd(X) daje dijagonalnu matricu S iste
dimenzije kao X, sa singularnim vrijednostima na glavnoj dijagonali, i
ortogonalne matrice U i V.

210
MATLAB for Windows
Primjer 8.3.1
A=
1 2
3 4
5 6
» s=svd(A)
s=
9.5255
0.5143
» [U,S,V]=svd(A)
U=
0.2298 0.8835 0.4082
0.5247 0.2408 -0.8165
0.8196 -0.4019 0.4082

S=
9.5255 0
0 0.5143
0 0

V=
0.6196 -0.7849
0.7849 0.6196
Izraz [U,S,V]=svd(A,0) daje redukovanu verziju matrica S i U. Naime,
za A∈Rmxn, m>n, računaju se samo prvih n kolona matrice U a matrica S ima
dimenziju nxn.
Primjer 8.3.2 Izračunati redukovanu verziju matrica za dekompoziciju pomoću
singularnih vrijednosti matrice A iz prethodnog primjera.
» [U,S,V]=svd(A,0)
U=
0.2298 0.8835
0.5247 0.2408
0.8196 -0.4019
S=
9.5255 0
0 0.5143
V=
0.6196 -0.7849
0.7849 0.6196

211
Linearna algebra i matrične funkcije
Dekompozicija preko singularnih vrijednosti omogućava numerički
pouzdane, stabilne i tačne faktorizacije pravougaonih matrica, što omogućava
jednostavno računanje mnogih važnih osobina matrice kao što su: rang, lijevi i
desni inverz, sliku i kernel pridruženog linearnog operatora, norme matrice i sl.
Zbog toga se i u MATLAB-u koristi kao osnovni algoritam pri izračunavanju.
8.4 NORME VEKTORA I MATRICA

Norme vektora i matrica predstavljaju skalare koji daju informacije o


njihovoj "veličini". Koriste se u mnogim teorijskim razmatranjima i u pravljenju
stabilnih algoritama za računanje. Detaljna analiza prezentirana je u literaturi.
Postoji više različitih normi za vektore i matrice. Navešćemo njihove
definicije i odgovarajuće operatore MATLAB-a u tabelama 8.1 i 8.2.
Vektorske norme
ime definicija i oznaka MATLAB operator
1/ p
⎛ n ⎞
p-norma n p = || x||p = ⎜ ∑ | xi |p ⎟ norm(x,p)
⎝ i =1 ⎠
n

1-norma n1 = || x||1 = ∑|x |


i =1
i norm(x,1)
1/ 2
⎛ n ⎞
2-norma (Euklidova) n2 =|| x||2 = ⎜ ∑ xi 2 ⎟ norm(x,2), norm(x)
⎝ i =1 ⎠
∞-norma n∞ =|| x||∞ = max
i
| x |i norm(x,inf)
-∞-norma n−∞ =|| x||−∞ = min
i
| x |i norm(x,-inf)

Tabela 8.1. Vektorske norme


Primjer 8.4.1 Na vektoru
x=
1.0000 -2.0000 3.0000 4.5000 -4.0000 2.0000 -3.0000
ilustrovati neke od postojećih normi.
» n1=norm(x,1)
n1 =
19.5000
» n2=norm(x,2)
n2 =
7.9530
» np=norm(x,3.4)
212
MATLAB for Windows
np =
5.7542
» ninf=norm(x,inf)
ninf =
4.5000
» n_inf=norm(x,-inf)
n_inf =
1

Matrična norme
ime definicija i oznaka MATLAB operator
2-norma N 2 = A 2 = max σ i ( A) norm(A), norm(A,2)
i
m

1-norma N1 = A 1 = max ∑ a
j i =1
ij norm(A,1)
n

∞-norma N∞ = A ∞
= max ∑ a
i j =1
ij norm(x,inf)
Frobeniusova ⎛ m n ⎞
1/ 2

norma NF = A = ⎜ ∑ ∑ aij2 ⎟ norm(x,'fro')


F
⎝ i =1 j =1 ⎠

Tabela 8.2. Matrične norme


Primjer 8.4.2 Na matrici
A=
-1 2 3 4
2 -4 5 6
3 -4 5 -1
8 -6 4 -3
ilustrovati različite matrične norme.
» N1=norm(A,1)
N1 =
17
» N2=norm(A,2)
N2 =
14.0215
» Ninf=norm(A,inf)
Ninf =
21
» Nf=norm(A,'fro')
213
Linearna algebra i matrične funkcije
Nf =
16.9411
Primjer 8.4.3 Za matricu A iz prethodnog primjera provjeriti relaciju
|| A||2F = σ12 + σ 22 +...+ σ 2p , koja povezuje Frobeniusovu normu i singularne
vrijednosti matrice. Izraz
» Nfk=Nf^2
daje kvadrat Frobeniusove norme:
Nfk =
287
Singularne vrijednosti matrice A dobićemo sa
» s=svd(A)
s=
14.0215
8.9551
2.6086
1.8440
a sumu njihovih kvadrata sa
» s2=sum(s.^2)
s2 =
287.0000
čime smo provjerili navedenu relaciju.
Primjer 8.4.4 Na primjeru matrice
A=
2 -1 3
4 1 -5
i vektora
x=
1
-2
4
provjeriti Schwartz-ovu nejednakost: ||A||2≤||A||2||x||2
» n2=norm(A*x,2)
n2 =
24.0832
» nn2=norm(A,2)*norm(x,2)
nn2 =
30.4403
214
MATLAB for Windows
8.5 KONDICIONI BROJ MATRICE

Kondicioni broj matrice predstavlja odnos najveće i najmanje


singularne vrijednosti. On predstavlja indikator osjetljivosti rješenja sistema
linearnih jednačina na greške u ulaznim podacima, kao i indikator tačnosti
rezultata dobijenih pri invertovanju matrica i rješavanju sistema linearnih
jednačina.
Kondicioni broj matrice X dobija se izrazom cond(X). Za matricu
kažemo da je perfektno kondicionirana ako je kondicioni broj jednak jedinici.
Takav slučaj je sa ortogonalnim matricama. Prirodno je očekivati da je
determinanta kvadratne matrice na neki način povezana sa kondicionim
brojem. Me|utim, ne postoji neka korelacija izme|u ova dva skalara pridružena
istoj matrici.
Primjer 8.5.1 Odrediti determinantu i kondicioni broj za matrice
A=
1 -1 -1 -1 -1
0 1 -1 -1 -1
0 0 1 -1 -1
0 0 0 1 -1
0 0 0 0 1

B=
0.1000 0 0 0 0
0 0.1000 0 0 0
0 0 0.1000 0 0
0 0 0 0.1000 0
0 0 0 0 0.1000
Izrazi
» ka=cond(A),da=det(A)
daju determinantu i kondicioni broj matrice A
ka =
29.4275
da =
1
što znači da matrica sa determinantom jednakom jedinici ne mora biti dobro
kondicionirana. S druge strane, izrazi
» kb=cond(B),db=det(B)
daju iste ove veličine za matricu B
215
Linearna algebra i matrične funkcije
kb =
1
db =
1.0000e-005
iz čega vidimo da perfektno kondicionirana matrica može da ima malu
vrijednost determinante.
Kao gruba procjena može poslužiti sljedeće pravilo: pri zaokruživanju
kod Gausove eliminacije računar gubi tačnost na onoliko decimalnih mjesta
koliki je logaritam (za osnovu 10) kondicionog broja.
U MATLAB-u postoji i operator rcond koji može poslužiti za procjenu
podešenosti matrice za računanje. Izraz rc=rcond(X) daje procjenu recipročne
vrijednosti kondicionog broja. Znači, matrica je perfektno kondicionirana za
rc=1, dok male vrijednosti rc služe kao indikator loše podešenosti matrice.

8.6 TROUGAONA (L-U) DEKOMPOZICIJA

L-U dekompozicija kvadratne matrice A∈Rnxn sastoji se u prikazivanju


matrice A kao proizvoda A=LU, L∈Rnxn, U∈Rnxn, pri čemu L ima donju
trougaonu formu a U gornju trougaonu formu. Ovakva dekompozicija koristi se
pri rješavanju sistema linearnih jednačina Gausovom eliminacijom i pri
invertovanju nesingularne matrice.
Operator lu, pomoću izraza [L,U]=lu(A), daje matrice L i U. Navodimo
ga najviše iz pedagoških razloga, jer predstavlja jedan od osnovnih načina
faktorizacije matrica. Napominjemo da faktor L koji proističe iz MATLAB-ovog
operatora lu nije u čistoj, već u permutovanoj donjoj trougaonoj formi.
Primjer 8.6.1 L-U dekompoziciju ilustrovaćemo na primjeru matrice
A=
1 4 7
2 5 8
3 6 11
Izraz
» [L,U]=lu(A)
daje faktore L i U
L=
0.3333 1.0000 0
0.6667 0.5000 1.0000
1.0000 0 0
216
MATLAB for Windows

U=
3.0000 6.0000 11.0000
0 2.0000 3.3333
0 0 -1.0000
Lako se provjerava da je L*U=A. Postoji oblik funkcije lu sa tri izlazna
argumenta [L,U,P]=lu(A) gdje je P permutaciona matrica takva da važi
P*A=L*U.

8.7 HESSENBERGOVA FORMA I SCHUROVA DEKOMPOZICIJA

Ove dvije dekompozicije koriste se pri izračunavanju sopstvenih


vrijednosti i sopstvenih vektora.
Operator hess nalazi Hessenbergovu formu kvadratne matrice.
Hessenbergova matrica ima takav oblik da su joj svi elementi ispod prve
subdijagonale jednaki nuli. Izraz H=hess(A) daje Hessenbergovu formu
matrice A, dok izraz [P,H]=hess(A) pored H daje i unitarnu matricu P tako da
važi dekompozicija: A=PHPH uz PHP=I, gdje PH označava konjugovanu
transpoziciju kompleksne matrice P (u slučaju realne matrice ova operacija se
svodi na običnu transpoziciju).
Primjer 8.7.1 Naći Hessenbergovu formu matrice
A=
1 5 7
3 0 6
4 3 1
Izraz
» [P,H]=hess(A)
daje matrice P i H
P=
1.0000 0 0
0 -0.6000 -0.8000
0 -0.8000 0.6000
H=
1.0000 -8.6000 0.2000
-5.0000 4.9600 -0.7200
0 2.2800 -3.9600
Lako se provjerava da izraz
» P'*P
217
Linearna algebra i matrične funkcije
daje jediničnu matricu
ans =
1.0000 0 0
0 1.0000 0.0000
0 0.0000 1.0000
dok izraz
» P*H*P'
daje početnu matricu A
ans =
1.0000 5.0000 7.0000
3.0000 0.0000 6.0000
4.0000 3.0000 1.0000
U zavisnosti od toga da li matrica A ima realne ili kompleksne
elemente, postoje realna i kompleksna Schur-ova forma matrice. Kompleksna
Schur-ova forma matrice je gornja trougaona matrica sa sopstvenim
vrijednostima te matrice na glavnoj dijagonali. Realna Schur-ova forma
razlikuje se od kompleksne u tome što se realne sopstvene vrijednosti nalaze
na dijagonali, a konjugovano-kompleksne sopstvene vrijednosti su raspore|ene
u (2x2)-dimenzione blokove oko glavne dijagonale.
Schur-ova forma nalazi se pomoću operatora schur. Izraz S=schur(A)
daje Schur-ovu formu matrice A, dok izraz [U,S]=schur(A) daje još i unitarnu
(ortogonalnu) matricu U, tako da važe relacije: A=USUH i UHU=I.
Primjer 8.7.2 Za matricu sa realnim elementima
B=
1 -2 3 4
-3 -4 5 2
1 4 7 -5
2 0 -2 3
izraz
» [U,S]=schur(B)
daje matrice S i U
U=
0.3780 0.7330 -0.5499 -0.1319
0.8619 -0.0714 0.4388 0.2437
-0.3110 0.4989 0.2681 0.7633
-0.1322 0.4569 0.6581 -0.5836
S=

218
MATLAB for Windows
-7.4265 2.1186 2.9785 -0.8304
0.0000 4.6376 1.3408 2.2889
0 0 0.1813 1.3834
0 0 0 9.6076
Za provjeru, izračunaćemo
» U'*U
ans =
1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 1.0000 0.0000
0.0000 0.0000 0.0000 1.0000
» U*S*U'
ans =
1.0000 -2.0000 3.0000 4.0000
-3.0000 -4.0000 5.0000 2.0000
1.0000 4.0000 7.0000 -5.0000
2.0000 0.0000 -2.0000 3.0000

Za ilustraciju kompleksne Schur-ove forme, pomoću izraza


» C=ones(4);D=B+i*C;
formiraćemo kompleksnu matricu
D=
1.0000 + 1.0000i -2.0000 + 1.0000i 3.0000 + 1.0000i 4.0000 + 1.0000i
-3.0000 + 1.0000i -4.0000 + 1.0000i 5.0000 + 1.0000i 2.0000 + 1.0000i
1.0000 + 1.0000i 4.0000 + 1.0000i 7.0000 + 1.0000i -5.0000 + 1.0000i
2.0000 + 1.0000i 0 + 1.0000i -2.0000 + 1.0000i 3.0000 + 1.0000i
Izraz
» T=schur(D)
daje kompleksnu Schur-ovu formu

T=
-7.3671 + 0.1794i 1.7507 + 1.2529i 3.4487 + 0.2405i 0.9777 - 0.3277i
0.0000 + 0.0000i 0.4062 + 0.2968i 0.2407 + 2.2795i -0.6171 - 0.2284i
0.0000 + 0.0000i 0.0000 - 0.0000i 4.5313 + 3.2720i -1.5800 - 2.7179i
0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 9.4296 + 0.2518i
Za prevo|enje matrice iz realne u kompleksnu Schur-ovu formu služi
operator rsf2csf.

8.8 CHOLESKY-jeva FAKTORIZACIJA


219
Linearna algebra i matrične funkcije
Osnovno pravilo u numeričkoj analizi je da se posebna struktura
sistema jednačina (odnosno pridružene matrice) kao što je simetrija, definitnost
i sl., koristi pri kreiranju algoritama za rješavanje problema. Jedna od takvih
metoda je i Cholesky-jeva dekompozicija matrice, koja je moguća samo za
pozitivno definitne matrice. Podsjetimo se da se za kvadratnu matricu A kaže
da je pozitivno definitna ako je pridružena kvadratna forma q=xTAx (q je skalar)
pozitivna za sve vrijednosti vektora x, osim za x=0, kada je q=0.
Operator chol izvodi ovakvu faktorizaciju. Izraz R=chol(A) daje
matricu R u gornjoj trougaonoj formi tako da važi RHR=A za matrice sa realnim
elementima, odnosno RTR=A za matrice sa kompleksnim elementima.
Ukoliko tražimo Cholesky-jevu faktorizaciju za matricu koja nije
pozitivno definitna, računar će javiti grešku. Inače, jedan od mogućih testova
za ispitivanje pozitivne definitnosti matrice je uslov da su sve njene sopstvene
vrijednosti pozitivne.
Primjer 8.8.1 Naći Cholesky-jevu faktorizaciju za matricu
A=
8 2 -5
2 11 -2
-5 -2 8
Najprije ćemo provjeriti da li je matrica pozitivno definitna sa
» eig(A)
ans =
9.0000
3.0000
15.0000
» R=chol(A)
daje traženu matricu
R=
2.8284 0.7071 -1.7678
0 3.2404 -0.2315
0 0 2.1958
Za provjeru, izraz
» R'*R
daje polaznu matricu
ans =
8.0000 2.0000 -5.0000
2.0000 11.0000 -2.0000

220
MATLAB for Windows
-5.0000 -2.0000 8.0000
U slučaju da matrica X nije pozitivno definitna [R,p]=chol(X), vraća
vrijednost p za koju je matrica X(1:p,1:p) pozitivno definitna.

8.9 ORTOGONALNA (Q-R) DEKOMPOZICIJA

Q-R faktorizacija primjenjuje se na matrice i pravougaonog i


kvadratnog oblika. Izražava datu matricu kao proizvod ortonormalne matrice
(za realne) ili unitarne matrice (za kompleksne), i gornje trougaone matrice.
Ovakva dekompozicija primjenjuje se za rješavanje sistema linearnih
jednačina.
Izraz [Q,R]=qr(X) daje matrice Q i R sa opisanim osobinama, pri čemu
je dimenzija R ista kao matrice X, i važi X=QR.
Oblik [Q,R,E]=qr(X) daje permutacionu matricu E, gornju-trougaonu
matricu R sa opadajućim elementima na dijagonali i ortonormalnu matricu Q,
tako da važi relacija XE=QR.
Primjer 8.9.1 Za matricu
A=
1 2 3
4 5 6
7 8 9
10 11 12
naći ćemo Q-R dekompoziciju pomoću izraza
» [Q,R]=qr(A)
Q=
-0.0776 -0.8331 0.5444 0.0605
-0.3105 -0.4512 -0.7709 0.3251
-0.5433 -0.0694 -0.0913 -0.8317
-0.7762 0.3124 0.3178 0.4461
R=
-12.8841 -14.5916 -16.2992
0 -1.0413 -2.0826
0 0 0.0000
0 0 0
Lako se provjerava da je Q*R=A. Napomenimo da se iz oblika matrice
R može izvesti zaključak o rangu matrice A. Naime, očigledno je da R ima rang
2, a pokazuje se, da je to istovremeno i rang matrice A.
Ukoliko želimo drugu verziju ovakve dekompozicije, upotrijebićemo
221
Linearna algebra i matrične funkcije
» [Q,R,E]=qr(A)
sa rezultatom
Q=
-0.1826 -0.8165 0.5477 -0.0038
-0.3651 -0.4082 -0.7274 0.4133
-0.5477 0.0000 -0.1883 -0.8152
-0.7303 0.4082 0.3680 0.4057

R=
-16.4317 -12.7802 -14.6059
0 1.6330 0.8165
0 0 0.0000
0 0 0
E=
0 1 0
0 0 1
1 0 0
Za provjeru, formiraćemo razliku
» A*E-Q*R
sa rezultatom
ans =
1.0e-014 *
0.0444 0.1665 0.3109
0.0888 0.0888 0.1776
0.1776 0.0888 0.1776
0.1776 0.1776 0.1776
što znači da je AE=QR, sa tačnošću do četrnaeste decimale.
8.10 RANG. BAZIS ZA SLIKU I KERNEL LINEARNOG OPERATORA

Rang matrice može se definisati na više načina, pa se i za njegovo


izračunavanje koriste različiti algoritmi. U MATLAB-u postoji nekoliko operatora
koji se direktno ili indirektno služe algoritmima za nalaženje ranga. Pri tome se
koriste različite vrijednosti tolerancije, pa se može dogoditi da za istu matricu
dobijemo različite rezultate. Rang možemo dobiti koristeći operatore rref, \,
orth, null, qr, ali se najpouzdaniji rezultat dobija upotrebom operatora rank koji
koristi dekompoziciju preko singularnih vrijednosti. Ovaj operator koristi se i za
pinv koji nalazi pseudo-inverznu matricu.
Operator rank možemo koristiti u dvije verzije:

222
MATLAB for Windows
r=rank(X), koji daje r kao broj singularnih vrijednosti matrice X koje su veće od
broja e=max(size(X))*norm(X)*eps, i r=rank(X,tol), koji daje r kao broj
singularnih vrijednosti matrice X koje su veće od proizvoljno zadatog malog
broja tol.
Primjer 8.10.1 Za matricu
X=
6 -4 -4 -9
24 3 0 -9
-14 3 4 12
48 25 16 9
odredićemo rang sa
» r=rank(X)
r=
2
Ako uzmemo
tol =
1.0000e-014
izraz
» r=rank(X,tol)
znači da zanemarujemo sve singularne vrijednosti manje od tol, i daje
r=
2
Za izračunavanje bazisa slike linearnog operatora pridruženog matrici
A koristi se operator orth. Izraz Q=orth(A) daje ortonormalni bazis za sliku
matrice A, koji čine kolone matrice Q. Broj kolona matrice Q predstavlja rang
matrice A, i može se pokazati da važi QTQ=I, gdje je I jedinična matrica iste
dimenzije kao A.
Dok orth služi za nalaženje bazisa za Im(A), operator null koristi se za
nalaženje bazisa drugog važnog podprostora pridruženog matrici A,
takozvanog nul-prostora ili Ker(A). Izraz N=null(A) daje matricu N čije kolone
predstavljaju ortonormalni bazis za Ker(A), tj. važe relacije: NTN=I i AN=0, a
broj kolona matrice N odre|uje dimenziju Ker(A).

Primjer 8.10.2 Na matrici

A=
1 3 5
1 4 6

223
Linearna algebra i matrične funkcije
-1 5 3
-1 4 2
1 3 5
ilustrovaćemo primjenu operatora orth i null. Tako
» Q=orth(A)
daje matricu
Q=
0.4508 -0.3187
0.5602 -0.2814
0.4246 0.6174
0.3152 0.5801
0.4508 -0.3187
sa dvije kolone. Znači, rang A je 2 a vektori koji razapinju Im(A) su odre|eni
kolonama matrice Q. Izraz
» N=null(A)
daje matricu
N=
0.8165
0.4082
-0.4082
koja definiše Ker(A), koji u ovom slučaju ima dimenziju 1.

8.11 MOORE-PENROSE PSEUDOINVERZIJA MATRICE

Za datu matricu A∈Rmxn postoji jedinstvena matrica A+ koja


zadovoljava slijedeća četiri uslova:
(a) AA+A=A (b) A+AA+=A (c) (AA+)T=AA+ (d)(A+A)T=A+A
i naziva se Moore-Penrose inverz matrice A. Lako se pokazuje da za m>n
matrica A+=(ATA)-1AT zadovoljava gornje uslove, kao i matrica A+=AT(AAT)-1 za
slučaj da je m<n. U literaturi se za ovakvu matricu koristi i termin pseudo-
inverzna matrica a koristi se kod rješavanja sistema linearnih jednačina u
smislu najmanjih kvadrata.
U MATLAB-u se za izračunavanje pseudoinverzne matrice koristi izraz
oblika X=pinv(A), a samo računanje se vrši pomoću singularnih vrijednosti.
Tolerancija koja služi za zanemarivanje singularnih vrijednosti uzima se po
automatizmu kao tol=max(size(A))*norm(A)*eps, a možemo je promijeniti
zadavanjem proizvoljno malog broja tol1 i korišćenjem izraza oblika
pinv(A,tol1).
Primjer 8.11.1 Za matricu
224
MATLAB for Windows
A=
1 1 1 1 1
1 -4 0 0 0
0 0 1 1 -1
» Ap=pinv(A)
Ap =
0.2844 0.1090 -0.0948
0.0711 -0.2227 -0.0237
0.1611 0.0284 0.2796
0.1611 0.0284 0.2796
0.3223 0.0569 -0.4408
dok za matricu
B=
1 0
2 1
-3 3
1 3
0 1
sa
» Bp=pinv(B)
dobijamo
Bp =
0.0704 0.1549 -0.1690 0.1127 0.0141
0.0141 0.0810 0.1162 0.1725 0.0528
Lako se provjerava da izrazi
» inv(B'*B)*B'
» A'*inv(A*A')
daju iste rezultate za pseudoinverzije matrica A i B.

8.12 RJE[AVANJE SISTEMA LINEARNIH JEDNA^INA

U nekolika naredna odjeljaka ilustrovaćemo mogućnosti primjene


MATLAB-a za rješavanje sistema linearnih jednačina opisanog na početku
ovog poglavlja, kojega smo u matričnoj notaciji predstavili sa Ax=y.

8.12.1 HOMOGENI SISTEM JEDNA^INA

Za y=0 dobijamo homogeni sistem jednačina Ax=0. Poznato je da se


trivijalno rješenje ovog sistema dobija za x=0. Ako je A∈Rmxn netrivijalno

225
Linearna algebra i matrične funkcije
rješenje je moguće naći samo ako je r(A)<n, a takvih rješenja ima beskonačno
mnogo.
Sva rješenja su definisana sa Ker(A), tako da se za ovakav sistem
jednačina može koristiti operator null koji definiše bazis za Ker(A).
Primjer 8.12.1 Naći sva netrivijalna rješenja za sistem Ax=0, gdje je
A=
1 3 5
1 4 6
-1 5 3
-1 4 2
1 3 5
Najprije ćemo naći bazis za Ker(A) sa
» n=null(A)
n=
0.8165
0.4082
-0.4082
Vidimo da Ker(A) ima dimenziju 1, što znači da je x=an, gdje je a
proizvoljni realni skalar, rješenje datog sistema jednačina.
Napomenimo da za rješenje ovog problema možemo koristiti i operator
rref, koji daje takozvanu redukovanu ešalonsku formu matrice. U tom smislu,
prvo formiramo proširenu matricu W=[A y] a zatim na|emo rref(W), odakle lako
nalazimo rješenje. Pošto je u ovom slučaju y=0, W je dato sa
» W=[A,zeros(5,1)]
W=
1 3 5 0
1 4 6 0
-1 5 3 0
-1 4 2 0
1 3 5 0
Sa
» R=rref(W)
dobijamo
R=
1 0 2 0
0 1 1 0
0 0 0 0
0 0 0 0
0 0 0 0

226
MATLAB for Windows
odakle neposredno slijedi: x1+2x3=0 i x2+x3=0. Iz ovoga sistema vidimo da ima
beskonačno mnogo rješenja, a lako se pokazuje da sva leže u Ker(A).

8.12.2 SISTEMI SA VE]IM BROJEM NEPOZNATIH OD BROJA JEDNA^INA

Kada je m<n ne postoji mogućnost nalaženja jedinstvenog rješenja.


Bez gubitka na opštosti razmatranja, posmatraćemo slučaj kada je r(A)=m jer
za r(A)<m neke jednačine možemo ispustiti zbog linearne zavisnosti sa
preostalim jednačinama. Shodno ranijem razmatranju, kada je r(A)=r(W)=m,
postoji beskonačno mnogo rješenja sistema jednačina. Iz čitave familije
rješenja možemo izdvojiti ono koje ima minimalnu normu, tj. koje ispunjava
uslov ||x||min. Lako se pokazuje da se rješenje xm koje ima minimalnu normu
dobija sa operatorom pinv kao xm=pinv(A)*y.
Primjer 8.12.2 Naći rješenje sa minimalnom normom za sistem opisan sa
A=
1 1 1 1 1
1 -4 0 0 0
0 0 1 1 -1
y=
1
0
0
Najprije provjerimo rang A sa
» rank(A)
i pošto dobijemo da je r(A)=3, nalazimo rješenje minimalne norme sa
» xm=pinv(A)*y
xm =
0.2844
0.0711
0.1611
0.1611
0.3223
Napomenimo da se drugo rješenje može dobiti pomoću operatora \ za
"dijeljenje" slijeva, kao
» x1=A\y
x1 =
0
0.0000

227
Linearna algebra i matrične funkcije
0.5000
0
0.5000
Ako provjerimo norme rješenja xm i x1 sa
» norm(xm),norm(x1)
dobijemo normu xm
ans =
0.4916
i normu x1
ans =
0.7071
što potvr|uje da je norma xm manja.
8.12.3 SISTEMI SA VE]IM BROJEM JEDNA^INA OD BROJA NEPOZNATIH

Za odnos n>m, tačno rješenje moguće je naći samo u rijetkim


slučajevima kada je y∈Im(A). Jedan od načina da se na|e približno rješenje xp
je minimizacija xp=minx||Ax-y||, za pogodno izabranu normu || ||p. U zavisnosti
od izbora norme, dobijaju se i različite vrijednosti xp. Pokazano je da se
problem minimizacije najpogodnije formuliše za 2-normu jer je f(x)=||Ax-y||2
kontinualno diferencijabilna funkcija od x, a njenom minimizacijom dobija se
rješenje xp optimalno u smislu najmanjih kvadrata. Za nalaženje rješenja u
smislu najmanjih kvadrata mogu poslužiti operatori pinv i \.
Primjer 8.12.3 Naći rješenje sistema jednačina Ax=y, za
A=
1 0
2 1
-3 3
1 3
0 1
y=
1
-3
4
2
8
Najprije ćemo ispitati rang matrica A i W=[A y] sa
» r1=rank(A),r2=rank([A y])
sa rezultatima r1=2 i r2=3, što znači da y≠Im(A) pa ćemo rješenje tražiti u
smislu najmanjih kvadrata, sa
228
MATLAB for Windows
» x1=pinv(A)*y
x1 =
-0.7324
1.0035
Isti rezultat u ovom slučaju dobija se i pomoću operatora \:
» x2=A\y
x2 =
-0.7324
1.0035
8.13 MATRI^NE FUNKCIJE
Vidjeli smo da elementarne matematičke funkcije (npr. sin, exp, i sl.)
prihvataju kao argument matrice proizvoljne dimenzije i tretiraju ih kao polja
brojeva, tj. vrše naznačenu operaciju na principu element-po-element. Pored
ovakvih, u MATLAB-u postoji mogućnost računanja i matričnih funkcija koje su
definisane na suštinski različitom principu, i to samo za kvadratne matrice.
⎡ a11 a12 ⎤
Posmatrajmo matricu A=⎢ ⎥. Funkcija exp(A) znači
⎣ a21 a22 ⎦
⎡ exp( a11 ) exp( a12 ) ⎤
⎢ exp( a ) exp( a ) ⎥ , dok se matrična eksponencijalna funkcija,
⎣ 21 22 ⎦

e A = I + 1A! + A2
2! + ... = ∑
k =0
Ak
k! , računa pomoću izraza expm(A). Vidimo da je
matrična exponencijalna funkcija definisana analogno skalarnoj, a takav pristup
može se uzeti pri definisanju proizvoljne funkcije. Ako je f(z) skalarna funkcija,
definisana na spektru matrice A, tada se matrična funkcija f(A) dobija
jednostavnom "zamjenom" skalara z matricom A u izrazu f(z). Na primjer, ako
(1 + z )
je f ( z ) = matričnu funkciju ćemo definisati sa f(A)=(I+A)(I-A)-1, uz uslov
(1 − z )
da broj 1 nije sopstvena vrijednost matrice A. Detaljno razmatranje matričnih
funkcija i algoritama za njihovo izračunavanje može se naći u literaturi. Ovdje
ćemo samo napomenuti da se pouzdani algoritmi zasnivaju na Schur-ovoj
dekompoziciji matrice i Parlett-ovom metodu za računanje f(S), gdje je S
Schur-ova forma matrice A.
Operator funm služi za računanje matričnih funkcija. Opšti izraz
F=funm(A,'funkcija') daje pojedine matrične funkcije, u zavisnosti od stringa
'funkcija'. Tako izrazi F1=funm(A,'exp'), F2=funm(A,'sin') i F3=funm(A,'log10')
daju matričnu eksponencijalnu, sinusnu i logaritamsku funkciju, respektivno.

229
Linearna algebra i matrične funkcije
Pored funm, postoje i operatori expm, logm i sqrtm, pri čemu su
logm(X) i sqrtm(X) ekvivalentni sa funm(X,'log') i funm(X,'sqrt'), dok izraz
expm(X) računa matričnu eksponencijalnu funkciju eX po posebnom algoritmu
koji koristi Pade-ov razvoj. Napomenimo da expm daje pouzdanije, brže a
često i tačnije rezultate od funm( ,'exp').
Primjer 8.13.1 Ilustrovaćemo pojedine matrične funkcije na primjeru matrice
⎡ − 1 2 0⎤
A = ⎢⎢ 1 1 0⎥⎥
⎢⎣ 2 − 1 2⎥⎦
Najprije ćemo unijeti matricu i naći običnu eksponencijalnu funkciju
» A=[-1 2 0;1 1 0;2 -1 2];
» E=exp(A)
gdje se A smatra kao polje brojeva, pa je rezultat
E=
0.3679 7.3891 1.0000
2.7183 2.7183 1.0000
7.3891 0.3679 7.3891
Za razliku od exp(A), matričnu eksponencijalnu funkciju dobićemo sa
» Em=expm(A)
Em =
1.3340 3.1612 0
1.5806 4.4952 0
4.4745 -0.2673 7.3891
Pošto je logm inverzna matrična funkcija za expm, izraz
» logm(Em)
daje polaznu matricu A
ans =
-1.0000 2.0000 0.0000
1.0000 1.0000 0.0000
2.0000 -1.0000 2.0000
Matričnu eksponencijalnu funkciju možemo izračunati i sa
» E1=funm(A,'exp')
a dobija se isti rezultat kao i sa expm(A):
E1 =
1.3340 3.1612 0.0000
1.5806 4.4952 0.0000
4.4745 -0.2673 7.3891
Matrični kvadratni korijen dobija se sa
230
MATLAB for Windows
» Q=sqrtm(A)

Q=
0.2781 + 1.0380i 0.7598 - 0.7598i 0.0000 - 0.0000i
0.3799 - 0.3799i 1.0380 + 0.2781i 0.0000 + 0.0000i
0.7562 - 0.6580i -0.3836 + 0.4817i 1.4142 + 0.0000i
a kao provjera može poslužiti izraz
» Q^2
koji treba da rezultira u polaznoj matrici, s obzirom da iz definicije matričnog
kvadratnog korijena proizilazi relacija Q2=A. Zaista
ans =
-1.0000 + 0.0000i 2.0000 + 0.0000i 0.0000 - 0.0000i
1.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i
2.0000 - 0.0000i -1.0000 - 0.0000i 2.0000 + 0.0000i
Primjer 8.13.2 Izračunati sin(B), za
⎡1 − 4 1 ⎤
B = ⎢⎢ 1 − 1 1 ⎥⎥
⎢⎣ 4 2 − 3⎥⎦
Matričnu funkciju sin(B) možemo izračunati sa
» S=funm(B,'sin')
S=
3.4649 -3.6237 0.0843
1.5782 1.2049 0.5324
3.0261 -1.6241 1.6339
U MATLAB-u ne postoji operator sinm za matrični sinus, ali se lako
može kreirati sa posebnim funkcijskim fajlom sinm koji se automatski dodaje
listi MATLAB-ovih operatora. Na osnovu izraza sin A = (eiA + e − iA ) / 2i
jednostavno pravimo novi fajl u Notepad-u sa:
function y=sinm(x)
y=(expm(i*x)-expm(-i*x))/(2*i);
end
Sa ovako kreiranim fajlom, sada možemo izračunati sin(B) sa
» S1=sinm(B)
što daje isti rezultat kao i operator funm(B,'sin'):
S1 =
3.4649 -3.6237 0.0843
1.5782 1.2049 0.5324
3.0261 -1.6241 1.6339
231
Linearna algebra i matrične funkcije
Na analogan način možemo kreirati funkcijske fajlove i za druge matrične
funkcije kao na primjer cos(X), sinh(X), i sl., ukoliko nam je tako nešto
pogodnije od odgovarajućeg operatora funm.

232
MATLAB for Windows

glava deveta

RIJETKE MATRICE
MATLAB je softverski paket koji se stalno dogra|uje, dopunjavajući se
funkcijama potrebnim u savremenoj inžinjerskoj praksi. Dio ovih funkcija se
isporučuje u osnovnom MATLAB-u dok se dio isporučuje u okviru TOOLBOX-ova.
U TOOLBOX-ovima se nalaze funkcije zajedničke za rješavanje grupe problema u
jednoj oblasti. Tako postoje specifični TOOLBOX-ovi za obradu signala, kontrolu i
automatiku, fazi logiku, neuralne mreže, elektroenergetiku, obradu slike, itd.
Istovremeno, osnovni MATLAB se proširuje specifičnim funkcijama.
U poslednje vrijeme u inžinjerskoj praksi kao i teoriji algoritama intenzivno
se koriste tzv. rijetke matrice. Ove matrice imaju mali broj nenultih elemenata.
Nepraktično je čitave ove matrice držati u memoriji računara već samo nenulte
elemente. Osim ovog pragmatičnog razloga, već smo naveli da u opisivanju
struktura teorije algoritama, drveta, grafova, lista, veoma se često koriste rijetke
matrice. Ove strukture se koriste za algoritme sortiranja i preure|ivanja i već su
odomaćene u programerskoj praksi. Niz algoritama u kojima se koriste rijetke
matrice i drveta implementiran je posebnim MATLAB funkcijama.
U ovom poglavlju će na nekoliko ilustrativnih primjera biti objašnjeno šta je
to rijetka matrica, kako se vrši konverzija rijetke u "punu" matricu, kao i osnove
vizuelizacije rijetke matrice i drveta. Naredbi koje se tiču rijetkih matrica veoma
veliki broj i date su u tabeli 9.1.
9.1 KREIRANJE RIJETKE MATRICE

Rijetka matrica se može formirati na više načina. Prvi je način primjena


neke od elementarnih rijetkih matrica. Osnovna rijetka matrica je rijetka jedinična
matrica koja se dobija naredbom speye(n,m) i za koju važe ista pravila kao za
pravu jediničnu matricu.
Naredbe za rad sa rijetkim matricama
speye rijetka jedinična matrica

233
Rijetke matrice

sprandn rijetka slučajna matrica


sprandsy rijetka simetrična slučajna matrica
m
spdiags rijetka dijagonalna matrica
sparse kreiranje rijetke matrice
full kreiranje "pune" matrice iz rijetke
spconvert konvertovanje rijetke matrice
nnz broj nenultih elemenata
nnzeros nenulti elementi
nzmax veličina prostora koji zauzimaju nenulti elementi
spones nenulti elementi rijetke matrice se postavljaju na jedinicu
spalloc zauzimanje memorije za nenulte elemente
issparse provjera da li je matrica rijetka
spfun primjenjuje funkcije na nenulte elemente
spy vizuelizacija nenulte matrice
gplot crtanje grafa kao u "teoriji grafova"
treeplot crtanje drveta

Tabela 9.1 Funkcije za rad sa rijetkim matricama


Primjer 9.1.1 Kreirati rijetku jediničnu matricu a dimenzija 5x5, pa nakon toga
elementu a(2,3) dodijeliti vrijednost 5.
» a=speye(5);
» a(2,3)=5

a=
(1,1) 1
(2,2) 1
(2,3) 5
(3,3) 1
(4,4) 1
(5,5) 1
Vidimo da se na ekranu štampaju samo oni elementi matrice koji su nenulti
a da bi bili jednoznačno odre|eni pored njih se ispisuju indeksi koji ukazuju na
poziciju tih elemenata u matrici. Za rijetke matrice, kao i za sve ostale naredbom
whos dobijaju se osnovne informacije
234
MATLAB for Windows
» whos
Name Size Elements Bytes Density Complex
a 5 by 5 6 92 0.2400 No
Grand total is 6 elements using 92 bytes
Za rijetke matrice uočimo značajan podatak Density koji predstavlja količnik broja
nenultih elemenata sa ukupnim brojem elemenata matrice. Za "punu" matricu ova
veličina je Full.
Rijetke matrice se ravnopravno kao "pune" mogu koristiti u aritmetičkim
izrazima, s tim da aritmetički izraz u kojem se pojavljuju samo rijetke matrice daje
kao riješenje rijetku matricu a ako se uključi makar jedna "puna" matrica rezultat je
"puna" matrica.
Primjer 9.1.2 Rijetku matricu iz prošlog zadatka pomnožiti sa dva i sabrati sa
rijetkom speye(5). Nakon toga rezultat sabrati sa matricom nultih elemenata koja
ima sve elemente nule (naredba zeros u pitanju je "puna" matrica)
» b=speye(5);
» C=2*a+b
C=
(1,1) 3
(2,2) 3
(2,3) 10
(3,3) 3
(4,4) 3
(5,5) 3
Sabiranjem ove matrice sa "punom" matricom čiji su svi elementi nule
dobija se puna matrica
» C+zeros(5)

ans =
3 0 0 0 0
0 3 10 0 0
0 0 3 0 0
0 0 0 3 0
0 0 0 0 3
I pored toga što nijesmo mijenjali vrijednost matrice, dobijamo "punu"
matricu. Da zaključimo da se rijetka matrica može pretvoriti u "punu" naredbom

235
Rijetke matrice
» C+zeros(size(C))
9.2 RIJETKA MATRICA I FUNKCIJE

Rijetka matrica na koju je primjenjena funkcija i dalje ostaje rijetka.


Primjer 9.2.1 Na|imo sin i cos rijetke matrice C iz prethodnih primjera.
» sin(C)
ans =
(1,1) 0.1411
(2,2) 0.1411
(2,3) -0.5440
(3,3) 0.1411
(4,4) 0.1411
(5,5) 0.1411

» cos(C)
ans =
(1,1) -0.9900
(2,1) 1.0000
(3,1) 1.0000
(4,1) 1.0000
(5,1) 1.0000
(1,2) 1.0000
(2,2) -0.9900
(3,2) 1.0000
(4,2) 1.0000
(5,2) 1.0000
(1,3) 1.0000
(2,3) -0.8391
(3,3) -0.9900
(4,3) 1.0000
(5,3) 1.0000
(1,4) 1.0000
(2,4) 1.0000
(3,4) 1.0000
(4,4) -0.9900
(5,4) 1.0000
236
MATLAB for Windows
(1,5) 1.0000
(2,5) 1.0000
(3,5) 1.0000
(4,5) 1.0000
(5,5) -0.9900
Vidi se da matrica cos(C), iako sa svim nenultim vrijednostima, i dalje
ostaje rijetka. Ponekad je potrebno neku funkciju primijeniti samo na nenulte
elemente rijetke matrice. To se postiže naredbom spfun('fun',A) gdje je fun ime
MATLAB funkcije a A rijetka matrica.
Primjer 9.2.2 Na nenulte elemente matrice C primjeniti funkciju cos.
» spfun('cos',C)
ans =
(1,1) -0.9900
(2,2) -0.9900
(2,3) -0.8391
(3,3) -0.9900
(4,4) -0.9900
(5,5) -0.9900
Postoji čitav niz funkcija koji se odnosi na rijetke mattrice a koji se može
naći u tabeli 9.1. ili pomoću help-a. Ovdje ćemo pomenuti samo funkciju spones
koja nenulte elemente matrice argumenta pretvara u jedinice.
9.3 KONVERZIJA PUNE MATRICE U RIJETKU I OBRNUTO

Za konverziju pune matrice u rijetku koristi se naredba sparse. Ako je


argument ove naredbe matrica (koja može biti "puna" ili rijetka) rezultat ove
naredbe je rijetka matrica čije su dimenzije jednake dimenzijama polazne matrice.
Primjer 9.3.1 Matricu A=eye(4,3) možemo konvertovati u rijetku matricu,
naredbama
» A=eye(4,3)
A=
1 0 0
0 1 0
0 0 1
0 0 0
237
Rijetke matrice
» sparse(A)
ans =
(1,1) 1
(2,2) 1
(3,3) 1
» size(A)
ans =
4 3
Već smo vidjeli kako se rijetka matrica može konvertovati u punu. Za ovo
može služiti i naredba full.
» full(C)
9.4 GRAFI^KI PRIKAZ RIJETKE MATRICE I DRVETA

Pozicije nenultih elemenata rijetke matrice crtaju se naredbom spy.


Primjer 9.4.1 Nacrtati pozicije nenultih elemenata matrice C primjera 9.2.1.
» spy(C)
0

6
0 1 2 3 4 5 6
nz = 6

Slika 9.1 Grafički prikaz rijetke matice naredbom spy


Drvo je složeni tip podataka u brojnim programskim jezicima, koji se može
implementirati direktno (PROLOG i LISP) ili preko samoreferentnih struktura (C i
PASCAL). Svaki čvor drveta može da ima više sinova (grana drveta) a sinovi svoje
sinove, itd. ^vor koji nema roditelja je korijen stabla a čvorovi koji nemaju sinove su
listovi. Binarno drvo je ono drvo čiji svaki čvor može imati samo dva sina koje
nazivamo lijevi i desni sin čvora. Visina drveta je rastojanje od korijena drveta do
najudaljenijeg lista. U MATLAB-u se obilazak binarnog drveta definiše po srednjem
redosljedu koji se može opisati sljedećim algoritmom:
1o Obilazi se po srednjem redosljedu lijevo poddrvo korijena stabla;

238
MATLAB for Windows
2o Zatim se obilazi korijen;
3o Po srednjem redosljedu se obilazi desno poddrvo korijena stabla.
Za stablo sa 7 čvorova prikazano na slici 9.2 u krugovima su upisane
pozicije po srednjem redosljedu.
korijen
4

2 6

1 3 5 7 list

Slika 9.2. Puno binarno stablo visine 2


Za crtanje drveta u MATLAB-u služi funkcija treeplot(p,'c','d'), gdje je p
vektor čiji svaki element ukazuje koji je čvor roditelj datom čvoru. Za korijen se
usvaja da mu je korijen 0. 'c' je boja u kojoj se crta stablo dok je 'd' boja kojom se
crta veza korjena sa najudaljenijim listom stabla.
Primjer 9.4.2 Nacrtati stablo sa slike 9.2 naredbom treeplot.
» p=[2 4 2 0 6 4 6]
» treeplot(p,'y','r')
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.2 0.4 0.6 0.8 1
height = 2

Slika 9.3. Prikaz stabla funkcijom treeplot

239
MATLAB for Windows

glava deseta
ULAZNO IZLAZNE NAREDBE
MATLAB posjeduje velike mogućnosti razmjene podataka sa ostalim
programskim aplikacijama. Sa nekim naredbama koje mogu da sačuvaju i
proslijede rezultate rada u MATLAB-u već smo se sretali. Pregled ovih naredbi
kao i neke druge naredbe obra|en je u ovom poglavlju. Nove MATLAB ulazno-
izlazne naredbe niskog nivoa postoje u obliku analogije sa naredbama koje u C
programskom jeziku služe za rad sa fajlovima. MATLAB može rezultate svoga
rada da bilježi i u formi LOTUS tabele kao i u nekim drugim formatima.
Posebno interesantan dio MATLAB-a je korišćenje mogućnosti dinamičke
razmjene podataka sa programskim jezicima i Windows aplikacijama (tehnika
DDE - Dinamic Data Exchange) što u okviru ove knjige neće biti detaljnije
obrazlagano. Tako|e, MATLAB može da šalje podatke na zvučnik računara i da
ih smješta u format podataka .WAV koji je standard za obradu zvuka.
10.1 PREGLED JEDNOSTAVNIH U/I NAREDBI
Da bi podatke sačuvali za neku narednu sesiju MATLAB-a, koristimo
naredbu save čiji su oblici
save Snima sve podatke iz radnog prostora u
datoteku MATLAB.MAT;
save fajl Snima sve podatke iz radnog prostora u
datoteku FAJL.MAT;
save fajl A B C U datoteku FAJL.MAT snima samo matrice A,
B i C;
save fajl.ext A B C -ascii Zapisuje matrice A, B i C u datoteku
FAJL.EXT u osmobitnom ASCII zapisu;
save fajl.ext A B C -ascii -double Zapisuje matrice A, B i C u datoteku
FAJL.EXT u šesnaestobitnom ASCII zapisu;
save fajl.ext A -ascii -double -tab Zapisuje matricu A u datoteku
FAJL.EXT u šenaestobitnom ASCII zapisu sa
Tab znakom kao razmakom izme|u podataka.
Za učitavanje podataka sa diska koristi se naredba load čiji su oblici
load Učitavanje iz datoteke MATLAB.MAT;
load fajl Učitavanje podataka iz datoteke FAJL.MAT;

241
Ulazno izlazne naredbe
load fajl.ext Učitavanje podataka iz tekstualne ASCII
datoteke (ovdje je ekstenzija datoteke
obavezna);
Svi podaci koji se pojavljuju u MATLAB-ovom komandnom prozoru
mogu da se snime u dnevničku datoteku - diary, naredbom diary imefajla.ext.
Kraj zapisivanja u dnevnik obilježava naredba diary off.
U širem smislu u izlazne naredbe MATLAB-a spadaju naredbe za
grafičko postprocesiranje meta i print pomoću kojih se u raznim formatima
mogu zapisati plodovi MATLAB-ovog grafičkog rada.
10.2 ULAZNO/IZLAZNE NAREDBE NISKOG NIVOA
10.2.1 OTVARANJE I ZATVARANJE FAJLA
Da bi se otvorio neki fajl koristi se naredba fopen čiji je opšti oblik
F=fopen('imefajla','namjena')
gdje je F cijelobrojni numerički identifikator pomoću kojeg se upravlja fajlom.
F=0, F=1 i F=2 su već predefinisani i odnose se respektivno na standardni ulaz
(obično tastatura), standardni izlaz (obično monitor) i standardnu grešku
(obično monitor). 'imefajla' je naziv datoteke sa kojom se želi raditi. Dok su
moguće vrijednosti namjene
'r' čitanje;
'w' zapisivanje (ako datoteka ne postoji biće kreirana);
'a' dodavanje (ako datoteka ne postoji biće kreirana);
'r+' čitanje i zapisivanje (ne kreira se)
'w+' odsijecanje ili kreiranje za čitanje i pisanje;
'a+' čitanje i dodavanje (ako je potrebno datoteka se kreira).
Kod otvaranja fajla pretpostavljeno je da su u pitanju binarni fajlovi
(ovdje postoje bitne razlike u zavisnosti od verzija MATLAB-a pa se treba
informisati u help-u). Ako se želi fajl otvoriti u tekstualnom režimu u namjeni je
potrebno dodati slovo t. Npr. 'rt' ili 'wt+'.
Fajl čiji je numerički identifikator F zatvara se naredbom fclose(F), dok
se naredbom fclose('all') zatvaraju svi otvoreni fajlovi osim onih sa
identifikatorima F=0, F=1 i F=2. Naredba fclose vraća nulu ako je zatvaranje
uspješno obavljeno i -1 ako nije.
10.2.2 NEFORMATIZOVANI ULAZ/IZLAZ

242
MATLAB for Windows
Za čitanje binarnih podataka iz fajla koristi se naredba fread čiji je opšti
oblik
[A,B]=fread(F,vel,'preciznost')

gdje je A matrica u koju se zapisuju podaci iz datoteke, B broj uspješno


pročitanih podataka, F cjelobroni numerički identifikator datoteke koja je
otvorena naredbom fopen. vel je veličina podataka koji se žele pročitati i ima
vrijednosti
N Smještanje N elemenata u vektor kolonu;
inf ^itanje podataka do kraja fajla;
[M,N] Smještanje podataka u matricu dimenzija MxN, N - može biti inf.
'preciznost' definiše tip podatka koji se želi čitati kao i koliko svaki
podatak zauzima memorije. Moguće vrijednosti su
'char' Karakter 8-bita;
'schar' Označeni karakter 8-bita;
'short' Cijeli broj 16-bita;
'int' Cijeli broj 16 ili 32 bita;
'long' Cijeli broj 32 ili 64 bita;
'float' Broj u pokretnom zarezu 32 bita;
'double' Broj u pokretnom zarezu 64 bita;
'uchar' Neoznačeni karakter 8-bita;
'ushort' Neoznačeni cijeli broj;
'uint' Neoznačeni cijeli broj 16 ili 32 bita;
'ulong' Neoznačeni cijeli broj 32 ili 64 bita.
Za neformatizovano zapisivanje matrice A u datoteku F koristi se
naredba fwrite u obliku
B=fwrite(F,A,'preciznost')
B je broj uspješno zapisanih podataka, dok preciznost ima isto značenje kao u
naredbi fread.
Primjer 10.2.1 Matricu veličine 5x5 slučajnih cijelih brojeva od 0 do 15 snimiti u
datoteku pod imenom prva.bin.

» a=fopen('prva.bin','w');
» fwrite(a,floor(16*rand(5)),'int')
ans =
25
» fclose(a)

243
Ulazno izlazne naredbe
ans =
0
Otvorimo datoteku prva.bin za čitanje i pročitajmo njen sadržaj.
» a=fopen('prva.bin','r');
» fread(a,[5 5],'int')

ans =

3 6 8 6 8
0 8 10 10 1
10 13 0 9 10
10 0 6 14 6
14 0 1 13 11

» fclose(a)

10.2.3 FORMATIZOVANI ULAZ/IZLAZ


Za zapisivanje formatizovanih podataka u fajl služi naredba fprintf čiji
je opšti oblik
B=fprintf(F,'format',A,...)
gdje je F identifikator fajla i A matrica koja se zapisuje. Vidimo da ovom
naredbom u fajl možemo da snimimo više različitih kombinacija formata i
matrice koja se zapisuje. 'format' predstavlja format zapisa koji je potpuno
analogan C programskom jeziku. Moguće slovne oznake tipa konverzije
podataka su kao i u C-u karakteri d, i, o, u, x, X, f, e, E, g, G, c i s kojima
prethodi znak % (procenat). Ko je radio u programskom jeziku C zna značenje
ovih oznaka a ovdje samo da pomenemo da %d ukazuje na cijele brojeve, %f
na brojeve u pokretnom zarezu, %c na karakter i %s na string.
Primjer 10.2.2 Kreirati fajl tabela u kojem se nalaze vrijednosti nezavisno
promjenljive -1≤x≤1 sa korakom 0.1 kao i odgovarajuće vrijednosti sin(x) i
cos(x). Neka svi podaci budu zapisani u pokretnom zarezu i to x sa pet mjesta
od toga 3 decimalna, a sin(x) i cos(x) 12 mjesta od toga 8 decimalnih.
» x=-1:0.1:1; y=[x;sin(x);cos(x)];
» F=fopen('tabela','w');
» fprintf(F,'%5.3f %12.8f %12.8f\n',y);
» fclose(F)

244
MATLAB for Windows
Oznaka \n predstavlja znak za novi red što će reći da se poslije zapisa
tri elementa podaci smještaju u novi red. Opcioni rezultat naredbe fprintf
ukazuje na broj uspješno prenesenih podataka.
Za čitanje iz fajla formatizovanih podataka koristi se naredba fscanf čiji
je opšti oblik
[A,B]=fscanf(F,'format',vel)
gdje je A matrica u koju se smještaju podaci, B opcioni izlaz i ukazuje na broj
uspješno prenesenih podataka, F je numerički identifikator fajla, 'format' ima
isto značenje kao u naredbi fprintf a vel ima isto značenje kao u naredbi fread.
Primjer 10.2.3 Pročitati sa diska sadržaj fajla koji je snimljen u prethodnom
primjeru
» F=fopen('tabela','r');
» [a,b]=fscanf(F,'%f',[3 21])

a=
Columns 1 through 7
-1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000
-0.8415 -0.7833 -0.7174 -0.6442 -0.5646 -0.4794 -0.3894
0.5403 0.6216 0.6967 0.7648 0.8253 0.8776 0.9211
Columns 8 through 14
-0.3000 -0.2000 -0.1000 0 0.1000 0.2000 0.3000
-0.2955 -0.1987 -0.0998 0 0.0998 0.1987 0.2955
0.9553 0.9801 0.9950 1.0000 0.9950 0.9801 0.9553
Columns 15 through 21
0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
0.3894 0.4794 0.5646 0.6442 0.7174 0.7833 0.8415
0.9211 0.8776 0.8253 0.7648 0.6967 0.6216 0.5403
b=
63
Ovim smo pročitali sadržaj fajla i stigli do njegovog kraja, novi pokušaj
čitanja neće dovesti do čitanja podataka
» fscanf(F,'%f',1)
ans =
[]
Me|utim, zatvorimo fajl pa ga ponovo otvorimo i pročitajmo 6 podataka
u matrici 2x3
» fclose(F)
» F=fopen('tabela','r');
245
Ulazno izlazne naredbe
» [a,b]=fscanf(F,'%f',[4 3])
a=
-1.0000 -0.7833 0.6967
-0.8415 0.6216 -0.7000
0.5403 -0.8000 -0.6442
-0.9000 -0.7174 0.7648
b=
12
sada se može nastaviti čitanje podataka, npr. može se pročitati matrica od 2x2
elemenata u nastavku
» [a,b]=fscanf(F,'%f',[2 2])
a=
-0.6000 0.8253
-0.5646 -0.5000
b=
4
» fclose(F);
U MATLAB-u postoji i dvije naredbe kojima se čita jedan red matrice
fgetl(F) i fgets(F), s time što prva naredba ne prenosi oznaku za kraj reda a
druga prenosi.

10.2.4 POZICIONIRANJE U FAJLU


Veoma važne za rad sa fajlovima su naredbama za pozicioniranja u
fajlu. Za pomijeranje pozicije čitanja i zapisivanja u postojećem fajlu koristi se
naredba fseek čiji je oblik
S=fseek(F,pravac,pocetak)
gdje je F numerički identifikator fajla, pravac veličina koja govori o pravcu
pomjeraja u fajlu. Ako je pravac>0 kretanje je ka kraju fajlu, pravac=0 stojanje
na mjestu i pravac<0 ka početku fajla. pocetak je pozicija od koje se vrši
pomijeranje a moguće su vrijednosti
'bof' ili -1 početak fajla;
'cof' ili 0 trenutna pozicija;
'eof' ili 1 kraj fajla.
Rezultat naredbe S je jednak 0 ako je pozicioniranje uspjelo i -1 ako
nije.
Primjer 10.2.4 Otvorimo fajl tabela, pročitajmo prvih šest podataka iz njega,
zatim preskočiti dio matrice, pa pročitati slijedećih 12 podataka u matrici 3x4.

246
MATLAB for Windows
» F=fopen('tabela','r');
» fscanf(F,'%f',6)
ans =
-1.0000
-0.8415
0.5403
-0.9000
-0.7833
0.6216
» fseek(F,0,-1)
ans =
0
» fscanf(F,'%f',4)
ans =
-1.0000
-0.8415
0.5403
-0.9000
» fclose(F);
Trenutnu poziciju u fajlu možemo pročitati naredbom ftell(F).
Za premotavanje fajla na početak može se koristiti naredba frewind(F)
što se može uraditi i naredbom
» fseek(F,0,-1);
Ako se želi znati da li je pokazivač fajla na kraju fajla koristi se naredba
feof(F) čiji je rezultat 1 ako se stiglo do kraja fajla a nula ako nije.
10.3 ZAPISIVANJE FAJLOVA U LOTUS-FORMATU
MATLAB pored već vi|enih formata zapisa podatke može da zapiše i
čita u nizu drugih formata. Jedan od tih formata je zapis matrice u formatu
LOTUS radne tabele .wk1. Za čitanje sa diska LOTUS radne tabele i njeno
smještanje u matricu M koristi se naredba wk1read
M=wk1read('file',r,c)
čime se sadržaj LOTUS radne tabele file.wk1 smješta u matricu. Veoma često
radne tabele posjeduju zaglavlje za koje se koristi prvih nekoliko redova i
kolona matrice. Za definisanje tog razmaka koriste se opcioni argumenti
naredbe wk1read r i c.
Matrica se može zapisati u LOTUS tabelu naredbom wk1write čiji je
opšti oblik
wk1write('file',M,r,c)
247
Ulazno izlazne naredbe
čime se u radnu tabelu file.wk1 smješta matrica M a r i c su ofset od kojega
počinje radna tabela.
10.4 SNIMANJE I U^ITAVANJE ZVU^NIH PODATAKA
Za snimanje vektora u obliku MS Windows 3.1x .WAV formatu koristi
se naredba
wavwrite(y,F,'fajl')
čime se niz podataka u vektoru y odabran učestanošću F smješta u fajl.wav.
Npr. naredbom
» y=floor(256*rand(1,1024));
» wavwrite(y,10000,'C:\WINDOWS\SUM');
se snima slučajni šum inteziteta od 0 do 255 u direktorijumu C:\WINDOWS,
pod imenom SUM.WAV, koji se može priključiti nekom postojećem Windows
doga|aju (pomoću Control Panel-a i programa Sounds). Naredbom wavwrite
se snimaju 8-bitni cijelobrojni podaci.
Podaci iz fajla se mogu čitati naredbom y=wavread('fajl') a ako želimo
znati i učestanost odabiranja [y,F]=wavread('fajl').
Na primjer, naredbom
» [y,F]=wavread('C:\WINDOWS\DING')
»F
F=
22050
se učitava sadržaj fajla DING.WAV iz direktorijuma C:\WINDOWS. Dobili smo
da je signal odabran učestanošću F=22050.
MATLAB posjeduje i mogućnost reprodukcije signala pomoću zvučnika
(ugra|enog ili spoljašnjeg) naredbom sound(y).

248
MATLAB for Windows

glava jedanaesta

MATLAB OKRUŽENJE
11.1 OSNOVNI MATLAB I DODATNI MODULI
U verziji MATLAB-a 4.2, pored osnovnog MATLAB-a mogu se
instalisati i dodatni toolbox-ovi i program SIMULINK. Toolbox programski
moduli predstavljaju skupove funkcija namijenjenih za rješavanje specifičnih
inžinjerskih problema. SIMULINK je dodatni MATLAB modul koji je namjenjen
simulaciji dinamike sistema. Ovi dodatni moduli neće biti detaljnije obrazlagani
u okviru ove knjige.
11.2 STRUKTURA MATLAB-A
Prilikom instalacije MATLAB-a kreira se direktorijum MATLAB (a može
mu se dati i drugo ime) sa nizom poddirektorijuma. Ovi direktorijumi čine put po
kojem se mogu pretraživati MATLAB funkcije. Uvid u put pretraživanja se može
dobiti naredbom
» path
Neki direktorijum se može dodati putu pretraživanja naredbom
path(C,path) gdje je C direktorijum koji se dodaje putu pretraživanja. Tako se
naredbom
» path('C:\TC',path)
dodaje direktorijum C:\TC putu pretraživanja naredbi.
Sadržaj tekućeg direktorijuma se može pogledati naredbom
» dir
Za naredbu dir važe sva značajnija MS DOS pravila tako je naredbom
» dir c*.*
izlistavaju iz tekućeg direktorijuma svi fajlovi koji počinju slovom c.
Naredbom what se izlistavaju tri grupe MATLAB fajlova iz tekućeg
direktorijuma (fajlovi koji imaju .M, .MAT i .MEX ekstenziju).
U MATLAB-u se može pomoću naredba cd vršiti promjena tekućeg
direktorijuma. Oblici ove naredbe su
cd prikazuje ime tekućeg direktorijuma;
cd.. čini aktivnim direktorijum iznad tekućeg;
cd imedir čini tekućim direktorijum imedir.

249
MATLAB okruženje
Napomenimo da se prilikom startovanja MATLAB-a pokreće program
matlabrc.m u kojem su podešeni osnovni parametri rada. Pored ovog fajla
korisnik može kreirati fajl pod nazivom startup.m koji će se izvršavati nakon
matlabrc.m a prije početka rada u MATLAB-u.
11.3 MENI KOMANDNOG PROZORA MATLAB-A
U liniji menija nalaze se opcije File, Edit, Options, Windows i Help.
11.3.1 FILE MENI
U File meniju reguliše se rad sa fajlovima. Opcije ovog menija su
New otvaranje novog - m fajla (M-file);
otvaranje novog grafičkog prozora (Figure);
otvaranje novog SIMULINK modela (Model);
Open M-file otvaranje postojećeg m-fajla., nakon čega se
otvara dialog box sa slike 11.1 u kojem se bira
fajl koji se želi otvoriti;

Slika 11.1 Open dialog box


Save Workspace As snima radni prostor u .mat fajl koji se
specificira u dialog boxu koji je sličan onom sa
slike 11.1;
Run M-file aktiviranje m-fajla. Treba upisati ime fajla koji
se želi otvoriti ili sa Browse potražiti taj fajl;
Print štampanje komandnog prozora;
Print Setup izbor štampača i postavljanje njegovih
parametara;
Exit MATLAB izlazak iz MATLAB-a.
11.3.2 EDIT MENI

Namjena Edit menija je rad sa Clipboard-om, to jest smještanje i


uzimanje podataka iz ove memorije.
250
MATLAB for Windows
Cut briše selektovani dio teksta iz komandnog
prozora i smješta ga u Clipboard;
Copy kopira selektovani dio teksta iz komandnog
prozora u Clipboard;
Paste smještanje sadržaja Clipboard-a u komandni
prozor;
Clear Session čisti komandni prozor (slično MS DOS naredbi
cls).
11.3.3 OPTIONS MENI

Ovaj meni služi za postavljanje parametara MATLAB-ovog radnog


okruženja. Opcije menija su
Numeric Format adekvatno naredbi format;
Turn Echo on (ili off) adekvatno naredbi echo;
Enable (ili Disable)
Background Process omogućuje (ili onemogućuje) odvijanje
procesa u pozadini;
Command Window Font odre|uje font koji se koristi u komandnom
prozoru. Pored fonta i njegove veličine može
se podesiti boja fonta i boja pozadine (slika
11.2).

Slika 11.2 Izbor fonta koji se primjenjuje u komandnom prozoru


Uicontrol Font font koji se koristi u kontrolama (uicontrol);
Editor Preference izbor editora u kojem se kreiraju m-fajlovi.
Uobičajeno je to C:\Windows\Notepad.EXE a
može i bilo koji drugi MS DOS i WINDOWS
editor (EDIT, NE, WRITE, itd).

251
MATLAB okruženje

11.3.4 WINDOWS MENI


Omogućuje prelazak izme|u otvorenih MATLAB prozora (komandnog i
grafičkih koji se pojavljuju u spisku ispod Windows).
11.3.5 HELP MENI
U ovom meniju se nalazi pomoćni program koji pruža informacije o
svom MATLAB funkcijama. Opcije ovog menija su:
Table of Contents help izdijeljen po oblastima u obliku hiperteksta;
Index abecedni spisak svih funkcija;
About informacije o verziji MATLAB-a.
11.4 OPCIJE MENIJA GRAFI^KOG PROZORA
Standardne opcije menija grafičkog prozora su File, Edit, Windows i
Help.
11.4.1 FILE MENI
Opcije ovog menija su
New Figure otvaranje novog grafičkog prozora;
New otvaranje novog m-fajla, grafičkog prozora ili SIMULINK modela;
Close zatvaranje grafičkog prozora;
Print štampanje grafičkog prozora;
Printer Setup podešavanje priključenog štampača;
Exit MATLAB izlaz iz MATLAB-a.
11.4.2 EDIT MENI
Copy kopiranje sadržaja grafičkog prozora u Clipboard;
Copy Options izbor formata za smještanje podataka u Clipboard;
Clear figure briše sadržaj grafičkog prozora.
Windows i Help meni su isti kao u meniju komandnog prozora.

252
MATLAB for Windows

LIteratura

[1] G. H. Golub, C. F. Van Loan, Matrix Computations, The John Hopkins


University Press, Baltimore, USA, 1984.
[2] G. Strang, Linear Algebra and its Applications, Academic Press, New York,
USA, 1976.
[3] G. W. Stewart, Introduction to Matrix Computations, Academic Press, New
York, USA, 1973.
[4] C. Moler, J. Little, S. Bangert, PC-MATLAB for MS-DOS Personal
Computers, The Math Works, Inc., Sherborn, USA, 1987.
[5] Lj. Stanković, Digitalna Obrada Signala, Naučna knjiga, Beograd, 1990.
[6] Lj. Stankovi|, Z. Uskoković, PC MATLAB sa elemantima DOS-a, Epsilon,
Titograd 1991.
[7] M. Cvetkovi|, R. Janči|, D. Mitrakovi|, Matematički programski alati,
MathCad 5.0+, MatLab 4.0, Maple V2.0, Mathematica 2.2, Grifon, Beograd
1996.
[8] D. Hanselman, B. Littlefield, The Student Edition of MATLAB: version 4.0,
user guide, MathWorks 1995.

283

You might also like