Professional Documents
Culture Documents
Ljubiša Stanković
i
SADR@AJ
PREDGOVOR .................................................................................i
SADR@AJ .................................................................................... iii
UVOD............................................................................................ xi
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
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
1
Kako početi
2
MATLAB for Windows
3
Kako početi
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.
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.
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.
9
Osnovne funkcije
DDE Toolbox.
Version 1.0 1-Dec-93
Copyright (c) 1984-94 by The MathWorks, Inc.
13
Osnovne funkcije
ans =
3 5
ll= 5
ans= 4
m= 3
n= 5
d= 9
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.
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
17
Osnovne funkcije
Primjer 1.4.1 Izračunati:
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
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.
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 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
2.1 TRANSPONOVANJE
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
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
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
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
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.
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.
Kompleksne funkcije
Numeričke funkcije
Trigonometrijske funkcije
Eksponencijalne funkcije
49
Elementarne operacije sa matricama i poljima brojeva
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
⎡ 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 ) ⎦
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
52
MATLAB for Windows
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
⎡− 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
β( x , y ) = ∫ t x −1 (1 − t ) y −1 dt
0
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
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
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
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
14
12
10
0
1 1.5 2 2.5 3 3.5 4 4.5 5
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
71
Grafika
⎡ 1 −1 3 ⎤
⎢ 2 3 0 ⎥⎥
⎢
⎢ 2 5 − 1⎥
y=⎢ ⎥
⎢ 5 4 − 2⎥
⎢−1 3 0 ⎥
⎢ ⎥
⎢⎣ − 2 2 1 ⎥⎦
-1
-2
1 2 3 4 5 6
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
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
2.5
1.5
0.5
-0.5
-1
-1 -0.5 0 0.5 1
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 *
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
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
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
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
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
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
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
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
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
85
Grafika
Slika 3.19. Prikaz faze i ugla kompleksnih veličina pomoću funkcija compass i
feather
86
MATLAB for Windows
-2
-4
-6
-8
-8 -6 -4 -2 0 2 4 6 8
40
30
20
10
0
40
20 40
0 20
0
-20 -20
-40 -40
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
-2
-4
20
15 20
10 15
10
5 5
0 0
90
MATLAB for Windows
0.5
-0.5
30
20 30
20
10 10
0 0
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
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
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
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
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
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
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
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
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)
98
MATLAB for Windows
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
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
100
MATLAB for Windows
102
MATLAB for Windows
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.
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
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.
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
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)).
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
» 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
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
I= ∫ f ( x )dx ≈ ∑ f ( xi )∆xi
a i =1
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
−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
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
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
121
Analiza podataka
4 izvod
-2
-4 funkcija
-6
-8 -6 -4 -2 0 2 4 6 8
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
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.
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
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
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
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
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
I= ∫ f ( x)dx
a
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
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.
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
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)
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)
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
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
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
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
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.
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)));');
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'');');
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
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.
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]);
183
MATLAB for Windows
glava sedma
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) ⎦
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.
⎡ 1 3⎤
x=⎢ ⎥
⎣2 7⎦
188
MATLAB for Windows
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
f ( x) = ∑Fe
k =−∞
k
jkxπ / l
Fk = 1
2l ∫ f ( x )e
0
− jkxπ / l
dx
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
F ( jω ) = ∫ f ( x )e
− jωx
dx
−∞
F ( jω ) = ∑ f (n∆x)e
n =1
− jωn∆x
∆x
∑ ~f (n)e
N N
F (k ) = ∑n =1
f (n∆x )e − jk∆ωn∆x ∆x =
n =1
− jkn 2 π / N
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
0.014
0.012
0.01
0.008
0.006
0.004
0.002
0
-4 -2 0 2 4 6 8
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
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
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).
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
198
MATLAB for Windows
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
199
Polinomi i obrada signala
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
0.2
0.15
0.1
0.05
-0.05
0 10 20 30 40 50 60
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
0.3
0.25
0.2
0.15
0.1
0.05
0
0 20 40 60 80 100
202
MATLAB for Windows
203
MATLAB for Windows
glava osma
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)
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
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
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
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
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.
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.
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
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.
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.
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
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).
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.
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).
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
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
233
Rijetke matrice
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
» 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
6
0 1 2 3 4 5 6
nz = 6
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
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
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')
» 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)
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.
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;
251
MATLAB okruženje
252
MATLAB for Windows
LIteratura
283