You are on page 1of 33

Programiranje u Matlab-u

Matlab ima vie alatki koje omoguavaju upravljanje tokom izvravanja programa. Uslovni iskazi i
struktura switch omoguavaju da se odreene komande prekoe ili da se u razliitim sluajevima izvravaju
razliite grupe komandi. Petlje for i while omoguavaju da se izvravanje odreene grupe komandi ponovi
vie puta.
Jasno je da je za promenu toka izvravanja programa potreban odreeni postupak donoenja odluka.
Raunar mora da odlui da li da izvri narenu komandu ili da preskoi jednu ili vie i nastavi od nekog
drugog reda u programu. Tome slue relacioni i logiki operatori.
U programu se mogu koristiti i funkcijske datoteke, kao potprogrami. Kada program doe do reda sa
imenom funkcije, prosleuje joj ulazne vrednosti, a zatim dobija rezultat funkcije.
Relacioni i logiki operatori
Relacioni operator poredi dva broja i utvruje da li je iskaz istinit ili neistinit. Ako je istinit dobija
vrednost 1 a ako ne vrednost 0. Logiki operatori ispituju izraze ije vrednosti mogu biti true ili false,
zavisno od operatora. Relacioni i logiki operatori se mogu koristiti u matematikim izrazima i esto se
upotrebljavaju u kombinacijama sa drugim operatorima pri donoenju odluka pomou kojih se upravlja
tokom izvravanja programa.
Relacioni oparator
Opis
<
Manje od
>
Vece od
<=
Manje ili jednako od
>=
Vece ili jednako od
==
Jednako
~=
Razlicito
Kada se porede dva broja rezultat je 1 ukoliko je istinit izraz poreenja, ili 0 ukoliko je neistinit. Kada
se porede dve skalarne vrednosti, rezultat je takoe skalar, koji moe biti 0 ili 1. Ako se porede dva niza
(samo nizovi jednakih dimenzija), poreenje se obavlja element po element, a rezultat je niz jednakih
dimenzija kao i izvorni nizovi, i sadtoji se od logikih vrednosti (jedinica i nula), koje predstavljaju rezultat
poreenja pojedinanih elemenata nizova. Kada se skalarna vrednost poredi sa nizom, poredi se sa
svakimelementom niza pojedinano, a rezultat je niz iji su elementi logike jedinice i nule, koje odraavaju
rezultate poreenja sa pojedinanim elementima izvornog niza.
>> 5>8
ans =
0
>> a=5<10
a=
1
>> y=(6<10)+(7>8)+(5*3==60/4)
y=
2
>> b=[15 6 9 4 11 7 14];c=[8 20 9 2 19 7 10];
>> d=c>=b
d=
0 1 1 0 1 1 0
>> b==c
ans =
0 0 1 0 0 1 0
>> b~=c
1

ans =
1 1 0 1 1 0 1
>> f=b-c>0
f=
1 0 0 1 0 0 1
>> A=[2 9 4;-3 5 2;6 7 -1]
A=
2 9 4
-3 5 2
6 7 -1
>> B=A<=2
B=
1 0 0
1 0 1
0 0 1
Rezultat relacionih operacija nad vektorima jesu vektori iji su elementi logike nule i jedinice, a
zovu se logiki vektori. Kada se logiki vektor upotrebi za adresiranje drugog vektora, iz tog vektora se
izdvajaju elementi koji se nalaze na pozicijama gde logiki vektor sadri jedinice.
>> r=[8 12 9 4 23 19 10]
r=
8 12 9 4 23 19 10
>> s=r<=10
s=
1 0 1 1 0 0 1
>> t=r(s)
t=
8 9 4 10
>> w=r(r<=10)
w=
8 9 4 10
Logiki vektori se mogu upotrebiti u aritmetikim operacijama i tada se menja u numeriki vektor ili matricu.
Redosled prioriteta: u matematikim izrazima koji sadre relacione i aritmetike operatore, aritmetike
operacije imaju prioritet nad relacionim operacijama. Relacioni operatori imaju jednak prioritet, a rezultati se
izraunavaju sleva nadesno. Redosled prioriteta se moe izmeniti zagradama.
3+4<16/2
ans =
1
>> 3+(4<16)/2
prvo se rauna 4<16 , rezultat je 1
ans =
3.5000
Logiki operatori
Operator Naziv
Opis
&
AND
Deluje na dva operanda. Ako oba imaju vrednost
true, rezultat je true, u suprotnom false
|
OR
Deluje na dva operanda. Ako jedan ili oba imaju
vrednost true, rezultat je true, kad su oba false,
rezultat je false
~
NOT
Deluje na jedan operand, daje suprotnu vrednost

Operandi logikih operatora su brojevi. Koriste se kao aritmetiki operatori u matematikim izrazima.
Rezultat se moe upotrebiti u drugim matematikim operacijama, za adresiranje nizova, te u drugim
komandama Matlab-a (if). Logiki operatori se mogu primenjivati na skalare i nizove.
Operandi logikih operatora AND i OR mogu biti ili skalari ili vektori ili kombinovano. Ako su oba
skalari, rezultat je skalarna vrednost. Ako su oba operanda nizovi, moraju biti jednakih dimenzija, a logika
operacija se odvija element po element. Rezultat je niz jednakih dimenzija kao izvorni nizovi, iji su elementi
logike nule i jedinice. Ako je jedan operand skalarna vrednost, a drugi niz, logika operacija se obavlja nad
skalarnom vrednou i svim elementima niza pojedinano.
NOT ima samo jedan operand. Kada se primeni na skalar daje rezultat nula ili jedan. Kada se primeni
na niz, rezultat je niz jednakih dimenzija koji sadri logike jedinice na mestima gde izvorni niz sadri
brojeve razliite od nule, a logike nule na mestima gde izvorni niz sadri nule.
>> 3&7
ans =
1
>> a=5|10
a=
1
>> ~25
ans =
0
>> t=25*((12&0)+(~0)+(0|5))
t=
50
>> x=[9 3 0 11 0 15];y=[2 0 13 -11 0 4];
>> x&y
ans =
1 0 0 1 0 1
>> z=x|y
z=
1 1 1 1 0 1
>> ~(x+y)
ans =
0 0 0 1 1 0
Redosled prioriteta Operacija
1(najvii)
Zagrade
2
Stepenovanje
3
Logiko NOT
4
Mnoenje, deljenje
5
Sabiranje, oduzimanje
6
Relacioni operatori (>,<,>=,<=,==,~=)
7
Logiko AND
8
Logiko OR
Ako dva ili vie operatora imaju isti prioritet, izraz se izraunava sleva nadesno.
>> x=-2;y=5;
>> -5<x<-1
ans =
0
>> -5<x&x<-1
ans =
1
>> ~(y<7)
3

ans =
0
>> ~y<7
ans =
1
>> ~(y>=8)|(x<-1)
ans =
1
Ugraene logike funkcije: and(A,B), or(A,B) not(A), ekvivalentne logikim operatorima. Postoje i druge
ugraene funkcije:
Funkcija
Opis
Primer upotrebe
xor(a,b)
Iskljuivo ili.Vraa true ako je
xor(7,0)
jedan operand true a drugi false
ans=1
all(A)
Vraa 1 ako su svi elementi A
A=[6 2 15 9 7 11];
razliiti od nule. Vraa 0 ako je bar all(A)
jedan elem. A nula. Ako je A
ans=1
matrica njene se kolone tretiraju
B=[6 2 15 9 0 11];
kao vektori, a rezultat je vektor
all(B)
koji sadri logike 0 i 1
ans=0
Any(A)
Vraa 1 ako je barem jedan
A=[6 0 15 0 0 11];
element vektora A razliit od nule. any(A)
Ako je A matrica, isto kao gore
ans=1
B=[0 0 0 0 0 ];
any(B)
ans=0
Find(A)
Ako je A vektor, vraa indekse
A=[0 9 4 3 7 0 0 1 8];
elemenata koji su razliiti od nule find(A)
Find(A>d)
Ako je A vektor, vraa adrese
ans=2 3 4 5 8 9
elemenata koji su vei od d
find(A>4)
ans=2 5 9
Primer: Sledei podaci su maksimalne dnevne temperature zabeleene toku jednog meseca u nekom
gradu:58 73 73 53 50 48 45 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69 (u
Farenhajtima). Pomou relacionih i logikih operatora utvrdite sledee:
a) Ukupan broj dana u kojima je temperatura bila iznad 75 stepeni
b) Ukupan broj dana u kojima je temperatura bila izmeu 65 i 80 stepeni
c) Dane u mesecu u kojima je temperatura bila izmeu 50 i 60 stepeni.
T=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69];
Tiznad75=T>=75;
Vektor sadri jedinice na mestima gde je T>=75
NdanaTiznad75=sum(Tiznad75)
Tod65do80=(T>=65)&(T<=80);
NdanaTod65do80=sum(Tod65do80)
datumiTod50do60=find((T>=50)&(T<=60)) Funkcija daje adrese elemenata vektora T koji imaju vr.
Operatori
izmeu 50 i 60
NdanaTiznad75 =
7
NdanaTod65do80 =
12
datumiTod50do60 =
4

