You are on page 1of 28

Sveuilini studijski centar za strune studije

Zavod za matematiku i fiziku

Uvod u Matlab
Verzija 1.1

Karmen Rivier, Arijana Burazin Miura


1.11.2008

Uvod
Matlab je interaktivni sistem namijenjen izvoenju numerikih izrauna.
Omoguava nam jednostavan rad s matricama, crtanje funkcija i podataka, implementaciju
algoritama i povezivanje s programima pisanim u drugim jezicima.
Prvu verziju razvio je 1970. godine Cleve Moler, ef katedre za informatiku na University of
New Mexico.
Danas je Matlab komercijalni proizvod tvrtke Mathworks i ima vie od milion korisnika.
Pokretanje
Na Windows sistemima Matlab pokreemo dvostrukim klikom na Matlab ikonu na desktopu ili
biranjem Matlab-a u Start izborniku.
Daljnje naredbe se ukucavaju u komandnoj liniji oznaenoj sa >>.
Odabirom izbornika File/Preferences moete promijeniti default postavke Matlab-a (font,
boju,...).
Help/Pomo
Ukoliko vam je potrebna pomo tokom rada, pozivom help help dobit ete detaljan opis help
funkcije. Ako vam je potrebna pomo za neko tono odreeno poglavlje, npr.general, unesete u
komandnu liniju help general. S obzirom na veliki obim ispisanih informacija, ukoliko elite da
one budu prikazane jedna po jedna, prvo morate unijeti naredbu more on, pa tek onda help
general. Nakon toga, biranjem bilo koje tipke, na ekranu dobivate idui slijed informacija.
Naredbom helpwin ili helpdesk otvara se interaktivni help prozor. Drugi nain pozivanja help
prozora je biranjem izbornika Help/MATLAB Help.

1. Sintaksa, konstante, varijable


Brojevi
Matlab razlikuje nekoliko razliitih vrsta brojeva:
Cjelobrojni npr. 674, -674
Realni
1.234
Kompleksni
3+3i
te posebni ili specijalni brojevi:
Inf - beskonano (npr. rezultat koji dobijemo kad broj dijelimo s 0)
NaN Not a number (npr. rezultat kod 0/0)

eps strojni epsilon, ocjena greke zaokruivanja


realmin - vrijednost najmanjeg realnog broja
realmax - vrijednost najveeg realnog broja
i imaginarna jedinica (j takoer ima vrijedost imaginarne jedinice)
pi -
ans - automatski poprima vrijednost izraza kad izraz nije pridruen varijabli ( o tome vie
u poglavlju Varijable)
Formati
Korisnik sam bira u kojem formatu e Matlab prikazati brojeve. To utjee iskljuivo na prikaz
broja a ne i na nain na koji su izrauni izvreni i pohranjeni (sve kalkulacije Matlab izvodi
koristei dvostruku preciznost double precision nain zapisa).
Npr. pogledajmo kvocijent 4/3 prikazan u razliitim formatima:

format short
format short e
format long
format long e
format rational
format bank

1.3333
1.3333e+000
1.33333333333333
1.333333333333333e+000
4/3
1.33

Eksponencijalni zapis (formati koji koriste 'e' u zapisu) je uglavnom koriten za prikaz vrlo
velikih, odnosno vrlo malih brojeva:
-1.34567e+04=-13456.7
-1.34567e-01=-0.134567
Naredba format compact brie prazne linije, dozvoljavajui tako prikaz vie informacija na
ispisu. Ukoliko prazne linije elimo vratiti nazad, to radimo naredbom format loose.
Aritmetike operacije
Pogledajmo kako Matlab koristimo kao kalkulator.
Aritmetika operacija
Zbrajanje
oduzimanje
mnoenje
dijeljenje
potenciranje

Simbol
+
*
/ ili \
^

MATLAB ima dvije operacije dijeljenja / - desno dijeljenje i \ - lijevo dijeljenje. One ne daju isti
rezultat:
>>47/3
ans =
15.6667
>>47\3
ans =
0.0638
Primjetite da je rezultat od 47\3 jednak onom od 3/47.
Matlab vodi rauna o prioritetima raunskih operacija. Prema tome, prvo izraunava vrijednosti
u zagradama, zatim potenciranje, nakon toga operacije * i / (poevi s lijeva na desno) i na kraju
operacije + i (s lijeva na desno). Npr:
>>1+5/4*3
>>ans =
4.7500
Matlab je prvo izraunao vrijednost izraza 5/4, to pomnoio s 3 i na kraju tu vrijednost dodao
1+ 5
jedinici. Meutim ako je ono to ste htjeli izraunati vrijednost izraza
onda morate
4*3
koristiti zagrade:
>>(1+5)/(4*3)
>>ans =
0.5000
Da bi uvidjeli vanost pravilne uporabe zagrada, pogledajte idui primjer:
Matematiki izraz
8
+2
2
4+8
+2
2
4+8
2+2
8
4+
2+2
4+

Matlabov zapis

Vrijednost

