Você está na página 1de 100

MATLAB

Osnove


ta je MATLAB?
programsko okruenje za raunanje u tehnici
u osnovi je matematiki alat
ima veliku primenu u primenjenim disciplinama - inenjerstvu
poseduje visoke performanse u numerikim izraunavanjima i
vizuelizaciji podataka
Matlab je interpreter i programski jezik
prua i interaktivni rad i batch-obradu
osnovni elemenat je matrica koja ne zahteva dimenzionisanje
veina problema se jednostavno reava u odnosu na programske
jezike poput Fortran-a, Pascal-a, C-a, ...
nazvan je prema matrix laboratory
Osnovne osobine
Jezik visokog nivoa za tehniko raunanje
Razvojno okruenje za upravljanje programskim kodom, datotekama
i podacima
Interaktivni alati za iterativno istraivanje, dizajn i reavanje
problema
Biblioteka matematikih funkcija iz linearne algebre, statistike,
Forijeove analize, fitriranja, optimizacije, numerike integracije
2D i 3D grafike funkcije za prikaz podataka
Alati za kreiranje korisnikog interfejsa
Funkcije za integraciju MATLAB algoritama sa spoljanjim
aplikacijama i programskim jezicima: Fortran, C, C++, Java, COM, i
Microsoft Excel
Primena
na Univerzitetima je alat za obuku
u industriji se upotrebljava za istraivanje i
reavanje praktinih inenjerskih i matematikih
problema
tipina upotreba pokriva:
Matematiku i numeriku
Razvoj algoritama
Modeliranje, simulaciju i razvoj prototipova
Analizu podataka, istraivanja i vizuelizaciju
Naunu i inenjersku grafiku
Razvoj aplikacija, ukljuujui grafiki
korisniki interfejs

poseduje kolekcije metoda (alata, reenja)
specifinih za odreene oblasti - Toolbox-ovi

MATLAB familija proizvoda
http://www.mathworks.com
Toolbox-ovi
Toolbox je kolekcija (biblioteka) izabranih
funkcija (M-datoteka) namenjena reavanju
problema odreenje oblasti
oni proiruju mogunosti Matlab-a
postoje toolbox-ovi za oblasti
analize signala
automatskog upravljanja
simulacije dinamikog ponaanja sistema
identifikacije sistema
vetakih neuronskih mrea
fuzzy sistema
optimizacije
analize robustnosti sistema
...
postojei toolbox-ovi se usavravaju, a novi
nastaju
Aerospace Toolbox
Bioinformatics Toolbox
Communications Toolbox
Control System Toolbox
Curve Fitting Toolbox
Data Acquisition Toolbox
Database Toolbox
Datafeed Toolbox
Excel Link
Filter Design Toolbox
Filter Design HDL Coder
Financial Toolbox
Financial Derivatives Toolbox
Fixed-Income Toolbox
Fixed-Point Toolbox
Fuzzy Logic Toolbox
GARCH Toolbox
Genetic Algorithm and Direct Search Toolbox
Image Acquisition Toolbox
Image Processing Toolbox
Instrument Control Toolbox
Mapping Toolbox
Model-Based Calibration Toolbox
Model Predictive Control Toolbox
Neural Network Toolbox
Optimization Toolbox
OPC Toolbox
Partial Differential Equation (PDE) Toolbox
RF Toolbox
Robust Control Toolbox
Signal Processing Toolbox
Spline Toolbox
Statistics Toolbox
Symbolic Math Toolbox
System Identification Toolbox
Virtual Reality Toolbox
Wavelet Toolbox

Raunarske platforme
Podrane su brojne raunarske platforme
i operativni sistemi
kod pisan u Matlab-u je prenosiv, ukljuujui i aplikacije sa
korisnikim interfejsom u obliku prozora
Tekua verzija MATLAB 7.3
sastavni deo paketa R2006b od 1. septembra 2006
Radno okruenje Matlab-a (nekad )
ine ga:
komandni prozor (samo je jedan)
nekoliko grafikih prozora
korisnikov editor za pisanje M-skript datoteka
Komandni prozor
je mesto gde se daju (kucaju) naredbe interpreteru i ispisuju rezultati
sekvencijalno prihvata i izvrava naredbe
poseduje linijski editor
Grafiki prozor
obino prikazuje 2D i 3D dijagrame
vie dijagrama se moe prikazati u razliitim prozorima i/ili se jedan
prozor moe podeliti na nekoliko delova
automatski se pojavljuje kod izvravanja grafikih naredbi
sadraj prozora se moe odtampati na nekoliko naina
Radno okruenje Matlab-a (i sad )
Sastoji se od veeg broja prozora:
Command Window (ranije komandni prozor)
Command History
Launch Pad
Help Browser
Current Directory Browser
Workspace Browser
Array Editor
Editor/Debugger
Ostali alati:
Unapreen uvoz i izvoz podataka
Profiler pomae u otkrivanju uskih grla u aplikaciji
Podrka Source Control System-ima
Notebook pristup Matlab-u iz programa za obradu teksta (MS Word)
Drugi naini povezivanja i prenosa podataka
prenos podataka preko datoteke (u binarnom ili ASCII formatu)
prenos teksta i grafike preko Windows Clipboard-a
povezivanje drugih aplikacija sa Matlab-om preko DDE (Dynamic
Data Exchange) mehanizma
(Tekua verzija Matlab-a podrava COM (Component Object Model))
Matlab moe da radi kao:
server
klijent
Matlab poseduje biblioteku C i Fortran funkcija, C++ klasa
za rad sa Matlab-ovim datotekama podataka i za osnovne matrine
operacije
mogu se upotrebiti za pisanje korisnikovih funkcija koje se
pozivaju iz Matlab-ovog okruenja

Matlab promenljive
naziv promenljive ine slova i brojevi
(mora poeti slovom)
(prvih 19 (31 kod verzije ) znakova se uzima u obzir)

razlikuju se mala i velika slova (npr. a i A su dve promenljive)
Matlab izraz
Oblik
promenljiva = izraz

izraz ine: nazivi promenljivih, funkcije, operatori i drugi specijalni
znaci.
promenljiva je niz
ako se izostavi promenljiva sa leve strane znaka =, privremena
promenljiva ans prima vrednost izraza
kod dugakih izraza, kada je potrebno unos nastaviti u narednom redu,
predhodni red zavriti sa ... (tri take)
znak ; na kraju izraza spreava da se ispie vrednost promenljive

Brojevi
Realni 3 -99 0.0001 -9.639825 1.62e-20 -10.34e200
opseg od 2.2251*10
-308
do 1.7977*10
308

Kompleksni -4+7i 8i -9j -9*j 1.23-12e-4j
imaginarna jedinica je: i ili j
funkcije
realna vrednost broja real(z)
imaginarna vrednost broja imag(z)
konjugovano kompleksna
vrednost conj(z)
moduo abs(z)
argument angle(z)
nizovi kompleksnih brojeva