21

23

Uslovni iskazi
To je komanda koja omoguava Matlab-u da odluuje da li e izvriti grupu komandi koja sledi
iskazu ili e te komande preskoiti. U uslovnom iskazu morate zadati uslovni izraz. Ako je rezultat izraza
true, izvrava se grupa komandi koja neposredno sledi iskazu. Ako je rezultat false, raunar preskae tu grupu
naredbi. Uslovni iskazi se mogu unositi u program napisan u skript datoteci ili u funkcijskoj datoteci.
Struktura if-end
Dijagram toka
-------------------

false
Isk
az

true

Matlabov program

if uslovni izraz
--------Grupa komandi
----------------end
-----------Matlabov program
-----------------------

Komande
end

Primer: Radnik je plaen za odreeni iznos po satu za rad do 40 sati, a prekovremeni rad se plaa 50% vie.
Napiite program u skript datoteci koji e obraunavati zaradu radnika. Program zahteva od korisnika da
unese ukupan broh sati i iznos satnice, a zatim prikazuje ukupnu zaradu.
s=input('Unesite ukupan broj radnih sati ');
c=input('Unesite cenu satnice u dinarima ');
Zarada=s*c;
if s>40
Zarada=Zarada+(s-40)*0.5*c;
end
fprintf('Zarada radnika je \n %5.2f',Zarada)
>> zarada
Unesite ukupan broj radnih sati43
Unesite cenu satnice u dinarima385.44
Zarada radnika je
17152.08
Struktura if-else-end
Ova struktura omoguava da se izabere izvravanje jedne od dve mogue grupe komandi. Ako je
vrednost iskaza true, program izvrava prvu grupu komandi izmeu iskaza if i else, a zatim preskae ostale
5

komande do iskaza end. Ako je vrednost izraza false, program preskae komande do iskaza else, a zatim
izvrava komande koje se nalaze izmeu else i end.
Struktura if-elseif-else-end
Struktura sadri dva uslovna iskaza koji omoguavaju da se jedna od tri grupe naredbi odabere za
izvravanje.
------------------------- Matlab-ov program
if uslovni iskaz
..............
Grupa 1 komandi
..............
..............
elseif uslovni izraz
..............
Grupa 2
..............
komandi
..............
else
..............
Grupa 3
..............
komandi
..............
end
............
Matlab-ov program
...........
Iskaz switch-case
Omoguava da se za izvravanje izabere jedna od vie moguih grupa komandi.
------------------------- Matlab-ov program
switch izraz switch
case vrednost1
..............
Grupa 1 komandi
..............
..............
case vrednost2
..............
Grupa 2
..............
komandi
..............
case vrednost3
..............
Grupa 3
..............
komandi
..............
otherwise
..............
Grupa 4
..............
komandi
..............
end
Matlab-ov program
............
...........
6

Izraz u komandi switch moe biti vrednost ili znakovni niz. Najee je to promenljiva kojoj je
dodeljena skalarna vrednost ili znakovni niz.
Vrednost izraza u komandi switch se poredi pojedinano sa vrednou zadatom u svakom iskazu case.
Ako se vrednosti podudaraju, izvrava se grupa komandi iza odgovarajueg iskaza case. Ako postoji vie od
jednog podudaranja, izvrava se samo prvi iskaz. Ukoliko nije pronaeno podudaranje i postoji iskaz
otherwise, izvrava se ta grupa komandi. Ukoliko otherwise ne postoji ne izvrava se ni jedna grupa
komandi.
Primer: Napiite program u skript datoteci koji koliinu energije izraenu odreenim jedinicama, dul (J), ftlb, kalorija (cal) ili eV, preraunava u ekvivalentnu koliinu u drugim jedinicama koje korisnik zada.
Program najpre zahteva da korisnik zada koliinu energije, tekuu jedinicu i novu ciljnu jedinicu. Rezultat je
koliina energije izraena u novim jedinicama.
Faktori konverzije su sledei:
1J=0.738ft-lb=0.239cal=6.24x1018eV
Upotrebite program da bi ste preraunali sledee vrednosti: a)150 J u ft-lb; b)2800cal u J; c) 2.7eV u cal.
Reenje:
Ein=input('Upisite kolicinu energije koju cete konvertovati');
EinUnits=input('Upisite tekuce jedinice (J, ft/lb, cal,eV):','s');
EoutUnits=input('Upisite nove jedinice (J, ft/lb, cal,eV):','s');
error=0;
switch EinUnits
case 'J'
EJ=Ein;
case 'ft/lb'
EJ=Ein/0.738;
case 'cal'
EJ=Ein/0.239;
case 'eV'
EJ=Ein/6.24e18;
otherwise
error=1;
end
switch EoutUnits
case 'J'
Eout=EJ;
case 'ft/lb'
Eout=EJ*0.738;
case 'cal'
Eout=EJ*0.239;
case 'eV'
Eout=EJ*6.24e18;
otherwise
error=1;
end
if error
disp('greska pri iyboru jedinica')
else
fprintf('E=%g%s',Eout,EoutUnits)
end
>> konverzijaenergije
Upisite kolicinu energije koju cete konvertovati2800
Upisite tekuce jedinice (J, ft/lb, cal,eV):cal
7

Upisite nove jedinice (J, ft/lb, cal,eV):J


E=11715.5J
Zadatak: Najvee dnevne temperature u Njujorku i Enkoridu u Farenhajtima tokom januara 2001 date su u
narednim vektorima: TNY=[31 26 30 33 33 39 41 41 34 33 45 42 36 39 37 45 43 36 41 37 32 32 35 42 38 33
40 37 36 51 50]; TEN=[37 24 28 25 21 28 46 37 36 20 24 31 34 40 43 36 34 41 42 35 38 36 35 33 42 42 37
26 20 25 31]. Napiite program u skript datoteci koji daje odgovore na sledea pitanja:
a) Prosena temperatura tokom meseca u oba grada;
b) Koliko je dana u svakom gradu temperatura bila iznad proseka?
c) Koliko je dana i kada (navesti datume u mesecu) temperatura u Enkoridu bila via od temperature u
Njujorku?
d) Koliko je dana i kada temperatura bila jednaka u oba grada?
e) Koliko je dana i kada temperatura u oba grada bila iznad take smrzavanja (32 F)?
Reenje:
TNY=[31 26 30 33 33 39 41 41 34 33 45 42 36 39 37 45 43 36 41 37 32 32 35 42 38 33 40 37 36 51 50];
TEN=[37 24 28 25 21 28 46 37 36 20 24 31 34 40 43 36 34 41 42 35 38 36 35 33 42 42 37 26 20 25 31];
%Zadatak pod a)
fprintf('Pod a)\n');
PROSEKNY=mean(TNY);
fprintf('prosecna temperatura u Njujorku je %g stepeni Farenhajta\n',PROSEKNY);
PROSEKE=mean(TEN);
fprintf('prosecna temperatura u Enkoridzu je %g stepeni Farenhajta\n',PROSEKE);
%Zadatak pod b)
iznadNY=TNY>PROSEKNY;
fprintf('Pod b)\n');
fprintf('temperatura je u Njujorku bila iznad proseka ukupno %i dana\n',sum(iznadNY));
iznadE=TEN>PROSEKE;
fprintf('temperatura je u Enkoridzu bila iznad proseka ukupno %i dana\n',sum(iznadE));
%Zadatak pod c)
fprintf('Pod c)\n');
vecauE=TEN>TNY;
fprintf('Temperatura je u Enkoridzu bila veca ukupno %i dana\n',sum(vecauE));
fprintf('dani u mesecu kada je temperatura u Enkoridzu bila veca nego u Njujorku su:\n');
danivecauE=find(TEN>TNY);
disp(danivecauE);
disp(' ');
%Zadatak pod d)
fprintf('Pod d)\n');
jednaka=TEN==TNY;
fprintf('Temperatura je bila jednaka ukupno %i dana\n',sum(jednaka));
fprintf('dani u mesecu kada je temperatura bila jednaka u oba grada su:\n');
jednaka=find(TEN==TNY);
disp(jednaka);
disp(' ');
%Zadatak pod e)
fprintf('Pod e\n');
vecaod32=((TNY>32)&(TEN>32));
fprintf('broj dana kada je temperatura u oba grada bila veca od temp. smrzavanja je:\n%i',sum(vecaod32));
fprintf('\nTo su sledeci dani:\n');
vecaod32=find(vecaod32);
disp(vecaod32);
disp(' ');
8