4 + 8/ 2 + 2

10

(4 + 8) / 2 + 2

(4 + 8) /(2 + 2)

3
6

4 + 8 / (2 + 2)

Logiki i relacijski operatori


Operator
jednako
nije jednako
manje, manje ili jednako
vee,vee ili jednako
i
ili
ne

Simbol
==
~=
<,<=
>, >=
&
|
~

Primjer upotrebe:
>> 5<13
ans =
1
>> 5>13
ans =
0
Unoenje izraza 5<13 Matlab tretira kao logiki upit, odnosno tvrdnju 5 je manje od 13?. I
odgovara ans=1, to oznaava logiku istinu. U drugom sluaju Matlab odgovara sa 0, to
oznaava negativan odgovor, odnosno logiku neistinu.
Izraze moemo i kombinirati:
>> x=7;
>> x > 3 | x == -3
ans =
1
Varijable
>> 3-2^4
ans =
-13
>> ans*5
ans =
-65
Rezultat prve kalkulacije Matlab oznaava kao ans i koristi ga u drugoj kalkulaciji gdje je
njegova vrijednost promijenjena i sad iznosi -65.
Prema tome, ans je redefinirana varijabla u koju Matlab smjeta trenutnu vrijednost izrauna
ukoliko korisnik ne specificira drukije.
Za pohranjivanje vrijednosti preporuljivo je definirati vlastite varijable.
4

Ime varijable moe se sastojati od bilo koje kombinacije slova i znamenaka poevi sa slovom.
Znakovi nisu dozvoljeni, dok koritenje specijalnih/rezerviranih imena kao to su eps, pi, Inf
nije preporuljivo.
>> x = 3-2^4
x=
-13
>> y = x*5
y=
-65
Sada x ima vrijednost -13 , a y -65 i oni mogu biti koriteni u narednim raunima.
Ukratko, da bi varijablu mogli koristiti na desnoj strani nekog izraza, prethodno joj moramo
pridodati neku vrijednost.
Ukoliko ne elimo na zaslonu vidjeti rezultate meuoperacija, izraz zavrimo s ; (toka-zarez):
>> x=-13;
>>y = 5*x
y=
-65
Pored toga ; slui za razdvajanje vie naredbi u jednom redu. Ukoliko nam je naredba
predugaka za jedan red dodavanjem na kraju tog reda ... ista se nastavlja u sljedeem redu.
Naredba who (whos) daje listu svih koritenih varijabli.
Naredba clear <ime_varijable> brie navedenu varijablu iz tekueg radnog prostora, a clear all
brie vrijednost svih varijabli.
clc brie/isti komandni prozor i postavlja kursor na vrh prozora
Naredba % je koritena za komentare i Matlab ignorira cijelu liniju to slijedi nakon tog znaka.
Ukoliko elite prekinuti Matlab u izvrenju neke naredbe (naprimjer zbog beskonane petlje u
pogreno napisanom m-file-u) to radite istovremenim pritiskom na ctrl+c. Ovaj nain nije
preporuljiv, ali je u nekim situacijama neophodan.
Matlab nam omoguava jednostavno (ponovno) pozivanje jednom uneenih naredbi.
Opetovanim koritenjem tipki (odnosno ) prikazivat e nam se prethodno unoene naredbe i
ukoliko neku od njih elimo ponovo izvriti (po potrebi je moemo i izmijeniti) samo pritisnemo
tipku enter. Unoenjem npr. naredbe p , ponovo e biti pozvana naredba koja poinje slovom p
a posljednja je izvrena.

2. Matrice, unos matrica, operacije s matricama, determinante


Osnovni objekt u Matlabu je matrica, kao to i samo ime kae (MATrix LABoratory).
Matrica m n je pravokutna tabela brojeva koje se sastoji od m redaka i n stupaca.
U matematici matrice obino prikazujemo u okruglim ili uglatim zagradama.
Matlab ak i skalare tretira kao matrice (tipa 1 1 ).
Da bi u Matlab unijeli matricu, potrebno je:
- koristiti uglate zagrade []
- elemente retka razvojiti zarezima , ili praznim mjestom
- retke razdvojiti toka zarezom ; ili prei u novi red (tipka enter)
Matrice
Na primjer za m = 2; n = 3 imamo matricu tipa 2 3 kao to je naredna
A =[5 7 9
1 -3 -7]
Da bismo unijeli tu matricu u Matlab, tipkamo red po red.
>> A = [5 7 9
1 -3 -7]
A=
579
1 -3 -7
Redovi mogu biti odvojeni i toka zarezom a elemente moemo razdvojiti i zarezom:
>> B = [-1 2 5; 9 0 5]
B=
-1 2 5
905
>> C = [0, 1; 3, -2; 4, 2]
C=
01
3 -2
42
Dvotoka : (engl. colon) vrlo je koristan znak u MATLAB-u. Evo samo nekih primjera njenog
koritenja: Ako npr. drugi redak prije definirane matrice A elimo pospremiti u matricu D,
koristimo naredbu
D=A(2,:)
>> D=A(2,:)
D=
246
6

