100
MATLAB Osnove

MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

MATLAB

Osnove

Page 2: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Šta je MATLAB?

• programsko okruženje za raĉunanje u tehnici

– u osnovi je matematiĉki alat

– ima veliku primenu u primenjenim disciplinama - inženjerstvu

• poseduje visoke performanse u numeriĉkim izraĉunavanjima i

vizuelizaciji podataka

• Matlab je interpreter i programski jezik

– pruža i interaktivni rad i batch-obradu

• osnovni elemenat je matrica koja ne zahteva dimenzionisanje

– većina problema se jednostavno rešava u odnosu na programske

jezike poput Fortran-a, Pascal-a, C-a, ...

– nazvan je prema matrix laboratory

Page 3: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Osnovne osobine

• Jezik visokog nivoa za tehniĉko raĉunanje

• Razvojno okruženje za upravljanje programskim kodom, datotekama

i podacima

• Interaktivni alati za iterativno istraživanje, dizajn i rešavanje

problema

• Biblioteka matematičkih funkcija iz linearne algebre, statistike,

Forijeove analize, fitriranja, optimizacije, numeriĉke integracije

• 2D i 3D grafičke funkcije za prikaz podataka

• Alati za kreiranje korisničkog interfejsa

• Funkcije za integraciju MATLAB algoritama sa spoljašnjim

aplikacijama i programskim jezicima: Fortran, C, C++, Java, COM, i

Microsoft Excel

Page 4: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Primena

• na Univerzitetima je alat za obuku

• u industriji se upotrebljava za istraživanje i

rešavanje praktiĉnih inženjerskih i matematiĉkih

problema

• tipiĉna upotreba pokriva:

– Matematiku i numeriku

– Razvoj algoritama

– Modeliranje, simulaciju i razvoj prototipova

– Analizu podataka, istraživanja i vizuelizaciju

– Nauĉnu i inženjersku grafiku

– Razvoj aplikacija, ukljuĉujući grafiĉki

korisniĉki interfejs

• poseduje kolekcije metoda (alata, rešenja)

specifiĉnih za odreĊene oblasti - Toolbox-ovi

Page 5: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

MATLAB familija proizvoda

http://www.mathworks.com

Page 6: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Toolbox-ovi

• Toolbox je kolekcija (biblioteka) izabranih funkcija (M-datoteka) namenjena rešavanju problema odreĊenje oblasti

• oni proširuju mogućnosti Matlab-a

• postoje toolbox-ovi za oblasti

– analize signala

– automatskog upravljanja

– simulacije dinamiĉkog ponašanja sistema

– identifikacije sistema

– veštaĉkih neuronskih mreža

– fuzzy sistema

– optimizacije

– analize robustnosti sistema

– ...

• postojeći toolbox-ovi se usavršavaju, 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

Page 7: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Raĉunarske platforme

• Podržane su brojne raĉunarske platforme

• i operativni sistemi

• kod pisan u Matlab-u je prenosiv, ukljuĉujući i aplikacije sa

korisniĉkim interfejsom u obliku prozora

Tekuća verzija MATLAB 7.3

sastavni deo paketa R2006b od 1. septembra 2006

Page 8: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Radno okruženje Matlab-a (nekad )

• Ĉine ga:

– komandni prozor (samo je jedan)

– nekoliko grafiĉkih prozora

– korisnikov editor za pisanje M-skript datoteka

• Komandni prozor

– je mesto gde se daju (kucaju) naredbe interpreteru i ispisuju rezultati

– sekvencijalno prihvata i izvršava naredbe

– poseduje linijski editor

• Grafiĉki prozor

– obiĉno prikazuje 2D i 3D dijagrame

– više dijagrama se može prikazati u razliĉitim prozorima i/ili se jedan

prozor može podeliti na nekoliko delova

– automatski se pojavljuje kod izvršavanja grafiĉkih naredbi

– sadržaj prozora se može odštampati na nekoliko naĉina

Page 9: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Radno okruženje Matlab-a (i sad )

Sastoji se od većeg broja prozora:

• Command Window (ranije – komandni prozor)

• Command History

• Launch Pad

• Help Browser

• Current Directory Browser

• Workspace Browser

• Array Editor

• Editor/Debugger

Ostali alati:

• UnapreĊen uvoz i izvoz podataka

• Profiler – pomaže u otkrivanju uskih grla u aplikaciji