U komandnom prozoru izvravanje ove skript datoteke, nazvane temperature, daje sledee rezultate:
>> temperature
Pod a)
prosecna temperatura u Njujorku je 37.6774 stepeni Farenhajta
prosecna temperatura u Enkoridzu je 33.129 stepeni Farenhajta
Pod b)
temperatura je u Njujorku bila iznad proseka ukupno 14 dana
temperatura je u Enkoridzu bila iznad proseka ukupno 18 dana
Pod c)
Temperatura je u Enkoridzu bila veca ukupno 11 dana
dani u mesecu kada je temperatura u Enkoridzu bila veca nego u Njujorku su:
1 7 9 14 15 18 19 21 22 25 26
Pod d)
Temperatura je bila jednaka ukupno 1 dana
dani u mesecu kada je temperatura bila jednaka u oba grada su:
23
Pod e
broj dana kada je temperatura u oba grada bila veca od temp. smrzavanja je:
16
To su sledeci dani:
7 8 9 13 14 15 16 17 18 19 20 23 24 25 26 27

Petlje
Petlje predstavljaju jo jedan nain da se upravlja tokom programa. U petlji se izvravanje komande
ili grupe komandi ponavlja vie puta zaredom. Svako izvravanje petlje zove se prolaz. U svakom prolazu se
barem jednoj promenljivoj dodeljuje nova vrednost. Matlab podrava dve vrste petlji: for-end, i while-end.
Petlje for-end
Izvravanje komandi se ponavlja zadati broj puta:
for k = f : s : t
...............
...............
end
k je indeksna promenljiva, f vrednost k u prvom prolazu, s korak poveanja nakon svakog prolaza, a t
vrednost indeksne promenljive u poslednjem koraku. Ime promenljive koje se koristi kao indeks moe biti
proizvoljno. Ako nije zadata vrednost s, podrazumeva se da je 1. Ako su k, s i t takvi da k ne moe biti
jednako t, poslednji prolaz e se izvriti kad k ima najveu vrednost manju od t. U komandi for se
promenljivoj k mogu dodeliti odreene vrednosti, npr. k=[7 9 -1 3 3 5]. Svakoj komandi for mora biti
pridruena komanda end. Vrednost promenljive k se ne dodeljuje automatski. Primer:
for k=1:3:10
x=k^2
end
Kada se pokrene program, petlja se izvrava 4 puta.
n
1 k
Primer: a) Pomou petlje for-end u skript datoteci izraunajte zbir prvih n lanova reda k k . Izvrite
k 1 2
datoteku za n=4 i n=20.
9

b) Funkcija sin(x) moe se predstaviti pomou Tejlorovog reda

1 k x 2 k 1

2k 1!
k 0

Napiite korisniku funkciju koja izraunava sin(x) pomou Tejlorovog reda. Ime i argumenti funkcije neka
budu y=Tsin(x,n). Ulazni argumenti su ugao x, izraen u stepenima, i n, broj lanova reda. Upotrebite
funkciju da bi ste izraunali sin(150o) pomou reda od 3 i 7 lanova.
Reenje a)
%Izracunavanje sume reda pomocu for petlje
n=input('Upisite broj clanova');
S=0;
for k=1:n
S=S+(-1)^k*k/2^k;
end
fprintf('Zbir clanova reda je:%f',S)
Izvravanjem ove datoteke dobija se:
>> Petlja1
Upisite broj clanova4
Zbir clanova reda je:-0.125000
>> Petlja1
Upisite broj clanova20
Zbir clanova reda je:-0.222216
Reenje b)
function y=Tsin(x,n)
%funkcija izracunava sinus ugla pomocu Tejlorovog reda
% Ulazni argumenti: x-ugao u stepenima, n-broj clanova reda
xr=x*pi/180;
y=0;
for k=0:n-1
y=y+(-1)^k*xr^(2*k+1)/factorial(2*k+1);
end
Datoteku je najbolje zapamtiti pod imenom funkcije, i tako je pozivati iz komandnog prozora. Izvravanjem
se dobija:
>> Tsin(150,3)
ans =
0.6523
>> Tsin(150,7)
ans =
0.5000
Primer: Vektor je definisan na sledei nain: V=[5,17,-3,8,0,-1,12,15,20,-6,6,4,-7,16]. Napiite skript koji
udvostruuje vrednost pozitivnih elemenata deljivih sa 3 i 5, a podie na trei stepen vrednost negativnih
elemenata veih od -5.
V=[5 17 -3 8 0 -1 12 15 20 -6 6 4 -7 16];
n=length(V);
for k=1:n
if V(k)>0&(rem(V(k),3)==0|rem(V(k),5)==0)
V(k)=2*V(k);
elseif V(k)<0&V(k)>-5
V(k)=V(k)^3;
end
end
disp(V)
10

>> Primer8
10 17 -27

-1

24

30

40

-6

12

-7

16

Petlje while-end
Koriste se kada ukupan broj prolaza nije unapred poznat. Petlja se izvrava dok je ispunjen zadati
uslov. Struktura petlje:
while uslovni izraz
...............
...............
end
Ukolilko je uslovni izraz false, prelazi se na end i nastavlja izvravanje programa. Ukoliko je izraz true,
izvrava se grupa komandi izmeu while i end. Petlja se izvrava sve dok uslovni izraz ne dobije vrednost
false. Uslovni izraz mora sadrati barem jednu promenljivu. Promenljive u uslovnom iskazu moraju imati
poznate vrednosti kada se petlja prvi put izvrava. Komande izmeu while i end moraju dodeljivati novu
vrednost barem jednoj promenljivoj. Na primer:
x=1
while x <= 15
x=2*x
end
Mora se obezbediti da promenljiva u izrazu u nekom trenutku dobije vrednost false, inae e se petlja
izvravati beskonano. Takav sluaj se moe izbei brojanjem prolaza i prekidanjem petlje ukoliko ukupan
broj prolaza premai odreenu vrednost. Maksimalan broj prolaza se ugradi u uslovni izraz ili se upotrebi
komanda break.
Primer: Funkcija f(x)=ex moe se predstaviti u obliku Tejlorovog reda na sledei nain:

ex
n0

xn
n!

Napiite skript koji izraunava ex pomou Tejlorovog reda. Ovaj program sabira lanove reda, a zaustavlja se
kada apsolutna vrednost dodatog lana bude manja od 0,0001. Upotrebite petlju while-end, ali ograniite broj
prolaza ba 30. Ako u tridesetom prolazu dodati lan reda ne bude manji od 0,0001, program prekida petlju i
prikazuje poruku da je sabrano 30 lanova. Pomou napisanog programa izraunati e2, e-4, e21.
Reenje:
x=input('Upisite x');
n=1;an=1;S=an;
while abs(an)>=0.0001 & n<=30
an=x^n/factorial(n);
S=S+an;
n=n+1;
end
if n>=30
disp('Potrebno je vise od 30 clanova')
else
fprintf('exp(%f)=%f',x,S)
fprintf('\nBroj clanova je: %i',n)
end
>> Petlja2
Upisite x2
exp(2.000000)=7.389046
Broj clanova je: 12
>> Petlja2
11

Upisite x-4
exp(-4.000000)=0.018307
Broj clanova je: 18
>> Petlja2
Upisite x21
Potrebno je vise od 30 clanova
Ugnjedene petlje
Petlja ili izraz moe zapoeti unutar druge petlje ili izraza. Svaki iskaz if, case, for i while mora imati
odgovarajui end. Primer:
for k=1:n
for h=1:m
..........
..........
end
end
Primer: Napiite skript koji formira matricu nxm elemenata sledeih vrednosti: u prvoj vrsti, vrednost
elemenata se redni brojevi kolona; vrednost svakog elementa u prvoj koloni jednaka je rednosm broju vrste.
Vrednosti svih ostalih elemenata izraunavaju se tako to se tekuem elementu dodeli zbir vrednosti
elemenata iznad i levo od njega. Kada se pokrene, program zahteva vrednosti za m i n.
Reenje:
n=input('upisite broj vrsta ');
m=input('Upisite broj kolona ');
A=[];
for k=1:n
for h=1:m
if k==1
A(k,h)=h;
elseif h==1
A(k,h)=k;
else
A(k,h)=A(k,h-1)+A(k-1,h);
end
end
end
disp(A)
>> Petlja3
upisite broj vrsta 4
Upisite broj kolona 6
1 2 3 4 5 6
2 4 7 11 16 22
3 7 14 25 41 63
4 11 25 50 91 154
Komande break i continue
Kada se upotrebi unutar petlje, komanda break prekida izvravanje petlji. Prelazi se na komandu end
na kraju petlje i nastavlja izvravanje prve naredne komande. Ako se komanda nae unutar ugnjedene petlje,
prekida samo izvravanje ugljedene petlje. Ako se komanda nae izvan petlje u skript datoteci ili
funkcijskoj datoteci, prekida izvravanje cele datoteke.
12

Komanda continue moe se upotrebiti unutar petlje da bi se pri izvravanju petlje prekinuo tekui
prolaz i zapoeo naredni. Najee je deo uslovnog iskaza. Kada se naie na ovu komandu, ide se na
komandu end kraja petlje a zatim prelazi na nov prolaz.

