1 of 36

MATLAB

Dr Stevica Cvetković

KATEDRA ZA ELEKTRONIKU, Elektronski fakultet, Univerzitet u Nišu

2 of 36

Matlab

  • MATrix LABoratory (Stanford University, 1970.)
  • Svi podaci se tretiraju se kao matrice �(skalari predstavljeni kao matrice dimenzija 1×1)
  • Izrada proptotipa, testiranje algoritama, itd.
  • Relativno visoka cena, plaćaju se i studentske licence?

2

3 of 36

GNU Octave

  • GNU OCTAVE - besplatna alternativa Matlabu
  • Kompatibilan sa većinom Matlab koda (nije 100%)
  • https://www.gnu.org/software/octave/
  • Preporucena instalacija verizije octave-5.2.0_1-w64-installer.exe,
  • Za ovaj kurs, nakon instalacije treba pokrenuti Octave i u njegovom Command Window dodatno 'pkg load image’.

3

4 of 36

Definisanje matrice

Definisanje matrice A:

>> A = [1, 1, 3; 4, 0, 6; 2, 5,-1]

A =

1 1 3

4 0 6

2 5 -1

  • Listu elemenata definešemo uglastim zagradama [ ]
  • Elementi unutar vrste (reda) matrice razdvajaju se zapetama ili blanko znacima
  • Kraj vrste označava se tačkom zarezom;

4

5 of 36

  • MATLAB razlikuje velika i mala slova kod pisanja naredbi!
  • Tačka-zarez na kraju naredbe označava da se rezultat ne ispisuje na ekranu! (važno pri radu sa velikim matricama.)
  • Komentar se označava znakom %

>> a = [7, 2, 3; 4, 5, 6]; % Ovo je matrica.

5

6 of 36

Vektor kolona

Vektor-kolona se u MATLABU predstavljaju kao matrica sa jednom kolonom:

>> x = [1; 2; 4; 8] % ovo je vektor-kolona

x =

1

2

4

8

6

7 of 36

Dvotačka operator

  • Definisanje niza u određenom opsegu i sa zadatim inkrementom.
  • Opšti oblik y = [start : korak : stop];

>> x = [3:10] % Podrazumeva se korak 1.

x =

3 4 5 6 7 8 9 10

>> x = [3:2:10]

x =

3 5 7 9

>> x = 3:2:10 % Dozvoljeno je izostaviti zagrade! (uobičajeno)

x =

3 5 7 9

7

8 of 36

Pristup elementima po indeksu

  • Indeksiranje elemenata matrice počinje od a(1,1), a ne od a(0,0)! (za razliku od većine programskih jezika)

>> a = [7 2 3; 4 5 6];

>> c = a(2,3)

c =

6

8

9 of 36

  • Ako pokušate pristup elementu koga nema u matrici dobićete poruku o grešci.

>> a(3,4)

??? Index exceeds matrix dimensions.

  • Međutim, ako pokušate da unesete vrednost u element koji ne postoji u matrici, dimenzije matrice se proširuju tako da prihvate novu vrednost:

>> a(3,4)= 15

a =

7 2 3 0

4 5 6 0

0 0 0 15

9

10 of 36

Niz indeksa

  • Indeks može biti čitav niz, a ne samo jedan broj!

>> x = [4 5 6 7 8];

>> podniz = x([2,3,4])

podniz =

5 6 7

  • Veoma korisna mogućnost da jednom naredbom pristupimo (izdvojimo) čitav podniz ili podmatricu.

10

11 of 36

>> x = [7 8 9 1; 4 5 6 3];

>> podmatrica = x(1, [2, 4]) % indeks može biti niz!

podmatrica =

8 1

11

12 of 36

Operator dvotačka

  • Omogućava kreiranje niza u zadatom opsegu i sa odgovarajućim inkrementom.

>> x = [3:2:11]

x =

3 5 7 9 11

  • Moguće izostaviti uglaste zagrade tj. x = 3:2:11

12

13 of 36

Dvotačka kao indeks

  • Kombinovanje sa dvotačka operatorom (uobičajeno):

>> x = [9 5 3 1 8 2];

>> y = x(2:5)

y =

5 3 1 8

>> y = x(2:end)

y =

5 3 1 8 2

>> y = x(:)

y =

9 5 3 1 8 2

13

14 of 36

>> a = [1 2 3; 4 5 6; 7 8 9]

a =

1 2 3

4 5 6

7 8 9