• Podrška Source Control System-ima

• Notebook – pristup Matlab-u iz programa za obradu teksta (MS Word)

Page 10: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Drugi naĉini 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

(Tekuća verzija Matlab-a podržava COM (Component Object Model))

Matlab može da radi kao:

– server

– klijent

• Matlab poseduje biblioteku C i Fortran funkcija, C++ klasa

– za rad sa Matlab-ovim datotekama podataka i za osnovne matriĉne

operacije

– mogu se upotrebiti za pisanje korisnikovih funkcija koje se

pozivaju iz Matlab-ovog okruženja

Page 11: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Matlab promenljive

• naziv promenljive ĉine slova i brojevi

(mora poĉeti slovom)

(prvih 19 (31 kod verzije ) znakova se uzima u obzir)

• razlikuju se mala i velika slova (npr. a i A su dve promenljive)

Page 12: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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 dugaĉkih izraza, kada je potrebno unos nastaviti u narednom redu,

predhodni red završiti sa “...” (tri taĉke)

• znak “;” na kraju izraza spreĉava da se ispiše vrednost promenljive

Page 13: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Brojevi

• Realni 3 -99 0.0001 -9.639825 1.62e-20 -10.34e200

– opseg od 2.2251*10-308 do 1.7977*10308

• 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

Page 14: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Aritmetiĉke operacije

• Aritmetiĉke operacije:

– sabiranje +

– oduzimanje -

– množenje *

– delenje (levo) /

– desno delenje \

– stepenovanje ^

• Redosled operacija je odreĊen na osnovu

prioriteta:

1. unarni minus

2. stepenovanje

3. množenje ili delenje

4. sabiranje ili oduzimanje

– upotrebom ( ) može se uticati na

redosled izraĉunavanja

» 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

Page 15: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Posebni brojevi

• Posebni brojevi:

– Ludolfov broj pi (3.1415...)

– Imaginarna jedinica i ili j

– beskonaĉna vrednost Inf

– neodreĊena vrednost (not a number) NaN

– podrazumevana taĉnost 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 neodreĊenih izraza

– Inf/Inf ili

– 0/0

» x = Inf / Inf x = NaN

» 1 / 0 Warning: Divide by zero ans = Inf

Page 16: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Nizovi u Matlab-u

• osnovni tip podataka je niz (Array)

• skalar je niz dimenzije 1x1

sliĉno je i sa vektorima u obliku kolone ili vrste

• elemenat niza može biti kompleksan broj

• niz se može tumaĉiti kao

– niz koeficijenata polinoma

– niz slova u string-u

– bit-mapirana slika (dvodimenzioni niz)

– zvuĉni zapis

• podržan je rad sa retkim nizovima

• dimenzije niza se ne unose

• potreban memorijki prostor za niz se automatski zauzima (alocira)

– veliĉina niza nije ograniĉena i može prevazići raspoloživi RAM

raĉunara (zahvaljujući virtuelnoj memoriji)

Page 17: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Nastanak brojnog niza

• Unosom kao eksplicitna lista brojeva ili izraza

• kao rezultat izvršavanja ugraĊene naredbe ili funkcije (Matlab-ove unutrašnje funkcije)

• formiranjem u M-datoteci (Matlab-ovoj spoljašnjoj funkciji)

• uĉitavanjem 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

Page 18: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Funkcije

• Tip funkcije (nebitan za korisnika)

– ugraĊena (unutrašnja, najbrže se izvršava)

– M-datoteka iz MATLAB biblioteke (spoljašnja)

– funkcija korisnika (spoljašnja, M-datoteka)

• Grupe funckcija:

– elementarne matematiĉke

– specijalne funkcije

– elementarne matriĉne

– specijalne matrice

– za dekompoziciju i faktorizaciju matrica

– za analizu podataka

– za rad sa polinomima

– za rešavanje diferencijalnih jednaĉina

– za optimizaciju i rad sa nelinearnm jednaĉinama

– za numeriĉku integraciju

– ...

• pomoć o funkciji se dobija pomoću help ime_funkcije

• svaki Toolbox dodaje nove funkcije

Page 19: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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 vraća 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

• ugnježdeni 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

Page 20: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Matematiĉke 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

• zaokruživanje vrednosti na celobrojnu

– ka najbližem 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

Page 21: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Tipovi podataka

• ima 15 ugraĊenih

tipova podataka

(klasa)