Polinomi
Polinomi su matematiki izrazi koji se esto koriste za reavanje zadataka i modelovanje u prirodnim
i tehnikim naukama. U mnogim sluajevima, jednaina do koje se doe je polinom, a reenje zadatka je nula
polinoma. Polinomi imaju sledei oblik:
f(x)=anxn+an-1xn-1+...+a1x+a 0
Koeficijenti an, an-1,...,a1, a0 su realni brojevi, a n predstavlja stepen ili red polinima.
U Matlab-u se polinomi predstavljaju vektor vrstom iji su elementi koeficijenti. Prvi element je koeficijent
ispred x sa najviim stepenom. Vektor mora da sadri sve koeficijentr, ukljuujui i one jednake nuli. Na
primer:
8x+15
p=[8 15]
2x2 -4x + 10
p=[2 -4 10]
2
6x 150
p=[6 0 -150]
5x5 + 6x2 -7x
p=[5 0 0 6 -7 0]
Vrednost polinoma
Vrednost polinoma u taki x moe se izraunati pomou funkcije polyval:
polyval(p,x)
p je vektor koji sadri koeficijente polinoma, x je broj, promenljiva kojoj je dodeljena vrednost, ili izraz koji
se moe izraunati. Argument x moe biti i vektor ili matrica. U tom sluaju se vrednost polinoma izraunava
za svaki element, a rezultat je takoe vektor, ili matrica, koji sadre odgovarajue vrednosti polinoma.
Primer: Za polinom f(x)=x5 -12.1x4 + 40.59x3-17.015x2 -71.95x + 35.88 izraunajte
a) f(9)
b) Nacrtajte grafik polinoma za -1.5<=x<=6.7
Reenje:
a)
>> p=[1 -12.1 40.59 -17.015 -71.95 35.88];
>> polyval(p,9)
ans =
7.2611e+003
b)
>> x=-1.5:0.1:6.7;
>> y=polyval(p,x);
>> plot(x,y)

13

Reenja polinoma
To su vrednosti argumenta za koje je vrednost polinoma jednaka nuli, pa se esto zovu i nule
polinoma. Na primer, reenja polinoma f(x)=x2 - 2x 3 jesu vrednosti za koje je x 2 - 2x 3=0, a to su x=-1 i
x=3. U Matlab-u postoji funkcija roots koja izraunava reenja polinoma. Funkcija ima sledei oblik:
r=roots(p), gde je r vektor koji sadri reenja polinoma, a p vektor koji sadri koeficijente polinoma. Na
primer, reenja polinoma iz prethodnog primera su:
>> p=[1 -12.1 40.59 -17.015 -71.95 35.88];
>> r=roots(p)
r=
6.5000
4.0000
2.3000
-1.2000
0.5000
Kada su reenja poznata, ovaj polinom se moe napisati u sledeem obliku:
f(x)=(x+1.2)(x-0.5)(x-2.3)(x-4)(x-6.5)
Kada su reenja polinoma poznata, pomou komande poly mogu se izraunati koeficijenti polinoma.
Komanda ima sledei oblik:
p=poly(r), gde je p vektor sa koeficijentima polinoma, a r vektor sa reenjima polinoma. Koeficijenti
polinoma iz prethodnog primera mogu se izraunati na sledei nain:
>> r=[6.5 4 2.3 -1.2 0.5];
>> p=poly(r)
p=
1.0000 -12.1000 40.5900 -17.0150 -71.9500 35.8800

Sabiranje, mnoenje i deljenje polinoma


Dva polinoma se sabiraju tako to se saberu vektori koeficijenata polinoma. Ako polinomi nisu istog
stepena, krai vektor se mora dopuniti nulama da bi bio iste veliine kao dui vektor. Na primer, polinomi
f1(x)=3x6 + 15x5 -10x3 +15x -40 i f2(x)=3x3 -2x 6 sabiraju se na sledei nain:
>> p1=[3 15 0 -10 -3 15 -40];
>> p2=[0 0 0 3 0 -2 -6];
14

>> p=p1+p2
p=
3 15 0

-7

-3

13 -46

Dva polinoma se mnoe pomou Matlab-ove ugraene funkcije conv, koja ima sledei oblik:
c=conv(a,b), gde su, c vektor koeficijenata polinoma koji je rezultat operacije mnoenja, a i b su
vektori koeficijenata polinoma koji se mnoe. Polinomi ne moraju biti istog stepena. Za prethodni primer:
>> p1=[3 15 0 -10 -3 15 -40];
>> p2=[3 0 -2 -6];
>> pm=conv(p1,p2)
pm =
9 45 -6 -78 -99 65 -54 -12 -10 240
to znai da je odgovor:
9x9 + 45x8 6x7 78x6 99x5 + 65x4 -54x3 -12x2 -10x + 240
Polinom se moe podeliti drugim polinomom pomou Matlab-ove ugraene funkcije deconv, koja
ima sledei oblik:
[q,r] = deconv(u,v), gde je q vektor koeficijenata polinoma koji je kolinik deljenja, r je vektor
koeficijenata polinoma koji je ostatak deljenja, u je vektor koeficijenata polinoma koji predstavlja brojilac, u
vektor koeficijenata koji predstavlja imenilac.
Primer: podeliti polinome 2x6 -13x5 + 75x3 + 2x2 60 i x2 5:
>> w=[2 -13 0 75 2 0 -60];
>> z=[1 0 -5];
>> [g,h]=deconv(w,z)
g=
2 -13 10 10 52
h=
0 0 0 0 0 50 200
Kolinik je 2x4 13x3 + 10x2 + 10x + 52, a ostatak je (50x 200)/(x2 5).
Izvodi polinoma
Ugraena funkcija polyder moe se upotrebiti za izraunavanje izvoda jednog polinoma, proizvoda
dva polinoma i kolinika dva polinoma, ro pokazuju sledee tri komande:
k=polyder(p)
diferenciranje jednog polinoma, k predstavlja izvod polinoma p
k=polyder(a,b)
diferenciranje proizvoda dva polinoma, a i b su koeficijentoi vektora koji se mnoe
[n d]=polyder(u,v)
diferenciranje kolinika dva polinoma, u i v su koeficijenti polinoma brojioca i
imenioca, a n i d keoficijenti brojioca i imenioca izvoda
2
Na primer, f1(x)=3x 2x + 4 i f2(x)=x2 + 5
>> f1=[3 -2 4];
>> f2=[1 0 5];
>> k=polyder(f1)
k=
6 -2
>> d=polyder(f1,f2)
d=
12 -6 38 -10
>> [n d]=polyder(f1,f2)
n=
2 22 -10
d=
15

10

25

Znai da je izvod kolinika funkcija

3x 2 2 x 4
2 x 2 22 x 10
je
.
x2 5
x 4 10 x 2 14

Aproksimiranje podataka krivom i interpoliranje


Aproksimiranje podataka krivom je postupak uklapanja funkcije u skup taaka koje predstavljaju
odreene podatke. Ta funkcija potom moe sluiti kao matematiki model tih podataka.
Aproksimiranje pomou polinoma, funkcija polyfit
Polinomi se mogu upotrebiti na dva naina. U prvom polinom prolazi kroz sve take, dok u drugom
polinom ne prolazi obavezno kroz sve take, ali ipak dobro aproksimira podatke.
Polinomi koji prolaze kroz sve take
Kada je dato n taaka (xi, yi), moe se napisati polinom stepena n-1 koji prolazi kroz sve te take. Na
primer, ako su date dve take, moe se napisati linearna jednaina oblika y=mx + b koja prolazi kroz obe
take. Za tri take, jednaina bi imala oblik y=ax2 + bx + c. Koeficijenti se mogu odrediti tako to se svaka
taka zameni u polinomu, a zatim rei sistem sa n jednaina da bi se izraunali koeficijenti.
Polinomi koji ne prolaze kroz sve take
Kada je dato n taaka, moe se napisati polinom stepena n-1, koji ne prolazi moda ni kroz jednu
taku, ali omoguava opte aproksimiranje podataka. Najea netoda pronalaenja najbolje aproksimacije je
metoda najmanjih kvadrata. Koeficijenti polinoma se odreuju minimizovanjem zbira kvadrata razlika u
svim takama. Rezidual u svakoj taki definie se kao razlika izmeu vrednosti polinoma i vrednosti
podataka.
Aproksimiranje podataka krivom polinomskog tima obavlja se u Matlab-u pomou funkcije polyfit,
koja koristi metodu najmanjih kvadrata. Osnovni oblik funkcije je:
p=polyfit(x,y,n)
gde je p vektor koeficijenata polinoma koji aproksimira podatke, x je vektor s horizontalnim koordinatama
taaka (nezavisna promenljiva); z je vektor sa vertikalnim koordinatama taaka (zavisna promenljiva); n je
stepen polinoma.
Za dati skup od m taaka, funkcija polyfit se moe upotrebiti za aproksimiranje podataka polinomom iji
stepen moe biti najvie m-1. Ako je n=1, polinom je prava linija, za n=2 polinom je parabola itd. Polinom
prolazi kroz sve take ako je n=m-1 (stepen polinoma je za 1 manji od ukupnog broja taaka).
Aproksimiranje podataka pomou funkcija koje nisu polinomi
Teorijski, za modelovanje podataka u odreenom opsegu mogu se upotrebiti funkcije bilo koje vrste.
Meutim, za dati skup podataka, neke funkcije omoguavaju bolje aproksimiranje od drugih funkcija. Osim
toga, ponekad se koeficijenti za najbolje aproksimiranje tee odreuju s jednim funkcijama nego s drugim.
Moemo koristiti stepene, eksponencijalne, logaritamske i reciprone funkcije. To su vrste koje se najee
mogu koriste i imaju sledei oblik:
y=bxm
stepena funkcija
y=bemx ili y=b10mx
eksponencijalna funkcija
y=mln(x) + b ili y=mlog(x) + b
logaritamska funkcija
y=