Slino, trei stupac matrice A dat e nam naredba E=A(:,3)


>>E=A(:,3)
E=
-1
6
Pogledajte to dobijemo iduom naredbom:
>> E=A(2,2:3)
E=
-3 -7
Vektori
Vektor (redak i stupac) su poseban sluaj matrice, kod njih je jedna od dimenzija jednaka 1.
Broj lanova vektora jo se naziva duljina (length) vektora a lanovi se jo nazivaju elementi ili
komponente vektora.
Razmotrimo prvo rad s vektorom retkom:
To je lista brojeva odvojenih ili zarezima ili praznim mjestom. Elementi moraju biti prikazani u
uglatim zagradama:
>> v = [ 1 3, sqrt(5)]
v=
1.0000 3.0000 2.2361
>> length(v)
ans =
3
Pravilno koritenje praznog mjesta je od presudne vanosti. Pogledajmo idui primjer:
>> v2 = [3+ 4 5]
v2 =
75
>> v3 = [3 +4 5]
v3 =
345
S vektorima jednake duljine moemo izvoditi neke aritmetike operacije. Takvi su naprimjer
prethodno spomenuti vektori v i v3.
.
>> v + v3
ans =
4.0000 7.0000 7.2361

>> v4 = 3*v
v4 =
3.0000 9.0000 6.7082
>> v5 = 2*v -3*v3
v5 =
-7.0000 -6.0000 -10.5279
>> v + v2
??? Error using ==> +
Matrix dimensions must agree.
Ova poruka upozorava nas da matrice nisu jednakih dimenzija.
Vektor stupac konstruiramo na slian nain. Elemente razdvajamo znakom ; ili prelaskom u novi
red.
>> c = [ 1; 3; sqrt(5)]
c=
1.0000
3.0000
2.2361
Postoji brzi nain za generiranje nekih retanih vektora:
>> 1:4
ans =
1234
>> 3:7
ans =
34567
Openita sintaks je a : b : c i time je generiran vektor iji prvi element ima vrijednost a, a ostali
elementi se dobiju uveavanjem a za vrijednost b sve dok je ta suma manja od c.
>> 0.32:0.1:0.6
ans =
0.3200 0.4200 0.5200
>> H=10:2:3
H=
Empty matrix: 1-by-0
Prethodna naredba kao rezultat daje praznu matricu jer je poetni element vei od zavrnog, a
korak uveavanja pozitivan.

Matrine funkcije ugraene u Matlab


Funkcija
zeros(m,n)
eye(n)
diag(X)
rank(A)
size(A)
size(A,1)
size(A,2)
sum(A)

Argumenti
m, n su prirodni brojevi
n je prirodni broj
X je jednoredna
ili jednostupana matrica
A je proizvoljna matrica
A je proizvoljna matrica
A je proizvoljna matrica
A je proizvoljna matrica
A je proizvoljna matrica

prod(A)

A je proizvoljna matrica

det(A)
inv(A)

A je kvadratna matrica
A je kvadratna matrica

to radi
Generira nul-matricu od m redaka i n stupaca.
Generira jedininu matricu reda n.
Generira dijagonalnu matricu iji su elementi redom
elementi od X.
Rauna rang matrice A.
Ispisuje broj redaka i stupaca matrice A.
Ispisuje broj redaka matrice A.
Ispisuje broj stupaca matrice A.
Ako je A jednoredna ili jednostupana, zbraja sve elemente
od A, a ako nije, zbraja ih po stupcima.
Ako je A jednoredna ili jednostupana, mnoi sve elemente
od A, a ako nije, mnoi ih po stupcima.
Rauna determinantu matrice A.
Rauna inverznu matricu matrice A.

Pogledajmo primjere koritenja nekih od navedenih funkcija:


>> A = [5 7 9; 1 -3 -7];
>> size(A)
ans =
2 3
>> A'
ans =
5 1
7 -3
9 -7
Dijagonalnu matricu umjesto unoenja svih elemenata moemo generirati i na idui nain:
>> d = [-3 4 2]; D = diag(d)
D=
-3 0 0
0 4 0
0 0 2
U sluaju da funkciju diag primjenimo na matricu, dobit emo njene dijagonalne elemente:
>> diag(A)
ans =
5
-3
9

Funkcija sum zbraja elemente po stupcima


>> sum(A)
ans =
6 4 2
U iduem sluaju, dvostrukom primjenom funkcije sum dobivamo sumu svih elemenata matrice
(pogledajte jo jednom definiciju funkcije sum):
>> sum(sum(A))
ans =
12
Aritmetike operacije s matricama
Operacija
Zbrajanje matrica
Oduzimanje matrica
Mnoenje matrice brojem
Mnoenje matrice matricom
Desno dijeljenje matrica
Lijevo dijeljenje matrica
Potenciranje matrice
Transponiranje matrice
Mnoenje elemenata dviju
matrica lan po lan

Znak
+
*
*
/
\
^