• svaki tip je višedimenzioni niz

– dvo-dimenzioni nizovi su matrice

– sparse su retki nizovi

• složene strukture podataka: cell i structure

• numeric i array su virtuelni tipovi podataka, nose neke zajedniĉke

osobine za izvedene tipove

• korisnikov tip: user classes, Java classes

Page 22: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 23: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Numeriĉki tipovi

Tip Opseg M-funkcija

Celobrojan

Označen 8-bit integer -27 to 27-1 int8

Označen 16-bit integer -215 to 215-1 int16

Označen 32-bit integer -231 to 231-1 int32

Označen 64-bit integer -263 to 263-1 int64

Neoznačen 8-bit integer 0 to 28-1 uint8

Neoznačen 16-bit integer 0 to 216-1 uint16

Neoznačen 32-bit integer 0 to 232-1 uint32

Neoznačen 64-bit integer 0 to 264-1 uint64

U pokretnom zarezu

Jedostruke preciznosti

32-bit

-3.4 e38 to

3.4e38

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

Page 24: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Provera numeriĉkih 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 određenog 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 beskonačna?

isfinite(x) Da li je vrednost x konačna?

Page 25: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Logiĉki tip

• Vrednosti:

– “Laž” = 0 (false)

– “Istina” = 1 (true)

vrednost razliĉita od nule

(uobiĉajeno je 1)

• Tipiĉno nastaje kao rezultat operacija

poreĊenja

• Važna 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

Page 26: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Parsiranje imena

• Redosled

– da li je promenljiva?

– da li je ugraĊena funkcija?

– da li je MEX, DLL ili M-datoteka u tekućem

direktorijumu?

– da li je MEX, DLL ili M-datoteka u nekom

od MATLAB-ovih direktorijuma?

– prijavljuje se greška.

• imena MATLAB-ovih direktorijuma se dobijaju

(ureĊuju) pomoću 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

Page 27: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Matriĉne operacije

• Osnovne operacije:

– sabiranje + – oduzimanje - – množenje * – delenje (levo) /

X=B/A je rešenje sistema X*A=B

– desno delenje \ X=A\B je rešenje sistema A*X=B

– stepenovanje ^ – transponovanje ’

• Operacije nad elementima matrice:

– množenje .* – 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

Page 28: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Rešavanje linearnog sistema jednaĉina

• Sistem A·x=b ima rešenje x=A-1·b

– u Matlab-u: x = A\b

• Sistem x·A=b ima rešenje x=b/A

– u Matlab-u: x = b/A

• Primer:

5.1

5.023

5.22

321

321

321

xxx

xxx

xxx

5.1

5.0

5.2

111

231

121

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

Page 29: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Rešavanje linearnog sistema jednaĉina (2)

• Mogu re rešavati i preodreĊeni i

neodreĊeni sistemi jednaĉina

– 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

Page 30: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Matrice i funkcije

• parametri i vraćene vrednosti funkcije su matrice

• matematiĉka funkcija f koja ima parametar matricu X kao rezultat vraća matricu Y=f(X) sa elementima yij = f(xij)

• elementarne matriĉne funkcije

– determinanta matrice det(x)

– inverzija inv(x)

– pseudo-inverzija ne kvadratne matrice pinv(x)

– formiranje karakteristiĉnog polinoma poly(x)

– trag matrice trace(x)

– ... (help matfun)

• transcedentalne matriĉne funkcije

– expm(x)

– logm(x)

– sqrtm(x)

– ...

Page 31: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Operacije poreĊenja

• operacije poreĊenja se primenjuju nad dve matrice jednakih dimenzija

• rezultat operacije je matrica nula (“laž”) i jedinica (“istina”)

• postoji šest relacionih operatora

– manje <

– manje ili jednako <=

– veće >

– veće ili jednako >=

– jednako ==

– nejednako ~=

» 2 + 3 ~= 5 ans = 0

» [ 1 2; 3 4 ] > [ 1 3; -3 5 ] ans = 0 0 1 0

Page 32: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Logiĉke operacije

• logiĉke operacije se upotrebljvaju nad nizovima sa logiĉkim

vrednostima

• rezulati logiĉkih operacija su uvek matrice sa elementima 0 i 1

• Logiĉke operacije su:

– negacija (unarna operacija) ~

– konjukcija (binarna operacija, logiĉko “i”) &