1
mx b

reciprona funkcija

Sve navedene funkcije mogu lako aproksimirati date podatke pomou funkcije polyfit. To se radi tako to se
funkcija napie u obliku linearnog polinoma (n=1), koji ima sledei oblik:
y=mx + b
16

Logaritamska funkcija ve ima taj oblik, dok se jednaine za stepenovanje, ili eksponencijalne i
reciprone jednaine mogu napisati u sledeem obliku:
ln(y)=mln(x) + ln(b)
stepena funkcija
ln(y)=mx + ln(b) ili log(y)=mx + log(b)
eksponencijalna funkcija
1/y=mx + b
reciprona funkcija
Pomou funkcije polyfit(x,y,1) mogu se izraunati konstante m i b koje omoguavaju najbolje
aproksimiranje ukoliko se, umesto x i y, upotrebe sledei argumenti:
stepena funkcija
y= bxm
p=polyfir(log(x),log(y),1)
eksponencijalna
y=bemx ili y=b10mx
p=polyfit(x,log(y),1) ili
p=polyfit(x,log10(y),1)
logaritamska
y=mln(x) + b ili
p=polyfit(log(x),y,1) ili
y=mlog(x) + b
p=polyfit(log10(x),y,1)
reciprona

y=

1
mx b

p=polyfit(x,1./y,1)

Rezultat funkcije polyfit dodeljuje se promenljivoj p, koja je vektor sa dva elementa. Prvi element,
p(1) je konstanta m, a drugi, p(2), je konstanta b za logaritamske i reciprone funkcije, ln(b) ili log(b) za
eksponencijalne, ili ln(b) za stepene funkcije (b=e p(2) ili b=10p(2) za eksponencijalne, odnosno b=ep(2) za
stepene funkcije). Za dati skup podataka moe se u izvesnoj meri predvideti koja vrsta funkcija ima najvie
mogunosti da obezbedi najbolje aproksimiranje. To se radi tako to se nacrtaju grafikoni podataka za vie
kombinacija linearnih i logaritamskih osa.
Interpoliranje
To je izraunavanje vrednosti izmeu dve poznate take. matlab ima interpolacione funkcije
zasnovane na polinomima, koje su opisane u ovom odeljku. U jednodimenzionalnom interpoliranju svakoj
taki odgovara jedna nezavisna (x) i jedna zavisna promenljiva (y). U dvodimenzionalnom interpoliranju
svakoj taki odgovaraju dve nezavisne (x i y) i jedna zavisna promenljiva (z).
Jednodimenzionalno interpoliranje
Ako postoje samo dve take koje predstavljaju podatke, one se mogu povezati pravom linijom, a
vrednosti izmeu njih se mogu izraunati pomou linearne jednaine (polinoma prvog stepena). to je vei
broj taaka, potreban je polinom veeg stepena koji prolazi kroz sve take. Meutim, takav polinom nee
uvek obezbediti dobru aproksimaciju podataka izmeu poznatih taaka. Bolje interpoliranje moe se postii
ako se umesto svih taaka iz skupa podataka u obzir uzme samo nekoliko taaka u blizini mesta gde je
potrebno interpoliranje.Takva metoda, poznata kao interpoliranje splajnom, koristi vie polinoma niskog
stepena, a svaki vai samo u ogranienom domenu skupa podataka. Najjednostavniji nain je linearno
interpoliranje, gde linija izmeu taaka ima konstantan nagib, koji se menja u svakoj taki. Zaobljena kriva
interpolacije moe se dobiti pomou kvadratnih i kubnih polinoma-kvadratni i kubni splajn-vrednosti izmeu
svake dve take interpoliraju se pomou polinoma drugog ili treeg stepena. Koeficijenti tih polinoma
odreuju se na osnovu podataka iz dodatnih taaka u blizini dve poetne take.
U Matlab-u se jednodimenzionalno interpoliranje moe obaviti pomou funkcije interp1, koja ima
sledei oblik:
yi=interp1(x,y,xi,metoda)
gde su: yi interpolirana vrednost; x je vektor s horizontalnim koordinatama taaka; y je vektor s vertikalnim
koordinatama taaka; xi je horizontalna koordinata take koja se interpolira (nezavisna promenljiva); metoda
interpoliranja je upisana kao tekst i nije obavezan podatak.
Vektor x mora biti monoton (vrednosti elemenata se ravnomerno menjaju rastuim ili opadajuim
redosledom)
xi moe biti skalarna vrednost ili vektor, pa e i y biti skalarna ili vektorska vrednost
Metode:
- nearest vraa kordinatu take koja je najblia taki u kojoj se interpolira
17

- linear
- spline
- pchip

koristi se linearno interpoliranje splajnom


koristi se kvadratno interpoliranje splajnom
koristi se kubno interpoliranje splajnom

Osnovni interfejs za aproksimiranje podataka


To je alatka koja omoguava interaktivno aproksimiranje i interpoliranje podataka. Ovaj interfejs
omoguava korisniku da:
Aproksimira podatke krivama pomou polinoma raznih stepena od 1 do 10, i interpolacijom uz primenu
metode splajn i Hermitove metode.
Nacrta vie krivih na istom grafiku da bi ih uporedio.
Grafiki predstavi izraunate razlike pri polinomskom aproksimiranju da bi ih uporedio.
Izrauna vrednosti taaka u svakom nainu aproksimiranja.
Prikae jednaine polinoma na grafiku.
Korisnik mora prethodno da napravi grafik poetnih taaka s podacima. Zatim treba da aktivira interfejs
biranjem komande Basic Fitting iz menija Tools:

Prve dve kontrole u prozoru odnose se na zadavanje polaznih podataka:


Select data: Omoguava zadavanje odreenog skupa podataka za aproksimiranje pomou krive ukoliko
grafik ima vie od jednog skupa podataka. Jedna kriva moe aproksimirati samo jedan skup podataka, ali se
jedan skup podataka moe aproksimirati pomou razliitih kriva istovremeno.
Center and scale x data: podaci se centriraju na nultu srednju vrednost i svode na jedinino standardno
odstupanje.
Chek to display fits on figure: Korisnik bira aproksimacionu krivu koja e biti prikazana na grafiku
Show equations: Na grafiku se prikazuju jednaine polinoma koje je korisnik prethodno izabrao za
aproksimiranje. Jednaine se prikazuju sa brojem znaajnih cifara koji se moe zadati u listi Significant
digits.
Plot residuals: Prikazuje se i grafik izraunatih razlika u svakoj taki
18

Show norm of residuals: prokazuju se i vrednosti reziduala na grafiku.


Sledee tri kontrole nalaze se na panou Numerical results:
Coefficients and norm of residuals: prikazuje numerike rezultate polinomske krive izabrane u meniju Fit.
Osim toga, prikazuje i koeficijentr polinoma i vrednost reziduala dobijenu funkcijom norm. Prikazani
rezultati se mogu snimiti na disk komandom Save to workspace.
Find Y=f(x): Omoguava prikazivanje interpoliranih numerikih vrednosti za zadate nezavisne promenljive.
Unesite u polje vrednost nezavisne promenljive a zatim pritisnite dugme Evaluate. Ako je polje Plot
evaluated result potvreno, ta taka se prikazuje na grafiku:

Trodimenzionalni grafikoni
Koriste se kada treba predstaviti podatke koji zavise od vie od dve promenljive. Trodimenzionalni
grafikoni mogu biti linijski, iani, povrinski, mreasti itd.
Linijski grafikoni
To je linija dobijena povezivanjem taaka u dvodimenzionalnom prostoru. Osnovni 3D grafikon crta
se pomou komande plot3 koja ima sledei oblik:
plot3(x,y,z,oznake linije,ImeSvojstva,vrednost svojstva)
19

gde su x,y,i,z vektori koordinata taaka, moraju imati jednak broj taaka. Oznake linija, svojstva i vrednosti
svojstava su isti kao i zadvodimenzionalne grafikone. Na primer, ako su koordinate x,y,i z date u funkciji
parametra t sledeim formulama:
x=sqrt(t)sin(2t); y=sqrt(t)cos(2t); z=0.5t
grafikon taaka za 0<=t<=6Pi moe se nacrtati pomou sledee skript datoteke:
t=0:0.1:6*pi;
x=sqrt(t).*sin(2*t);
y=sqrt(t).*cos(2*t);
z=0.5*t;
plot3(x,y,z,'k','linewidth',1)
grid on