.*

Desno dijeljenje elemenata dviju matrica


lan po lan

./

Lijevo dijeljenje elemenata dviju matrica


lan po lan

.\

Potenciranje elemenata dviju


matrica lan po lan

.^

Napomena
Matrice moraju biti istih dimenzija.
Matrice moraju biti istih dimenzija.
Matrice moraju biti ulanene.
Matricu ne moemo dijeliti matricom!
Matrica mora biti kvadratna.
Matrice moraju biti istih dimenzija.
S lijeve ili desne strane znaka moe
biti i broj.
Matrice moraju biti istih dimenzija.
S lijeve ili desne strane znaka moe
biti i broj.
Matrice moraju biti istih dimenzija.
S lijeve ili desne strane znaka moe
biti i broj.
Matrice moraju biti istih dimenzija.
S lijeve ili desne strane znaka moe
biti i broj.

Posebno obratite panju na operacije koje poinju tokom. Zovemo ih operacije po pozicijama.
One uglavnom nemaju matematiki ekvivalent osim u nekim posebnim sluajevima.
Pojasnit emo poblie neke od navedenih operacija, odnosno ukoliko je mogue, nai emo
njihove matematike ekvivalente:
10

1. mnoenje, dijeljene i potenciranje vektora


Uzmimo dva vektora u i v jednake duljine n. Neka je u retani a v stupani vektor.
Skalarni produkt vektora definira se kao skalar dobiven na sljedei nain:
n

uv = u i vi
i =1

4
Neka je u=[1 2 3] a v= 5 . Pogledajmo emu je jednako uv:
6

uv = 1 4 + 2 5 + 3 6 = 4 + 10 + 18 = 32
U Matlabu to moemo izraunati ovako:
>> x=[1 2 3]; y=[4; 5; 6];
>> x*y
ans =
32
Gore definirane vektore mogli bismo pomnoiti i ovako:

u v = u1v1 u 2 v 2 u 3 v3

u n vn

Rezultat je vektor jednake duljine kao i vektori u i v, i dobiven je mnoenjem odgovarajuih


elemenata dvaju vektora. Odgovarajui operator u Matlabu je .* a za
vektore iz prethodnog izrauna, odgovarajui umnoak dobili bi transponirajui jedan od
vektora, kako bi dobili vektore istog tipa (za dimenzije znamo da su jednake):
>> x.*y'
ans =
4 10 18
>> x'.*y
ans =
4
10
18
to se tie dijeljenja dvaju vektora, ne postoji matematiki ekvivalent te operacije. Meutim, u
Matlabu je za vektore iste duljine i istog tipa operacijom ./ definirano dijeljenje odgovarajuih
elemenata. Poblie:

u. / v = u1 / v1 u 2 / v 2

u n / vn

11

Odnosno za vektore x i y:
>> x./y'
ans =
0.2500 0.4000 0.5000
Ukoliko elimo kvadrirati elemente vektora u, to moemo napraviti na dva naina, ili kao u.*u ili
jednostavnije u.^2
>> x.*x
ans =
1 4

>> x.^2
ans =
1 4

U kombinaciji s drugim operandima potenciranje, naravno ima prednost:


>> z=y';
>> z.*x.^2
ans =
4 20 54
2.
mnoenje matrica
Da bi dvije matrice mogli pomnoiti, one moraju biti ulanane, odnosno ako je matrica A tipa
m n onda matrica B mora biti tipa n p (broj stupaca matrice A mora odgovarati broju redaka
matrice B). Na taj nain, operand * vri standardno mnoenje matrica.
>> A=[1 2 3; 4 5 6];
>> B=[1 2; 3 4; 5 6];
>> A*B
ans =
22 28
49 64
>> B*A
ans =
9 12 15
19 26 33
29 40 51
U ovom sluaju bilo je mogue izvriti i operaciju B*A jer su matrice B i A ulanane.
Primjetite da je A*B B*A.
Operandom .* definirano je mnoenje po pozicijama i matrice moraju biti istog tipa.
12

>> C=B';
>> size(A)
ans =
2 3
>> size(C)
ans =
2 3
Vidimo da su matrice A i C istog tipa, stoga:
>> A.*C
ans =
1 6 15
8 20 36
Pogledajmo naredni primjer:
>>a=rand(3)
>>a =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
Naredbom rand(3) generirana je matrica tipa 3 3 sastavljena od sluajnih brojeva.
>> m=max(a)
m=
0.9501 0.8913 0.8214
Naredbom max dobili smo vektor koji sadri maksimalne vrijednosti stupaca matrice a. Ukoliko
na vektor m primijenimo narebu max, dobit emo maksimalni element vektora.
>>max(m)
ans =
0.9501
Ukoliko nas interesira pozicija maksimalnog elementa, to dobivamo sa:
>> [v,ind]=max(m)
v=
0.9501
ind =
1

13