– disjunkcija (binarna operacija, logiĉko “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

Page 33: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Logiĉke i funkcije poreĊenja

• ove funkcije vraćaju logiĉku vrednost (ili više vrednosti)

• funkcija any(x) vraća istinitu vrednost ako je barem jedan elemenat u x

istinit (“radi po kolonama”)

tipiĉna upotreba je: if any(x > 0.01) blok naredbi end

• funkcija all(x) vraća istinitu vrednost ako su svi elemenati u x istiniti

• funkcija find(x) vraća indekse elemenata sa “istinitom” vrednosti

• provera “neregularnih vrednosti” u matrici

– gde poseduje beskonaĉnosti isinf(x) – ...

• provera tipa matrice (vraća skalar)

– da li matrica postoji? exist(x) – da li je prazna? isempty(x) – da li je globalna promenljiva? isglobal(x) – ...

Page 34: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 35: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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 odreĊene

• pomoću indeks vektora

• pomoću vektora logiĉkih vrednosti (za svaku npr. kolonu je zadata logiĉka 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

Page 36: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 37: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Brisanje i spajanje

• Brisanje promenljivih i elemenata matrice

– uklanjanje promenljivih iz radne memorije clear x y z

– matrica može biti prazna x = [ ] (i tada postoji kao promenljiva)

– brisanje celih kolona ili vrsta se vrši 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’ +;

Page 38: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Tekstualna promenljiva - string

• predstavljena je vektorom vrstom od slova (ASCII znakova)

• omogućava

– formatizovanje ispisa i uĉitavanja vrednosti

– prenošenje (i ureĊivanje) 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

Page 39: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Matrice i vektori “poznatih” vrednosti

• matrica nula zeros(n,m)

• matrica jedinica ones(n,m)

• jediniĉna 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);

Page 40: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Višedimenzioni nizovi

• dvodimenzioni niz == matrica

– prvi indeks je redni broj vrste

– drugi indeks je redni broj kolone

• trodimenzioni niz

– treći indeks je redni broj strane

Indeksi

poĉinju

od 1

Page 41: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 42: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Formiranje višedimenzinonih nizova

• na naĉin 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];

Page 43: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Formiranje višedimenzinonih nizova (2)

• upotrebom funkcija: ones, zeros,

randn, ...

• umnožavanjem repmat osnovne

matrice

• upotrebom cat funkcije

B = cat(dim,A1,A2,...)

– spaja listu nizova duž dimenzije

dim

– jediniĉne dimenzije se automatski

umeću

» 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

Page 44: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Informacije o višedimenzionim 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

Page 45: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Rad sa dimenzijama matrice

• redimenzionisanje matrice B = reshape(A,[s1 s2 s3 ...]) (s1, s2, ... su nove dimenzije matrice B)

• uklanjanje jediniĉnih dimenzija C = squeeze(B)

• permutovanje dimenzija “prepakuje niz”

B = permute(A,dims)

– generalizacija transponovanja

Page 46: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Raĉunanje nad višedimenzionim nizovima

• funkcije koje rade nad vektorima,

npr. sum, mean, ...

– obiĉno rade po prvoj nejjediniĉnoj

dimenziji niza

• funkcije koje rade elemenat po

elemenat, npr. sin, ...

• funkcije koje rade sa matricama

– ne prihvataju višedimenzione

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

Page 47: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Blok naredbi

• blok naredbi saĉinjava nekoliko MATLAB iskaza (komandi)

razdvojenih separatorom “;” ili “,”

– separator “;” spreĉava 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 završava “...”

» 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

Page 48: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Kontrola toka programa

• uslovni skok if-else i switch

• programske petlje

– prebrojiva petlja for

– neprebrojiva petlja sa ispitivanjem uslova na poĉetku while

– nasilni izlazak iz petlje break

• nasilni povratak iz funkcije return

• nasilni povratak iz funkcije po otkrivanju greške i njen ispis error

• ne postoji bezuslovni skok

Page 49: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

FOR petlja

• FOR je prebrojiva petlja, tj. unapred se zna broj prolaza kroz blok

naredbi

• oblik:

for promenljiva = izraz blok naredbi end

• rezultat izraĉunavanja izraz-a je matrica, a promenljiva prima vrednosti

od prve do poslednje kolone rezultata

• uobiĉajeno upotreba je npr. for i=1:n, ...

• petlja se nasilno napušta sa break