z
real(z)
imag(z)
conj(z)
abs(z)
angle(z)
8+i9
Aritmetike operacije
Aritmetike operacije:
sabiranje +
oduzimanje -
mnoenje *
delenje (levo) /
desno delenje \
stepenovanje ^
Redosled operacija je odreen na osnovu
prioriteta:
1. unarni minus
2. stepenovanje
3. mnoenje ili delenje
4. sabiranje ili oduzimanje
upotrebom ( ) moe se uticati na
redosled izraunavanja

4 \ 1
ans =
0.2500

4 / 1
ans =
4
1 + 3 * 2 ^ 4 / 6 - 9
ans =
0
1 + (3 * 2) ^ 4 / (6 - 9)
ans =
- 431
Posebni brojevi
Posebni brojevi:
Ludolfov broj pi (3.1415...)
Imaginarna jedinica i ili j
beskonana vrednost Inf
neodreena vrednost (not a number) NaN
podrazumevana tanost eps (2.2204e-16)
privremena promenljiva ans
konstante opsega brojeva realmin i
realmax

Delenje nulom ne prekida program,
ve nastaje vrednost Inf
NaN je rezultat neodreenih izraza
Inf/Inf ili
0/0
x = Inf / Inf
x =
NaN

1 / 0
Warning: Divide by zero
ans =
Inf
Nizovi u Matlab-u
osnovni tip podataka je niz (Array)
skalar je niz dimenzije 1x1
slino je i sa vektorima u obliku kolone ili vrste
elemenat niza moe biti kompleksan broj
niz se moe tumaiti kao
niz koeficijenata polinoma
niz slova u string-u
bit-mapirana slika (dvodimenzioni niz)
zvuni zapis
podran je rad sa retkim nizovima
dimenzije niza se ne unose
potreban memorijki prostor za niz se automatski zauzima (alocira)
veliina niza nije ograniena i moe prevazii raspoloivi RAM
raunara (zahvaljujui virtuelnoj memoriji)

Nastanak brojnog niza
Unosom kao eksplicitna lista
brojeva ili izraza
kao rezultat izvravanja
ugraene naredbe ili funkcije
(Matlab-ove unutranje
funkcije)
formiranjem u M-datoteci
(Matlab-ovoj spoljanjoj
funkciji)
uitavanjem iz datoteke
podataka


a = [ 1 2 3; 4 5 6 ]
a =
1 2 3
4 5 6
b = sum(a)
b =
5 7 9
save abdat a b
clear
b
??? Undefined function or variable b.
load abdat
b
b =
5 7 9
Funkcije
Tip funkcije (nebitan za korisnika)
ugraena (unutranja, najbre se izvrava)
M-datoteka iz MATLAB biblioteke (spoljanja)
funkcija korisnika (spoljanja, M-datoteka)
Grupe funckcija:
elementarne matematike
specijalne funkcije
elementarne matrine
specijalne matrice
za dekompoziciju i faktorizaciju matrica
za analizu podataka
za rad sa polinomima
za reavanje diferencijalnih jednaina
za optimizaciju i rad sa nelinearnm jednainama
za numeriku integraciju
...
pomo o funkciji se dobija pomou help ime_funkcije
svaki Toolbox dodaje nove funkcije
Poziv funkcije
funkcija se poziva njenim imenom,
tj. imenom M-datoteke
clc % brisanje ekrana
ako funkcija ima parametre navode
se u malim zagradama ( ) razdvojeni
zarezom
ako funkcija vraa vrednosti,
promenljive koje ih prihvataju se
navode u uglastim zagradama [ ]
razdvojene zarezom
redosled parametara je bitan
ako funkcija dozvoljava, ne moraju
se navesti svi parametri u pozivu
i ne moraju se preuzeti sve vrednosti
ugnjedeni pozivi
atan2(-1,-1) == -pi + pi/4
ans =
1
x = [1 3 2];
a = max(x)
a =
3
[m,i] = max(x)
m =
3
i =
2
x = pi / 4;
log( cos( sin(x) + 1 ) - 5 )
ans =
1.6363 + 3.1416i
Matematike funkcije
primenjuju se nad matricom elemenat po elemenat
trigonometrijske: sin cos tan asin acos atan atan2
sinh cosh tanh asinh acosh atanh
neke elmentarne funkcije
apsolutna vrednost abs
kvadratni koren sqrt
signum sign
ostatak delenja rem(x,y)
exponencijalna exp
prirodni logaritam log
logaritam osnove 10 log10, osnove 2 log2
zaokruivanje vrednosti na celobrojnu
ka najbliem celom broju round
ka nuli fix
ka - floor
ka + ceil
specijalne funkcije: bessel, beta, gamma, ...
x=pi*[1/3 1/6];

y=sin(x)
y =
0.8660 0.5000

2*y-1
ans =
0.7321 -0.0000

2*y-1 >= 0
ans =
1 0

floor(2*y-1)
ans =
0 -1
Tipovi podataka
ima 15 ugraenih
tipova podataka
(klasa)





svaki tip je viedimenzioni niz
dvo-dimenzioni nizovi su matrice
sparse su retki nizovi
sloene strukture podataka: cell i structure
numeric i array su virtuelni tipovi podataka, nose neke zajednike
osobine za izvedene tipove
korisnikov tip: user classes, Java classes
Tipovi podataka - primeri
Tip Primer
int8, uint8, int16,
uint16, int32,
uint32, int64,
uint64
uint16(65000)
single single(3 * 10^38)
double 3 * 10^300 5 + 6i
logical magic(4) > 10
char 'Hello'
cell array a{1,1} = 12;
a{1,2} = 'Red';
a{1,3} = magic(4);
structure a.day = 12;
a.color = 'Red';
a.mat = magic(3);
function handle @sin
user class polynom([0 -2 -5])
Java class java.awt.Frame
Numeriki tipovi
Tip Opseg M-funkcija
Celobrojan
Oznaen 8-bit integer -2
7
to 2
7
-1 int8
Oznaen 16-bit integer -2
15
to 2
15
-1 int16
Oznaen 32-bit integer -2
31
to 2
31
-1 int32
Oznaen 64-bit integer -2
63
to 2
63
-1 int64
Neoznaen 8-bit integer 0 to 2
8
-1 uint8
Neoznaen 16-bit integer 0 to 2
16
-1 uint16
Neoznaen 32-bit integer 0 to 2
32
-1 uint32
Neoznaen 64-bit integer 0 to 2
64
-1 uint64
U pokretnom zarezu
Jedostruke preciznosti
32-bit
-3.4 e
38
to
3.4e
38
single
Dvostruke preciznosti
64-bit
IEEE
Standard 754
double
x = int16(325);

x = 325.5;

int16(fix(x))
ans =
325

int16(325) * 4.39
ans =
1427

uint8('Danas je ...')
ans =
68 97 110 97 115 32
106 101 32 46 46 46
Provera numerikih tipova
Komanda Opis
whos x Ispisuje tip od x.
xType = class(x); Tip od x dodeljuje promenljivoj xType.
isnumeric(x) Da li je x numerik?
isa(x, 'integer')
isa(x, 'uint64')
isa(x, 'float')
isa(x, 'double')
isa(x, 'single')
Da li je x numerik odreenog podtipa?
isreal(x) Da li je x realan ili kompleksan?
isnan(x) Da li x nije broj (Not a Number NaN) ?
isinf(x) Da li je vrednosti x beskonana?
isfinite(x) Da li je vrednost x konana?
Logiki tip
Vrednosti:
La = 0 (false)
Istina = 1 (true)
vrednost razliita od nule
(uobiajeno je 1)