Ponekad je praktino veliku matricu generirati uz pomo prethodno definiranih manjih matrica:
>> D=[1 2; 3 4; 5 6]; X=[7; 8; 9];
>> E=[D X]
E=
1 2 7
3 4 8
5 6 9
Na ovaj nain matrica X dodana je pored matrice D, a u iduem primjeru matrice su
postavljene jedna iznad druge:
>> Y=[10 11];
>> F=[D; Y]
F=
1 2
3 4
5 6
10 11
Sada emo pokazati kako generirati tablicu koja e nam sluiti za usporedbu vrijednosti dviju
funkcija za odreeni raspon vrijednosti argumenta:
>>x = (0:0.1:0.5)';
[x 4*sin(3*x) 3*sin(4*x)]
ans =
0
0.1000
0.2000
0.3000
0.4000
0.5000

0
0
1.1821 1.1683
2.2586 2.1521
3.1333 2.7961
3.7282 2.9987
3.9900 2.7279

3. Definirane funkcije, funkcijski m-file


Zajedniko obiljeje svih funkcija je da se argument uvijek pie u zagradi.
Tabela nekih matematikih funkcija definiranih u Matlabu:
Ime
Sin

Znaenje
Sinus

Poziv
sin(3*pi)

Cos

Kosinus

cos(2*pi/3)

14

Rezultat
ans =
3.6738e-016
ans =
-0.5000

Tan

Tangens

tan(pi/4)

Asin

arkus sinus

asin(1)

Acos

arkus kosinus

acos(1)

Atan

arkus tangens

atan(1)

Sinh

hiperbolni sinus

sinh(0)

Cosh

hiperbolni kosinus

cosh(0)

Tanh

hiperbolni tangens

tanh(-3)

asinh

area sinus hiperbolni

asinh(1)

acosh

area kosinus hiperbolni

acosh(1)

atanh

area tangens hiperbolni

atanh(-0.9951)

Sqrt

kvadratni (drugi) korijen

sqrt(2)

Exp

eksponencijalna funkcija (baza


e)
logaritamska funkcija (baza e)

exp(1)

log10

logaritamska funkcija (baza


10)

log10(0)

Abs

apsolutna vrijednost (modul)

abs(3-4*i)

Real

realni dio kompleksnog broja

real(-3+2*i)

Imag

imaginarni dio kompleksnog


broja
kompleksno konjugiranje

imag(-3+2*i)

zaokruivanje broja
na najblii cijeli broj

round(2.3)

Log

Conj
Round

log(1)

conj(-3+2*i)

round(3.5)

15

ans =
1.0000
ans =
1.5708
ans =
0
ans =
0.7854
ans =
0
ans =
1
ans =
-0.9951
ans =
0.8814
ans =
0
ans =
-3.0046
ans =
1.4142
ans =
2.7183
ans =
0
Warning: Log of zero
ans =
-Inf
ans =
5
ans =
-3
ans =
2
ans =
-3.0000 - 2.0000i
ans =
2
ans =
4

Trigonometrijske funkcije

One poznate Matlab-u su sin,cos, tan i njihov argument mora biti u radijanima.
>> x = 5*cos(pi/6), y = 5*sin(pi/6)
x=
4.3301
y=
2.5000
U iduem primjeru pogledajte pogrenu a zatim i ispravnu upotrebu funkcije sinus:
>> sin 1
ans =
-0.9538
>> sin(1)
ans =
0.8415
Matlab nam na upit sin 1 vraa odgovor -0.9538 i ne upozorava nas na pogrean unos.
Funkcije inverzne trigonometrijskim funkcijama su asin, acos, atan i njihov rezultat je izraen u
radijanima.
>> acos(x/5), asin(y/5)
ans =
0.5236
ans =
0.5236
>> pi/6
ans =
0.5236
Ostale elementarne funkcije ( sqrt, exp, log, log10)

>> x = 9;
>> sqrt(x),exp(x),log(sqrt(x)),log10(x^2+6)
ans =
3
ans =
8.1031e+03
ans =
1.0986
ans =
1.9395
16

exp(x) oznaava eksponencijalnu funkciju exp(x) = ex i njen inverz je logaritamska funkcija log.

>> format long e, exp(log(9)), log(exp(9))


ans =
9.000000000000002e+00
ans =
9
>> format short
Ovdje vidimo malu greku zaokruivanja u prvom izraunu.
Funkcija log(x) je oznaka za matematiku funkciju ln x, dok log10 izraunava logaritam po bazi
10. Postoji jo i funkcija log2 koja oznaava logaritam po bazi 2.
Polinomi

U Matlabu polinome prikazujemo pomou vektora iji su elementi koeficijenti polinoma