• mogu se upotrebljavati ugnježdene petlje » for i = 1:5 for j = 1:4 a(i,j) = 1 / (i+j-1); end end

Page 50: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

WHILE petlja

• petlja se izvršava sve dok je neki uslov ispunjen i u principu se ne zna broj prolazaka kroz petlju do prestanka važenja uslova

• uslov se proverava na poĉetku petlje

• oblik: while uslov blok naredbi end

• uslov je skalar sa logiĉkom vrednosti

• petlja se nasilno napušta sa break

• mogu se upotrebljavati ugnježdene 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

Page 51: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Uslovno grananje programa • opšti 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 logiĉkom vrednosti

• tipiĉne 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 unutrašnja petlja ne završava? » 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

Page 52: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Kontrola toka programa - switch, case

• switch komanda izvršava blok komandi u

zavisnosti od vrednosti promenljive uslova.

• case oznaĉava i razdvaja blokove komandi

• samo prvo poklapanje sa case se ivršava

• swich se završava end-om

• “switch ne propada”, nakon završene 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

Page 53: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Kontrola toka programa - izuzeci

• Podržan je rad sa izuzecima

• Lasterror je funkcija koja vraća opis greške

try a = [1 2]; b = a * [1 4]; catch e = lasterror … end

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

Page 54: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Nizovi ćelija i struktura

• su posebne klase MATLAB nizova

• Ćelija

– sadrži ćelije (binarne podatke) koji su sami po sebi nizovi

– omogućava smeštanje

• razliĉitih tipova podataka u niz i

• podataka razliĉitih dimenzija

• Struktura

– takoĊe udružuje podatake (razliĉitih tipova)

– za razliku od ćelija struktura sadrže polja kojima se može pristupati

preko imena

Page 55: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Struktura

• sastoji se od imenovanih polja

• svako polje može sadržati

proizvoljan tip podataka

• formiranje

– dodelom vrednosti

– upotrebom struct funkcija

» patient patient = name: 'John Doe' billing: 127 test: [3x3 double]

Page 56: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 57: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Višedimenzioni 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];

Page 58: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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] );

Page 59: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

» 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

• može se pristupiti jednoj strukturi

• polju u okviru odreĊene strukture

• nekim vrednostim iz polja

• ne može 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]

Page 60: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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 = '000–00–0000';

• brisanje polja

struc2 = rmfield( array, 'field name‘ )

Page 61: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Organizovanje podataka u nizove struktura

• naĉin 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

Page 62: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Ugnježdene 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];

Page 63: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Niz ćelija

• je niz ĉiji su elementi ćelije, tj. to je kontejner MATLAB-ovih nizova

• npr., jedna ćelija može sadržati matricu, druga string, treća vektor

kompleksnih brojeva, itd.

Page 64: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Višedimenzioni nizovi ćelija - cells

• sliĉno brojevima, višedimenzini 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);

Page 65: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Formiranje niza ćelija dodelom vrednosti

• niz ćelija se formira popunjavanjem ćelija po ćelija

• dva ravnopravna naĉina

– indeksiranje ćelije

– indeksiranje sadržaja

– {} је konstruktor niza ćelija (poput [] za matrice)

– {} se takoĊe 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 };

Page 66: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Pristup podacima u nizu ćelija

• indeksiranje sadržaja 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] []

Page 67: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 68: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Ugnježdeni 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

Page 69: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 70: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Polinomi

• polinomi se predstavljaju vektor vrstom ĉiji su elementi koeficijenti

polinoma po opadajućem stepenu

npr., polinomu Q(s) = 2s3 + 4.1s2 - 12

odgovara vektor Q = [ 2 4.1 0 -12 ]

• funkcije za rad sa polinomima:

– conv množenje polinoma

– deconv delenje polinoma

– poly karakteristiĉni polinom

– polyder diferenciranje polinoma

– polyfit daje polinom koji aproksimira zadate podatke

– polyval izraĉunavanje vrednosti polinoma

– polyvalm sraĉunavanje vrednosti matriĉnog polinoma

– residue razvoj na parcijalne sabirke (reziduale)

– roots daje nule polinoma

Page 71: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

» 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

3s2s

45.0s5167.0

1s

45.0

2s

9667.0

01s

45.0

j21s

j3418.02583.0

j21s

j3418.02583.0

2s

9667.0

6s13s11s5s