14

Podmatrica koju izdvajamo

MATLAB naredba

Podmatrica koja obuhvata drugu i treću vrstu i od prve do treće kolone.

>> a(2:3, 1:3)

ans =

4 5 6

7 8 9

Svi elementi druge kolone. (tj. elementi svih vrsta(:) i druge kolone(2))

 

>> a(:, 2)

ans =

2

5

8

Svi elemenati prve vrste. (tj. elementi prve vrste (1) i svih kolona(:))

>> a(1, :)

ans =

1 2 3

15 of 36

Snimanje i učitavanje matrice

>> save(‘matrica.dat’, A); % Snima matricu A u fajl.

>> A1 = load (‘matrica.dat’) % Iz fajla učitava matricu u A1.

15

16 of 36

Matematičke operacije nad matricama

16

17 of 36

Aritmetičke operacije

>> a = [1 2 3; 4 5 6];

>> b = [7 8 9; 3 2 1];

>> c = a + b

c =

8 10 12

7 7 7

>> d = a - b

d =

-6 -6 -6

1 3 5

>> c = a + 2

c =

3 4 5

6 7 8

>> c = a * 2

c =

2 4 6

8 10 12

>> c = a * b

Error using *

Inner matrix dimensions must agree.

17

18 of 36

Množenje matrica

  • Broj kolona prve matrice mora biti jednak broju vrsta druge matrice!

>> A = [1 2 3; 4 5 6];

>> B = [1 3; 5 7; 8 9];

>> C = A * B

C =

35 44

77 101

  • Stepenovanje moguće samo za kvadratnu matricu! >> C = A^2

18

19 of 36

Operacije element-po-element

>> a = [1 2 3; 4 5 6];

>> b = [7 8 9; 2 5 7];

>> c = a .* b

c =

7 16 27

8 25 42

>> c = a .^ 2

19

20 of 36

Relacije (<, >, ==, ~=, <=,…)

  • Rezultat relacijskog operatora je:
    • 0 - ako uslov nije zadovoljen
    • 1 - ako je uslov zadovoljen

>> 12 >= 9

ans =

1

>> 11 ~= 11

ans =

0

20

21 of 36

Relacije (matrice)

Poređenje matrice i skalara:

>> a = [1 2 3; 4 5 6];

>> a <= 4

ans =

1 1 1

1 0 0

Poređenje dve matrice:

>> b = [3 2 1; 7 9 0]

b =

3 2 1

7 9 0

>> a >= b

ans =

0 1 1

0 0 1

21

22 of 36

Logički operatori

Nad skalarima (&&, ||):

x = 4;

y = 6;

z = (x ~= 4) || (x == 6)

z =

1

Nad matricama (&, |, ~):

>> a = [1 0; 1 1]

>> b = [0 1; 1 0]

>> a & b

ans =

0 0

1 0

22

23 of 36

Matlab Skripte

  • Uređen niz Matlab komandi sačuvanih u tekstualnom fajlu koje se izvršavaju kao celina.

Npr: sabiranjeMatrica.m

clear all;�matA = [1 2 3; 4 5 6];�matB = [7 8 9; 3 2 1];�suma = matA + matB

23

24 of 36

Kontrola toka programa

24

25 of 36

if

if uslov% naredbe koje se izvršavaju � % ako je uslov ispunjen � % ...

else

% naredbe koje se izvršavaju� % ako uslov nije ispunjen� % ...

end

Primer:

x = -15if (x >= 0)

abs_x = x

else

abs_x = -x

end

25

26 of 36

if uslov1

% naredbe koje se izvršavaju ako je uslov1 ispunjen

elseif uslov2

% naredbe koje se izvršavaju ako:

% uslov1 nije ispunjen i uslov2 je ispunjen ...

elseif uslov3

% naredbe koje se izvršavaju ako:

% uslov1 nije ispunjen i uslov2 nije ispunjen i uslov3 je ispunjen

else

% naredbe koje se izvršavaju ako nijedan od uslova nije ispunjen

end

26

27 of 36

Programske petlje

for i = pocetniind : korak : krajnji_ind

%naredbe koje se izvršavaju unutar petlje (telo petlje)

end

Primer:

test = 0;

for i = 0 : 1 : 11

test = test + 2

end

27

28 of 36

Primer

Primer 1: Izračunati euklidsko (L2) rastojanje dva zadata niza.

clear all;

 

x = [7, 3, 4, 1, 8];