Tipino nastaje kao rezultat operacija
poreenja
Vana primena u indeksiranju nizova
A = [7 2 6 1 9];
k = A > 5
k =
1 0 1 0 1
b = A(k)
b =
7 6 9
b = A(A > 5)
b =
7 6 9
A(A > 5) = 0
A =
0 2 0 1 0
z = [true true false]
z =
1 1 0
Parsiranje imena
Redosled
da li je promenljiva?
da li je ugraena funkcija?
da li je MEX, DLL ili M-datoteka u tekuem
direktorijumu?
da li je MEX, DLL ili M-datoteka u nekom
od MATLAB-ovih direktorijuma?
prijavljuje se greka.
imena MATLAB-ovih direktorijuma se dobijaju
(ureuju) pomou path funkcije
imena se mogu preklopiti

sin(1)
ans =
0.8415
sin=1
sin =
1

sin
sin =
1
sin(1)
ans =
1
clear sin

sin(1)
ans =
0.8415
Matrine operacije
Osnovne operacije:
sabiranje +
oduzimanje -
mnoenje *
delenje (levo) /
X=B/A je reenje sistema X*A=B
desno delenje \
X=A\B je reenje sistema A*X=B
stepenovanje ^
transponovanje

Operacije nad elementima matrice:
mnoenje .*
delenje (levo) ./
desno delenje .\
stepenovanje .^
r = A*P + P*A - P*B*inv(R)*B*P + Q;
a = [ 1 2; 3 4 ];
a * a'
ans =
5 11
11 25

b = [ -1 2; 1 3 ];
a .* b
ans =
-1 4
3 12
a * b
ans =
1 8
1 18
b=a .\ 3
b =
3.0000 1.5000
1.0000 0.7500
Reavanje linearnog sistema jednaina
Sistem A x=b ima reenje x=A
-1
b
u Matlab-u: x = A\b
Sistem x A=b ima reenje x=b/A
u Matlab-u: x = b/A