1.1s2

)3s2s)(2s3s(

1.1s2)s(W

2

234

22

Page 72: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

M - skript-datoteke i funkcije

• omogućavaju izvršavanje ranije pisanog koda; olakšavaju ispravljanje grešaka i dorade, a time olakšavaju programiranje

• M - skript-datoteke su ASCII datoteke sa blokom naredbi

– ime datoteke se završava sa “.m”

– pozivaju se imenom datoteke (bez “.m”)

– nemaju parametre

– vrednosti promenljivih preuzimaju i ostavljaju u radnom okruženju

• M - funkcije su skript-datoteke odreĊenog 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 definišu su lokalne

– uobiĉajeno je da ime funkcije bude jednako imenu datoteke “.m”

jedna datoteka

ime.m

Page 73: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Persistent

• Deklariše perzistentne promenljive u funkcijama

– Vidljive su samo u funkciji koja ih deklariše

persistent X Y Z

• Vrednost promenljivih se oĉuvava izmeĊu poziva funkcije

Page 74: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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);

Page 75: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 76: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Handle funkcije

• Je promenljiva koja se koristi za

indirektno pozivanje funkcije

– Postojeće funkcije (ukljuĉujući

spoljašnje 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

Page 77: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Funkcije funkcija

• imaju M-funkciju (handl f-je) kao argument @funkcija

• su nelinearne numeriĉke metode za:

– analizu i crtanje funkcija

• fminbnd - traženje minimuma f-je jedne promenljive

• fminsearch - traženje minimuma f-je više promenljivih

• fzero - nule funkcije jedne promenljive

– crtanje funkcija

• fplot - crtanje funkcije, …

– rešavanje sistema diferencijalnih jednaĉina

• ode23 - Runge-Kutta matod 2-3 reda

• ode45 -Runge-Kutta-Fehlberg matod 4-5 reda

• …

– numeriĉko rešavanje integrala (quadrature)

• quad - Simson-ovo pravilo, …

Page 78: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Rešavanje diferencijalnih jednaĉina pomoću ode23 ili ode45

• može se rešiti obiĉna diferencijalna jednaĉina višeg reda

• treba napraviti sistem diferencijalnih jednaĉina 1. reda i zapisati ga u

zasebnu M-funkciju (sistem jednaĉina može biti nelinearan)

zaglavlje funkcije mora biti oblika: function xprim = ime( t, x ) gde je t vreme, a x vektor promenljivih stanja

postoji problem sa prenošenjem 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 jednaĉina,

tp - poĉetni trenutak integracije, tk - krajnji trenutak, x0 - vektor

poĉetnih vrednosti promenljivih stanja.

Izlazni parametri: t - vektor vremenskih trenutaka u kojima su

izraĉunata rešenja, a x - matrica kretanja promenljivih stanja poreĊanih

po kolonama. Prva vrsta odgovara x0 i poĉetnom trenutku tp, dok je u

poslednjoj vrsti krajnja vrednost prom. stanja (u tk).

• ode metode imaju promenljivi (adaptivni) korak integracije, tako da

dobijena rešenja nisu ekvidistantna

Page 79: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Primer upotrebe ode23

Van der Pol - ova jednaĉina:

Napomena: Brojevi “23”, odnosno “45” u imenu funkcija ode23 i ode45 se odnose

na stepene Taylor-ovih redova upotrebljanih u odgovarajućim algoritmima, a

ne odnose se na red diferencijalne jednaĉine koja se rešava. U principu, metod

ode45 je namenjen rešavanju diferencijalnih jednaĉina 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) ];

12

2

2

211

21

2

)1(

,

0)1(

xx

xxxx

xxxx

xxxx

Page 80: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 81: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Globalne promenljive

• uvedene su da bi im se pristupalo iz M-funkcija

• rešavaju problem parametrizovanja sistema dif. jednaĉina koje se

rešavaju pomoću 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) ];

2122

2111

xxxx

xxxx

Page 82: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Primer upotrebe ode23/ode45 – model sa parametrima

2122

2111

xxxx

xxxx

» 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 omogućava

zadavanje parametara

modela

0 5 10 15 200

200

400

600

800

1000

Page 83: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Klase i objekti

• klase su novi tipovi podataka koje korisnik uvodi

• objekti su primerci tih klasa (instance)

• klasa definiše strukturu podataka i vrste operacija i funkcija koje se

mogu primeniti nad tim podacima (metode klase)