Mreasti i povrinski grafikoni


To su grafikoni koji omoguavaju predstavljanje funkcija tipa z=f(x,y), gde su x i y nezavisne
promenljive, a z je zavisna promenljiva. To znai da se u datom domenu vrednost ppromenljive z moe
izraunati za svaku kombinaciju x i y. Mreasti i povrinski grafikoni crtaju se u tri koraka. Prvi korak je
formiranje u ravni x-y reetke (tj. 3D koordinatnog sistema) koja pokriva domen (tj. oblast definisanosti
funkcije. Drugi korak je izraunavanje vrednosti z u svakoj taki reetke. Trei korak je crtanje samog
grafikona.
Formiranje reetke u ravni x-y
Reetka predstavlja skup taaka u ravni koji obuhvata oblast definisanosti, tj. domen funkcije.
Gustinu domena (broj taaka kojim se definie domen) zadaje korisnik. Take reetke se mogu definisati
pomou dve matrice, X i Y koje sadre koordinate svih taaka x odnosno y ose. Na primer, ako je domen
-1<=x<=3 i 1<=y<=4, matrice X i Y izgledaju ovako:
1
1
X
1

0 1

0 1
0 1
0 1

2
2
2

3
, Y=
3

3
2
1

3
2
1

3
2
1

3
2
1

3
.
2

U Matlab-u postoji ugraena funkcija meshgrid koja omoguava formiranje matrica X i Y i ima sledei oblik:
[X,Y]=meshgrid(x,y)
U vektorima x i y prvi i poslednji element su granice domena. Gustinu reetke odreuje broj elemenata tih
vektora. Matrice reetke X i Y koje su gore navedene odgovaraju sledeim komandama:
>> x=-1:3;
20

>> y=1:4;
>> [X,Y]=meshgrid(x,y)
Izraunavanje vrednosti z u svakoj taki reetke
Vrednost z se izraunava u svakoj taki reetke element po element, isto kao kada se radi sa
vektorima. Kada su nezavisne promenljive x i y matrice, (moraju biti jednakih dimenzija), izraunata zavisna
promenljiva je takoe matrica iste veliine. Vrednost z na svakoj adresi izraunava se na osnovu
odgovarajuih vrednosti x i y. Na primer, ako je z dato formulom:
z

xy 2
x2 y2

, vrednost z u svakoj taki reetke definisane u prethodnom primeru izraunava se na sledei

nain:
>>Z=X.*Y.^2./(X.^2+Z.^2)
Crtanje mreastih ili povrinskih grafikona
Crtaju se pomou sledeih komandi:
mesh(X,Y,Z) ili surf(X,Y,Z)
gde su X i Y matrice koordinata reetke, a Z matrica vrednosti zavisne promenljive z u takama reetke.
Mreasti grafikon se sastoji od linija koje povezuju take. Na povrinskom grafikonu, oblasti izmeu linija
mree ispunjene su bojom. Na primer, crtanje mreastog grafikona funkcije z
1<=y<=4:
x=-1:0.1:3;
y=1:0.1:4;
[X,Y]=meshgrid(x,y);
Z=X.*Y.^2./(X.^2+Y.^2);
mesh(X,Y,Z)

Evo nekih primera grafikona funkcije z 1.8 1.5


x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
mesh(X,Y,Z)

xy 2
za -1<=x<=3 i
x2 y2

x=-1:0.1:3;
y=1:0.1:4;
[X,Y]=meshgrid(x,y);
Z=X.*Y.^2./(X.^2+Y.^2);
surf(X,Y,Z)

x2 y 2

sin( x ) cos(0.5 y ) za -3<=x<=3 i -3<=y<=3:

21

x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
surf(X,Y,Z)

x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
meshz(X,Y,Z)
x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
meshc(X,Y,Z)

x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
surfc(X,Y,Z)

x=-3:0.25:3;
y=-3:0.25:3;

[X,Y]=meshgrid(x,y);
22

Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
waterfall(X,Y,Z)

x=-3:0.25:3;
y=-3:0.25:3;
[X,Y]=meshgrid(x,y);
Z=1.8.^(1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);
contour3(X,Y,Z)

Specijalni grafikoni
U Matlab-u postoje funkcije za izradu razbih vrsta trodimenzionalnih grafikona sa specijalnim
efektima. Prikazaemo neke od njih:
sphere(20)-vraa x,y i z koordinate jedinine sfere
t=linspace(0,pi,20);
sa 20 povrina:
r=1+sin(t);
[X,Y,Z]=cylinder(r);
surf(X,Y,Z)

Y=[1 6.5 7;2 6 7;3 5.5 7;4 5 7;3 4 7;2 3 7;1 2 7];
bar3(Y)

23

t=0:0.2:10;
x=t;
y=sin(t);
z=t.^1.5;
stem3(x,y,z,'fill')
grid on

t=0:0.4:10;
x=t;
y=sin(t);
z=t.^1.5;
scatter3(x,y,z,'fill')
grid on
colormap([0.1 0.1 0.1])

X=[5 9 14 20];
explode=[0 0 1 0];
pie3(X,explode)
(explode je vektor u kome jedinica oznaava da
iseak treba da bude odvojen u odnosu na centar
kruga)

24

Numeriko integraljenje i diferencijalne jednaine


Reavanje jednaine sa jednom promenljivom
Jednaina se moe napisati u obliku f(x)=0. Reenje je vrednost x za koju je vrednost funkcije
jednaka nuli (funkcija preseca x osu). Ako takva vrednost ne postoji ili se teko izraunava, priemnom
numerike metode moe se nai x koje je veoma blizu taki na kojoj funkcija preseca x osu. To se radi
pomou iterativnog postupka u kojem raunar u svakoj iteraciji izraunava vrednost x sve bliu konanom
reenju. Postupak iteracije se prekida kada razlika vrednosti x izmeu dve iteracije postanje manja od zadate
mere.
U Matlab-u se nula funkcije moe izraunati pomou komande fzero, koja ima sledei oblik:
x=fzero(funkcija,x0)
gde su x reenje, a x0 vrednost x u blizini mesta gde funkcija preseca koordinatnu osu. Reenje je skalarna
vrednost. Funkcija mora biti napisana u standardnom obliku, npr ako je funkcija f(x)=xe -x=0.2, u komandi
fzero morate napisati x*exp(-x)-0.2. Funkcija ne moe sadrati prethodno definisane promenljive. x0 moe
biti skalarna vrednost ili vektor sa dva elementa. Ukoliko se zada vektor, njegova dva elementa moraju biti
na suprotnim stranama reenja. Dobar nain da utvrdite gde se otprilike nalazi reenje funkcije jeste da
nacrtate njenu krivu.
Primer: Naite reenja jednaine xe-x=0.2.
Reenje:
Nacrtaemo krivu funkcije :
fplot(x*exp(-x)-0.2,[0 8])
Sa grafika se vidi da funkcija ima dva reenja,
jedno izmeu 0 i 1, i drugo izmeu 2 i 3. Ta
reenje se odreuju na sledei nain:
x1=fzero(x*exp(-x)-0.2,0.7) kada se dobija
reenje x1=0.2592, i
x1 fzero(x*exp(-x)-0.2,2.8), kada se dobija
x1=2.5426.

25

Pronalaenje minimuma i maksimuma funkcije


Potrebno je odrediti minimum ili maksimum funkcije oblika y=f(x). Vrednost x koja odgovara
lokalnom minimumu ili maksimumu funkcije odreuje se tako to se izrauna nula izvoda funkcije. Vrednost
se zatim izraunava zamenom vrednosti x u u funkciji. U Matlab-u se vrednost x funkcije s jednom
promenljivom f(x) koja unutar opsega x1<=x<=x2, ima minimum, izraunava se pomou komande fminbnd,
koja ima sledei oblik:
x=fminbnd(funkcija,x1,x2)
gde su x vrednost za koju funkcija ima minimum, a x1 i x2 interval za x. Vrednost funkcije na mestu
minimuma moe se dodati rezultatima funkcije fminbnd pomou opcije:
[x fval]= fminbnd(funkcija,x1,x2)
gde se vrednost funkcije za x dodeljuje promenljivoj fval. Unutar datog intervala, minimum funkcije moe
biti u jednoj od graninih taaka intervala, ili u taki unutar intervala u kojoj je nagib funkcije nula (lokalni
minimum). Kada se zada komanda fminbnd Matlab trai lokalnin minimum. Ako je pronaen, njegova
vrednost se poredi sa vrednostima funkcije u graninim takama intervala. Matlab vraa taku u kojoj
funkcija ima minimum unutar intervala.
Komanda fminbnd se moe upotrebiti i za pronalaenje maksimuma funkcije. To se radi tako to se
funkcija pomnoi sa -1 i pronae minimum. Na primer, maksimum funkcije f(x)=xe -x-0.2 u intervalu (0,8)
moe se odrediti izraunavanjem minimuma funkcije f(x)=-xe-x+0.2 na sledei nain:
[x fval]= fminbnd( )=(-xe-x+0.2,0,8)
Numeriko integraljenje
Odreeni integral funkcije f(x) od a do b ima oblik:
b

a= f ( x ) dx
a

Funkcija f(x) je podintegralna funkcija, a brojevi a i b su granice integrala. Na grafiku funkcije, vrednost
integrala je povrina izmeu krive funkcije, ose x i granica a i b. Kada se odreeni integral izraunava
analitiki, f(x) je uvek funkcija. U numerikom integraljenju, ukupna povrina se izraunava tako to se
povrina podeli na male iseke, izrauna povrina svakog iseka, a zatim dobijene vrednosti saberu. Matlab
ima ugraene funkcije za integraljenje: quad, quad1 i trapz. Prve dve komande koriste se kad je f(x) funkcija,
a trapz kad je f(x) data u obliku taaka.
Komanda quad
q=quad(funkcija,a,b)
Funkcija se unosi u obliku znakovnog niza. Funkcija se mora napisati za argument x koji je vektor, tako da
komanda quad izraunava vrednost funkcije za svaki element vektora x.
Komanda quad1
q=quad1(funkcija,a,b)
Sve navedeno za komandu quad vai i za quad1. Komande se razlikuju samo po numerikoj metodi koja se
koristi za izraunavanje vrednosti integrala.
Primer: izraunajte sledei integral primenom numerike integracije:
8

( xe

x 0.8

0.2) dx

>> quad('x.*exp(-x.^0.8)+0.2',0,8)
ans =
3.1604
26

Komanda trapz
Oblik komande je sledei:
q=trapz(x,y)
gde su x i y vektori x koordinata, odnosno y koordinata taaka. Vektori moraju biti iste duine.
Obine diferencijalne jednaine
Diferencijalne jednaine imaju kljunu ulogu u nauci i tehnici. Vrlo mali broj diferencijalnih
jednaina se moe reiti analitiki, dok se numeriki moe nai reenje svake jednaine. Matlab ima veliku
biblioteku alatki koje se mogu upotrebiti za reavanje diferencijalnih jednaina. Korisnik mora da poznaje
diferencijalne jednaine i razne numerike metode za njihovo reavanje.
Obina diferencijalna jednaina sadri nezavisnu promenljivu, zavisnu promenljivu i izvode zavisne
promenljive. Razmotriemo jednaine oblika

dy
f ( x, y ) , gde je x nezavisna promenljiva, a y zavisna
dx

promenljiva. reenje je funkcija y=f(x) koja ispunjava uslove jednaine. Poto vie funkcija moe ispunjavati
uslova date jednainom, za reavanje zadatka potrebni su dodatni podaci. Oni predstavljaju vrednost funkcije
za odreenu vrednost nezavisne promenljive.
Postupak reavanja obine diferencijalne jednaine prvog reda
Koristiemo vreme t kao nezavisnu promenljivu.
Korak 1. Napisati zadatak u standardnom obliku
dy
f (t , y ) za to<=t<=tf uz y=yo i t=to
dx
dy t 3 2 y

Primer za reavanje:
za 1<=t<=3, uz y=4.2 u t=1
dt
t

Korak 2. Napisati funkcijsku datoteku


Za navedeni primer funkcijska datoteka ima sledei sadraj:
function dydt=ODJpr1(t,y)
dydt=(t^3-2*y)/t;
Korak 3. Izaberite metodu reavanje
Za reavanje diferencijalnih jednaina prvog reda postoji vei broj metoda. U tipinoj ni,erikoj metodi,
vremenski interval se deli na male korake. Reenje poinje u poznatoj taki y o, a zatim se pomou neke
numerike metode izraunava vrednost y za svaki korak vremena. U tabeli su date pojedine funkcije:
Ime funkcije
Opis
ode45
Pogodna za jednostavne zadatke, radi u jednom koraku. Preporuuje se za prvi pokuaj pri
reavanju veine zadataka
ode23
Pogodna za jednostavne zadatke, radi u jednom koraku. esto je bra ali manje tana od
ode45
ode113
Pogodna za jednostavne zadatke, radi u vie koraka
ode15s
Pogodna za tee zadatke, naroito kada ode45 ne uspeva, radi u vie koraka.
ode23s
Pogodna za tee zadatke, radi u jednom koraku. Moe da rei pojedine probleme koje
ode15s ne uspeva
ode23t
Pogodna za umereno teke zadatke
ode23tb
Pogodna za tee zadatke. esto efikasnija od ode15s
Korak 4. Reiti zadatak
Komanda za izraunavanje poetne vrednosti obine diferencijalne jednaine ima isti opti oblik, bez obzira
na upotrebljenu funkciju i jednainu koja se reava. Oblik je sledei:
[t,y]=ime_funkcije(ime_dat,topseg,y0)
Objanjenje simbola
ime_funkcije
Ime iz tabele
27

ime_dat

ime funkcijske datoteke uneto u znakovnom nizu koja izraunava dy/dt za date
vrednosti t i y
topseg
vektor koji zadaje interval reenja. Mora imati najmanje dva elementa, moe i vie.
Ako su dva, to moraju biti [to tf], odnosno poetna i zavrna taka intervala reenja.
yo
Poetna vrednost y
[t,y]
Rezultat komande, odnosno reenje jednaine. t i y su vektori. Prvi i poslednji element
su koordinate poetne i zavrne take intervala. Broj taaka i razmak zavise od
ulaznog vektora topseg. Ako topseg ima samo dva elementa, vektori t i y sadre
reenje za svaki korak integraljenja. Ako topseg ima vie od dva elementa, vektori t i y
sadre reenja samo u tim takama.
Na primer, reenje zadatka navedenog u koraki 1 moe se dobiti na sledei nain:
>> [t,y]=ode45('ODJpr1',[1:0.5:3],4.2)
t=
1.0000
1.5000
2.0000
2.5000
3.0000
y=
4.2000
2.4528
2.6000
3.7650
5.8444
Evo jo jednog reenja: vektoru topseg zadajemo manje korake, a zatim crtamo krivu reenja pomou plot:
>> [t,y]=ode45('ODJpr1',[1:0.01:3],4.2);
>> plot(t,y)
>> xlabel('t'),ylabel('y')

28

Simboliki objekti i simboliki izrazi


Sve matematike operacije koje smo do sada obavljali bile su numerike, tj. kao rezultat su dobijane
numerike vrednosti. Za mnoge primene potrebne su simbolike operacije, odnosno matematike operacije
sa izrazima koji sadre simbolike promenljive., promenljive koje nemaju odreenu vrednost u trenutku
izvravanja operacije. Rezultat takve operacije je matematiki izraz koji sadri simbolike promenljive.
Simbolike operacije izvrava poseban softver koji je projektovan za tu namenu.
Simboliki objekat moe biti promenljiva ili izraz sastavljen od simbolikih promenljivih i brojeva.
Simboliki izraz sadri jedan ili vie simbolikih objekata.
Pravljenje simbolikih objekata
Simboliki objekti mogu biti promenljive ili brojevi, a mogu se praviti pomou komande sym ili
syms. Pojedinaan simboliki objekat moe se napraviti pomou komande sym:
ime_objekta=sym(znakovni niz)
gde je znakovni niz simboliki objekat kojem se dodeljuje ime. Znakovni niz moe biti: slovo, ili
kombinacija vie slova (bez raznaka); kombinacija slova i brojeva, koja poinje slovom i ne sadri razmake.
Npr. a=sym(a)-simboliki objekat a dobio je ime a.
Jednom komandom se moe definisati vie simbolikih pormenljivih, ukoliko se upotrebi komanda
syms:
syms ime_prom ime_prom ime_prom
Ova komanda pravi simbolike objekte koji imaju ista imena kao simbolike promenljive.
Pravljenje simbolikih izraza
Simboliki izrazi su matematiki izrazi sastavljeni od simbolikih objekata. Poto se definiu
simbolike promenljive, mogu se upotrebiti za sastavljanje simbolikih izraza. Simboliki izraz je simboliki
objekat. Ima sledei oblik:
ime_izraza=matematiki_izraz
Na primer:
>> syms a b c x y
>> f=a*x^2+b*x+c
f=
a*x^2+b*x+c
Kada se unese simboliki izraz koji sadri izvrive matematike operacije (sabiranje, oduzumanje, mnoenje
i deljenje), Matlab ih izvrava im ih unesete. Na primer:
>> g=2*a/3+4*a/7-6.5*x+x/3+4*5/3-1.5
g=
26/21*a-37/6*x+31/6
Numerike vrednosti se izraunavaju bez aproksimiranja (razlomci ostaju razlomci). U sledeem primeru iste
matematike operacije se izvravaju prvo sa simbolikim promenljivama, a zatim sa numerikim:
>> a=sym(3);b=sym(5);
>> c=b/a+sqrt(2)
c=
5/3+2^(1/2)
>> c=3;d=5;
>> f=d/c+sqrt(2)
f=
3.0809
Simboliki izrazi mogu sadrati numerike promenljive prethodno dobijene izvravanjem numerikih izraza.
Kada se te promenljive ugrade u simboliki izraz, koriste se njihove tane vrednosti, ak i ako je promenljiva
prethodno bila prikazana sa priblinom vrednou. Na primer:
>> h=10/3
h=
3.3333
29

>> k=sym(5);m=sym(7);
>> p=k/m+h
p=
85/21
Simboliki objekat S, napisan u tanom obliku, moe se pomou komande double(S) pretvoriti u numeriki
oblik:
>> pn=double(p)
pn =
4.0476
>> y=sym(10)*cos(5*pi/6)
y=
-5*3^(1/2)
>> yn=double(y)
yn =
-8.6603
Simboliki objekat se moe napraviti i zadavanjem simbolikog izraza sastavljanog od promenljivih koje
nisu prethodno definisane kao simboliki objekti:
>> f=sym('a*x^2+b*x+c')
f=
a*x^2+b*x+c
Postojei simboliki izrazi mogu se koristiti za sastavljanje novih simbolikih izraza. To se radi tako to se
ime postojeeg izraza upotrebi u novim izrazu:
>> syms x y
>> SA=x+y;SB=x-y
>> SA=x+y,SB=x-y
SA =
x+y
SB =
x-y
>> F=SA^2/SB^3+x^2
F=
(x+y)^2/(x-y)^3+x^2
Komanda findsym
Ova komanda omoguava da se utvrdi koje su sve simbolike promenljive sadrane u postojeem
simbolikom izrazu. Format komande:
findsym(S) ili findsym(S,n)
Komanda prikazuje abecednim redom imena svih simbolikih promenljivih sadranih u izrazu S. Drugi oblik
komande prikazuje podrazumevanim redosledom imena n simbolikih promenljivih u izrazu S.
Podrazumevani redosled poinje od x. Podrazumevana simbolika promenljiva u izrazu S moe se utvrditi
pomou komande findsyim(S,1). Primeri:
>> syms x h w y d t
>> S=h*x^2+d*y^2+t*w^2
S=
h*x^2+d*y^2+t*w^2
>> findsym(S)
ans =
d, h, t, w, x, y
>> findsym(S,5)
ans =
x,y,w,t,h
30

>> findsym(S,1)
ans =
x
Komanda Collect
Ova komanda grupie i sabira lanove izraza koji sadre promenljive s jednakim izloiocem. U
novom izrazu, ti elementi e biti poreani opadajuim redosledom izloioca. Komanda ima sledee oblike:
collect(S)
collect(S,ime_promenljive)
Prvi oblik je najpogodniji za izraze koji sadre samo jednu simboliku promenljivu. Ako sadre vie, Matlab
e najpre grupisati elemente koji sadre prvu promenljivu, zatim elemente koji sadre drugu itd. Korisnik
moe da zada prvu promenljivu pomou drugog oblika komande. Primeri:
>> syms x y
>> S=(x^2+x-exp(x))*(x+3)
S=
(x^2+x-exp(x))*(x+3)
>> F=collect(S)
F=
x^3+4*x^2+(-exp(x)+3)*x-3*exp(x)
>> T=(2*x^2+y^2)*(x+y^2+3)
T=
(2*x^2+y^2)*(x+y^2+3)
>> G=collect(T)
G=
2*x^3+(2*y^2+6)*x^2+y^2*x+y^2*(y^2+3)
>> H=collect(T,y)
H=
y^4+(2*x^2+x+3)*y^2+2*x^2*(x+3)
Komanda expand
Ona razvija izraze na dva naina: meusobno mnoi lanove koji sadre operacije sabiranja i
oduzimanja, i primenjuje trigonometrijske, eksponencijalne i logaritamske formule i pravila na lanove koji
sadre operacije sabiranja i oduzimanja. Komanda ima oblik:
expand(S)
Primeri:
>> syms a x y
>> S=(x+5)*(x-a)*(x+4)
S=
(x+5)*(x-a)*(x+4)
>> T=expand(S)
T=
x^3+9*x^2-x^2*a-9*x*a+20*x-20*a
>> expand(sin(x-y))
ans =
sin(x)*cos(y)-cos(x)*sin(y)
Komanda factor
Pretvara izraz polinomskog tipa u proizvod polinoma nieg stepena. Komanda ima oblik:
factor(S)
Primer:
>> syms x
>> S=x^3+4*x^2-11x-30
>> S=x^3+4*x^2-11*x-30
S=
31

x^3+4*x^2-11*x-30
>> factor(S)
(x-3)*(x+5)*(x+2)
Komanda simplify
Koristi matematike operacije (sabiranje, oduzimanje, mnoenje, pravila za razlomke, stepenovanje,
logaritme itd.) i funkcijske i trigonometrijske formule da bi generisala uproen oblik izvornog izraza. Oblik
komande:
simplify(S)
Primeri:
>> syms x y
>> S=x*(x*(x-8)+10)-5
S=
x*(x*(x-8)+10)-5
>> SA=simplify(S)
SA =
x^3-8*x^2+10*x-5
>> simplify((x+y)/(1/x+1/y))
ans =
x*y
Komanda simple
Pronalazi oblik izraza koji sadri najmanji mogui broj znakova. Kada korsnik zada tu komandu,
Matlab formira vie verzija izraza tako to primenjuje komande collect, expand, factor i simplify. Potom
program vraa najkrai oblik izraza. Komanda ima tri mogua oblika:
F=simple(S) simple(S)
[F how]=simple(S)
U prvom obliku, promenljivoj F se dodeljuje najkrai oblik izvornog izraza S; U drugom obliku prikazuju se
svi pokuaji uproavanja izraza. Najkrai se dodeljuje promenljivoj ans; U treem obliku promenljivoj F se
dodeljuje najkrai mogui oblik izvornog izraza S. Ime metode uproavanja dodeljuje se promenljivoj how.
Primeri:
>> syms x
>> S=(x^3-4*x^2+16*x)/(x^3+64)
S=
(x^3-4*x^2+16*x)/(x^3+64)
>> F=simple(S)
F=
x/(x+4)
>> [G how]=simple(S)
G=
x/(x+4)
how =
factor
Komanda pretty
Prikazuje simboliki izraz u formatu slinom matematikom formatu u kojem se obino piu
matematiki izrazi. Komanda ima oblik:
pretty(S)
Primer:
>> syms a b c x
>> S=sqrt(a*x^2+bx+c)
>> S=sqrt(a*x^2+b*x+c)
S=
(a*x^2+b*x+c)^(1/2)
32

>> pretty(S)
2
1/2
(a x + b x + c)

Reavanje algebarskih jednaina


Pomou funkcije solve moe se reiti jednostavna algebarska jednaina s jednom promenljivom ili
sistem jednaina s vie promenljivih.
Reavanje jednostavne jednaine
Jedna algebarska jednaina moe sadrati jednu ili vie simbolikih promenljivih. Ako jednaina ima
samo jednu promenljivu, reenje je numerika vrednost. Ukoliko jednaina ima vie simbolikih
promenljivih, moe se nai reenje u kojem je jedna od promenljivih izraena pomou ostalih. Reenje se
moe nai pomou komande :
solve(jed) ili h=solve(jed,prom)
Argument jed moe biti ime prethodno definisanog simbolikog izraza ili izraz koji je direktno upisan u
komandu. Matlab reava jednainu oblika jed=0. Jednaina oblika f(x)=g(x) moe se reiti tako to se cela
jednaina upie kao znakovni niz na mestu argumenta jed. Ako jednaina ima vie od jednog reenja, rezultat
je simboliki vektor iji su elementi reenja jednaine. Elementi vektora su simboliki objekti.
Primeri:
strana 284
Komanda solve se moe upotrebiti i tako to se jednaina za reavanje upie kao znakovni niz, pri emu nije
neophodno da se promenljive koje se pominju u jednaini prethodno definiu kao simboliki objekti. Na
primer:
str 285
Reavanje sistema jednaina
Ako je broj jednaina jednak broju promenljivih, reenje je numeriko. Kada je broj promenljivih
vei od broja jednaina, reenje je simboliki izraz u kojem su zadate promenljive izraene pomou ostalih
promenljivih.Sistem jednaina moe imati jedno ili vie reenja. Komanda za reavanje sistema jednaina
ima sledei oblik:
rezultat=solve(jed1,jed2,...,jedn), ili
rezultat=solve(jed1,jed2,...,jedn,prom1,prom2,...,promn)
Kada se upotrebi prvi oblik komande, a ukupan broj jednaina je jednak broju promenljivih, sve promenljive
dobijaju numeriku vrednost. Ako je broj promenljivih vei od ukupnog broja jednaina, korisnik moe da
izabere promenljive za koje e sistem biti reen. U tom sluaju se upotrebljava drugi oblik jednaine.

33

You might also like