Primer:
5 . 1
5 . 0 2 3
5 . 2 2
3 2 1
3 2 1
3 2 1
= +
= + +
= +
x x x
x x x
x x x
(
(
(

=
(
(
(

(
(
(


5 . 1
5 . 0
5 . 2
1 1 1
2 3 1
1 2 1
3
2
1
x
x
x
A = [1 2 -1; -1 3 2; -1 -1 1];
b = [-2.5; 0.5; 1.5];
x = A\b
x =
2.5000
-1.0000
3.0000
A*x
ans =
-2.5000
0.5000
1.5000
x = inv(A)*b
x =
2.5000
-1.0000
3.0000
Reavanje linearnog sistema jednaina (2)
Mogu re reavati i preodreeni i
neodreeni sistemi jednaina
Upotrebljava se metoda
najmanjih kvadrata

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

B = [ -2.5
0.5
1.5
4 ];

x = A\B
x =
0.6238
-0.7002
1.5950
A*x
ans =
-2.3715
0.4657
1.6713
4.0086
Matrice i funkcije
parametri i vraene vrednosti funkcije su matrice
matematika funkcija f koja ima parametar matricu X kao rezultat
vraa matricu Y=f(X) sa elementima y
ij
= f(x
ij
)

elementarne matrine funkcije
determinanta matrice det(x)
inverzija inv(x)
pseudo-inverzija ne kvadratne matrice pinv(x)
formiranje karakteristinog polinoma poly(x)
trag matrice trace(x)
... (help matfun)

transcedentalne matrine funkcije
expm(x)
logm(x)
sqrtm(x)
...
Operacije poreenja
operacije poreenja se primenjuju nad dve matrice jednakih dimenzija
rezultat operacije je matrica nula (la) i jedinica (istina)
postoji est relacionih operatora
manje <
manje ili jednako <=
vee >
vee ili jednako >=
jednako ==
nejednako ~=
2 + 3 ~= 5
ans =
0
[ 1 2; 3 4 ] > [ 1 3; -3 5 ]
ans =
0 0
1 0
Logike operacije
logike operacije se upotrebljvaju nad nizovima sa logikim
vrednostima
rezulati logikih operacija su uvek matrice sa elementima 0 i 1
Logike operacije su:
negacija (unarna operacija) ~
konjukcija (binarna operacija, logiko i) &
disjunkcija (binarna operacija, logiko ili) |
a = [0 0 1 1]; b = [0 1 0 1];
a & b
ans =
0 0 0 1
a | ~b
ans =
1 0 1 1
Logike i funkcije poreenja
ove funkcije vraaju logiku vrednost (ili vie vrednosti)
funkcija any(x) vraa istinitu vrednost ako je barem jedan elemenat u x
istinit (radi po kolonama)
tipina upotreba je: if any(x > 0.01)
blok naredbi
end
funkcija all(x) vraa istinitu vrednost ako su svi elemenati u x istiniti
funkcija find(x) vraa indekse elemenata sa istinitom vrednosti

provera neregularnih vrednosti u matrici
gde poseduje beskonanosti isinf(x)
...
provera tipa matrice (vraa skalar)
da li matrica postoji? exist(x)
da li je prazna? isempty(x)
da li je globalna promenljiva? isglobal(x)
...
Generisanje vektora
Vektor sukcesivnih celobrojnih vrednosti iz itervala [a,b]
x = a : b % operator :
Vektor vrednosti iz itervala [a,b] sa rastojanjem (korakom) c
x = a : c : b

x = 1 : 6
x =
1 2 3 4 5 6
x = 2 : 3 : 13
x =
2 5 8 11
x = 2 : 0.2 : 3
x =
2.0000 2.2000 2.4000 2.6000 2.8000 3.0000
x = 2 : -1 : -2
x =
2 1 0 -1 -2
Selekcija elemenata matrice i vektora
indeksi elemenata su pozitivni, celi brojevi: 1, 2, ...
dimenzije
matrice [vrsta,kolona] = size(x)
vektora n = length(x)
selektovanje jednog elementa
matrice x(vrsta,kolona)
vektora x(n)
selektovanje submatrice (subvektora)
izdvajaju se elementi na preseku vrsta i kolona
vrste i kolone su odreene
pomou indeks vektora
pomou vektora logikih vrednosti
(za svaku npr. kolonu je zadata logika
vrednost i ako je ta vrednost istina kolona
je selektovana)



a =
1 2 3
4 5 6

n = size(a)
n =
2 3

[n,m] = size(a)
n =
2
m =
3
Primeri selekcija elemenata
a = [1 2 3; 4 5 6]
a =
1 2 3
4 5 6

a(1,3)
ans =
3

a( : , [1 3] )
ans =
1 3
4 6

a( : , : )
a =
1 2 3
4 5 6


a( [false true], 2:3 )
ans =
5 6

a( : , 3:-1:1 )
ans =
3 2 1
6 5 4

v = 3:-1:1
v =
3 2 1
a( : , v )
ans =
3 2 1
6 5 4
a( [2 1] , v )
ans =
6 5 4
3 2 1
x = -pi : 0.01 : pi;
y = sin(x);

y(y > 0.9999)'
ans =
0.9999
1.0000
1.0000

x(y > 0.9999)'
ans =
1.5584
1.5684
1.5784

find(y > 0.9999)
ans =
471 472 473
Brisanje i spajanje
Brisanje promenljivih i elemenata matrice
uklanjanje promenljivih iz radne memorije clear x y z
matrica moe biti prazna x = [ ] (i tada postoji kao promenljiva)
brisanje celih kolona ili vrsta se vri dodeljivanjem prazne matrice
Spajanje submatrica
spajanje po kolonama (matrice moraju imati jednak broj vrsta)
spajanje po vrstama (matrice moraju imati jednak broj kolona)

a = [ ]
a =
[ ]
b = [ 1 2 3 4 5 ]
b =
1 2 3 4 5
b(2:4) = [ ]
b =
1 5
b(4) = -1
b =
1 5 0 -1
b = [ 1 5 ];
b = [ b; 1+b ]
b =
1 5
2 6

a = [ b b +
a =
1 5 1 2
2 6 5 6

a = * b, b +;
Tekstualna promenljiva - string
predstavljena je vektorom vrstom od slova (ASCII znakova)
omoguava
formatizovanje ispisa i uitavanja vrednosti
prenoenje (i ureivanje) naredbi
postoji nekoliko grupa funkcija

spajanje stringova je kao spajanje vektora vrsta


a1 = 2; a2 = 3;
i = 1;
s = [ '5 * a' int2str(i) '^2 +
s =
5 * a1^2
eval(s)
ans =
20
Matrice i vektori poznatih vrednosti
matrica nula zeros(n,m)
matrica jedinica ones(n,m)
jedinina matrica eye(n,m)
matrica elemenata po uniformnoj
raspodeli rand(n,m)
matrica elemenata po normanoj
raspodeli randn(n,m)
vektor ekvidistantnig vrednosti
linspace(n,m,N)
vektor logaritamske
baze logspace(n,m,N)
matrica za bazu 3D
crtanja meshgrid(v1,v2)

a = [ 1 2; 3 5 ]
a =
1 2
3 5
abs(inv(a)*a - eye(2)) > 10*eps
ans =
0 0
0 0
a = zeros(2,3)
a =
0 0 0
0 0 0
a( [2 3], [1 2] ) = 1
a =
0 0 0
1 1 0
1 1 0
a( [2 3], [1 2] ) = ones(2,2);
Viedimenzioni nizovi
dvodimenzioni niz == matrica
prvi indeks je redni broj vrste
drugi indeks je redni broj kolone
trodimenzioni niz
trei indeks je redni broj strane
Indeksi
poinju
od 1
Pristup elementima nizova
A(2,3,2)
ans =
6
A(1,2,2)
ans =
8
A(:,2,1)
ans =
0
-1
2
A(:,:,2)
ans =
6 8 3
4 3 6
5 9 2
A(:,2,:)
ans(:,:,1) =
0
-1
2
ans(:,:,2) =
8
3
9
A([1 3],3,[2 1])
ans(:,:,1) =
3
2
ans(:,:,2) =
3
1
Formiranje viedimenzinonih nizova
na nain formiranja matrica, preko
indeksa
broj elemenata u podnizovima
se mora slagati




primer dodavanja nove
dimenzije za A
A je sada 3x3x3x2
A=[1 0 3; 4 -1 2; 8 2 1];
A(:,:,2)=[6 8 3; 4 3 6; 5 9 2];
A(:,:,3) = 5

A(:,:,1) =
1 0 3
4 -1 2
8 2 1
A(:,:,2) =
6 8 3
4 3 6
5 9 2
A(:,:,3) =
5 5 5
5 5 5
5 5 5
A(:,:,1,2) = [1 2 3; 4 5 6; 7 8 9];
A(:,:,2,2) = [9 8 7; 6 5 4; 3 2 1];
A(:,:,3,2) = [1 0 1; 1 1 0; 0 1 1];
Formiranje viedimenzinonih nizova (2)
upotrebom funkcija: ones, zeros,
randn, ...
umnoavanjem repmat osnovne
matrice
upotrebom cat funkcije
B = cat(dim,A1,A2,...)
spaja listu nizova du dimenzije
dim
jedinine dimenzije se automatski
umeu
B = randn(1,1,2)
B(:,:,1) =
-0.6918
B(:,:,2) =
0.8580

B = repmat([1 0],[3 4 2])
B(:,:,1) =
1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0
B(:,:,2) =
1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0
B = cat(4,[2 8; 0 5],[1 3; 7 9])
B(:,:,1,1) =
2 8
0 5
B(:,:,1,2) =
1 3
7 9
Informacije o viedimenzionim nizovima
broj elemenata po dimenzijama size
ukupan broj dimenzija ndims
spisak promenljivih sa dimenzijama i
formatima whos
size(A)
ans =
3 3 3 2

ndims(A)
ans =
4

whos
Name Size Bytes Class

A 4-D 432 double array
B 4-D 64 double array
ans 1x1 8 double array

Grand total is 63 elements using 504
bytes
Rad sa dimenzijama matrice
redimenzionisanje matrice B = reshape(A,[s1 s2 s3 ...])
(s1, s2, ... su nove dimenzije matrice B)







uklanjanje jedininih dimenzija C = squeeze(B)
permutovanje dimenzija prepakuje niz
B = permute(A,dims)
generalizacija transponovanja

Raunanje nad viedimenzionim nizovima
funkcije koje rade nad vektorima,
npr. sum, mean, ...
obino rade po prvoj nejjedininoj
dimenziji niza
funkcije koje rade elemenat po
elemenat, npr. sin, ...
funkcije koje rade sa matricama
ne prihvataju viedimenzione
nizove kao argumente
ndims(A)
ans =
4

eig(A)
??? Error using ==> eig
Input arguments must be 2-D.

eig(A(:,:,1,1))
ans =
6.4897
-3.6978
-1.7919
Blok naredbi
blok naredbi sainjava nekoliko MATLAB iskaza (komandi)
razdvojenih separatorom ; ili ,
separator ; spreava ispis vrednosti dodeljenih promenljivima iz
naredbe
naredbe se mogu navoditi u jednoj liniji ili u nekoliko linija
kada je potrebno jednu naredbu nastaviti u narednoj liniji, predhodna
linija se zavrava ...
a = [ 1 2 3
4 5 6 ]
a =
1 2 3
4 5 6

b = [ 1 2 3 ...
4 5 6 ]
b =
1 2 3 4 5 6
Kontrola toka programa
uslovni skok if-else i switch
programske petlje
prebrojiva petlja for
neprebrojiva petlja sa ispitivanjem uslova na poetku while
nasilni izlazak iz petlje break
nasilni povratak iz funkcije return
nasilni povratak iz funkcije po otkrivanju greke i njen ispis error

ne postoji bezuslovni skok
FOR petlja
FOR je prebrojiva petlja, tj. unapred se zna broj prolaza kroz blok
naredbi
oblik:
for promenljiva = izraz
blok naredbi
end
rezultat izraunavanja izraz-a je matrica, a promenljiva prima vrednosti
od prve do poslednje kolone rezultata
uobiajeno upotreba je npr. for i=1:n, ...
petlja se nasilno naputa sa break
mogu se upotrebljavati ugnjedene petlje
for i = 1:5
for j = 1:4
a(i,j) = 1 / (i+j-1);
end
end
WHILE petlja
petlja se izvrava sve dok je neki uslov ispunjen i u principu se ne zna
broj prolazaka kroz petlju do prestanka vaenja uslova
uslov se proverava na poetku petlje
oblik:
while uslov
blok naredbi
end
uslov je skalar sa logikom vrednosti
petlja se nasilno naputa sa break
mogu se upotrebljavati ugnjedene petlje

f = [1 1]; i = 1; % Fibonacci-jevi brojevi
while f(i) + f(i+1) < 1000
f(i+2) = f(i) + f(i+1);
i = i + 1;
end
f
f =
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
s = 0; n = 1;
while 1 / n^2 > 1e-4
s = s + (-1)^n / n^2;
n = n+1;
end
s
s = -0.8225
Uslovno grananje programa
opti oblik:
if uslov 1
blok naredbi 1
elseif uslov 2
blok naredbi 2
elseif uslov 3
...
else
blok naredbi n
end
uslov je skalar sa logikom vrednosti
tipine upotrebe:

if uslov
blok naredbi
end
ili
if uslov
blok naredbi 1
else
blok naredbi 2
end

3n+1 problem iz teorije
brojeva. Da li postoji
prirodan broj za koji se
unutranja petlja ne
zavrava?

while 1
n = input('Unesi n:');
if n <= 0, break, end
while n > 1
if rem(n,2) == 0
n = n / 2
else
n = 3*n+1
end
end
end
Kontrola toka programa - switch, case
switch komanda izvrava blok komandi u
zavisnosti od vrednosti promenljive uslova.
case oznaava i razdvaja blokove komandi
samo prvo poklapanje sa case se ivrava
swich se zavrava end-om

switch ne propada, nakon zavrene poslednje
komande case bloka, program nastavlja ispod
end-a.
(break izraz iz C-a ne postoji)
switch izraz
case 0
blok 1
case 1
blok 2
case 2
...
otherwise
blok
end

Kontrola toka programa - izuzeci
Podran je rad sa izuzecima






Lasterror je funkcija koja vraa opis greke
try
a = [1 2];
b = a * [1 4];
catch
e = lasterror

end
e =
message: [1x58 char]
identifier: 'MATLAB:innerdim'
stack: [1x1 struct]

Nizovi elija i struktura
su posebne klase MATLAB nizova

elija
sadri elije (binarne podatke) koji su sami po sebi nizovi
omoguava smetanje
razliitih tipova podataka u niz i
podataka razliitih dimenzija

Struktura
takoe udruuje podatake (razliitih tipova)
za razliku od elija struktura sadre polja kojima se moe pristupati
preko imena
Struktura
sastoji se od imenovanih polja
svako polje moe sadrati
proizvoljan tip podataka
formiranje
dodelom vrednosti
upotrebom struct funkcija

patient
patient =
name: 'John Doe'
billing: 127
test: [3x3 double]
Formiranje strukure dodelom vrednosti
patient.name = 'John Doe';
patient.billing = 127.00;
patient.test = [79 75 73; 180 178 177.5; 220 210 205];
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];

patient
patient =
1x2 struct array with fields:
name
billing
test
patient(2).test
ans =
68 70 68
118 118 119
172 170 169
Viedimenzioni nizovi struktura
patient(1,1,1).name = 'John Doe'; patient(1,1,1).billing = 127.00;
patient(1,1,1).test = [79 75 73; 180 178 177.5; 220 210 205];
patient(1,2,1).name = 'Ann Lane'; patient(1,2,1).billing = 28.50;
patient(1,2,1).test = [68 70 68; 118 118 119; 172 170 169];
patient(1,1,2).name = 'Al Smith'; patient(1,1,2).billing = 504.70;
patient(1,1,2).test = [80 80 80; 153 153 154; 181 190 182];
patient(1,2,2).name = 'Dora Jones'; patient(1,2,2).billing = 1173.90;
patient(1,2,2).test = [73 73 75; 103 103 102; 201 198 200];
Formiranje strukture upotrebom struct
str_array = struct('field1','val1','field2','val2', ...)
patient = struct( 'name', 'John Doe, ...
billing, 127.00, ...
test, [79 75 73; 180 178 177.5; 220 210 205] );
p(2).billing
ans =
28.5000
p(2).test([1 3],2)
ans =
70
170
y=p.name
??? Illegal right hand side in
assignment. Too many elements.
[p.billing]
ans =
127.0000 28.5000 0
Pristup podacima u nizu struktura
moe se pristupiti jednoj strukturi
polju u okviru odreene strukture
nekim vrednostim iz polja
ne moe se formirati nov niz na osnovu izbora polja strukture
p.name
ans =
John Doe
ans =
Ann Lane
ans =
Ja
p(3)
ans =
name: 'Ja'
billing: 0
test: [2x2 double]

Polje strukture
itanje vrednosti polja
f = getfield( array, {array_index}, 'field', {field_index} )
postavljanje vrednosti polja
f = setfield( array, {array_index}, 'field', {field_index}, value )
dodavanje polja
patient(2).ssn = '000000000';
brisanje polja
struc2 = rmfield( array, 'field name )

Organizovanje podataka u nizove struktura
nain organizacije je bitan radi kasnijeg pristupa podskupo podataka
Primer: posmatra se bit-mapirana slika dimenzije 128x128 sa 3 matrice
boja RED, GREEN i BLUE.
grupisanje podataka po bojama
grupisanje podataka po pixel-ima
A.r = RED;
A.g = GREEN;
A.b = BLUE;

for i = 1:size(RED,1)
for j = 1:size(RED,2)
B(i,j).r = RED(i,j);
B(i,j).g = GREEN(i,j);
B(i,j).b = BLUE(i,j);
end
end
Ugnjedene strukture
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9];
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
Niz elija
je niz iji su elementi elije, tj. to je kontejner MATLAB-ovih nizova
npr., jedna elija moe sadrati matricu, druga string, trea vektor
kompleksnih brojeva, itd.
Viedimenzioni nizovi elija - cells
slino brojevima, viedimenzini nizovi elija su generalizacija matrice
elija
A{1,1} = [1 2;4 5];
A{1,2} = 'Name';
A{2,1} = 2 - 4i;
A{2,2} = 7;

B{1,1} = 'Name2';
B{1,2} = 3;
B{2,1} = 0:1:3;
B{2,2} = [4 5]';

C = cat(3,A,B);
Formiranje niza elija dodelom vrednosti
niz elija se formira popunjavanjem elija po elija
dva ravnopravna naina
indeksiranje elije




indeksiranje sadraja




{} konstruktor niza elija (poput [] za matrice)
{} se takoe upotrebljavaju za spajanje elija
prealokacija mem. prostora za elije X=cell(3,9)
A{1,1} = [1 4 3; 0 5 8; 7 2 9];
A{1,2} = 'Anne Smith';
A{2,1} = 3+7i;
A{2,2} = pi:pi/10:pi;
A(1,1) = { [1 4 3; 0 5 8; 7 2 9] };
A(1,2) = { 'Anne Smith };
A(2,1) = { 3+7i };
A(2,2) = { pi:pi/10:pi };
Pristup podacima u nizu elija
indeksiranje sadraja daje pristup podacima
indeksiranje elija se upotrebljava za dodelu niza elija drugoj
promenljivoj
pojedine elije se mogu brisati
x = { [1 1], [2 2], [3 3], [4 4] };
x(2)
ans = [1x2 double]
x(1:2)
ans = [1x2 double] [1x2 double]
x{1:2}
ans = 1 1
ans = 2 2
x(3)=[]
x = [1x2 double] [1x2 double] [1x2 double]
x{3}=[]
x = [1x2 double] [1x2 double] []
Zamena liste promenljivih nizom elija
kod liste ulaznih i izlaznih
parametara funkcije
kod prikaza na displeju
kod formiranja nizova
C(1) = { [1 2 3] }; ...
C(2) = { [1 0 1] };
conv( C{1:2} )
ans =
1 2 4 2 3
[C{1:2}]
ans =
1 2 3 1 0 1
[ E{1:2} ] = eig( [-1 2;0 -2] )
E =
[2x2 double] [2x2 double]
E{1:2}
ans =
1.0000 -0.8944
0 0.4472
ans =
-1 0
0 -2
Ugnjedeni nizovi elija
clear A
A(1,1) = { magic(5) };
A(1,2) = { { [5 2 8; 7 3 0; 6 7 3] 'Test 1'; [2-4i 5+7i] { 17 [] } } }
A =
[5x5 double] {2x2 cell}
A(2)
ans =
{2x2 cell}
A{2}
ans =
[3x3 double] 'Test 1'
[1x2 double] {1x2 cell}
A{2}{1,1}
ans = 5 2 8
7 3 0
6 7 3
A{2}{1,1}(1,3)
ans = 8
Niz elija popunjenih strukturama
c_str = cell(1,2)
c_str{1}.label = '12/2/94 - 12/5/94';
c_str{1}.obs = [47 52 55 48; 17 22 35 11];
c_str{2}.xdata = [-0.03 0.41 1.98 2.12 17.11];
c_str{2}.ydata = [-3 5 18 0 9];
c_str{2}.zdata = [0.6 0.8 1 2.2 3.4];

c_str{1:2}
ans =
label: '12/2/94 - 12/5/94'
obs: [2x4 double]
ans =
xdata: [-0.0300 0.4100 1.9800 2.1200 17.1100]
ydata: [-3 5 18 0 9]
zdata: [0.6000 0.8000 1 2.2000 3.4000]
c_str{2}.zdata(4)
ans =
2.2000
Polinomi
polinomi se predstavljaju vektor vrstom iji su elementi koeficijenti
polinoma po opadajuem stepenu
npr., polinomu Q(s) = 2s
3
+ 4.1s
2
- 12
odgovara vektor Q = [ 2 4.1 0 -12 ]
funkcije za rad sa polinomima:
conv mnoenje polinoma
deconv delenje polinoma
poly karakteristini polinom
polyder diferenciranje polinoma
polyfit daje polinom koji aproksimira zadate podatke
polyval izraunavanje vrednosti polinoma
polyvalm sraunavanje vrednosti matrinog polinoma
residue razvoj na parcijalne sabirke (reziduale)
roots daje nule polinoma

P = [2 1.1]; Q1 = [1 3 2]; Q2 = [1 2 3];
Q = conv( Q1, Q2 )
Q = 1 5 11 13 6
[r,p,k] = residue( P, Q )
r =
0.9667
-0.2583 - 0.3418i
-0.2583 + 0.3418i
-0.4500
p =
-2.0000
-1.0000 + 1.4142i
-1.0000 - 1.4142i
-1.0000
k =
[ ]
[pp,qq] = residue( r(2:3), p(2:3), k )
pp =
-0.5167 0.4500
qq =
1.0000 2.0000 3.0000
Primer upotrebe polinoma
3 s 2 s
45 . 0 s 5167 . 0
1 s
45 . 0
2 s
9667 . 0
0
1 s
45 . 0
j 2 1 s
j 3418 . 0 2583 . 0
j 2 1 s
j 3418 . 0 2583 . 0
2 s
9667 . 0
6 s 13 s 11 s 5 s
1 . 1 s 2
) 3 s 2 s )( 2 s 3 s (
1 . 1 s 2
) s ( W
2
2 3 4
2 2
+ +
+
+
+

+
+
=
+
+

+
+ +
+
+
+

+
+
=
+ + + +
+
=
+ + + +
+
=
M - skript-datoteke i funkcije
omoguavaju izvravanje ranije pisanog koda; olakavaju ispravljanje
greaka i dorade, a time olakavaju programiranje
M - skript-datoteke su ASCII datoteke sa blokom naredbi
ime datoteke se zavrava sa .m
pozivaju se imenom datoteke (bez .m)
nemaju parametre
vrednosti promenljivih preuzimaju i ostavljaju u radnom okruenju
M - funkcije su skript-datoteke odreenog formata zaglavlja:

function [ ip1, ip2, ... ipn ] = ime ( up1, up2, ... upm )
blok naredbi (negde u bloku izlazni parametri primaju vrednosti)

imaju ulazne: up1,up2,...upm i izlazne parametre: ip1,ip2,...ipn
kod poziva funkcije se ne moraju navoditi svi parametri; broj
upotrebljenih ulaznih parametara je nargin, a izlaznih nargout
sve promenljive koje definiu su lokalne
uobiajeno je da ime funkcije bude jednako imenu datoteke .m
jedna
datoteka
ime.m
Persistent
Deklarie perzistentne promenljive u funkcijama
Vidljive su samo u funkciji koja ih deklarie
persistent X Y Z
Vrednost promenljivih se ouvava izmeu poziva funkcije
Primer M-funkcije
function [ status, sv ] = stabilan( X, stepen )
% STABILAN - ispituje stabilnost sistema na osnovu imenioca funkcije
% prenosa ili na osnovu matrice sistema u prostoru stanja
% Ulaz:
% X - polinom ili matrica sistema
% stepen - je zadati stepen stabilnosti
% Izlaz:
% status - =1 ako je sistem stabilan, inace =0
% sv - sopstvene vrednosti ili koreni karakteristicne jednacine

% A. Erdeljan, 14.4.98

if nargin == 1, stepen = 0; end % podrazumevana vrednost
if min(size(X)) == 1 % karak. polinom
sv = roots(X);
else % matrica sistema
sv = eig(X);
end
status = all(sv < stepen);
Pimer (nastavak)...
komentar iza zaglavlja funkcije se ispisuje naredbom
help stabilan
Primeri upotrebe:

Q = [1 3 2];
stabilan(Q)
ans =
1

[s,v] = stabilan(Q)
s =
1
v =
-2
-1



[s,v] = stabilan(Q,-1)
s =
0
v =
-2
-1

[s,v] = stabilan( [0 1; 0 -3], eps )
s =
1
v =
0
-3

Handle funkcije
Je promenljiva koja se koristi za
indirektno pozivanje funkcije
Postojee funkcije (ukljuujui
spoljanje f-je)
Anonimne funkcije (upravo
kreirane)
s = @sin;
s(pi/4)
ans =
0.7071
parabola = @(x) x.^2+3*x+4
parabola =
@(x) x.^2+3*x+4
parabola(-1)
ans =
2
parabola([0 1 2])
ans =
4 8 14
f = @(x, a) a*x+4;
f(2,3)
ans =
10
Funkcije funkcija
imaju M-funkciju (handl f-je) kao argument @funkcija
su nelinearne numerike metode za:
analizu i crtanje funkcija
fminbnd - traenje minimuma f-je jedne promenljive
fminsearch - traenje minimuma f-je vie promenljivih
fzero - nule funkcije jedne promenljive
crtanje funkcija
fplot - crtanje funkcije,
reavanje sistema diferencijalnih jednaina
ode23 - Runge-Kutta matod 2-3 reda
ode45 -Runge-Kutta-Fehlberg matod 4-5 reda

numeriko reavanje integrala (quadrature)
quad - Simson-ovo pravilo,
Reavanje diferencijalnih jednaina pomou ode23 ili ode45
moe se reiti obina diferencijalna jednaina vieg reda
treba napraviti sistem diferencijalnih jednaina 1. reda i zapisati ga u
zasebnu M-funkciju (sistem jednaina moe biti nelinearan)
zaglavlje funkcije mora biti oblika: function xprim = ime( t, x )
gde je t vreme, a x vektor promenljivih stanja
postoji problem sa prenoenjem parametara u ovakvu M-funkciju
poziv metode: [ t, x ] = ode23( @ime, [tp, tk], x0 )
ili [ t, x ] = ode45( @ime, [tp, tk], x0 )
Ulazni parametri: ime - ime M-funkcije koja opisuje sistem jednaina,
tp - poetni trenutak integracije, tk - krajnji trenutak, x0 - vektor
poetnih vrednosti promenljivih stanja.
Izlazni parametri: t - vektor vremenskih trenutaka u kojima su
izraunata reenja, a x - matrica kretanja promenljivih stanja poreanih
po kolonama. Prva vrsta odgovara x0 i poetnom trenutku tp, dok je u
poslednjoj vrsti krajnja vrednost prom. stanja (u tk).
ode metode imaju promenljivi (adaptivni) korak integracije, tako da
dobijena reenja nisu ekvidistantna
Primer upotrebe ode23

Van der Pol - ova jednaina:









Napomena: Brojevi 23, odnosno 45 u imenu funkcija ode23 i ode45 se odnose
na stepene Taylor-ovih redova upotrebljanih u odgovarajuim algoritmima, a
ne odnose se na red diferencijalne jednaine koja se reava. U principu, metod
ode45 je namenjen reavanju diferencijalnih jednaina visokog reda.
tp = 0; tk = 20; x0 = [ 0 0.25 ];
[ t, x ] = ode23( @vdpol, [tp tk], x0 );
plot( t, x )
function xprim = vdpol( t, x )
% Opis Van der Pol-ove dif. jednacine
xprim = [ x(1) * (1-x(2)^2) - x(2)
x(1) ];
1 2
2
2
2 1 1
2 1
2
) 1 (
,
0 ) 1 (
x x
x x x x
x x x x
x x x x
=
=
= =
= + +


Primer funkcije: Metoda Runge-Kutta 4. reda
function [t, x] = rkutta4( F, tp, tf, x0, T )
% Metod integracije RUNGE-KUTTA 4. reda
% parametri su isti kao kod ode23,
% sem T koje predstavlja korak integracije
if nargin < 5, T = 0.1; end
t = tp : T : tf;
n = length(t);
x = zeros( n, length(x0) );
x(1,:) = x0(:)';
tl = tp;
for i = 1 : n-1
tl = tl + T;
xp = x(i,:)';
k1 = T * feval( F, tl, xp );
k2 = T * feval( F, tl+0.5*T, xp+0.5*k1 );
k3 = T * feval( F, tl+0.5*T ,xp+0.5*k2 );
k4 = T * feval( F, tl+T, xp+k3 );
x(i+1,:) = x(i,:) + (k1/6 + k2/3 + k3/3 + k4/6)';
end
Globalne promenljive
uvedene su da bi im se pristupalo iz M-funkcija
reavaju problem parametrizovanja sistema dif. jednaina koje se
reavaju pomou ode metoda
global ALPHA BETA
ALPHA = 0.01;
BETA = 0.02;
[ t, x ] = ode23( @lotka',[ 0 10], [1 1] );
function xp = lotka( t, x )
% Lotka-Volterra model
global ALPHA BETA
xp = [ x(1) - ALPHA*x(1)*x(2)
-x(2) + BETA*x(1)*x(2) ];
2 1 2 2
2 1 1 1
x x x x
x x x x
|
o
+ =
=

Primer upotrebe ode23/ode45 model sa parametrima


2 1 2 2
2 1 1 1
x x x x
x x x x
|
o
+ =
=

al = 0.01;
be = 0.02;
[ t, x ] = ode45( @lotka7, [0, 10], [1; 1], [ ], al, be );
plot( t, x, .- )
function xp = lotka7( t, x, alpha, beta )
% Lotka-Volterra model
xp = [ x(1) - alpha*x(1)*x(2)
-x(2) + beta*x(1)*x(2) ];
ode23/ode45 omoguava
zadavanje parametara
modela
0 5 10 15 20
0
200
400
600
800
1000
Klase i objekti
klase su novi tipovi podataka koje korisnik uvodi
objekti su primerci tih klasa (instance)

klasa definie strukturu podataka i vrste operacija i funkcija koje se
mogu primeniti nad tim podacima (metode klase)

ugraene klase su: double, sparse, char, struct, cell,
toolbox-ovi definiu dodatne klase

Primer:
Formiranje objekta tipa polinoma p(x) = x
3
2x 5, na osnovu vektora
koeficijenata polinoma:
p = polynom([1 0 -2 -5])

Naini opisa klase
Mesto opisa klase
Opis cele klase u jednoj .m datoteci (v7.6) neka_klasa.m
Opis metoda klase u posebnim .m datotekama u njima
zajednikom direktorijumu @neka_klasa
(privatne metode su u private poddirektorijumu)

Klase se mogu grupisati u pakete
Paket je direktorijum naziva +neki_paket
Sadri opise klasa
Klasa paketa se identifikuje neki_paket.neka_klasa


Opis klase
Delovi opisa klase (blokovi)
Definicija klase classdef
Atributi properties
Metode methods
Dogaaji events

classdef polynom
% opis klase

properties
coef
end

methods
function obj = polynom(a)
% konstruktor
...
end
function obj = set.coef(obj, val)
...
end
... % ostale metode
end

end
Konstruktor
Konstruktor se uvek izvrava kod formiranja novog objekta
U starijim verzijama (pre v7.6) postavljao se tip
obj = class(p,'polynom');
function obj = polynom(a)
%POLYNOM Polynomial class constructor.
% p = POLYNOM(v) creates a polynomial object from the vector v,
% containing the coefficients of descending powers of x.
if isa(a,'polynom')
obj.coef = a.coef;
else
obj.coef = a(:).';
end
end
Konverzije tipova
zahteva postojanje metode sa imenom klase u koju se dozvoljava
konverzija
najee upotrebljavane su konverzije u tipove double i char
display (ili disp) je metoda koja se poziva kod dodele vrednosti
promenljivoj (a MATLAB izraz se ne zavrava sa ;)
function c = double(p)
% POLYNOM/DOUBLE Convert polynom object to coefficient vector.
% c = DOUBLE(p) coverts a polynomial object to the vector c
% containing the coefficients of descending powers of x.
c = p.coef;
end
double(p)
ans =
1 0 -2 -5
Definisanje metoda klase
methods polynom - daje spisak motoda klase polynom
Konstruktor je metod istog imena kao i klasa
Destruktor je delete metod
function q = diff(p)
% POLYNOM/DIFF DIFF(p) is the derivative of the polynom p.
c = p.coef;
d = length(c) 1; % degree
q = polynom(p.c(1:d).*(d:1:1));
end
Preoptereenje operatora
svi ugraeni aritmetiki operatori imaju svoje funkcije











mogu se preopteretiti:
aritmetiki, logiki, relacioni operatori, :, transponovanje, ispis na
displej, spajanje vrsta i kolona [], indeksiranje.
function r = plus(p,q)
% POLYNOM/PLUS Implement p + q for polynoms.
p = polynom(p); q = polynom(q);
k = length(q.coef) length(p.coef);
r = polynom([zeros(1,k) p.coef] + [zeros(1,k) q.coef]);
end
q = p + 1
q =
x^3 2*x 4
r = p*q
r =
x^6 4*x^4 9*x^3 + 4*x^2 + 18*x + 20
Prioritet metoda objekta
kod izraunavanja izraza a+b ili b+a poziva se metoda plus levog
operanda
ukoliko je plus metod desnog operanda vieg prioriteta, tada e on biti
izvren
funkcije koje postavljaju objekat na eljeno mesto u hijerarhiji
objekata su:
superiorto(naziv_druge_klase) i
inferiorto(naziv_druge_klase)
One se pozivaju u konstruktoru objekta.

Primer - polynom

a = polynom([1 2 3])
a =
x^2 + 2*x + 3
r = roots(a)
r =
-1.0000 + 1.4142i
-1.0000 - 1.4142i
y = a(0:0.5:2) % y = polyval(a, 0:0.5:2)
y =
3.0000 4.2500 6.0000 8.2500 11.0000
b = polynom([2 1])
b =
2*x + 1
c = a*b + 2*b - 4
c =
2*x^3 + 5*x^2 + 12*x + 1
d = diff(c)
d =
6*x^2 + 10*x + 12
plot(c)
-4 -2 0 2 4
-50
0
50
100
150
2*x
3
+ 5*x
2
+ 12*x + 1
Jo primera - polynom

b = [2 1];
c = a*b + 2*b - 4
c =
2*x^3 + 5*x^2 + 12*x + 1
d = c.diff
d =
6*x^2 + 10*x + 12
c.plot
c
c =
2*x^3 + 5*x^2 + 12*x + 1
p = double(c)
p =
2 5 12 1
p(2)
ans =
5
c(2)
c =
61
-4 -2 0 2 4
-50
0
50
100
150
2*x
3
+ 5*x
2
+ 12*x + 1
Nasleivanje
kljuna osobina ponovne upotrebe koda u OOP
kada se objekat potomak izvede iz objekta roditelja, tada on nasledi
sva polja strukture roditelja i moe da izvrava njegove metode
objekat roditelja moe izvravati metode potomka koje je on nasledio,
dok ne moe izvravati novouvedene metode
Tipovi nasleivanja
jednostruko - potomak nasleuje osobine samo jednog roditelja
viestruko - potomak nasleuje osobine vie roditelja
nasleivanje se moe protezati kroz nekoliko generacija
Jednostruko nasleivanje
klasa nasleuje atribute neke druge
klase (roditeljske) i obino dodaje
nove atribute (podatke i metode)
objekat potomka sadri ista polja
kao i roditeljska klasa i obino jo
neka

konstruktor klase potomka treba da
pozove konstruktor roditeljske
klase
pozove funkciju class da
objektu nalepi etiketu tipa
klase i roditeljske klase
(pre v7.6)
L = roditeljska_klasa(Ny,Nu,Ts)
sys = class(sys, naziv_klase', L)

classdef Potomak < Roditelj
properties
neki_atribut_potomka = 0;

end
methods
function p = Potomak(a,b,c)
p = p@Roditelj(b);

end

end
end
Primer jednostukog nasleivanja
Viestruko nasleivanje
klasa potomak nasleuje sve atribute vie od jedne roditeljske klase
klasa sadri sva polja roditeljskih klasa i obino dodaje nova
realizuje se preko konstruktora pozivom class funkcije (pre v7.6)
obj = class(structure,'class_name',parent1,parent2,...)
ako roditeljske klase imaju iste nazive motoda, MATLAB e izvravati
metode roditelja koji je prvi naveden u listi funkcije class
classdef Potomak < Roditelj_A & Roditelj_B

end
Primer viestrukog nasleivanja

Agregacija
se javlja kada jedan objekat A kao polje ima drugi objekat B i tada se
kae da A agregira B
Primer: objekat rational bi mogao da sadri dva objekta tipa polynom
kao brojilac i imenilac.
metode agregiranog objekta B se mogu izvravati samo pozivom iz
metoda objekta A, zapravo, agregirani objekat B nije dostupan za
korisnika
Privatne metode lanice klase
klasa moe sadrati privetne metode
(funkcije) koje nisu vidljive
korisniku ve samo ostalim
metodama klase

Pre ver. 7.6:
privatne metode se nalaze u
poddirektorijumu private
odgovarajueg klasnog
direktorijuma
private direktorijum moe sadrati i
druge funkcije koje ne rade nad
objektom, ali vre neko korisno
izraunavanje
classdef NekaKlasa
properties
neki_atribut = 12.34;

end
properties (SetAccess = private)
privatni_atribut = 0;

end

end
ta ovde nedostaje?
opis funkcija za faktorisanje i dekompoziciju matrica; raunanje ranga,
kondicionog broja, norme matrice
analza signala i filtriranje; FFT algoritam
rad sa grafikom
opis korisnih naredbi: echo, input, keyboard, pause, menu, feval, disp, ...
rad sa datotekama
rad sa Debugger-om
rad sa retkim matricama
detaljan opis funkcija
i jo tota ...
Kraj

Você também pode gostar