• ugraĊene klase su: double, sparse, char, struct, cell, …

• toolbox-ovi definišu dodatne klase

• Primer:

Formiranje objekta tipa polinoma p(x) = x3 – 2x – 5, na osnovu vektora

koeficijenata polinoma:

p = polynom([1 0 -2 -5])

Page 84: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Naĉini 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

zajedniĉkom direktorijumu @neka_klasa (privatne metode su u private poddirektorijumu)

• Klase se mogu grupisati u pakete

– Paket je direktorijum naziva +neki_paket

– Sadrži opise klasa

– Klasa paketa se identifikuje neki_paket.neka_klasa

Page 85: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Opis klase

• Delovi opisa klase (blokovi)

– Definicija klase classdef

– Atributi properties

– Metode methods

– DogaĊaji 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

Page 86: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Konstruktor

• Konstruktor se uvek izvršava 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

Page 87: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Konverzije tipova

• zahteva postojanje metode sa imenom klase u koju se dozvoljava

konverzija

• najĉešće 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 završava 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

Page 88: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

Page 89: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Preopterećenje operatora

• svi ugraĊeni aritmetiĉki operatori imaju svoje funkcije

• mogu se preopteretiti:

aritmetiĉki, logiĉki, 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

Page 90: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Prioritet metoda objekta

• kod izraĉunavanja izraza a+b ili b+a poziva se metoda plus levog

operanda

• ukoliko je plus metod desnog operanda višeg prioriteta, tada će on biti

izvršen

• 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.

Page 91: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

1502*x3 + 5*x2 + 12*x + 1

Page 92: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

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

1502*x3 + 5*x2 + 12*x + 1

Page 93: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

NasleĊivanje

• kljuĉna osobina ponovne upotrebe koda u OOP

• kada se objekat potomak izvede iz objekta roditelja, tada on nasledi

sva polja strukture roditelja i može da izvršava njegove metode

• objekat roditelja može izvršavati metode potomka koje je on nasledio,

dok ne može izvršavati novouvedene metode

• Tipovi nasleĊivanja

– jednostruko - potomak nasleĊuje osobine samo jednog roditelja

– višestruko - potomak nasleĊuje osobine više roditelja

• nasleĊivanje se može protezati kroz nekoliko generacija

Page 94: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Jednostruko nasleĊivanje

• klasa nasleĊuje atribute neke druge

klase (roditeljske) i obiĉno dodaje

nove atribute (podatke i metode)

• objekat potomka sadrži ista polja

kao i roditeljska klasa i obiĉno 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

Page 95: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Primer jednostukog nasleĊivanja

Page 96: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Višestruko nasleĊivanje

• klasa potomak nasleĊuje sve atribute više od jedne roditeljske klase

• klasa sadrži sva polja roditeljskih klasa i obiĉno 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 izvršavati

metode roditelja koji je prvi naveden u listi funkcije class

classdef Potomak < Roditelj_A & Roditelj_B … end

Page 97: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Primer višestrukog nasleĊivanja

Page 98: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Agregacija

• se javlja kada jedan objekat A kao polje ima drugi objekat B i tada se

kaže da A agregira B

• Primer: objekat rational bi mogao da sadrži dva objekta tipa polynom

kao brojilac i imenilac.

• metode agregiranog objekta B se mogu izvršavati samo pozivom iz

metoda objekta A, zapravo, agregirani objekat B nije dostupan za

korisnika

Page 99: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Privatne metode ĉlanice klase

• klasa može sadržati privetne metode

(funkcije) koje nisu vidljive

korisniku već samo ostalim

metodama klase

Pre ver. 7.6:

• privatne metode se nalaze u

poddirektorijumu private

odgovarajućeg klasnog

direktorijuma

• private direktorijum može sadržati i

druge funkcije koje ne rade nad

objektom, ali vrše neko korisno

izraĉunavanje

classdef NekaKlasa properties neki_atribut = 12.34; … end properties (SetAccess = private) privatni_atribut = 0; … end … end

Page 100: MATLAB - automatika.ftn.uns.ac.rs (MH)/Nastavni... · Osnovne osobine • Jezik visokog nivoa za tehniĉko raĉunanje • Razvojno okruženje za upravljanje programskim kodom, datotekama

Šta ovde nedostaje?

• opis funkcija za faktorisanje i dekompoziciju matrica; raĉunanje 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š štošta ...

Kraj