y = [6, 8, 9, 5, 7];

d = 0;

for i = 1 : 5

t = (x(i) - y(i)) ^ 2;

d = d + t;

end

d = sqrt(d);

% d = sqrt(sum(((x - y) .^ 2)));

28

29 of 36

Programske petlje - primer

Primer 2: Odrediti maksimalni element zadatog niza x koji sadrži deset elemenata.

clear all;

x = [3, 4, 2, 1, 4, 7, 3, 4, 1, 8];

maxEl = x(1);

for i = 2 : 10

if ( x(i) > maxEl )

maxEl = x(i);

end

end

29

30 of 36

Matlab funkcijski potprogrami

30

31 of 36

Funkcije

function [izlazni_argumenti] = imefunkcije(ulazni_argumenti)

%Komentar koji se ispisuje u helpu

...

%telo funkcije

...

izlazni_argumenti = ...

31

32 of 36

Funkcije - primer

Primer definisanja f-je u fajlu ZbirProizvod.m:

�function [z, p] = ZbirProizvod(A, B)

%Primer jednostavne funkcije

z = A + B;

p = A * B;

Primer korišćenja (poziva) funkcije u Matlabu:

>> a = [3 4; 5 6];

>> b = [2 5; 7 9];

>> [zbir1, proizvod1] = ZbirProizvod(a, b)�

zbir1 =

5 9

12 15��proizvod1 =

34 51

32

33 of 36

Ugrađene Matlab f-je

  • Funkcije za kreiranje matrica
  • Matematičke operacije
  • Statističke operacije
  • ...

33

34 of 36

Funkcije za kreiranje matrica

34

Funkcija

Opis

Primer

zeros(m)

zeros(m, n)

Matrica čiji su svi elementi jednaki nuli.

>> a = zeros(2,3)

a =

0 0 0

0 0 0

ones(m)

ones(m, n)

Matrica čiji su svi elementi jednaki jedinici.

>> a = ones(2,3)

a =

1 1 1

1 1 1

eye(m)

eye(m, n)

Jedinična matrica (elementi glavne dijagonale su 1, a ostali elementi jednaki 0).

>> a = eye(2)

a =

1 0

0 1

rand(m)

rand(m, n)

Matrica slučajnih elemenata na segmentu [0, 1] po uniformnoj raspodeli.

>> a = rand(2,3)

a =

0.8147 0.1270 0.6324

0.9058 0.9134 0.0975

randn(m)

randn(m, n)

 

Matrica slučajnih elemenata prema norm. raspodeli .

>> a = randn(2,3)

a =

-0.4326 0.1253 -1.1465

-1.6656 0.2877 1.1909

35 of 36

Matematičke operacije

35

Funkcija

Opis

Primer nad a=[1 2; -1 -2]

abs(a)

Apsolutna vrednost

>> abs(a)

ans =

1 2

1 2

sqrt(a)

Kvadratni koren

>> sqrt(a)

ans =

1.0000 1.4142

0 + 1.0000i 0 + 1.4142i

exp(a)

Eksponencijalna funkcija, tj. ea

>> exp(a)

ans =

2.7183 7.3891

0.3679 0.1353

log(a)

Prirodni logaritam tj. ln(a)

>> log(a)

ans =

0 0.6931

0 + 3.1416i 0.6931 + 3.1416i

log10(a)

Logaritam sa osnovom 10.

>> log10(a)

ans =

0 0.3010

0 + 1.3644i 0.3010 + 1.3644i

sin(a)

cos(a)

Trigonometrijske funkcije, pri čemu je ugao zadat u radijanima.

>> sin(a)

ans =

0.8415 0.9093

-0.8415 -0.9093

36 of 36

Statističke operacije

36

Funkcija

Opis

Primer nad matricom a = [3 4; 1 7; 5 2]

Primer nad nizom b = [4 9 5]

max(m)

min(m)

Pronalazi maksimalni (minimalni) element.

>> max(a)

ans =

  1. 7

>> max(b)

ans =

9

sum(m)

Suma elemenata

>> sum(a)

ans =

  1. 13

>> sum(b)

ans =

18

mean(m)

Srednja vrednost

>> mean(a)

ans =

  1. 4.3333

>> mean(b)

ans =

6

sort(m)

Uređuje elemente u rastući poredak.

>> sort(a)

ans =

1 2

3 4

5 7

Pozivom ovih funkcija nad matricom, vrši se operacija nad svakom kolonom matrice!