zapisani u odgovarajuem slijedu, npr. polinom 5 x 4 x 3 + 7 x + 5 bit e prikazan vektorom
[5 -1 0 7 5].
Vrijednost polinoma izraunava se koristei funkciju polyval(). Tako npr. ako elimo izraunati
vrijednost prije spomenutog polinoma u x=3, to radimo ovako:
>>p=[5 -1 0 7 5];
>>val=polyval(p,3)
val =
404
Nul-toke, odnosno korijeni polinoma nalaze se koritenjem funkcije roots:
>> roots(p)
ans =
0.8053 + 1.0129i
0.8053 - 1.0129i
-0.7053 + 0.3160i
-0.7053 - 0.3160i
Prethodni polinom oito je imao dva para konjugirano kompleksnih nul-toaka.
Ukoliko polinome elite zbrojiti ili oduzeti, morate voditi rauna da matrice koje ih
reprezentiraju moraju biti istog tipa. U protivnom, zbrajanje, odnosno oduzimanje nije mogue
izvriti i Matlab e vas upozoriti na pogreku.
Recimo da prethodnom polinomu elimo dodati polinom q=2x-3.

17

>>q=[2 -3];
>>p+q
??? Error using ==> +
Matrix dimensions must agree.
Meutim, ako polinom q lano prikaemo polinomom etvrtog stupnja, rijeit emo problem:
>>q1=[0 0 0 2 -3]
>>p+q1
ans =
5 -1

Za mnoenje dva polinoma, koristimo funkciju conv:


>>conv(p,q)
ans =
10 -17

3 14 -11 -15

A za dijeljenje, funkciju deconv koja osim rezultata dijeljenja vraa i ostatak:


>> [d, R] = deconv(p,q)
d=
2.5000 3.2500 4.8750 10.8125
R=
0
0
0
0 37.4375
Petlje/Naredbe kontrole toka

Ponekad elimo neku naredbu ili niz naredbi ponoviti odreeni broj puta. Ovisno o tome da li
unaprijed znamo koliko emo puta ponoviti naredbu ili se ponavljanje nastavlja dok god je
ispunjen odreeni uvjet, koristimo neku od dolje navedenih naredbi:
Naredba for
Naredba for slui za ponavljanje odreene naredbe ili niza naredbi unaprijed zadani broj puta.
Sintaksa for petlje:
for varijabla=izraz1:izraz2:izraz3
naredbe
end

varijabla (broja petlje) poprima vrijednosti od


izraz1 do izraz3 s korakom izraz2.
(Ako je korak 1, ne moramo ga pisati)

18

Idua petlja rauna vrijednosti funkcije sin

n
za n=1,2,3,4,5,6 :
6

>> for n = 1:6


sin(n*pi/6)
end
ans =
0.5000
ans =
0.8660
ans =
1
ans =
0.8660
ans =
0.5000
ans =
1.2246e-016
Primjetite da smo iste vrijednosti mogli dobiti i bez koritenja petlje:
>> sin([1:6]*pi/6)
ans =
0.5000 0.8660 1.0000 0.8660 0.5000 0.0000
Posljednja izraunata vrijednost ( sin = 0.0000 ) razlikuje se od one dobivene koritenjem for
petlje (1.2246e-016) meutim to je rezultat finesa IEEE aritmetike.
Broja petlje takoer moe biti eksplicitno zadan vektor, npr:
>> for counter = [23 11 19 5.4 6]
.......
end
Naredba while
Ponekad elimo ponavljati niz naredbi dok god je vrijednost nekog logikog izraza ispunjena, ali
ne moemo unaprijed znati koliko e to biti puta. U tom sluaju koristimo while petlju.
Naredba while ponavlja odreenu naredbu ili niz naredbi dok je ispunjen uvjet iz izraza.
Sintaksa while-petlje:

while izraz
naredbe
end

Za izlaz iz petlje (for i while) esto se koristi naredba break.


19

Primjer: koja je najvea vrijednost n-a za koju je suma 1+2+3+...+n < 100?
>> S = 1; n = 1;
>> while S+(n+1)<100
n=n+1;
S=S+n;
end
>> [S, n]
ans =
91 13
Naredba if...then...else...end
Omoguava nam izvravanje razliitih komandi ovisno o istinitosti logikog testa.
if izraz
naredbe
end

osnovni oblik naredbe if


proireni oblik naredbe if

if izraz
naredbe
else
naredbe
end

Funkcijski m-file

Da bismo pojednostavnili pisanje nizova naredbi koji se ponavljaju i kreirali nove funkcije,
koristimo m fileove.
Kreiranje m-file-a:
U Matlabovom glavnom izborniku biramo FileNewM-file ili kliknemo na ikonu New MFile na alatnoj traci. Otvorit e se editor u kojem unosimo naredbe naeg file-a. Kada smo
gotovi, file treba spremiti. U editoru kliknemo na ikonicu Save, ili u izborniku File biramo opciju
Save/Save As.
1. Promijenimo direktorij u C:\WORK (provjeriti u dokumentaciji koji direktorij Matlab
automatski pronalazi).
2. Dodijelimo ime pod kojim e se file (datoteka) pohraniti u memoriju. Novije verzije Matlaba
automatski dodaju ekstenziju .m, dok je u starijim verzijama potrebno eksplicitno navesti
ekstenziju kada datoteci dodjeljujemo ime.
3. Kliknemo na Save.
File pokreemo/izvravamo tako da u komandnoj liniji napiemo njegovo ime i znak Enter.
Funkcijskim mfileom kreiramo novu funkciju. Ovako kreirana funkcija ravnopravna je
funkcijama ugraenim u MATLAB-u (kao to su npr. sin, log, det, itd.) Na taj nain moemo
prema naoj volji i potrebama proiriti biblioteku postojeih funkcija.
Sintaksa je:

20

function varijabla=ime funkcije(ulazne varijable)


naredbe

U prvom retku mora biti ime


funkcije i varijable kojima
operira.

Ime funkcijskog m-filea mora biti isto kao i ime funkcije koja se njima definira. Samu funkciju
pozivamo kao i svaku drugu funkciju, koristei njeno ime, zagrade, ulazne i izlazne varijable.
Varijable mogu biti i brojevi i matrice. Jasno je da broj i tip varijabli u definiciji i pozivu
funkcije moraju biti isti.
function [izlazne varijable]=ime funkcije(ulazne varijable)
naredbe

Funkcija moe imati i


vie izlaznih varijabli.

Budite sigurni da ime funkcije nije u sukobu s nekom funkcijom koja ve postoji u Matlabu.
Primjer: funkcija koja rauna povrinu trokuta kojem znamo duljine stranica.
function [P] = povrsina(a,b,c)
% Rauna povrinu trokuta kom znamo duljine stranica
% Ulazni podaci:
% a,b,c: Duljine stranica
% Rezultat:
% P: povrina trokuta
% Upotreba:
% Povrsina = povrsina(2,3,4);
% Written by dfg, Oct 14, 1996.
s = (a+b+c)/2;
P = sqrt(s*(s-a)*(s-b)*(s-c));
%%%%%%%%% end %%%%%%%%%%%
Ukoliko u Matlabovom prozoru napiemo
>> help povrsina
Bit e prikazani komentari iz m-file-a:
Rauna povrinu trokuta kom znamo duljine stranica
Ulazni podaci:
a,b,c: Duljine stranica
Rezultat:
P: povrina trokuta
Upotreba:
Povrsina = povrsina(2,3,4);
Written by dfg, Oct 14, 1996.
Da bi izraunali povrinu trokuta kom su duljine stranica 10, 15, 20:
>> Povrsina = povrsina(10,15,20)
Povrsina =
72.6184
Vidimo da je rezultat izrauna pridruen varijabli Povrsina.

21

4. Graf funkcije
Graf elementarnih funkcija

Osnovni alat koriten za crtanje u Matlabu je funkcija plot(). Da bi shvatili kako ta funkcija radi,
zamislimo da elimo nacrtati liniju koja prolazi kroz toke (1, 4) i (3, 6). Prvo definiramo x
vrijednosti kao vektor x=(1,3) (vektor apscisa) i y vrijednosti kao vektor y=(4,6) (vektor
ordinata). Zatim nacrtamo toke definirane tim vektorima (to su (1,4) i (3,6) ) i poveemo ih
linijom. Odgovarajue naredbe u Matlabu bile bi:
>>x=[1 3]
x=
13
>>y=[4 6]
y=
46
>>plot(x,y)

Na ekranu se pojavio grafiki prozor naziva Figure no.1 sa sljedeim sadrajem:

Krenimo sada na sloeniji primjer:


Pretpostavimo da elimo nacrtati graf funkcije y=sin 3x na intervalu od 0 do 1. To emo
napraviti na sljedei nain: funkciju emo opisati proizvoljnim brojem toaka i onda emo te
toke povezati ravnim linijama. Prepostavimo da uzmemo N+1 toaka koje su udaljene za h:
>> N = 10; h = 1/N; x = 0:h:1;

22

Na taj nain dobivamo niz x = 0; h; 2h; ; 1-h; 1.


Isto tako smo mogli koristiti naredbu linspace: openiti oblik naredbe je linspace (a,b,n) koja
generira n+1 jednako udaljenih toaka izmeu a i b, ukljuujui rubove (a,b).
Tako smo mogli koristiti komandu:
>> x = linspace (0,1,11);
Zatim raunamo njima odgovarajue vrijednosti y:
>> y = sin(3*pi*x);
I konano, to crtamo sa:
>> plot(x,y)

Rezultat je vidljiv na gornjoj slici i oito je da je uzeti N premalen.


Ako N poveamo na 100, rezultat je puno bolji:
>> x = linspace (0,1,100);
>> y = sin(3*pi*x);
>> plot(x,y)

23

Punu crvenu liniju dobijemo sa:


>> plot(x,y,'r-')
Trei argument u funkciji plot je string u kojem prvo slovo specificira boju, a drugo stil linije.
Opcije za boje i stilove su:
Boja
y yellow
m magenta
c cyan
r red
g green
b blue
w white
k black

Oznaka toaka
. point
o circle
x x-mark
+ plus
* star
s square
d diamond
v triangle (down)
^ triangle (up)
< triangle (left)
> triangle (right)
p pentagram
h hexagram

Oznaka linije
: dotted
-. dashdot
-- dashed
- solid

Jednostavniji nain za crtanje grafa funkcije bio bi koristei naredbu ezplot.


ezplot(f) crta izraz f = f(x) na domeni: -2 < x < 2.
ezplot(f,[min,max]) crta f = f(x) na domeni: min < x < max.

Ukoliko elimo uveati neki dio grafa, u izborniku grafikog prozora biramo Tools/Zoom In.
Koristei mia oznaimo dio krivulje ili samo kliknemo na dio koji elimo poveati i Matlab e
automatski regenerirati crte poveavajui prethodno mjerilo (raspon vrijednosti na
koordinatnim osima e biti promijenjen koristei faktor 2). Postupak moemo ponoviti eljeni
broj puta.
Isto moemo postii biranjem ikone Zoom In na alatnoj traci grafikog prozora. Naredba/ikona
Zoom Out vraa poveani dio na prethodnu dimenziju.
Trei nain za uveavanje prikaza bio bi unoenjem naredbe zoom odnosno zoom off u
komandnom prozoru.
Ako elimo da graf bude nacrtan u novom prozoru, prije pozivanja plot naredbe, unesemo
naredbu figure. Pozivanje naredbe npr. figure (2) otvorit e prozor s oznakom 'Figure 2'.
Ukoliko je prozor s tom oznakom ve postojao u pozadini, postat e aktivan i u njemu e biti
prikazan rezultat idue plot naredbe.
Naredba clf brie sadraj grafikog prozora.

24

Dodavanje naslova i oznaka na graf

Ukoliko na graf elimo dodati naslov, te oznake osi, koristimo:


>> title('Graf funkcije sinus')
>>xlabel('x-os')
>>ylabel('y-os')
Ako na graf zelimo dodati mreu, dodajemo je i isto tako briemo naredbom grid.
Recimo da na istom crteu elimo usporediti grafove funkcija sin 4x i cos 4x . To radimo na
sljedei nain:
>> x = linspace (0,1,100);
>> plot(x, sin(4*pi*x),'r-',x,cos(4*pi*x),'g--');
>> legend('Sin krivulja','Cos krivulja');
>> title('Multi-plot');
>> xlabel('x'), ylabel('y')
>> grid
Pozivanjem naredbe plot, brie se sadraj grafikog prozora prije prikazivanja novog grafa.
Ukoliko elimo zadrati sadraj grafikog prozora, to postiemo naredbom hold, odnosno hold
on. Naredba hold off prekida takvo ponaanje.
Komanda subplot(m,n,p) dijeli sadraj grafikog prozora na m n podruja (m redaka, n
stupaca) i bira p-to podruje za prikaz grafa. Podruja se broje s lijeva na desno, od gore prema
dolje, kao kod itanja teksta. Pogledajmo primjer:
>>x = 0 : 0.1 : 2*pi;
subplot(2,2,1); plot(x,sin(x)), axis auto
subplot(2,2,2); plot(x,sin(x)), axis tight
subplot(2,2,3); plot(x,sin(x)), axis tight, axis off
subplot(2,2,4); plot(x,sin(x)), axis([0 7 -1 1]), grid on

25

(Pogledajte detaljnije naredbu axis koristei help axis.)

5. Dodatak
uvanje zapisa

Koritenje naredbe diary


>>diary mojrad
e uzrokovati da sav tekst koji se pojavi nakon toga bude spremljen u datoteku mojrad, kreiran u
direktoriju u kojem Matlab radi. Ime datoteke moe biti bilo to osim on i off. Zapisivanje se
moe zaustavit sa diary off

Ukoliko elite zatvoriti Matlab te poslije nastaviti s radom:


>>save zadnjakalkulacija
i Matlab e spremiti sve varijable sa njihovim trenutnim vrijednostima u datoteku
zadnjakalkulacija.mat. Kada idui put pokrenemo Matlab, naredbom:
>> load zadnjakalkulacija
sve varijable koritene u trenutku zatvaranje e dobiti svoje tadanje vrijednosti.

26

Literatura:

1. David F. Griffiths: An Introduction to Matlab, Version 2.3 The University Dundee,


September 2005
http://www.maths.dundee.ac.uk/~ftp/na-reports/MatlabNotes.pdf
2. Ivo Baras: Radni materijali za laboratorijske vjebe iz PiNM, Studijski Sveuilini Centar
u Splitu
3. Edward Neuman: Getting started with Matlab, Southern Illinois University at Carbondale
http://www.math.siu.edu/matlab/tutorial1.pdf
4. Quick introduction to matlab, PartI and PartII, Department of Mathematics, University of
Colorado at Colorado Springs,
http://www.uccs.edu/~math/docs/QuickIntroMatlabPartI.pdf
http://www.uccs.edu/~math/docs/QuickIntroMatlabPartII.pdf
5. Milan Vrdoljak: Uvod u MATLAB, Fakultet strojarstva i brodogradnje, Zagreb
http://titan.fsb.hr/~mvrdolja/matlab/

27

You might also like