You are on page 1of 103

1.

Uvod u MATLAB

1.1. Uvod

Postoje dvije klase softverskih paketa za rješavanje matematičkih problema:


- programi zasnovani na simboličkom rješavanju i
- programi zasnovani na numeričkom rješavanju problema.
Tipičan predstavnik prve klase programa je Mathematica, a druge MATLAB.
MATLAB (MATrix LABoratory) je interpreter i oslanja se na matrični račun kao
osnovu svog rada.

MATLAB je dostupan u više verzija, koje su prilagođene različitim računarskim


platformama – od PC i Macintosh računara, preko UNIX radnih stanica do Convex i
Cray računara. Predstavlja najčešće korišćen paket u svojoj oblasti. Verzije
MATLAB-a za različite računarske sisteme se razlikuju donekle samo po korisničkom
interfejsu – sve komande se jednako izvršavaju na svim platformama.
Ovdje će biti ukratko prikazan MATLAB u verziji za Windows operativne sisteme.

MATLAB predstavlja moderan i multifunkcionalan programski sistem koji je,


prvenstveno, namijenjen rješavanju problema u tehnici. Korisniku se pruža
mogućnost numeričke i logičke obrade podataka, vizuelnog prikazivanja podataka,
kao i kreiranja i izvršavanja sopstvenih programa.
MATLAB je koncipiran kao proširiv programski paket – pored osnovnog paketa
moguće je nabaviti i dodatne module specijalizovane za rad u oblastima kao što su
automatsko upravljanje (Control System Toolbox), obrada signala (Signal Processing
Toolbox) ili simulacija neuronskih mreža (Neural Network Toolbox).

Osnovno okruženje MATLAB-a predstavlja tekstualni prozor u kome se zadaju


MATLAB komande. Komande se izvršavaju neposredno nakon unosa. Poseban
simbol (») predstavlja MATLAB prompt. Pored toga, moguće je pisati i programe u
programskom jeziku koji nudi MATLAB. Sam MATLAB programski jezik je nalik
drugim proceduralnim jezicima, izuzimajući njegovu prilagođenost radu sa
matricama.

Pored osnovnog prozora za unos komandi (MATLAB Command Window), moguće je


otvoriti još neke prozore (npr. za grafički prikaz podataka).
Mogućnosti MATLAB-a su predstavljene MATLAB programom koji se pokreće
komandom demo.

1.2. Osnovni MATLAB

Osnovna karakteristika MATLAB-a je da nalazi numerička rješenja različitih vrsta


matematičkih problema, od onih najjednostavnijih do izrazito složenih. Druga bitna
karakteristika MATLAB-a je širok spektar mogućnosti za grafičko prikazivanje.
MATLAB generiše grafike specifične po boji, osvijetljenosti, vrsti linija i tekstualnom
sadržaju.

Strana 1
1.2.1. Komandni prozor MATLAB-a

Nakon pokretanja MATLAB-a, pojavljuje se komandni prozor (sl. 1), koji je sada
aktivni prozor. U njemu je omogućena komunikacija sa MATLAB programskim
prevodiocem (engl. interpreter). Program daje znak », kojim označava da je spreman
da prihvati komande od korisnika.

Sl. 1. Komandni prozor MATLAB-a

1.3. Uvod u rad


Osnovni element kojim manipuliše MATLAB je pravougaona numerička matrica čiji
elementi mogu biti i kompleksni brojevi. Specijalni slučajevi pravougaone matrice su
matrice tipa 1x1 koje predstavljaju skalare, dok su vektori matrice sa samo jednom
vrstom ili kolonom.

1.3.1. Unošenje podataka


Matrice se u MATLAB mogu unositi na nekoliko načina:
 direktnim unošenjem elemenata,
 generisanjem pomoću funkcija ili izraza ugrađenih u MATLAB,
 definisanjem u M datoteci,
 prenošenjem iz spoljne datoteke sa podacima.

Kada su u pitanju matrice malih dimenzija, najpogodniji je prvi način. Elementi jedne
vrste se upisuju jedan za drugim, međusobno razdvojeni preznim mjestom ili
zapetom. Kraj svake vrste matrice označava se znakom ; (tačka zapeta). Matrica se
mora ograničiti uglastim zagradama [ ].

Korišćenjem strelica i kontrolnih znakova omogućeno je korisniku da ponovo


aktivira, promijeni ili pozove komande koje je prethodno otkucao.

Strana 2
Opisi funkcija tastera ili kombinacija tastera koji omogućavaju uređivanje komandne
linije prikazani su u Tabeli1.
Tabela 1. Opisi funkcija tastera ili kombinacija tastera koji omogućavaju uređivanje
komandne linije

Taster, Alternativa Funkcija


↑, Ctrl+P Pozivanje prethodne linije
↓, Ctrl+N Pozivanje naredne linije
←, Ctrl+B Pomjeranje kursora ulijevo za jedan znak
→, Ctrl+F Pomjeranje kursora udesno za jedan znak
Ctrl+←, Ctrl+L Pomjeranje kursora ulijevo za jednu riječ
Ctrl+→, Ctrl+R Pomjeranje kursora udesno za jednu riječ
Home, Ctrl+A Pomjeranje kursora na početak komandne linije
End, Ctrl+E Pomjeranje kursora na kraj komandne linije
Esc, Ctrl+U Brisanje komandne linije
Del, Ctrl+D Brisanje znaka na mjestu kursora
Backspace Brisanje znaka lijevo od kursora
Ctrl+K Brisanje sadržaja komandne linije do kraja

1.3.2. Brisanje sadržaja u komandnom prozoru


Ako je potrebno izbrisati sadržaj komandnog prozora, koristi se komanda clc. Tako je
ispražnjen komandni prostor, a ne radna površina. Ako se npr. upotrijebi taster ↑, biće
vidljiva prethodna komanda.

1.3.3. Prekid programa


Pritiskom na kombinaciju tastera Ctrl+C rad programa se prekida.

1.4. Komanda format


Ovom komandom se definiše numerički format za vrijednosti koje se prikazuju na
ekranu, ali to nema uticaja na registrovanje u memoriji.
Da bi se pojasnila ova komanda, potrebno je u komandnom prozoru (Command
Window) otkucati:
>> a=[2/5 1.22333e-6] i pritisnuti Enter.
U komandnom prozoru će biti vidljivo:
>> a=[2/5 1.22333e-6]
a=
0.4000 0.0000
>>

Na ovaj način smo definisali vektor a sa dva elementa. Prikazani format je kratki
format (short), standardne forme (četiri cifre iza decimalne tačke).
Ako želimo da se prikažu brojevi sa mantisom i eksponentom, to postižemo
komandom format short e (zadržan je kratki format, ali su brojevi prikazani sa
mantisom i eksponentom), a nakon toga pritisnemo taster Enter:
>> format short e
>> a
a=
4.0000e-001 1.2233e-006

Strana 3
>>
Prikazaćemo i ostale numeričke formate koristeći funkciju format.

>> format short g


>> a
a=
0.4 1.2233e-006

>> format long


>> a
a=
0.40000000000000 0.00000122333000
(dugački format – 14 cifara)

>> format long e


>> a
a=
4.000000000000000e-001 1.223330000000000e-006
(brojevi se daju mantisom i eksponentom)

>> format long g


>> a
a=
0.4 1.22333e-006

>> format bank


>> a
a=
0.40 0.00
(prikaz brojeva sa dva decimalna mjesta)

>> format +
>> a
a=
++
(prikazuje se samo znak)

>> format rat


>> a
a=
2/5 1/817441
(prikazuje se razlomak, drugi broj je „zaokružen“ broj)

>> format compact


>> a
a=
2/5 1/817441
(između redova sa nekim sadržajem neće biti praznih redova)

>> format loose

Strana 4
>> a

a=

2/5 1/817441
(prikazuju se prazni redovi između redova sa određenim sadržajem).

Izborom File  Preferences  Command Window  Command Window


Preferences vrši se izbor željenog numeričkog formata.

Sl. 2. Izbor željenog numeričkog formata za vrijednosti koje se prikazuju na ekranu

Ako nije definisan neki drugi format, automatski se koristi format short, tj.
standardni format sa 5 značajnih cifara.
PRIMJER:
Broj  prikazati korišćenjem različitih oblika naredbe format.

>> format short, pi


ans =
3.1416
>> format long, pi
ans =
3.14159265358979
>> format long e, pi
ans =3.141592653589793e+000
>> format short e, pi
ans =
3.1416e+000
>> format rat, pi
ans =
355/113

Napomena: Sljedeći broj sa kojim budemo radili biće automatski u formatu


koji smo posljednji koristili. Da bismo se vratili u uobičajeni, format short, dovoljno
je otkucati samo naredbu format.

1.5. Prikaz rezultata


Pritiskom na taster Enter na ekranu se automatski prikazuju rezultati. Ako je potrebno
da se rezultati ne prikazuju na ekranu, neophodno je da se red završi znakom ; , što
omogućava izvršenje proračuna, ali se rezultat ne prikazuje na ekranu.

Strana 5
1.5.1. Prikaz komandi u više redova
Da bi se komande prikazale u više redova, neophodno je na kraju svakog reda
otkucati tri uzastopne tačke.
Primjer:
>> a=2-1/2+1/3-1/4+1/5 ...
- 1/6 + 1/7;
>> a
a=
1.7595
>>
Napomena: prije kucanja tri uzastopne tačke, potrebno je unijeti jedan prazan znak.

1.6. Korišćenje komandi save i load


Formiraćemo niz sa dva elementa: a i b (element a je već formiran, a element b je
recipročna vrijednost elementa a):
a=
1.7595
>> b=1/a
b=
0.5683

>> c=[a b] Formirali smo niz c sa dva elementa


c=
1.7595 0.5683
>> save rp Sačuvali smo sadržaj radnog područja u zapisu rp.mat
>> clear Brisanje sadržaja radnog područja
>> load rp Unošenje podataka iz zapisa rp.mat
>> c Prikazivanje niza c na ekranu
c=
1.7595 0.5683
>> clear Brisanje sadržaja radnog područja
>> d=[2/3 .23]; Formirali smo niz d sa dva elementa
>> save rp.dat -ascii Radno područje kopirali smo u tekstualni zapis
>> clear Brisanje sadržaja radnog područja
>> load rp.dat Unošenje podataka iz zapisa rp.dat (formiran je niz rp)
>> rp Prikazivanje niza rp na ekranu
rp =
0.6667 0.2300
>> e=rp Formirali smo niz e sa dva elementa (jednak nizu rp) i
e= prikazali ga na ekranu
0.6667 0.2300
>> clear Brisanje sadržaja radnog područja
>> f=[2 3];g=4.5; Formirali smo niz f sa dva elementa i promjenljivu g
>> save rp1 Sačuvali smo kopiju radnog područja u zapisu rp1.mat
>> clear Brisanje sadržaja radnog područja
>> load rp1 Unošenje sadržaja zapisa rp1.dat

Strana 6
>> rp1 Pokušaj prikaza niza
??? Undefined function or variable 'rp1'. MATLAB javlja grešku
>>

1.7. Funkcije za pomoć

Komanda help
Ako zadamo komadnu
>> help
MATLAB prikazuje listu svih direktorija sa opisom kategorije funkcija koje se nalaze
u pojedinom direktoriju.
Ako zadamo zajedno sa komandom help i ime neke od funkcija (ime funkcije se
zadaje malim slovima), MATLAB kao odgovor daje informacije o navedenoj funkciji
u komandnom prozoru.
Lista imena svih funkcija, npr. iz oblasti linearne algebre, nalazi se u direktorijumu
matfun, i ako želimo vidjeti listu imena svih ovih funkcija (sa opisom svake od njih)
zadaćemo komandu: help matfun.

Ako otkucamo:
>> help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also sqrtm.
Overloaded functions or methods (ones with the same name in other directories)
help sym/sqrt.m
Reference page in Help browser
doc sqrt
Ako kliknemo na doc sqrt, dobijamo opis funkcije sa primjerom:
MATLAB Function Reference sqrt Square root SyntaxB = sqrt(X)
DescriptionB = sqrt(X) returns the square root of each element of the array X. For the
elements of X that are negative or complex, sqrt(X) produces complex results.
RemarksSee sqrtm for the matrix square root. Examplessqrt((-2:2)')
ans =
0 + 1.4142i
0 + 1.0000i
0
1.0000
1.4142
See Alsosqrtm

Ako otkucamo:
>> sqrt (-2:2)
ans =
0 + 1.4142i 0 + 1.0000i 0 1.0000 1.4142

Strana 7
Komanda helpwin
Ovom komandom se, takođe, omogućuje pristup informacijama do kojih se dolazi i
pomoću naredbe help.

Komanda lookfor
Ovom komandom se omogućava dobijanje informacija o nekoj funkciji na osnovu
zadate ključne riječi.
Ako otkucamo:
>> lookfor poly
dobija se mnogo odgovora, npr.:
PSI Psi (polygamma) function.
POLYEIG Polynomial eigenvalue problem.
CONV Convolution and polynomial multiplication.
DECONV Deconvolution and polynomial division.

2. Definisanje promjenljivih, unošenje podataka i aritmetički izrazi u Matlab-u

Promjenljive se definišu tako što im se dodijeli vrijednost. Naziv promenljive je niz


slova i cifara koji mora početi slovom, pri čemu se velika i mala slova razlikuju.

Slijedi primjer definicije matrice dimenzije 3 x 3:


» A = [1 2 3; 4 5 6; 7 8 9]
A=
123
456
789
Matricu A je moguće definisati i na drugi način:
» A = [1 2 3
456
7 8 9]
A=
123
456
789

Vektor-vrsta se definiše kao u sljedećem primjeru:

» x = [-1.3 sqrt(3.1) (1+2)/4*5]


x=
-1.300 1.7607 3.7500

Slično kao u prethodnom primjeru s matricom definiše se i vektor-kolona.


Elemente matrice je neophodno odvojiti bar jednim white space karakterom.
Prilikom dodjeljivanja vrijednosti promjenljivim, MATLAB će ispisati upravo
dodijeljenu vrijednost. Stavljanje znaka tačka-zarez (;) na kraj reda prilikom dodjele
vrijednosti promenljivoj će spriječiti ispis vrijednosti na ekran.

Slijedi primjer:

» y = [1.25e-2 sin(5)];
Strana 8
Imaginarna jedinica i može se eksplicitno definisati na sljedeći način:

» i = sqrt(-1)
i=
0+1.0000i

Ovako definisan skalar se potom može koristiti u formiranju MATLAB izraza, kao u
sljedećem primjeru:

» C = [1+5*i 2+6*i; 3+7*i 8];

2.1. Selekcija elemenata matrice

Elementima matrice pristupa se preko njihovog indeksa. Osim pojedinačnih


elemenata matrice, moguće je izdvojiti vrstu, kolonu ili bilo koju podmatricu.
Za matricu definisanu izrazom:

» A = [1 2 3; 4 5 6; 7 8 9];

element A(2,2) bi bio:

» A(2,2)
ans =
5

Izdvajanje treće kolone matrice A vrši se izrazom:

» A(:, 3)
ans =
3
6
9

Podmatrica koja predstavlja presjek prve i treće vrste i druge i treće kolone matrice A
dobija se izrazom:

» A([1 3], [2 3])


ans =
23
89

Prethodni rezultat se može dobiti i izrazom:

» A([1 3], 2:3)

ili izrazom:

» A(1:2:3, 2:3)

Strana 9
U izrazima za selekciju elemenata matrice moguće je koristiti i prethodno definisane
vektore – promjenljive. U MATLAB-u je moguće promijeniti i dimenzije matrice.
Na primjer, izraz

» A = [A; 10 11 12]

A=
1 2 3
4 5 6
7 8 9
10 11 12
će proširiti matricu A novom vrstom. Slično tome, sljedeća komanda će ukloniti drugu
kolonu iz matrice A.
» A = A(:, [1 3])
A=
1 3
4 6
7 9
10 11
Ukoliko se matrica proširuje novim elementima, a ne definišu se vrijednosti svih
novih elemenata, za njihove vrijednosti se uzima nula. Na primjer:

» x = 1 : 4;
» x(6) = 7
x=
123407

Prilikom definisanja vrijednosti promjenljivih posebno je koristan operator dvotačka


(:). Ovaj operator je namijenjen za definisanje vektora čiji se elementi dobijaju
inkrementiranjem početne vrijednosti za konstantan korak. Slijedi primjer:
» x = 1:4
x=
1234

Moguće je navesti i korak različit od 1, kao u sljedećem primjeru:


» y = 1:0.5:3
y=
1.0000 1.5000 2.0000 2.5000 3.0000

Operator dvotačka se može koristiti i za dodjelu vrijednosti matrici, ali samo u slučaju
da je matrica bila prethodno definisana (tj. poznate joj dimenzije).
Sljedeći primjer ilustruje ovu mogućnost.
» A = [1 2 3; 4 5 6; 7 8 9];
» A(:) = 21:29
A=
21 24 27
22 25 28
23 26 29

Strana 10
Ukoliko matrica A prethodno ne bi bila definisana, rezultat bi bio vektor kolona.

MATLAB automatski dodjeljuje vrijednost posljednjeg izračunatog izraza


promjenljivoj ans.
Tako se može dobiti i vrijednost izraza koji nisu dodijeljeni kao vrijednost nijednoj
promjenljivoj.

Slijedi primjer:
» sqrt (2)
ans =
1.4142

Pod skalarom se podrazumijeva matrica tipa 1x1. Vektori predstavljaju matrice


jedne vrste ili jedne kolone.
MATLAB je jezik izraza i sačinjen je od konstanti, promjenljivih, operatora,
specijalnih znakova i funkcija.
Operacije i izrazi u MATLAB–u se pišu na uobičajan način, slično kao što se
piše u matematici. Rezultat izvršenja izraza je matrica.
MATLAB operiše realnim i kompleksnim brojevima. Koristi se uobičajana
decimalna notacija sa znakom i decimalnom tačkom.
MATLAB može da se koristi za izračunavanje jednostavnih matematičkih
izraza. Tada on radi slično kalkulatoru.
Napomena: MATLAB je veoma strog prema definisanoj sintaksi jezika.
Izostavljena zagrada ili zapeta mogu da utiču tako da cijeli program ne funkcioniše.
Sa druge stane, velika olakšica u radu je što se na ekranu ispisuje vrsta učinjene
greške i olakšava se korisniku da se greške isprave.
>> y=sin(x

??? y=sin(x
|
Error: ")" expected, "end of line" found.

MATLAB-ove promjenjive mogu imati numeričke ili znakovne vrijednosti


(string).
Mogućnost manipulacije matematičkim izrazima bez korišćenja brojeva može
da bude veoma korisna.
Znakovni tip podataka sastoji se iz niza ASCII znakova koji se unose pod
jednostrukim apostrofima 'x'.
PRIMJER 1:
Napisati riječ student.

>> riječ='student'
riječ =
student

Strana 11
PRIMJER 2:
U riječi student odrediti broj slova.

>> size(riječ)
ans =
1 7

U ovom PRIMJERU korišćena je naredba size, koja izračunava dimenziju


unijete promjenljive.
Napomena: (Odgovor 1 7 označava polje brojeva u jednom redu 7 elementa).
Imena promjenljivih ili funkcija moraju početi slovom, iza koga može slijediti
prizvoljan niz simbola, ali se samo prvih 31 karaktera iz imena pamti.
MATLAB razlikuje velika i mala slova, tj. x i X su dvije različite promjenljive.
Imena matrica obično se pišu velikim slovima, dok imena skalara i vektora malim
slovima.
Imena funkcija moraju se pisati malim slovima.

2.2. Aritmetički operatori


Aritmetički izrazi se prave korišćenjem uobičajenih aritmeričkih operacija za
koje koristimo sljedeće simbole:

+ sabiranje
- oduzimanje
* množenje
/ dijeljenje
^ stepenovanje

PRIMJER 3:
Izračunati vrijednost izraza 2+4-6.

>> 2+4-6
ans =
0
Iz ovog PRIMJERA vidimo da MATLAB sam kreira veličinu pod imenom ans
(answer odgovor), ukoliko korisnik sam ne dodijeli ime promjenljivoj ili vrijednosti
izraza.

PRIMJER 4:
 1
Izračunati x  2   2  4   .
 

Strana 12
>> x=2+(2*4-1/pi)
x=
9.6817
Broj  je definisan kao stalna veličina MATLAB-a i dovoljno je ukucati slova
pi ( a ne vrijednost 3.14).

PRIMJER 5:
Izračunati vrijednost izraza y  3x , ako je x  32 .

>> x=3^2;
>> y=3*x
y=
27

Napomena: Ako ne želimo da se rezultat ili međurezultat odmah prikažu na


ekranu, na kraju naredbe unosi se znak ; . Na ovaj način se ubrzava rad na računaru,
jer se eliminiše ispisivanje velikog broja, često nepotrebnih međurezultata.

2.3. Relacijski operatori


Relacijski operatori su binarni operatori i koriste se za poređenje izraza.
Rezultat poređenja je tačno ( true ) u oznaci 1 ili netačno ( false ) u oznaci 0 .

< manje od

� manje ili jednako od

> veće od

� veće ili jednako od

== jednako

~= nejednako

PRIMJER 6: Ispitati istinitosnu vrijednost izraza 5 < 3 .


>> 5<3
ans =
0
Napomena: Često se griješi tako što se operator = = često pogrešno zamjenjuje
sa =

PRIMJER 7:
Izračunati vrijednost izraza:

>> 5<(7= =8)


ans
0

Strana 13
Zamijenimo sada = = sа =
>> 5<(7=8)
??? 5<(7=8)
|
Error: ")" expected, "=" found.

U prvom PRIMJERU 7   8 ima istinutosnu vrijednost pogrešno, tj 0, i zato je


5 < 0 , što daje kao rezultat 0.
U drugom PRIMJERU greška se javlja zato što = predstavlja samo operaciju
pridruživanja, a ne računanja vrijednosti koja ima neku istinitosnu vrijednost.

2.4. Kompleksni brojevi


Imaginarna jedinica je definisana kao stalna veličina. Koristi se uobičajena
definicija i   1 ili j   1 .
>> i=sqrt(-1)
i=

0 + 1.0000i
Kompleksni brojevi se definšu kao zbir z  x  iy , gdje je x realni, a y
imaginarni dio kompleksnog broja.

PRIMJER 8:
Napisati broj z  2  3i .
>> z=2+3*i
z=
2.0000 + 3.0000i

Moduo, argument, realni i imaginarni dio i konjugovano kompleksni broj


dobijaju se korišćenjem naredbi abs, angle, real, imag, conj.

PRIMJER 9:

Izračunati sin .
4
>> sin(pi/4)
ans =
0.7071

PRIMJER 10:
Za x  5 i y  59 izračunati vrijednost izraza z  ln y  x .

> x=5;
>> y=59;
>> z=log(y)+sqrt(x)

z=6.3136

Strana 14
Primijetimo da vrijednosti promjenljivih x i y nisu prikazane na ekranu, jer se
iza promjenljivih nalazio znak ; .

PRIMJER 11:
Izračunati vrijednost izraza z  log x  y , za vrijednosti x i y , zadate u
prethodnom PRIMJERU.

>> % Komentar: x i y su vrijednosti promjenljivih iz prethodnog PRIMJERA

>> z=log10(x)+abs(y)
z=
59.6990

Napomena: Treba imati u vidu da MATLAB pamti prethodno unijete veličine,


pa ih nije potrebno ponovo definisati ako nam kasnije trebaju u radu.
Napomena: Oznaka % koristi se za pisanje komentara.

2.5. Osnovne konstante u Matlab – u

ans vrijednost izraza kada nije pridružen promjenljivoj


i,j imaginarna jedinica 1
pi  =3.14159265...
Inf  , ili rezultat 1/0 (infinity)
NaN Nije broj, ili rezultat 0/0 – (Not a Number)

Napomena: Prednost rada u MATLAB-u je što dijeljenje nulom ne dovodi do


prekida programa ili greške. Ispisuje se poruka upozorenja i specijalna veličina se
ponaša korektno u kasnijim izračunavanjima.
VJEŽBA:
1. Utvrditi šta je veće eπ ili πe?
ODGOVOR:
1.

1  i  100
2. Izračunati z , ako je z  .
1  i  96  i1  i  98
ODGOVOR:
3.

Strana 15
5
3. Izračunati za x  0 .
x
ODGOVOR:
4.

0
4. Izračunati x  .
0
ODGOVOR:

5. Kao znakovnu promjenljivu unijeti svoje ime i prezime i odrediti broj slova u
njemu.
ODGOVOR:

6.Korišćenjem različitih izlaznih formata ispisati broj 2 .


ODGOVOR:

PRIMJER 1:
 1 2 4
A   6 8 5 .
Unijeti matricu 
 7 4 2
>> A=[1 -2 4; -6 8 5; 7 -4 2]
A=
1 -2 4
-6 8 5
7 -4 2

Strana 16
Druga mogućnost upisa je da se razmak između elemenata zamijeni zarezom.
>> A=[1, -2, 4; -6, 8, 5; 7, -4, 2]
A=
1 -2 4
-6 8 5
7 -4 2

Vektori su matrice vrste ili kolone i unose se na isti način. Ako su vrijednosti
elemenata ekvidistantne (sa istim korakom), koristi se simbol : .

PRIMJER 2:
Unijeti vektor x=(1, 2, ... , 10).
>> x=1:10; x
x=
1 2 3 4 5 6 7 8 9 10

Naredba length izračunava dužinu vektora.


>> length(x)
ans =
10

Ako želimo proizvoljan korak, a ne 1, kao u predhodnom PRIMJERU,


koristimo naredbu h=a:k:b, gdje su a i b početna i krajnja vrijednost, a k je korak.
Kod matrica sa kompleksnim elementima možemo da koristimo dva načina
unošenja podataka, tako što posebno unosimo realni i imaginarni dio ili broj kao
cjelinu.
PRIMJER 3:
 1  5i 2  6i 
Unijeti matricu Z   , tako što ćemo posebno unositi realne, a
 3  7i 4  8i 

posebno imaginarne dijelove kompleksnih brojeva.

>> a=[-1, 2; 3, 4] ; b=[5, -6; 7, 8] ; Z=a+b*i


Z=
-1.0000 + 5.0000i 2.0000 - 6.0000i

3.0000 + 7.0000i 4.0000 + 8.0000i

PRIMJER 4:
Unijeti matricu Z iz prethodnog PRIMJERA tako što elemente odmah
unosimo kao kompleksne brojeve.

>> Z=[-1+5*i , 2-6*i ; 3+7*i , 4+8*i]


Z=
-1.0000 + 5.0000i 2.0000 - 6.0000i

Strana 17
3.0000 + 7.0000i 4.0000 + 8.0000i

Element matrice A koji se nalazi u presjeku i-te vrste i


j-te kolone može se dobiti primjenom naredbe A(i,j).

PRIMJER 5:
 1 2 3 
  2 3 1  izdvojiti element u presjeku druge vrste i treće
Iz matrice A 
 4 5  6

kolone.

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

>> A(2 , 3)

ans =

Ako želimo da izdvojimo vrstu koristimo komandu A(k,:) ili kolonu komandu
A(:,k), gdje k predstavlja traženu vrstu, odnosno kolonu.
Dimenzije matrice određuju se naredbama size(A) ili [m,n]=size(A).

PRIMJER 6:
Odrediti dimenzije date matrice A, korišćenjem naredbe size.

>> size(A)

ans =

3 3

PRIMJER 7:
Odrediti dimenzije matrice A korišćenjem naredbe [m,n]=size(A).

>> [m, n]=size(A)


m=
3
n=
3

3. Osnovne operacije s matricama


Strana 18
Transponovanje
» A = [1 2 3; 4 5 6; 7 8 9];
» B = A’
B=
147
258
369

Vektori

Već je rečeno da matrice sa jednim stupcem ili jedim retkom zovemo vektori.
Vektori se u MATLAB unose na sljedeći način:
>>a=[2 5 6] (ili a=[2,5,6])
a=
256
>>b=[5;2;1]
b=
5
2
1
Uočiti šta dobijemo za a' i b'.

>>a'

ans= 2
5
6

>>b'

ans= 5 2 1

Sabiranje

»C=A+B
C=
2 6 10
6 10 14
10 14 18

Sabiranje matrice i skalara


Prilikom sabiranja matrice sa skalarom, svaki element matrice se sabira sa datim
skalarom. Sabiranje matrice sa skalarom je komutativno.
»C=C–2

Strana 19
C=
0 4 8
4 8 12
8 12 16

Sabiranje vektora sa skalarom:

>>a+2
ans=
478

>>b-1

ans=
4
1
0

Množenje matrica
Operator * obuhvata i množenje matrice i vektora, množenje dva vektora i množenje
matrice ili vektora skalarom. Naredni primjeri ilustruju ove mogućnosti MATLAB-a.
»D=A*B
D=
14 32 50
32 77 122
50 122 194
» x = [1 2 3]’;
» E = D*x
E=
228
552
876
» y = [4 5 6];
» x*y
ans =
4 5 6
8 10 12
12 15 18
» y*x
ans =
32
» y*2
ans =

Strana 20
8 10 12

>>a*3
ans=
6 15 18
>>b*-2
ans=
-10
-4
-2

Osnovne operacije nad dva vektora su moguće samo ukoliko su istog oblika:
>>a+b
??? Error using ==> +
Matrix dimensions must agree.
>>a+b'
ans =
777
>>a'+b
ans =
7
7
7

Pored ovoga, MATLAB posjeduje operatore / i \ koji su namijenjeni za množenje


matrice inverzijom druge matrice. Pri tome izraz A\B predstavlja množenje A -1*B, a
izraz A/B predstavlja množenje A*B-1. Iz ovoga slijedi da se sistem linearnih
jednačina Ax = b u MATLAB-u može relativno jednostavno riješiti, kao u sljedećem
primjeru:
» A = [10 2 6; 1 10 9; 2 -7 -10];
» b = [28 7 -17]’;
» x = A\b
x=
1.0000
-3.0000
4.0000

U slučaju da je matrica sistema singularna, ili bliska singularnoj, MATLAB će ispisati


upozorenje:

Strana 21
» A = [1 2 3; 4 5 6; 7 8 9];
» b = [10 4 2]’;
» x = A\b
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.937385e-018
x=
1.0e+016 *
1.2609
-2.5218
1.2609

Operacije sa elementima matrice ili vektora


Elementi dvije matrice ili vektora se mogu pomnožiti po principu “element sa
elementom”, pomoću operatora .* . Pri tome dimenzije matrica ili vektora koji se
množe moraju biti jednake.

Slijedi primjer:
» x = [1 2 3];
» y = [4 5 6];
» x .* y
ans =
4 10 18

Analogno prethodnom, postoje i operatori ./ i .\ , koji predstavljaju dijeljenje zdesna,


odnosno slijeva. Sljedeći primjer ilustruje upotrebu ovih operatora:
» x ./ y
ans =
0.2500 0.4000 0.5000
» x .\ y
ans =
4.0000 2.5000 2.0000

Stepenovanje

Ako je A kvadratna matrica i x cio broj, tada izraz A^x predstavlja x-ti matrični stepen
od A. Ukoliko je x realan broj, tada je A^x = V*D.^x/V, gdje operator .^ predstavlja
stepenovanje matrica element po element, V je matrica desnih sopstvenih vektora, a D
dijagonalna matrica sopstvenih vrijednosti.

Slijedi primjer:
» A = [1 2 3; 4 5 6; 7 8 9]
»A^2
ans =
30 36 42
66 81 96
Strana 22
102 126 150

» A .^ 2
ans =
1 4 9
16 25 36
49 64 81

Osnovne operacije s matricama


>>A=[2 1;3 4]
A=
21
34
>>B=[ 2 3; 3 1/2]
B=
2.0000 3.0000
3.0000 0.5000

ans=
Sabiranje matrica + A+B 4.0000 4.0000
6.0000 4.5000
ans=
Oduzimanje matrica - A-B 0 -2.0000
0 3.5000
ans=
Množenje matrica * A*B 7.0000 6.5000
18.0000 11.0000
ans=
Desno dijeljenje matrica / A/B 0.2500 0.5000
1.3125 0.1250
ans=
Lijevo dijeljenje matrica \ A\B 1.0000 2.3000
0 -1.6000
ans=
Potenciranje matrica ^ A^2 7 6
18 19
ans=
Transponovanje matrica ' A' 23
14
Množenje elemenata ans=
dviju matrica član po .* A.*B 43
član 92
Desno dijeljenje ./ A./B ans=
elemenata dviju matrica 1.0000 0.3333

Strana 23
član po član 1.0000 8.0000
Lijevo dijeljenje ans=
elemenata dviju matrica .\ A.\B 1.0000 3.0000
član po član 1.0000 0.1250
Potenciranje elemenata ans=
dviju matrica član po .^ A.^B 4 1
član 27 2

Posebne matrice
Jediničnu matricu stvaramo naredbom eye:
>>eye(3)
ans =
100
010
001

Nul-matricu generišemo naredbom zeros:


>>zeros(3)
ans =
000
000
000

Matricu punu jedinica stvaramo naredbom ones:


>>ones(3)
ans =
111
111
111
Slučajnu matricu generišemo pomoću funkcije rand:
>>A=fix(rand(3)*10)
A=
8 9 2
9 6 5
1 0 9

Osnovne matrične funkcije

diag(A) – vraća vektor čiji su elementi dijagonalni elementi matrice A


>>diag(A)
ans =

Strana 24
4
6
3

Provjeriti šta je diag(diag(A)).

rank(A) – računa rang matrice A


>>rank(A)
ans =
3

sum(A) – vraća vektor čiji su elementi sume stubaca matrice A

>>sum(A)
ans =
17 16 9

prod(A) - vraća vektor čiji su elementi umnošci elemenata stubaca matrice A

>> prod(A)
ans =
160 96 0

det(A) – računa determinatu matrice:


>> det(A)
ans =
-108

inv(A) – računa inverznu matricu matrice A


>> inv(A)
ans =
0.2778 0.0556 -0.1111
-0.0556 -0.1111 0.2222
-0.3148 0.2037 -0.0741

Stapanje matrica
Često je potrebno iz manjih matrica napraviti veće. Npr., iz matrica želimo dobiti
matricu.
>>A=[1 3;2 4]
A=
13
24
>>B=[0;5]
B=
Strana 25
0
5
>>C=[A B]
C=
130
245

U sljedećem PRIMJERU možemo uočiti razliku između A./B i A.\B

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


>> B=A';
>> A./B
ans =
1.0000 0.5000 0.4286
2.0000 1.0000 0.7500
2.3333 1.3333 1.0000

>> A.\B
ans =
1.0000 2.0000 2.3333
0.5000 1.0000 1.3333
0.4286 0.7500 1.0000
Napomena: Izraz X=A\B (X= A 1 B) predstavlja rješenje jednačine AX=B, a
izraz X=A/B (X=B A 1 ) predstavlja rješenje jednačine XA=B.
PRIMJER 25: Riješiti matričnu jednačinu AX=B, gdje su date matrice
 1 2 3   1 
A   2 3 1  i B   2  .

 4 5  6  2

(Uputstvo: AX  B � X  A1 B )
>> A ; B ; X=inv(A)*B
X=
0.1852
-0.3704
0.5185
ili
>> X=A\B
X=
0.1852
-0.3704
0.5185
PRIMJER 26:
Podijeliti matricu A skalarom 2, slijeva i zdesna.

>> A\2
??? Error using ==> \
Matrix dimensions must agree.

Strana 26
>> A/2
ans =
0.5000 1.0000 1.5000
1.0000 -1.5000 0.5000
-2.0000 -2.5000 -3.0000

VJEŽBA:
1. Korišćenjem date matrice A odrediti:
a) član na mjestu (3,1),
b) drugu vrstu matrice A,
c) determinantu matrice A 2 ,
d) transponovanu matricu matrice A 1 .

a)

b)

c)

d)

Strana 27
2. Izračunati A 
2 T
 A1
, korišćenjem date matrice A .
4  det A

3. Riješiti matričnu jednačinu A 2 XB  C (na dva načina), ako je:

1 2  0 3 8 17 
A  , B  ,C .
1 0  2 1 8 11

1. Način

2. Način

Strana 28
4. Dati su elementi  , e, 2 . Formirati matricu 3x3, čiju prvu vrstu čine dati
brojevi, drugu vrstu njihovi logaritmi, a treću vrstu kvadratni korijeni datih
brojeva.

Rješenje:

Zadaci
a) Izračunati u MATLAB-u vrijednost tražene funkcije za zadani x:
f(x)=(x+1)0.5, x=5
f(x)=(x+1)1/3, x=6
f(x)=1/(4-x2), x=7
f(x)=sqrt(x2-2), x=8
f(x)=(-cos(x)/(3*sin2(x)))+4/3*ctg(x), x=14

b) Napisati naredbe u MATLAB-u koje rade sljedeće:


1. Kreirati jednostupčanu matricu A s elementima –10, -8, -6, ..., 6, 8, 10.
2. Kreirati vektor B čiji su elementi kosinusi ekvivalentnih elemenata vektora A
3. Kreirati vektor C čiji su elementi redom umnošci ekvivalentnih elemenata vektora
Ai B
4. Kreirati matricu D čiji će stupci biti redom vektori A, B i C
5. Kreirati matricu E čiji su reci redom 2., 5., 10. i 8. redak matrice D
c) Napisati naredbe u MATLAB-u koje rade sljedeće:
1. Kreirati jednorednu matricu A s 10 elemenata od 0 do 4 (funkcija linspace)
2. Kreirati jednorednu matricu B s elementima 1..10.

d) Pomoću matrice
A=
2 1
-1 -5

i funkcija ones, zeros i eye kreirati matricu

0 0 2 1 1 0
Strana 29
0 0 -1 -5 0 1
4 2 5 5 -2 -1
-2 -10 5 5 1 5
3 2 0 0 1 1
0 -4 0 0 1 1

4. Logički i relacioni operatori

Relacioni operatori u MATLAB-u su sljedeći simboli:


< (manje)
> (veće)
<= (manje ili jednako)
>= (veće ili jednako)
== (jednako)
~= (nije jednako)

Logički operatori u MATLAB-u su sljedeći simboli:


~ (negacija)
| (disjunkcija)
& (konjunkcija)

Tablica vrijednosti za logičke operacije

p q ~p p&q p|q
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1

Napomena: MATLAB tretira svaki ne nulti broj kao tačan i nulu kao netačan.

>> ~4
ans =
0
>>

Logički i relacioni operatori su namijenjeni za formiranje logičkih izraza. MATLAB


ne posjeduje logički tip podataka kao poseban tip, već se kao vrijednost logičkih
izraza uzima 1 (ako je izraz tačan), odnosno 0 (ako je izraz netačan). Prilikom
izračunavanja vrijednosti logičkih izraza vrijednosti različite od nule se tretiraju kao
tačni izrazi, a nula kao netačan izraz.
Slijede primjeri korišćenja logičkih i relacionih operatora:

» 2+2 == 4
ans =

Strana 30
1

» A = [1 2 3; 4 5 6; 7 8 9];

» B = A<5
B=
111
100
000

» ~B
ans =
000
011
111

» X = ((B(:, 1) | ~B(:, 2)) & B(:, 3))'


X=
001

4.1. Upotreba dvotačke


Jednostavan način izrade aritmetičkih nizova:

>>1:5

ans=
12345

>>4:-1:-4

ans =
4 3 2 1 0 -1 -2 -3 -4

>>x=0:pi/3:2*pi

x=
0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832

>>y=sin(x)

y=
0 0.8660 0.8660 0.0000 -0.8660 -0.8660 -0.0000

Ispis n do m-tog člana vektora dobijamo na slijedeći način:

>>x(2:4)

Strana 31
ans =
1.0472 2.0944 3.1416

Ukoliko želimo vektor generisati po broju elemenata, a ne prema razmaku između


susjednih elemenata, koristimo funkciju linspace:

>>s=linspace(0,10,3)

s=
0 5 10

Funkcije zaokruživanja

MATLAB posjeduje 4 funkcije za zaokruživanje realnih brojeva (round, fix, floor,


ceil).

round - zaokružuje broj prema najbližem cjelobrojnom

fix - zaokružuje broj prema nuli

floor - zaokružuje broj prema -µ

ceil - zaokružuje broj prema +µ

>>x=-pi:pi/4:pi

x=

Columns 1 through 7

-3.1416 -2.3562 -1.5708 -0.7854 0 0.7854 1.5708

Columns 8 through 9

2.3562 3.1416

>>round(x)
ans =
-3 -2 -2 -1 0 1 2 2 3
>>fix(x)

ans =

-3 -2 -1 0 0 0 1 2 3

>>floor(x)

ans =
Strana 32
-4 -3 -2 -1 0 0 1 2 3

>>ceil(x)

ans =
-3 -2 -1 0 0 1 2 3 4

Funkcija sign vraća predznak argumenta:

>>sign(x)

ans =
-1 -1 -1 -1 0 1 1 1 1

Zadatak za vježbu

Na osnovu gornjih primjera:


 Pomoću naredbe "linspace" formirajte niz od 100 vrijednosti ravnomjerno
raspoređenih između brojeva 250 i 380.
 Na zadani niz vrijednosti primijenite naučene funkcije za zaokruživanje

5. Ugrađene funkcije

f-ja objašnjenje
sin sinus
cos kosinus
tan tangens
asin arkus sinus
acos arkus kosinus
atan arkus tangens
sinh hiperbolni sinus
cosh hipebolni kosinus
tanh hiperbolni tangens
asinh area sinus hiperbolni
acosh area kosinus hiperbolni
atanh area tangens hiperbolni
abs apsolutna vrijednost
sqrt kvadratni korijen
real realni dio kompleksnog broja
imag imaginarni dio kompleksnog broja
conj kompleksno konjugiranje
exp exponencijalna funkcija (baza e)
log logaritamska funkcija (baza e)
log10 dekadski logaritam

Strana 33
U ovom dijelu biće prikazane neke od najčešće korišćenih ugrađenih funkcija
MATLAB-a. Za svaku od funkcija koje su na raspolaganju u MATLAB-u moguće je
dobiti kratak opis komandom:

» help ime_funkcije

all(X)
Rezultat funkcije all je jednak 1, ako su svi elementi vektora X različiti od nule; u
suprotnom, rezultat je 0. Ako je X matrica, rezultat je vektor vrsta čiji su elementi
rezultati funkcije za svaku kolonu matrice posebno.
» x = [1 2 -3 0; 4 0 -8 0];
» all(x)
ans =
1010

any(X)
Rezultat funkcije any je jednak 1 ako postoji bar jedan element vektora X koji je
različit od nule; u suprotnom, rezultat je 0. Ukoliko je X matrica, rezultat je vektor
vrsta čiji elementi su rezultati funkcije za svaku kolonu matrice posebno.
» any(x)
ans =
1110

sin(X)
Vraća matricu čiji su elementi vrijednosti sinusa odgovarajućih elemenata matrice X.
Funkcija očekuje vrijednosti za veličinu ugla u radijanima.

exp(X)
Vraća matricu čiji su elementi vrijednosti funkcije exp za odgovarajuće elemente
matrice X.

» x = (0:0.2:1)’;
» y = sin(x) .* exp(-x);
» [x y]
ans =
0 0
0.2000 0.1627
0.4000 0.2610
0.6000 0.3099
0.8000 0.3223
1.0000 0.3096
max(X)
Vraća vektor koji sadrži maksimalne elemente po kolonama matrice X.

mean(X)
Vraća vektor koji sadrži aritmetičke sredine elemenata u odgovarajućim kolonama.

Strana 34
size(X)
Vraća dimenzije argumenta u obliku vektora.

» A = [1 2 3; 4 5 6; 7 8 9];
» max(A)
ans =
789
» mean(A)
ans =
456
» size(A)
ans =
33

ones(m,n)
Vraća matricu dimenzije m x n čiji su elementi jedinice.

zeros(m,n)
Vraća matricu dimenzije mxn čiji su elementi nule.

sort(X)
Rezultat je matrica dobijena sortiranjem kolona matrice X u rastućem redoslijedu.

inv(X)
Vraća inverznu matricu kvadratne matrice X.

det(X)
Vraća determinantu matrice X.

rank(X)
Rezultat funkcije je rang matrice X.

cond(X)
Vraća kondicioni broj matrice X.

norm(X)
Vraća normu matrice X.

eig(X)
Izraz eig(X) predstavlja vektor čiji su elementi karakteristične vrijednosti matrice X.
Ukoliko se funkcija pozove sljedećim izrazom:
» [V, D] = eig(X);
tada je D dijagonalna matrica sa karakterističnim vrijednostima matrice X, a V je
matrica čije su kolone odgovarajući desni karakteristični vektori.

poly(X)
Ako je X kvadratna matrica dimenzije n, tada je poly(X) vektor sa n+1 elementom
koji predstavljaju koeficijente karakterističnog polinoma matrice X. Ukoliko je X

Strana 35
vektor, tada je poly(X) vektor čiji su elementi koeficijenti polinoma koji za svoje
korijene ima elemente vektora X.

roots(X)
Rezultat funkcije je vektor čiji su elementi korijeni polinoma datog koeficijentima u
vektoru X.

6. Grafika

6.1. 2D grafika

Osnovna naredba dvodimenzionalne grafike u MATLAB-u je plot.


Ukoliko želimo nacrtati graf funkcije f(x)=2sin(pi*x)cos(pi/2+pi*x) na intervalu
[–1,1] koristeći ukupno 100 tačaka, radimo na sljedeći način:
1. Odaberemo uzorke na x - osi
>>x=linspace(-1,1,100);
2. za svaki uzorak sa x osi izračunamo vrijednost funkcije y
>>y=2*sin(pi*x).*cos(pi/2+pi*x);
3. pozivom naredbe plot kreiramo graf koji se iscrtava na način da se sparuju
tačke iz x i y matrica, te se iscrtavaju u koordinantnom sistemu
>>plot(x,y)

Ime grafa, te oznake x i y osi dodaju se na sljedeći način:


>>title('Graf')
>>xlabel('x os')
>>ylabel('y os')
Dodavanje mreže na sliku izvodi fja grid.

>>grid

Strana 36
Mrežu uklanjamo sa grid ili grid off.

Mijenjanje boje linije kojom je graf nacrtan izvodimo trećim parametrom funkcije
plot.
>>plot(x,y,'r+')

gdje treći parametar može imati sljedeće vrijednosti:

BOJE LINIJE
y yellow .

Strana 37
m magenta o
c cyan x
r red +
g green -
b blue :
w white -.
k black --

Na isti crtež može se prikazati i više grafikona. Npr.:

>>plot(x,y,'k', x,y/2,'g');

Uključimo još prikaz legende:

>>legend('Funkcija','Pola funkcije');

Poziv funkcije plot prebriše sadržaj postojećeg crteža.

Naredba hold omogućava da svi daljnji pozivi funkciji plot crtaju grafikone na istom
crtežu. Isključuje se sa hold off.

Za brisanje crteža koristimo clg (ili clf).

Za povećavanje prikaza koristimo naredbu zoom.


Klikom na sliku povećavamo željeni dio. Zoom out vraća prikaz na standardnu
veličinu.

Strana 38
Mijenjanje područja x i y ose vrši f-ja axis u obliku axis([xmin xmax ymin ymax]).

Npr:
>>axis ([-2 2 -1 1])

PRIMJER 1:
Nacrtati vektor x  (1, 2, 4,8,16) .

>> x=[1,2,4,8,16];plot(x)
16

14

12

10

0
1 1.5 2 2.5 3 3.5 4 4.5 5

Iz ovog PRIMJERA možemo vidjeti da je MATLAB za vrijednosti nezavisno


promjenljive x uzeo redni broj elementa, a njihove slike su vrijednosti vektora x , tj.
tačke nacrtanog grafika imaju koordinate  1,1 ,  2, 2  ,  3, 4  ,  4, 6  ....
U opštem slučaju naredba plot(x) crta grafik spajajući tačke (i, x(i)), i=1, 2, 3,
…, N, gde je N dužina vektora.
Strana 39
Nezavisno promjenljiva može biti zadata posebno. U tom slučaju se koristi
naredba plot(x,y).

PRIMJER 2:
Nacrtati vektor zadat koordinatama x  (1, 2, 4,8,16) i y  (1, 2, 4,8,16) .

>> x=[1,2,4,8,16]; y=[-1,2,-4,8,16]; plot(x,y)


16

14

12

10

-2

-4
0 2 4 6 8 10 12 14 16

Naredba plot se koristi i za crtanje funkcija jedne promjenljive.

PRIMJER 3:

Nacrtati funkciju y  2e x u domenu x �[ 1,1] sa korakom 0.1 .

>> x=-1:0.1:1; y=2*exp(x); plot(x,y)


5.5

4.5

3.5

2.5

1.5

0.5
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

PRIMJER 4:
U istom koordinatnom sistemu nacrtati funkcije y  2 x i y  2e x , u domenu
x �[ 1,1] sa korakom 0.1

Strana 40
>> x=-1:0.1:1; y1=2*x ;y2=2*exp(x); plot(x,y1,x,y2)
6

-1

-2
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

PRIMJER 5:

U prethodnom PRIMJERU uvedimo oznake za vrstu i boju linije.

>> x=-1:0.1:1;y1=2*x; y2=2*exp(x);


>> plot(x,y2,'g',x,y1,'m+')
6

-1

-2
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Za crtanje grafika funkcija možemo da koristimo naredbu fplot(f,xmin,xmax).

Funkcija koju crtamo ima oblik f  x  , gde je x vektor čiji je prvi element
xmin, a poslednji element xmax.

U naredbi fplot funkcija se piše pod navodnicima ' f '.

Strana 41
PRIMJER 6:
Nacrtati funkciju y  x 2  9 u domenu x �[ 3,3] .

>> y='x^2-9'; fplot(y,[-3,3])


0

-1

-2

-3

-4

-5

-6

-7

-8

-9
-3 -2 -1 0 1 2 3

6.2. Označavanje grafika i osa


MATLAB nudi mogućnosti označavanja osa, pisanja različitog teksta i razne
druge mogućnosti.

Oznaka Opis
title naziv grafika
xlabel naziv x ose
ylabel naziv y ose
text naziv teksta na grafiku
gtext tekst na poziciji označenoj mišem
grid crtanje linija mreže

Tekst u prethodnim naredbama piše se u zagradi pod navodnicima. Naredba


hold on zadržava sliku na ekranu. Suprotna njoj je naredba hold off . U naredbi gtext
korisnik naknadno sam određuje mišem mjesto na koje želi da smjesti tekst.

PRIMJER 9:
Nacrtati funkciju y  sin x na domenu x �[ 2 , 2 ] i korišenjem naredbi iz
tabele obilježiti sliku.

>> y='sin(x)';fplot(y,[-2*pi,2*pi])
>> hold on
>> grid
>> title('sinusna funkcija')
>> xlabel('x osa')
>> ylabel('y osa')
>> gtext('max')

Strana 42
sinusna funkcija
1
max
0.8

0.6

0.4

0.2
y osa
0

-0.2

-0.4

-0.6

-0.8

-1
-6 -4 -2 0 2 4 6
x osa

Naredba subplot(m, n, p) formira više grafika na ekranu. Ekran se dijeli na


m �n dijelova, a grafik se crta u p -tom dijelu ekrana.

PRIMJER 11:
Korišćenjem naredbe subplot, nacrtati funkcije: yx x �[ 1,1] ,
y  xe x
x �[ 0,1] , yx 2
x �[ 2, 2] , y  cos x x �[  ,  ] .

>> x1=-1:1:1; y1=x1;


>> x2=0:0.5:1; y2=x2.*exp(x2);
>> x3=-2:.1:2; y3=x3.^2;
>> x4=-pi:pi/16:pi; y4=cos(x4);
>> subplot(2,2,1),plot(x1,y1)
>> subplot(2,2,2),plot(x2,y2)
>> subplot(2,2,3),plot(x3,y3)
>> subplot(2,2,4),plot(x4,y4)
1 3

0.5
2
0
1
-0.5

-1 0
-1 -0.5 0 0.5 1 0 0.5 1

4 1

3 0.5

2 0

1 -0.5

0 -1
-2 -1 0 1 2 -4 -2 0 2 4

Strana 43
Skaliranje osa

Ose x i y automatski se postavljaju na osnovu minimalne i maksimalne


vrijednosti koordinata.
Oznaka Opis
axis('equal') Provjerava se da li je priraštaj po osama isti
axis(xmin,xmax,ymin,ymax) Zadaju se granice u kojima će biti nacrtan grafik
axis('normal') Vraćanje na prvobitne dimenzije grafika
axis('axis') Vraćanje na prvobitno skaliranje
axis Dobija se informacija o trenutnim dimenzijama

PRIMJER 12:
Nacrtati funkciju y  sin x za -2 �x �2 , a zatim postaviti da opseg po x

osi bude - �x � , a po y osi bude 2, 2 .

>> x=-2*pi:pi/16:2*pi; y=sin(x);plot(x,y),grid


1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-8 -6 -4 -2 0 2 4 6 8

>> axis([-pi,pi,-2,2])
2

1.5

0.5

-0.5

-1

-1.5

-2
-3 -2 -1 0 1 2 3

VJEŽBA:
1. Nacrtati funkcije y  sin x i y  cos x u opsegu od 0, 2 .

2. Nacrtati krug sa centrom u tački (2,2) i poluprečnikom 4.

Strana 44
3. Nacrtati funkciju y  x 2  5 x  6 u proizvoljnom opsegu i opisati je tekstom.

4. Korišćenjem naredbe subplot, nacrtati funkcije y  x , n �[ 1, 6] .


n

6.3. Specijalni oblici 2D grafičkih prikaza


Prikazaćemo i dvije specijalne grafičke naredbe za 2D prikaz.
Prvi primjer prikazuje funkcije dvije varijable kao konturni dijagram (naredba
contour), što je zapravo prikaz izo-linija matrice Z.
Funkcija dvije varijable Z u ovom primjeru generisana je demo naredbom peaks.
[X,Y,Z] = peaks;
contour(X,Y,Z,25)
axis([-2 2 -2 2])

Na narednoj slici je prikazan konturni dijagram funkcije dvije varijable.

1.5

0.5

-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Sl. Konturni dijagram funkcije dvije varijable

Drugi primjer prikazuje vektor u tačkama 2D prostora.


Naredbom quiver(X,Y,U,V) u svakoj x-y koordinati (matrice X i Y) definisan je vektor
sa svojim x i y koordinatama (matrice U i V).
[U,V] = gradient(Z,.25);
hold on
quiver(X,Y,U,V)

Strana 45
Na narednoj slici prikazan je istovremeno konturni dijagram funkcije s dvije varijable
s vektorskim prikazom gradijenta funkcije.

1.5

0.5

-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Slika Konturni dijagram funkcije s dvije varijable s vektorskim


prikazom gradijenta funkcije

6.4. 3D grafika

Osnovna naredba koju koristimo


za prikaz 3D grafike je plot3.

>>t = 0:pi/50:10*pi;
>>plot3(sin(t),cos(t),t)
>>grid on
>>axis square

Druga naredba koja se koristi za


prikaz 3D slike je naredba
"mesh(x,y,z)". Pri tom, x i y su
vektori dimenzija n, odnosno m,
a z je matrica dimenzija nxm.
Ako izostavimo x i y, u tom će
slučaju odgovarajućim
vrijednostima na x, odnosno y
osi biti pridružena odgovarajuća
vrijednost matrice z.

Strana 46
Konkretno:

>>a=1:10;
>>b=11:20;
>>c=21:30;
>>d=linspace(25,30,10);
>>e=linspace(35,40,10);
>>m=[a;b;c;d;e;e;d;c;b;a];
>>mesh(m)

rezultira prikazom

Takođe je moguće oblike prikazati s ispunjenim površinama >>surf(m), što rezultira


prikazom:

Strana 47
Zadatak za vježbu

Napisati naredbu u MATLAB-u koja računa traženu funkciju, a zatim nacrtati graf
funkcije za zadane intervale varijable x sa korakom 0.01.

1. f(x)=(x+1).^(0.5) , x=[1,100]
2. f(x)=(x+1).^(1/3) , x=[1,100]
3. f(x)=sqrt(1./(4+x.^2)) , x=[1,10]
4. f(x)=sqrt(x.^2-2) , x=[1.5,10]
5. f(x)=(-(cos(x))./(3*((sin(x)).^3))+4/3*1./tan(x) , x=[1,3], x=[6,7], x=[10,20],
x=[1,100]

Strana 48
7. Polinomi

MATLAB-om je vrlo jednostavno pronaći nultačke polinoma, skicirati njegov graf ili
odrediti vrijednost za proizvoljan argument.
Ako želimo naći nultačke polinoma f(x)=3x4-2x3+x2-5x-7, skicirati njegov graf na
području –10<x<10, te izračunati f(3+2i) pišemo:

>>f=[3 -2 1 -5 -7]

f=

3 -2 1 -5 -7

Funkcija roots traži nultačke polinoma:

>>roots(f)

ans =

1.6293
-0.0781 + 1.3303i
-0.0781 - 1.3303i
-0.8064

f(3+2i) lako izračunamo koristeći f-ju polyval:

>>polyval(f,3+2*i)

ans =
-3.5600e+002 +2.7000e+002i

Skiciranje polinoma u rasponu –10<x<10 vršimo na sljedeći način:


>>x=-10:0.1:10;
>>plot(x,polyval(f,x))

Strana 49
7.1. Numeričko rješavanje sistema linearnih jednačina

MATLAB značajno olakšava rješavanje sistema linearnih jednačina.


Npr. potrebno je riješiti ovakav sistem linearnih jednačina:

4x1+9x2+2x3+4x4+6x5=6
3x1+9x2+6x3+7x4+2x5=3
8x1+7x2+3x3+2x4+8x5=8
4x2+9x3+4x4+6x5=8
7x1+4x2+7x3+9x4+1x5=5

Koeficijente uz nepoznate unesemo u matricu A, dok članove s desne strane unesemo


u vektor B. Račun se svodi na AX=B, što se formalno rješava jednostavnim
dijeljenjem X=A\B.

>>A=[4 9 2 4 6
39672
87328
04946
7 4 7 9 1];

>>B=[6 3 8 8 5]'

B=

6
3
8
8
5

>>X=A\B

X=

-0.0000
-0.4000
0
0.6000
1.2000

Dakle, vrijednosti nepoznatih su:

x1=0
x2=-0.4
x3=0
x4=0.6
x5=1.2

Strana 50
PRIMJER 1:
Odrediti nule polinoma x 2  5 x  6  0 .

>> p=[1 -5 6];


>> r=roots(p)

r=

3.0000
2.0000

Sa druge strane, kada su poznata rješenja polinoma, pomoću naredbe poly mogu
se odrediti koeficijenti polinoma, odnosno napisati polinom.
Naredba ima oblik
p=poly (r), gdje je r vektor koji sadrži rješenja polinoma, a p vektor koji
sadrži koeficijente polinoma.

PRIMJER 2:

Odrediti polinom čija su rješenja x  2 i x  3 .

>> r=[2 3];


>> p=poly(r)

p=
1 -5 6

Dakle, traženi polinom je x 2  5 x  6 .

7.1.1. Operacije sa polinomima


Polinomi se sabiraju i oduzimaju tako što se saberu, odnosno oduzmu
koeficijenti polinoma (odgovarajućih monoma).

PRIMJER 3:
Sabrati polinome p1  x   3x  2 x  4 x  6 i p2  x   x  2 x  7 x  3x  1 .
3 2 4 3 2

>> p1=[3 -2 -4 6];


>> p2=[1 2 -7 -3 1];
>> p=[0 p1]+p2

p=
1 5 -9 -7 7

Kako polinomi nisu istog stepena, kraći vektor se mora dopuniti nulama da bi
bio iste veličine kao duži vektor.
Polinomi se množe pomoću naredbe conv.

Strana 51
Naredba ima oblik:

c=conv (a,b), gdje je c vektor koeficijenata polinoma rezultata, a a i b su


vektori koeficijenta polinoma koji se množe.

PRIMJER4: Pomnožiti polinome p1 i p2 .


>> c=conv(p1,p2)

c=
3 4 -29 3 49 -32 -22 6
Dakle, rješenje je polinom 3 x 7  4 x 6  29 x5  3 x 4  49 x 3  32 x 2  22 x  6

Polinomi se dijele pomoću naredbe deconv.

Naredba ima oblik

[q,r]=deconv (a,b), gdje je q vektor koeficijenata polinoma količnika, r vektor


koeficijenata polinoma ostatka, a je vektor koeficijenta polinoma brojioca, b je
vektor koeficijenta polinoma imenioca.

PRIMJER 5: Podijeliti polinome p1  x   2 x  9 x  7 x  6 i p2  x   x  3 .


3 2

>> p1=[2 9 7 -6];


>> p2=[1 3];
>> [q r]=deconv(p1,p2)
q=
2 3 -2
r=
0 0 0 0
Dobijamo da je količnik polinom 2 x 2  3x  2 , bez ostatka.

7.1.2. Rješavanje jednačina sa jednom promjenljivom


Jednačina sa jednom promjenljivom ima oblik f  x   0 .
Za izračunavanje nula funkcije koristi se naredba fzero.

Naredba ima oblik

x=fzero('funkcija',x0)

x je skalarna vrijednost

Funkcija se unosi u obliku znakovnog niza ( string ). Funkcija se prethodno


može definisati u funkcijskom fajlu , a ime funkcije se zadaje u obliku znakovnog
niza.
x0 je vrijednost promjenjive x u blizini mjesta gde funkcija presijeca x osu.

Strana 52
x0 može biti skalar čija je vrijednost bliska tački preseka funkcije sa x osom ili
vektor sa dva elementa čije su vrijednosti tačke na suprotnim stranama rješenja. Ako
ima više rješenja, svako se izračunava za sebe.
Početno rješenje x0 se može odrediti grafičkim putem.
Funkcija fzero pronalazi samo rješenja u kojima funkcija presijeca x osu.

PRIMJER 6:
Naći rješenja jednačine xe  x  0.2

Približna rješenja određujemo grafički.

>> fplot('x*exp(-x)-0.2',[0 8]);grid

Sa slike vidimo da su približna rješenja 0, 7 i 2,8 .

>> x1=fzero('x*exp(-x)-0.2',0.7)

x1 =
0.2592

>> x1=fzero('x*exp(-x)-0.2',2.8)

x1 =
2.5426

7.1.3. Rješavanje sistema linearnih jednačina


Ako je determinanta sistema od n linearnih algebarskih jednačina sa n
promjenljivih različita od nule, tada taj sistem ima jedinstveno rješenje dato formulom
D
x j  j , ( D �0, j  1, 2,..., n) ,
D

Strana 53
gdje je D determinanta tog sistema, a D j determinanta dobijena tako što su u

D koeficijenti uz x j zamijenjeni, redom, slobodnim članovima b j .

Navedene formule su poznate Kramerove formule.

PRIMJER 7:
Kreirati fajl Cramer za rješavanje sistema linearnih algebarskih jednačina
koristeći Kramerovo pravilo.

% Novi fajl pod imenom Cramer


%Rjesavanje sistema AX=B Cramerovim pravilom
function X=Cramer(A,B)
[m,n]=size(A);
if m ~= n,
error('Matrica nije kvadratna'),
end
if det(A)==0,
error('Matrica je singularna'),
end
for j=1:n,
C=A; C(:,j)=B; X(j)=det(C)/det(A);
end
X=X';

PRIMJER 8:

Koristeći kreirani fajl Cramer, riješiti sistem jednačina

2x  4 y  z  0
x  2 y  2z  6
3x  6 y 6

>> A=[2 –4 –1 ; –1 2 2 ; 3 6 0];


>> B=[0 ; 6 ; 6];
>> Cramer(A , B)
ans =
2
0
4

Strana 54
PRIMJER 9:
Koristeći kreirani fajl Cramer riješiti sistem jednačina

2 x  3 y  z  1
x  3y  2z  1 .
x  6y  z  3

>> A1=[–2 3 1;1 3 –2;1 –6 1]


A1 =
-2 3 1
1 3 -2
1 -6 1

>> B1=[1;1;3]
B1 =
1
1
3
Cramer(A1,B1)
??? Error using ==> cramer
Matrica je singularna

PRIMJER 10:
Rješiti sistem jednačina matričnom metodom
2 x  3 y  z  1
x  3y  2z  1 .
x  6y  z  3
>> A=[-2 3 1;1 3 -2;1 -6 -1]
A=
-2 3 1
1 3 -2
1 -6 -1

>> B=[1;1;3]

B=
1
1
3
>> X=inv(A)*B
X=
-2.5000
-0.5000
-2.5000

Strana 55
PRIMJER 11:
Riješiti sistem jednačina matričnom metodom i koristeći kreirani fajl Cramer.
Uporediti ovako dobijena rješenja.

2 x  3 y  z  11
3 x  5 y  2 z  19
x  2 y  3 z  14

>> M=[2, 3, 1 ; 3, 5, 2 ; 1, 2, 3]
M=
2 3 1
3 5 2
1 2 3
>> N=[11 ; 19 ; 14]
N=
11
19
14

>> X1=inv(M)*N
X1 =
1.0000
2.0000
3.0000
>> X2=Cramer(M,N)
X2 =
1
2
3

Zadaci

1) Naći nultačke polinoma, izračunati vrijednost za traženi x i skicirati polinom na


zadanom intervalu:

a. f(x)=2x2-4x-5, f(4+4i), [0,5]


b. f(x)=3x3+2x2-x, f(-5), [-1000,1000]
c. f(x)=5x4+x2+x+2, f(-1-i), [-1,1]

Strana 56
2) Riješiti sljedeće sisteme linearnih jednačina:

Sistem 1: Sistem 2:
3x1+2x2+8x3=5 8x1-3x3+5x4=2
x1+9x2+6x3=1 x2+7x4=3
x1-x2+3x3=2 4x1+12x2-2x3+2x4=-5
2x1-3x2+4x3=5

3) Odrediti koeficijente polinoma y   x  1  x  2   x  3 .

4) Riješiti jednačinu x 4  2 x 2  1  0 .

5) Riješiti jednačinu ax 2  5bx  2  0 .

6) Riješiti sistem jednačina 2 x 2  2 x  y  1  0 i y  2 x  1  0 .

7) Riješiti sistem jednačina matričnom metodom i koristeći kreirani fajl Cramer.


Uporediti ovako dobijena rješenja.

2 x  y  3z  9
3 x  2 y  4 z  11 .
x yz  2

8. Programiranje u MATLAB-u

Strana 57
Iako je osnovni način rada MATLAB-a interaktivan rad, za rješavanje složenijih
problema potrebno je napisati odgovarajuće MATLAB programe. MATLAB programi
se smještaju u tekstualne ili binarne datoteke. Tekstualne datoteke (sa ekstenzijom .m)
su zapravo ASCII datoteke sa tekstom programa. Binarne datoteke (sa ekstenzijom
.mat) su datoteke zapisane u posebnom MATLAB-ovom formatu koji omogućuje
razmjenu datoteka između različitih računarskih platformi.

8.1. MATLAB kao programski jezik


Slično kao u FORTRAN-u i drugim programskim jezicima, MATLAB naredbe se
izvršavaju onim redoslijedom kojim su napisane.
Redoslijed izvršavanja naredbi se može promijeniti, ukoliko to zahtijeva algoritam
rješenja nekog zadatka, korišćenjem funkcija za kontrolu toka programa.
Kombinacijom ovih funkcija formiraju se programske konstrukcije poznate kao
ciklusi.
MATLAB karakterišu tri tipa ciklusa: if, for i while.
Funkcija if u kombinaciji sa else i elseif omogućava konstruisanje više različitih
formi if ciklusa.

Tabela: Kontrola toka programa

Funkcija Opis
break zaustavljanje izvršenja (for, while)
else koristi se sa funkcijom if
elseif koristi se sa funkcijom if
end kraj petlje (for, while)
error pokazivanje poruke o grešci
for ponavljanje bloka naredbi definisani broj puta
if označavanje uslovnog izvršenja naredbi
return povratak na pozivnu funkciju
while ponavljanje izvršavanja naredbi neodređen broj puta (sve dok...)

8.2. Kontrola toka MATLAB programa

MATLAB ima više naredbi koje omogućavaju korisniku da upravlja tokom programa.
To su: if, for, while, else, break, error, while...
Posebno će se prikazati tri uobičajene strukture za kontrolu toka programa: for, if i
while.

Naredba for ima sljedeći opšti oblik:

for brojac = vektor


naredbe

end

Strana 58
pri čemu vektor može biti bilo koji vektor definisan u MATLAB-u. Promjenljiva
brojac će u svakoj iteraciji petlje kao vrijednost primati odgovarajući element vektora.

Naredba if ima sljedeći opšti oblik:


Naredba if se koristi za uslovno izvršavanje programa.

Oblik if naredbe je:


if izraz
naredbe
end
ili
if izraz
naredba 1
else
naredba 2
end
ili
if izraz 1
naredba 1
elseif izraz 2
naredba 2
else
naredba 3
end
gdje su izraz 1,izraz 2,... logički izrazi.

Ako uslovni izraz u iskazu ima vrijednost tačno - true (1), program izvršava
komande koje neposredno slede sve do komande end. Ako je uslovni izraz netačan –
false (0 ) , program preskače grupu komandi između if i end i nastavlja da izvršava
komande iza end.
Vrijednost nezavisno promjenljive može da se unese i korišćenjem naredbe
input(‘tekst’).
x=input ('unesi promenljivu x=');

y=input ('unesi promenljivu y=');

Za ispisivanje izlaznih rezultata koristi se naredba disp(‘tekst’).

PRIMJER 1: Unijeti godine starosti, i ako je broj godina manji od 21, na izlazu
ispisati 'zabranjen alkohol', a u suprotnom izaći iz programa.

Strana 59
Formirati m-file: ab
% primjer jednograne if naredbe
function y=ab
godine=input('god=');
if godine <21 disp('zabranjen alkohol');
end

PRIMJER 2: Unijeti godine starosti, i ako je broj godina manji od 21, ispisati na
izlazu 'zabranjen alkohol', a u suprotnom ispisati 'dozvoljen alkohol'.

Formirati m-file: ab2


% primjer dvograne if naredbe
function y=ab2
godine =input ('godine su:');
if godine <21 disp( 'zabranjen alkohol' )
else disp( 'dozvoljen alkohol' )
end

Strana 60
PRIMJER 3: Za unaprijed zadatu vrijednost promjenljive x izračunati vrijednost
izraza y , tako da, ako je x < 2 , slijedi da je y  2 x , za x  2 je y  2 , inače je
y  2x .
x=input('x=')
if x<2
y=-2*x;
else if x==2
y=2;
else y=2*x;
disp(y)
end
end
Napomena: Treba obratiti pažnju da se u izrazu x= =2 koristi oznaka = = , a ne
=, zato što se u ovom izrazu koristi logički operator za upoređivanje veličina.

PRIMJER 4: Za unijeta dva broja ispisati veći?


broj1=input('prvi broj ');
broj2=input('drugi broj ');
if(broj1>=broj2) disp(broj2);
else disp(broj2);
end

PRIMJER 5: Za unijeta tri broja ispisati najveći:


broj1=input('prvi broj ');
broj2=input('drugi broj ');
broj3=input('treći broj ');
if(broj1>=broj2)
if(broj1>=broj3) disp(broj1);
end
else if (broj2>=broj3) disp(broj2);
else disp(broj3);
end
end

PRIMJER 6: Za unijeti broj n ispisati da li je on paran ili neparan.

a=input('unesi a:');

Strana 61
if rem(a,2)==0
disp(‘broj je paran’)
else
disp('broj je neparan’)
end

PRIMJER 7: Formirati script u kome su dva vektora-vrste X i Y, sa po pet


elemenata. Odrediti skalarni proizvod tih vektora: S = XY' i u zavisnosti od
vrijednosti S definisati promjenljivu P prema formulama: P= 1 za S>0 ; P= 0 za S=0
;P=-1 za S<0;
X=input('vektor X:');
Y=input('vektor Y:');
S=X*Y’
disp('skalarni proizvod:')
disp(S)
if S>0
P=1
else if S==0
P=0
else
P=-l
end
end

Strana 62
PRIMJER 8: Formirati MATLAB skript u kome će biti obavljene sljedeće operacije:
(l) Unošenje preko tastature: rednog broja mjeseca i indikatora 1 ako je godina
prestupna ili indikatora 0 ako nije.
(2) Određivanje broja dana u datom mjesecu.
(3) Prikazati rezultat na ekranu.
Predvidjeti prikaz teksta 'podaci su neispravni’, ako su podaci koji su zadati pogrešni
(tj. ako je redni broj mjeseca pogrešno zadat).
mjesec=input('unesi mjesec:’);
godina=input('unesi indikator za prestupnu godinu:');
switch mjesec
case{l,3,5,7,8,10,12}
dani=31
case{4,6,9,11}
dani=30
case 2
if godina
dani=29
else
dani=28
end
otherwise
disp(‘podaci su neispravni’)
disp (mjesec)
disp (godina)
end

For petlja omogućava ponavljanje dijela programa zadati broj puta. Završava se
komandom end.
Oblik petlje:

for promjenljiva=izraz
naredbe
end

PRIMJER 9: Za sve vrijednosti promjenljive x �{ 1, 2,3, 4,5} izračunati vrijednost


funkcije y  sin 2 x .

Strana 63
for x=1:5
y (x)=sin(2*x);
end

PRIMJER 10: Napisati program koji računa matricu A čiji se elementi izračunavaju
1
po zakonu a  i, j   , a koja ima 4 vrste i 3 kolone.
2i  j  2
for i=1:4
for j=1:3
A(i,j)=1/(2*i+j-2);
end
end
A
U ovom PRIMJERU korišćena je dupla for petlja.

PRIMJER 11: Napisati program koji računa sumu svih brojeva do unijetog broja?
function y=unos
x=input(‘Unesi broj ’);
s=0;
for i=1:x
s=s+i;
end
disp(s);

NAPOMENA: Napisati program proizvod svih brojeva do unijetog broja.

Strana 64
PRIMJER 12: Napisati program koji računa 20. član fibonačijevog niza.

function fibo=niz(pr1)
pr=0;
pr1=1;
for i=1:18
s=pr+pr1;
pr=pr1;
pr1=s;
end
format long,s;
disp(s);

Naredba while ima sljedeći opšti oblik:

while izraz
naredbe
end

gdje je izraz logički izraz.

PRIMJER 13: Izračunavati vrijednosti promjenljive x , po zakonu x  2 x , dok god


je x �15 .
x=1;
while x <=15
x=2*x;
end
disp(x);
Dio programa između while i end izvršava se sve dok je izraz koji slijedi posle while
istinit.

 1
n

1 1 1
PRIMJER 14: Izračunati zbir reda s  � 2
 1     K sa tačnošću
n 1 n 4 9 16
4
10 .
s=0;
n=1;
while abs((-1)^n/n^2)>10^(-4)

Strana 65
s=s+(-1)^n/n^2;
n=n+1;
end
disp(s);

PRIMJER 15: Napisati kôd koji za unijeti broj n ispisuje da li je on prost ili nije?
n=input('Unesi broj n= ');
brojac=0;
for i=2:n-1
if(rem(n,i)==0)brojac=brojac+1;
end
end
if(brojac==0)disp('Broj je prost ');
else disp('Broj nije prost ');
end

PRIMJER 16: Napisati kôd koji za unijeti broj n ispisuje sve brojeve do n koji su
djeljivi sa 2 ili sa 3?
n=input('broj n= ');
for i=1:n;
if(rem(i,2)==0 | rem(i,3)==0) disp(i);
end
end

PRIMJER 17: Napisati kôd koji za unijeti broj n ispisuje proste činioce tog broja.
Primjer broj 36 ima proste činioce 2,2,3,3.
function zaok=yy
n=input('broj n= ');
i=2;
while n>1
if rem(n,i)==0
n=fix(n/i);
disp(i);
else
i=i+1;
end
end

Strana 66
PRIMJER 18: Napisati kôd koji unosi niz brojeva a(n) i zatim ga sortirati u
opadajući.
function niz=zzz
n=input('broj n= ');
for i=1:n {Omogućuje unos “element po element”
(nakon unosa prvog elementa pritisne se
a(i)=input(' ');
Enter, pa se unosi drugi element, ...}
end
for i=1:n-1
for j=i+1:n
if(a(j)>a(i))
c=a(i);
a(i)=a(j);
a(j)=c;
end
end
end
disp(a);

PRIMJER 19: Napisati kôd koji unosi niz brojeva a(n) i izdvaja one koji su parni i
smješta u novi niz b.
function par=parni
n=input('broj n= ');
for i=1:n
a(i)=input(' ');
end
c=1;
for i=1:n
if rem(a(i),2)==0
b(c)=a(i);
c=c+1;
end
end
disp(b);

Strana 67
PRIMJER 20: Dati su realni brojevi a i ε, kao i broj x u dvostrukoj tačnosti (|x| < l).
Približno odrediti vrijednost f koja je data sljedećom formulom:

a1 a a
f  1 x  2 x 2  3 x 3  ... gdje su:
1! 2! 3!

1 1 1 1 1 1
a1  , a2  (  1), a3  (  1)(  2),... Vrijednost f odrediti u dvostrukoj
     

tačnosti. Proračun prekinuti kada posljednji član reda bude po apsolutnoj vrijednosti
manji od broja ε. Na izlazu prikazati date podatke i dobivenu vrijednost f. Program
izvršiti sa sljedećim podacima: α=3., x=0.2, ε=1.10-5

alfa=input('alfa=');
x=input('x=');
eps=input('epsilon:');
c=l.;
f=l.;
a=l/alfa;
i=1.;
fk=1.;
while abs(c)>=eps
fk=fk*i;
c=a*x^i/fk;
f=f+c;
a=a*(l/alfa-i);
i=i+1;
end
alfa
eps
x
f
i

Strana 68
9. Vrste MATLAB datoteka
MATLAB aplikacija se sastoji od M i MAT datoteka.
MAT datoteke sadrže binarne podatke i u imenu imaju nastavak mat.
M datoteke su ASCII datoteke koje sadrže običan tekst i u imenu imaju nastavak m.
Oba tipa datoteka se mogu prenositi između različitih računarskih sistema i
arhitektura.
M datoteke se mogu prenositi između različitih računara zato što sadrže mašinsku
signaturu u zaglavlju datoteke. Kada se datoteka pozove, MATLAB provjerava
signaturu, i ako ona označava da se radi o stranoj datoteci, izvodi neophodnu
konverziju. Prenošenje datoteka između različitih mašinskih arhitektura omogućavaju
komunikacijski programi.
MAT datoteke omogućuju prenošenje podataka između različitih platformi, kao i
prebacivanje MATLAB podataka u druge aplikacije i obrnuto. Direktorijum
matlab\extern sadrži funkcije koje omogućavaju učitavanje i ispisivanje MAT
datoteka korišćenjem programa napisanih u FORTRAN-u ili C-u, čime se
pojednostavljuje korišćenje MAT datoteka u drugim aplikacijama.
Treća vrsta datoteka koja je posebno značajna sa stanovišta proširenja opsega
mogućnosti MATLAB-a su MEX datoteke pod kojima se podrazumijevaju C i
FORTRAN programi koji se mogu pozvati iz MATLAB-a. Ponašaju se isto kao M
datoteke ili ugrađene funkcije, tako da ih MATLAB može automatski pozvati i
izvršiti.
MEX datoteke su zapravo dinamički povezani potprogrami napisani u C ili
FORTRAN izvornom kodu. MATLAB za Windows podržava dva formata MEX
datoteka: REX i DLL format. MEX datoteke imaju nastavak .mex za REX format
i .dll za DLL format. Ukoliko u jednom direktoriju postoje datoteke sa istim imenom
koje imaju nastavke .m, .mex i .dll, prednost imaju .mex nad .dll, odnosno .dll nad .m.

M-datoteke
M-datoteka se formira tekst-editorom i smješta u odgovarajući direktorijum. Program
koji se nalazi u M-datoteci poziva se navođenjem imena datoteke u komandnoj liniji
MATLAB-a. MATLAB će datoteku potražiti u svom tekućem direktorijumu i u
direktorijumima koji su navedeni kao matlabpath u okviru konfiguracione datoteke
matlabrc.m. Podrazumijevani tekući direktorijum MATLAB-a je direktorijum u kome
se nalazi datoteka matlab.exe (najčešće je to \matlab\bin). Tekući direktorijum se
može promijeniti komandom cd, koja ima sintaksu identičnu odgovarajućoj DOS
komandi.
Postoje dvije vrste M-datoteka: komandne (skript) i funkcijske. Komandna datoteka
sadrži niz MATLAB izraza i komandi. U toku izvršavanja skripta sve prethodno
definisane promjenljive su vidljive i imaju odgovarajuće vrijednosti. Promjenljive
koje su definisane u okviru skripta vidljive su i nakon izvršavanja skripta.
Funkcijske datoteke su namijenjene za definisanje novih funkcija od strane korisnika.
Nakon formiranja, funkcije definisane u odgovarajućim funkcijskim datotekama
koriste se jednako kao i ugrađene funkcije MATLAB-a.

Funkcijska M-datoteka mora da u prvoj liniji sadrži izraz sljedećeg oblika:

function [y1, y2, …] = ime_funkcije (x1, x2, …)

Strana 69
gdje y1,y2,… predstavljaju rezultate izvršavanja funkcije, ime_funkcije je naziv
MATLAB funkcije koja se definiše, a x1, x2,… su ulazni parametri funkcije.
Promjenljive koje su definisane prije poziva funkcije nisu vidljive unutar same
funkcije. Slično tome, promjenljive koje se definišu unutar funkcije nisu vidljive
izvan nje. Ukoliko je potrebno da neke promjenljive budu vidljive i unutar funkcije,
one moraju biti proglašene globalnim pomoću naredbe global. Naziv funkcije mora
biti jednak nazivu datoteke u kojoj je smještena funkcija.
Korisničke funkcije je moguće definisati i u okviru REX ili DLL datoteka (u verziji
MATLAB-a za Windows operativne sisteme).
Dodatni skupovi funkcija organizovani u toolbox-ove se, nakon instaliranja, nalaze u
nekom od poddirektorijuma \matlab\toolbox direktorijuma. Da bi stalno bila vidljiva,
promjenljivu matlabpath definisanu u matlabrc.m datoteci treba dopuniti
odgovarajućim vrijednostima. Tu se nalaze primjeri M, MAT, REX, i DLL funkcijskih
datoteka.
MATLAB posjeduje i skup komandi namijenjen debagiranju komandnih i funkcijskih
datoteka.
Dosadašnju komunikaciju s MATLAB-om izvodili smo u prozoru programa gdje bi
MATLAB odmah po upisivanju naredbi vraćao rezultat. Ovaj način zgodan je
kada radimo nešto kratko i nešto što nije potrebno ponavljati, odnosno računati
više puta. Osim ovakvog načina rada, MATLAB omogućava da mu se slijed
naredbi zada u obliku tekstualne datoteke (tzv. m-file zbog ekstenzije .m).
Pozivanje imena te datoteke u komandnom prozoru MATLAB-a pokreće
izvršavanje slijeda naredbi pohranjenih u njoj.

Npr., u nekom tekst editoru (Notepad ili MATLAB editor) napišemo sljedeće:

clear
A=fix(rand(3)*10)
B=fix(rand(3)*10)
Whos

Datoteku snimimo pod imenom test.m. Ukoliko sada u MATLAB-u napišemo:

>>test

MATLAB će potražiti m-file sa navedenim imenom i izvršiti naredbe zapisane u


njemu, što će rezultirati brisanjem svih postojećih varijabli (clear), stvaranjem dviju
slučajnih matrica A i B, te ispisivanjem trenutnih varijabli sa prikazom potrošnje
memorije svake varijable (whos). Imena m-datoteka ne smiju biti ista kao i imena
standardnih naredbi ili funkcija, te se one moraju snimiti u neki od foldera koji
MATLAB pregledava prilikom izvođenja (path).
A=
3 7 0
6 0 0
1 2 8
B=
6 0 7
Strana 70
3 4 7
9 3 1
Name Size Bytes Class Attributes
A 3x3 72 double
B 3x3 72 double

Funkcijski M-file, osim običnog izvođenja slijeda naredbi m-datoteke, mogu se


programirati tako da izvršavaju neke funkcije.

Npr., sljedeći m-file računa površinu trougla stranica a, b, c, po formuli:


P=(s*(s-a)*(s-b)*(s-c))^0.5, s=(a+b+c)/2.

function P=povrsina(a,b,c)

s=(a+b+c)/2;
P=sqrt(s*(s-a)*(s-b)*(s-c));

Ukoliko ovaj m-file snimimo pod imenom povrsina.m, pozivamo ga u MATLAB-


u na sljedeći način:

>> povrsina(3,4,5)

ans =
6

ili ukoliko rezultat želimo pridružiti nekoj varijabli:

» S=povrsina(3,4,5)

S=
6

Naredbe input i disp

% m- file izbor.m
r=input('izaberite \n a \n b ili \n c \n');
if r=='a'
disp('izabrali ste a');
elseif r=='b'
disp('izabrali ste b');
elseif r=='c'
disp('izabrali ste c');
else
disp('pogresan izbor');
end
Strana 71
>> izbor
izaberite
a
b ili
c
'b'
izabrali ste b
>>

PRIMJER 1:
Odrediti zbir kvadrata prvih deset prirodnih brojeva i sačuvati fajl pod imenom zbir.

s=0;
for i=1:10
s=s+i^2;
end
disp(s);
Svaki put kada nam je potreban ovaj rezultat, dovoljno je samo otkucati riječ
zbir, pod kojom smo upamtili ovaj fajl.
Ovako sačuvani fajl je otvoren prema podacima koje smo unosili tokom rada,
tako da može da se dogodi greška. Zato je bolje formirati funkcijske fajlove koji su
zatvoreni sistemi i zaštićeni od nepoželjnih podataka.
Funkcijski fajl omogućava korisniku MATLAB-a da stvara nove funkcije.
Funkcijski fajlovi moraju u prvoj liniji da sadrže naredbu oblika:

function [y1, y2,…] = ime funkcije (x1, x2,…)

function ime funkcije (x1, x2,…)

function [y1, y2,…] = ime funkcije

Ulazni argumenti su x1 , x2 ,L , izlazni argumenti y1 , y2 ,L su funkcije, koje


se dobijaju kada se funkcija pozove.
Poslije ovoga izraza slijedi niz MATLAB komandi i izraza.

PRIMJER 2:
Formirati funkcijski fajl u kome se definiše nova funkcija f  x   e  sin x
x

pod imenom fi.


% funkcijski fajl
% ime nove funkcije je fi
function y=fi(x)
y=exp(x)+sin(x);

Strana 72
Ako želimo da izračunamo vrijednost ove funkcije, dovoljno je da pozovemo

funkciju fi i definišemo vrijednost promjenljive, na PRIMJER x  .
2
>> fi(pi/2)

PRIMJER 3:
Formirati funkcijski fajl u kome se definiše nova funkcija f  x   e  sin x
x

pod imenom fa, a da se vrijednost nezavisno promjenljive unese korišćenjem naredbe


input (‘tekst‘).
% ime nove funkcije je fa
function y=fa
x=input('unesi promjenljivu x=')
y=exp(x)+sin(x);

Pozivanjem funkcije fa i odgovorom na postavljeno pitanje dobićemo odgovor:


>> fa
unesi promjenljivu x=3
x= 3
ans = 20.2267

PRIMJER 4: Formirati funkcijski fajl pod imenom ime, kojim se određuje broj
slova u nekom imenu.
% funkcijski fajl ime kojim se odredjuje broj slova u imenu
function n=br(x)
x=input('unesi svoje ime:','s');
% oznaka s u naredbi oznacava da se unose stringovi
n=length(x);
disp(['broj slova u imenu je',num2str(n)];

U naredbi disp, tekst je definisan kao dvodimenzioni vektor, čija je prva


komponenta znak (string), a druga koja je kao rezultat programa broj koji mora da se
naredbom num2str prebaci u znak (string).

PRIMJER 5: Napisati program za računanje faktorijel broja.


function f=fakt(x);
if(x==0)f=0;
else
f=1;
for i=1:x
f=f*i;
end
end

Strana 73
PRIMJER 6: Napisati program koji ispisuje trocifrene brojeve kojima je zbir
faktorijela cifara jedanak tom broju. Zadatak uraditi pomo'u potprograma iz
prethodnog zadatka.
for i=100:999
c1=fix(i/100);
c2=fix((rem(i,100))/10);
c3=rem(i,10);
suma=fakt(c1)+fakt(c2)+fakt(c3);
if(suma==i)disp(i);
end
end

Strana 74
VJEŽBA:
sin( x)
1. Formirati funkcijski fajl pod imenom si, kojim se izračunava funkcija ,
x

� �
zatim izračunati si � �, si  0  .
�2 �

2. Formirati funkcijski fajl pod imenom ime, kojim svako unosi svoje ime i prezime,
prebrojava broj slova, i ako je taj broj manji od 15, određuje moduo i argument
kompleksnog broja z  1  3i ; ako je broj slova između 15 i 20, definiše jediničnu
matricu 3 �3 ; a ako je veći od 20, izračunava sumu kvadrata prvih 100 prirodnih
brojeva.

Strana 75
3. Uz pomoć potprograma za računanje da li je broj prost ili nije, ispisati sve brojeve
do 1.000 koji su prosti. Napisati u kod za function p=prost(x);

Strana 76
10. Rješavanje integrala
Pod numeričkom integracijom (koristi se i termin kvadratura) podrazumijeva se
aproksimacija određenog integrala:
b

 f ( x)dx
a

U MATLAB-u postoje dvije glavne funkcije za kvadraturu: quad i quad8, koje


rade za konačne vrijednosti a i b i za slučaj da podintegralna funkcija f(x) nema
singularitet u [a,b].
Funkcija quad se aktivira na sljedeći način:
q=quad(fun,a,b,tol)
gdje su:
fun – tekstualni niz kojim se zadaje ime funkcijskog potprograma u kome se
određuje podintegralna funkcija
a,b – granice intervala
tol – apsolutna tolerancija greške, koja služi za definisanje željene tačnosti
rezultata. Ako se ne zada – program uzima vrijednost 0.001

Funkcija trapz
Koristi se za izračunavanje integrala pomoću trapeznog pravila.
z=trapz(x,y)
x, y su vektori iste dužine
Određuje se trapeznim pravilom integral y s obzirom na x.

Moguće je zadati samo jedan argument, tj. vektor y:


z=trapz(y)
gdje se ordinate funkcije uzimaju na jediničnom odstojanju.

PRIMJER 1:
»x=linspace(0,2*pi,100);
»y=sin(x).^2./sqrt(1+cos(x).^2);
»trapz(x,y)
ans
2.84783411343745

Trapeznim pravilom za grubu podjelu intervala [0,2π] određen je integral


2
sin 2 x

0 1  cos 2 x
dx

Dobijena vrijednost u ovom slučaju ima grešku reda veličine 10-7.

Strana 77
Funkcija dblquad
Služi za proračun dvostrukog integrala, naredbom

r=dblquad(‘dfun’,umin,umax,smin,smax)
Određujemo dvostruki integral funkcije fun(u,s), gdje je u tzv. unutrašnja
promjenljiva koja se mijenja od umin do umax, a s je spoljašnja promjenljiva koja se
mijenja od smin do smax.
Prvi argument je tekstualni niz ili inline objekat kojim se zadaje podintegralna
funkcija. Ta funkcija mora da bude funkcija od dvije promjenljive oblika: f=fun(u,s),
gdje je u vektor, a s je skalar, dok je rezultat f vektor koji sadrži vrijednosti funkcije za
dato s i za svaku od vrijednosti u vektoru u.

Naredba r=dblquad(‘dfun’,umin,umax,smin,smax) znači:

s max
 u max 
r     fun(u , s )du ds

s min  u min

Funkciju dblquad je moguće aktivirati i sa više argumenata:

r=dblquad(‘dfun’,umin,umax,smin,smax, tol)
r=dblquad(‘dfun’,umin,umax,smin,smax,tol,metod)
tol - pokazatelj greške
metod – ime funkcije koja se koristi za izračunavanje jednostrukog integrala
/quad ili quad8/

PRIMJER 2:

Određivanje numeričkim putem integrala:

6
1 2 x 
 
4  0 y e  x cos y dx 
dy

Formira se funkcijski potprogram za proračun podintegralne funkcije:

function izlaz=fxy(x,y)
izlaz=y^2*exp(x)+cos(y)*x;
Zatim se aktivira funkcija dblquad:

»dblquad(‘fxy’,0,1,4,6)
ans =
87.2983

Strana 78
11. Diferencijalne jednačine
U MATLAB-u postoje funkcije kojima se rješavaju problemi početnih
vrijednosti i granični problemi. Problem početnih vrijednosti koji je n-tog reda
definiše se diferencijalnom jednačinom:
dy ( n ) (t ) . ..
 f * (t , y (t ), y (t ), y (t ),...)
dt

i početnim uslovima:
. . .. ..
y (t0 )  y0, y (t0 )  y 0 , y (t0 )  y0 ,...

Granični problem može da bude linearan i nelinearan. Npr. ako je data


diferencijalna jednačina:
d2y dy
2
 p( x)   q ( x)  y  r ( x)  0
dx dx

zajedno sa uslovima na krajevima intervala [a,b]:

y(a) = α i y(b) = β,

onda je riječ o linearnom graničnom problemu, tj. u diferencijalnoj jednačini svi


izvodi stepena su 1.
Za rješavanje početnih problema 1. reda u MATLAB-u postoji na raspolaganju
nekoliko funkcija.
Obradićemo dvije: ode23 i ode45.
Funkcija ode potiče od: ordinary differential eqations ode23 koristi metode
Runge-Kutta 2. i 3. reda.
Kako su metode višeg reda tačnije, ovdje se metod 3. reda koristi da bi se
razlika po rješenjima dvije metode upotrijebila kao pokazatelj greške metode 2. reda
Funkcija ode45 je analogna po svemu sa funkcijom ode23, osim po tome što se
u njoj primjenjuju metodi Runge-Kutta 4. i 5. reda.
Ako je pokazatelj greške izvan zadatih granica u potprogramu, onda se mijenja
veličina koraka integracije i proračun se ponavlja.

Redukovanje koraka i ponavljanje proračuna biće prekinuto ako bude


prekoračen u programu prethodno definisani broj ponavljanja, s tim što će biti data
poruka o mogućem postojanju singulariteta.

PRIMJER 1 – Korišćenje funkcije ode45


Riješiti početni problem:
dy
  y  t  1,
dt y (0)  1

za koji postoji egzaktno rješenje

y (t )  t  e  t

Strana 79
koje ćemo upotrijebiti radi analize dobijenog numeričkog rješenja. Rješenje
tražimo za vrijeme t koje ispunjava uslove 0 ≤ t ≤ 1.

NAPOMENA:
Način definisanja funkcije ode45. [t,y]=ode45(‘izvod’,interval, y0), gdje su:
‘izvod’ – tekstualni niz u kome stoji ime funkcije u kojoj se određuje izvod
tražene funkcije
Funkcija izvod(t,y) – t je vrijeme, a drugi argument je vrijednost funkcije y,
određuje izvod za dato t
Interval - [t,y] – početno i krajnje vrijeme za određivanje funkcije y
y0 je početna vrijednost funkcije za t=tp
Da bismo dobili rješenja u željenim trenucima vremena (za pojedinačne
trenutke vremena), drugi argument se zadaje na sljedeći način:
interval = [tp t1 t2 ... tk],
gdje članovi niza moraju da čine rastući, odnosno opadajući niz vrijednosti.

Kod rješavanja navedenog problema prvo se formira funkcijski potprogram radi


proračuna izvoda:
function dydt=izv(t,y)

dydt=-y+t+1;

»y0=1;
»[t,y]=ode45(‘izv’, [0,1],y0);
»plot(t,y)
»xlabel(‘vrijeme u sec’)
ans=
»ylabel(‘y(t)’)
41 1
»title(‘pocetni problem 1. reda’)
»size(t)

ans=
1.4
pocetni problem 1. reda
41 1
»ystv=t+exp(-t);
1.35
»greska=abs(y-zstv);
1.3
»greska
1.25 ans=
1.0e-008 *
y(t)

1.2
....
1.15

1.1

1.05

1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
vrijeme u sec

Strana 80
12. Razni zadaci

U nastavku je dat primjer jedne komandne M-datoteke:

sistem.m
A = [10 2 6; 1 10 9; 2 -7 -10];
b = [28 7 -17]’;
x = A\b

Datoteka sistem.m se iz MATLAB okruženja poziva na sljedeći način:


» sistem

Tokom izvršavanja skripta će se u komandnom prozoru MATLAB-a ispisati:


x=
1.0000
-3.0000
4.0000

Zadatak br. 1:
Nacrtajte graf funkcija sin(n*pi*x) na intervalu –1<=x<=1 (korak=0.05) za n=1 do 8.
Svi grafovi moraju biti na jednom ekranu.

>> x=-1:0.05:1
>>for n=1:8
subplot (4,2,n), plot(x, sin(n*pi*x))
end

Strana 81
Objašnjenje: Funkcija subplot(m,n,p) služi nam za "dijeljenje" ekrana na mxn
dijelova, s tim da parametar "p" naznačava trenutno aktivni dio u kojem se crta
naznačeni graf. Zadatak se može riješiti i korištenjem funkcije "hold on", tako da
dobijemo 8 grafova na jednom koordinatnom sistemu preko čitavog ekrana

>> x=-1:0.05:1
>>for n=1:8
plot(x, sin(n*pi*x)), hold on
end

Zadatak br. 2:
Generisanje matrice čiji su svi dijagonalni elementi jednaki 2, svi ostali elementi u
prvoj vrsti jednaki 1, svi ostali elementi jednaki nuli.

>> n=5;
for i=1:n
for j=1:n
if i==j
a(i,j)=2;
elseif abs(i)==1
a(i,j)=1;
else
a(i,j)=0;
end
end
end
>> a

a=
2 1 1 1 1
0 2 0 0 0

Strana 82
0 0 2 0 0
0 0 0 2 0
0 0 0 0 2

Zadatak br. 3:
Korišćenje funkcijske M datoteke koja služi za izračunavanje sljedećeg izraza,
odnosno funkcije:
2
y (t )  sin(1.5t  arctg (1.5t ))
1  (1.5) 2
Iz menija File komandnog prozora bira se komanda New, a zatim opcija M-file. Pri
tome se otvara prozor programa za uređivanje teksta koji će poslužiti za formiranje
komandne ili funkcijske M datoteke.
U novootvorenom prozoru definiše se prethodna funkcija pomoću MATLAB
promjenljivih i funkcija na sljedeći način:

function y=dfun(t)
y=2./sqrt(1+(t*1.5).^3).*sin(1.5*t+atan(-1.5*t));

Po definisanju funkcije, da bi se datoteka snimila, iz menija File prozora programa za


uređivanje teksta bira se funkcija Save As. Otvara se dijalog koji omogućava čuvanje
datoteke pod željenim nazivom (u primjeru je: dfun.m) u odabranom direktorijumu.
Kada se u radnom prostoru promjenljivoj t dodijeli neka vrijednost i zatim pozove
funkcija dfun, dobiće se odgovarajuća vrijednost funkcije.

>>fplot('dfun', [0 30])
>>ylabel('dfun')
>>xlabel('t')

Strana 83
Zadatak br. 4:
1
Nacrtati funkciju:
x  x  x 1
3 2

>> x=0.1:0.1:10;
>> y=1./(x.^3+x.^2+x+1);
>> loglog(x,y)
>> grid

Zadatak br. 5:

Za vektor x=[2 5 9] izračunati funkcije:


a) y  ( x  1)e x
b) z  (2 x  12)e x 1

Zadatak br. 6:

Formiran je .m file: dfun1 od f-je:

3
z   ( x 2  2 x 3 )dx
1

function z=dfun1(x)
z=x.^2-2*x.^3;
U komandnom prozoru:
>> s=quad('dfun1',1,3)
s=
-31.3333
Zadatak br. 7:
Strana 84
Formiran je .m file: dfun1 od f-je:

3
z   ( x 2  2 cos( x ))dx
1

U komandnom prozoru:
s=quad('dfun2',1,3)

s=
10.0674

13. Kreiranje grafičkog interfejsa

Strana 85
Savremeni grafički korisnički interfejs (Graphical User Interface - GUI) omogućuju
korisnicima izbor naredbi pomoću različitih kontrola poput dugmadi (buttons), polja
za unos teksta (text fields), klizača (sliders), i izbornika (menus). Kontrole je potrebno
dizajnirati na način da je korisniku jasno koja će akcija slijediti iz njegovog odabira.
Osnovna funkcija korisničkog interfejsa (engl. user interface) jeste olakšavanje
komunikacije čovjeka i računara.
Korišćenje grafičkog interfejsa omogućuje:
– Intuitivnost
– Interaktivnost
– Estetika

Kreiranje grafičkog interfejsa u Matlabu odvija se u tri koraka:


1. dizajniranje grafičkog interfejsa dodavanjem i razmještanjem kontrola
2. programiranje kontrola “da rade nešto”
3. pokretanje grafičkog interfejsa

Dizajniranje
 File ->
"Show GUI Layout Tool"
 ili
 >>guide
a zatim:

Strana 86
Strana 87
Koristeći paletu za odabir kontrola, dodajemo kontrole na sliku koja predstavlja
grafički interfejs.

Elementi grafičkog okruženja jesu:


 Kontrole za ulaz/izlaz
– Push Buttons
– Check Boxes
– Radio Buttons
– Edit Text
– Static Text
– Sliders
– Frames
– Popup Menus
– List Boxes
– Axis
 Svaka kontrola ima svoju grupu svojstava koja se postavljaju u prozoru
Property Editor

Edit Text

- Koriste se kada želimo dopustiti korisniku da upisuje ili mijenja tekst.


- Prilikom kreiranja postavljamo svojstvo 'Tag', putem kojeg mu
pristupamo.
- Svojstvo 'String' sadrži tekst koji je upisan.

Strana 88
Static Text

Static Text:
- Ispisuje linije teksta.
- Obično se koristi za označavaje drugih kontrola.
- Korisnik ga ne može mijenjati.
- Nema Callback rutinu povezanu.

Strana 89
Check Boxes

- Mijenjaju stanje kada se kliknu.


- Kada su označeni, vrijednost 'Value' svojstva je 1, odnosno 0 ako nisu
označeni

Radio Buttons
Slični su kao check boxes, ali zamišljeni su da se koriste u povezanim
grupama na način da se može odabrati samo jedna od ponuđenih
opcija.

Frames
Predstavljaju okvire koje zatvaraju regije prozora i koriste
se za vizuelno grupisanje kontrola.
Nemaju Callback proceduru.
Mogu sadržavati samo kontrole za ulaz/izlaz.

List Boxes
- Prikazuju liste stavki definisane u 'String'
svojstvu i omogućavaju korisniku da
odabere jednu ili više.
- Svojstva min i max definišu koliko stavki se
može odabrati.

Popup Menus
- Otvaraju listu izbora.
- Kada se klikne na strelicu, otvaraju listu izbora i omogućavaju
korisniku da odabere jedan.
- Kada nije otvoren, prikazuje trenutno odabranu stavku. Stavke
imaju indekse, prva stavka ima indeks 1.
- Mogu imati definisanu Callback proceduru. Može se koristiti
umjesto radio buttons- a

Push Buttons
- Izvršavaju akciju definisanu u Callback svojstvu, kada
se pritisnu
- Callback je procedura (skripta) koja se poziva kada
se aktivira objekt kontrole.
Strana 90
- Svaka kontrola ima callback svojstvo koje postavimo na ime procedure ili
m-filea.
- Callback procedura se izvršava se u radnom prostoru Matlab-a.

Sliders

Primjenjuju numeričku vrijednost između definisanog minimuma i maksimuma sa


zadanim korakom koji opisuje položaj klizača. Potrebno je postaviti sljedeća svojstva:
Value - trenutna vrijednost
Max - minimalna vrijednost
Min - maksimalna vrijednost
SliderStep – osjetljivost

Preporuke
- Kreirati izgled grafičkog interfejsa
- Postaviti Tag svojstvo svim kontrolama u Property editor prozoru
- Postaviti String svojstva svim kontrolama koje imaju natpis

Strana 91
14. Zadaci za vježbu

1. Napišite m file za analiziranje polinoma! Nakon pokretanja program pita korisnika


stepen polinoma koji želi analizirati. Nakon toga jedan po jedan koeficijent.
Program iscrtava graf na kojem naglasi nul tačke (zaokružiti crvenom bojom).

2. Napišite m file, za iscrtavanje jednog perioda sinusoide! Program pita korisnika za


frekvenciju, amplitudu i ugao pomaka sinusoide, te iscrtava jedan period na grafu
3. Kreirajte m file koji generiše slučajan vektor od 10 elemenata u intervalu od
[0,100], te kao rezultat ispisuje novi vektor sastavljen od članova slučajnog
vektora ispisanih po veličini.
(Napomena: slučajan stupčasti vektor sa elementima u intervalu [0,1] generiše se
naredbom rand(m,1), gdje je m broj članova vektora).

4. Kreirajte funkcijski m file koji kao ulaznu varijablu učitava dva broja - cijeli broj,
a zatim ispisuje sve cijele brojeve djeljive sa 6 između učitanih brojeva.

5. Kreirajte funkcijski m file koji učitava vrijednost poluprečnika kruga, a članovi


izlaznog vektora su mu redom obim i površina kruga, te površina i volumen kugle
istog polumjera.
6. Kreirajte grafičko okruženje kao na slici:

klikom na dugme run izvršava se program koji čita koeficijente polinoma, iscrtava
polinom u području 0 do 100, te ispisuje korijene polinoma.

15. Rješavanje problema primjenom računara


Strana 92
Rješavanje problema primjenom računara prolazi kroz tri faze:
1. analiza problema;
2. razvoj algoritma za rješavanje problema;
3. transformacija algoritma u računarski program (programiranje).

Analiza problema
Analiza problema je najkritičnija faza u rješavanju problema.
Cilj ove faze je da pruži preciznu definiciju i opis problema, specifikaciju ulaznih
podataka, specifikaciju izlaznih podataka (rezultate koji se očekuju), kao i postupak
da se do takvih rezultata dođe. Problemi koji se mogu jednostavno izraziti
matematičkim jezikom mogu se i precizno definisati i opisati pri rješavanju na
računaru. Za klasu nematematičkih probleme to nije tačno. Za fazu analize problema
postoji više različitih, manje ili više formalizovanih, postupaka. Ne ulazeći u suštinu
metoda, u najširem smislu, one obuhvataju:
1. uočavanje (identifikaciju) problema,
2. definisanje (formulisanje) ciljeva rješenja,
3. definisanje sistema koji omogućuje ostvarivanje definisanih ciljeva,
4. analizu definisanog sistema (studije izvodljivosti – tehničke i ekonomske),
5. projektovanje novog sistema,
6. uvođenje i eksploataciju projektovanog sistema.

Bitno je definisati ulazne i izlazne podatke, kao i njihovu logičku strukturu koja
određuje interakcije koje postoje u datom skupu podataka.

15.1. Algoritmi
Algoritam predstavlja niz uputstava koja tačno određuju redoslijed operacija koje će
dovesti do rješenja za ma koji problem datog tipa.
Karakteristične osobine za algoritam jesu:
1. broj operacija koje se moraju izvršiti za rješenje konkretnog problema nije
unaprijed poznat,
2. procedura određena algoritmom je deterministički proces koji se može
ponavljati bilo kad i od strane bilo koga; ona mora biti data u obliku konačnog
broja instrukcija koje tačno definišu operacije koje se izvršavaju u svakoj fazi
procedure,
3. instrukcije koje čine algoritam definišu proceduru koja se može izvršiti na
odgovarajućem skupu podataka i koja u svakom slučaju dovodi do korektnog
rezultata.
Važne osobine algoritma jesu:
1. Konačnost
Algoritam se mora okončati poslije konačnog broja koraka.
2. Definisanost
Svaki korak algoritma mora biti precizno definisan (operacije koje treba da se
izvedu moraju biti rigorozno specificirane, bez dvosmislenosti).
3. Ulaz
Označava ulazne podatke u algoritam. Za izvođenje pojedinog algoritma može
biti potrebno više ulaznih podataka, ali i nijedan. Ulazni podaci su veličine iz
datog skupa i predstavljaju početne vrijednosti za početak izvođenja algoritma.
4. Izlaz

Strana 93
Označava izlazne podatke kao rezultat primjene algoritma na ulazne podatke.
Svaki algoritam posjeduje jednu ili više izlaznih veličina.
5. Efikasnost
Kriteriji efikasnosti mogu biti vrijeme (računara ili čovjeka) okončanja
algoritma, prilagođenost algoritma za realizaciju na računaru, jednostavnost,
elegancija itd.
Predstavljanje algoritama
U cilju olakšanja razvoja algoritama i njihovog predstavljanja u svrhu komunikacija
sa korisnicima algoritama koriste se različite tehnike:
1. Prirodni jezici
Koriste se prvenstveno za ručnu realizaciju algoritma .
2. Blok dijagrami algoritma (grafička predstava)
Predstavljaju tehniku koja se najčešće koristi za predstavljanje algoritama
(detaljnije će kasnije biti prikazana).
3. Meta jezici (između prirodnih i programskih jezika)
Predstavljanje algoritama nije u potpunosti standardizovano i može se reći da
se meta jezici nalaze između prirodnih jezika i formalnih (programskih)
jezika.
4. Programski jezici
Predstavlja programiranje računarskih sistema – posebna disciplina u
računarstvu.

15.2. Blok dijagrami algoritma


Blok dijagrami su grafička predstava algoritama sa ciljem njihove specifikacije
pomoću skupa grafičkih simbola koji označavaju pojedine operacije u algoritmu i
skupa pravila za povezivanje grafičkih simbola.
Korišćenje blok dijagrama u predstavljanju algoritma ima sljedeće prednosti:
1. olakšano je praćenje logičkog toka odvijanja algoritma,
2. složene algoritme je moguće dekomponovati na module koji se povezuju i
čine hijerarhijsku strukturu algoritma,
3. zbog grafičke prirode simbola koji čine blok dijagram olakšana je
komunikacija sa korisnicima algoritma,
4. blok dijagrami omogućavaju predstavu algoritma koja je nezavisna u odnosu
na računar ili programski jezik koji će se koristiti za rješavanje algoritma,
5. korišćenje blok dijagrama za predstavu algoritma omogućava da veći broj lica
istovremeno radi na razvoju dijelova (modula) jednog složenog algoritma,
odnosno da veći broj programera programira nezavisno pojedine dijelove
algoritma.
Ukratko se predstavljaju pojedini simboli koji se najčešće koriste za prikazivanje
algoritama. Treba napomenuti da postoje nacionalni standardi za predstavljanje
pojedinih algoritamskih koraka, tj. u svijetu nije unificirano predstavljanje algoritama.
Simbol odvijanja toka algoritma
Simbol odvijanja toka algoritma služi za označavanje logičkog toka odvijanja
algoritma povezivanjem blokova koji predstavljaju algoritamske korake. Predstavljen
je strelicama. Normalan smjer strelica je slijeva nadesno i odozgo nadolje. I ostali
smjerovi su dozvoljeni. Strelice se ne smiju sjeći, a ako je to neizbježno, koriste se
konektori.
Simbol obrade
Strana 94
Simbol obrade se koristi za predstavljanje svih operacija u kojima dolazi do
transformacije informacionih struktura, najčešće aritmetičkim, logičkim operacijama
ili operacijama prenosa informacionog sadržaja.

A=B*2 CA+B CA+B


I=I+1

Simbol ulaza/izlaza
Simbol ulaza/izlaza se koristi za predstavljanje ulazno/izlaznih operacija koje uvode
podatke u obradu i/ili ispisuju rezultate obrade.

Učitaj Učitaj
X A, B, C

Simbol povezivanja (konektor)


Simbol povezivanja služi za povezivanje dijelova algoritma kada se:
- za blok dijagrame koristi više stranica, te nije moguće koristiti strelice koje
ukazuju na tok odvijanja algoritma ili
- dovodi do ukrštanja strelica.
Unutar konektora se upisuje oznaka (broj ili slovo) koja identifikuje konektor.
Konektori sa istom oznakom predstavljaju tačke u algoritmu koje se poklapaju (može
ih biti dvije ili više).

Početak 1

XA X  X +C

X  X +B X  X +D

1 Kraj
Simbol odluke

Strana 95
Simbol odluke (testa) služi za označavanje operacija odlučivanja ili grananja toka
izvođenja algoritma, a prema nekom kriterijumu odlučivanja.
Razlikuju se dvije vrste testa:
– aritmetički i
– logički.
Kod aritmetičkog testa iz bloka odlučivanja postoje dva ili tri izlaza (ilustrovano je na
narednoj slici – lijevo).
Dvotačka ( : ) se koristi za označavanje poređenja aritmetičkih izraza E1 i E2.
Odvijanje algoritma se nastavlja:
- lijevom granom, ako je ispunjen uslov E1 > E2
- desnom granom, ako je ispunjen uslov E1 < E2
- donjom granom, ako je ispunjen uslov E1 = E2.

Znaci >, < i = se mogu kombinovati po dva.

Kod logičkog testa iz bloka odlučivanja postoje dva izlaza (ilustrovano je na


prethodnoj slici – desno).
Nailaskom na logički test, algoritam se, u zavisnosti od logičkog izraza L, odvija
jednom od grana:
- ukoliko je logički izraz istinit, algoritam se odvija granom označenom sa DA
ili
- ukoliko je logički izraz neistinit, algoritam se odvija granom označenom sa
NE.

Simbol podalgoritma
Simbol podalgoritma se koristi da označi više algoritamskih koraka pogodno
grupisanih u cjelinu i koju nije potrebno dalje razlagati u detalje.
Motivacija za korišćenje podalgoritama:
– ponavljajuće dijelove grupisati u podalgoritam,
– dekompozicija problema na manje.

Sortiranje niza
A(i) u rastućem
redoslijedu

Simbol komentara

Strana 96
Simbol komentara omogućava upisivanje komentara ili bližeg opisa karakterističnih
koraka algoritma. Stavlja se pored toka odvijanja algoritma.

Učitaj x predstavlja
x ugao

Ostali grafički simboli služe za bližu specifikaciju algoritamskih koraka.

15.3. Davanje naziva promjenljivim


Promjenljive u algoritmu se označavaju imenima koja se obično sastoje od jednog ili
više slovnih i brojnih znakova, tako da je prvi znak obavezno slovo. Imena
promjenljivih se biraju tako da ukazuju na prirodu promjenljive koju predstavljaju.
Pogodno je da je dužina imena što kraća i da se nazivi promjenljivih u algoritmu i
odgovarajućem programskom jeziku poklapaju.

15.4. Osnovne algoritamske strukture


Algoritmi se mogu klasifikovati u osnovne strukture:
- Linijska struktura,
- Struktura sa grananjem,
- Petlja,
- Struktura sa podalgoritmima.
Navedene strukture se mogu kombinovati pri realizaciji bilo kojeg složenog
algoritma.

Linijska struktura Pocetak


Linijska struktura predstavlja najjednostavniju
strukturu. U linijskoj strukturi postoji samo jedna grana
izvršavanja algoritma i svaki algoritamski korak se
izvršava samo jedanput. ULAZ
Na slici je prikazan algoritam nalaženja sume i razlike A, B
dva broja. Ulazni podaci su prvi broj i drugi broj.
Izlazni podaci (rezultati) su suma i razlika, a imena
(nazivi) promjenljivih su: A – prvi broj; B – drugi bro
j; SUMA – suma i RAZ – razlika.
SUMA = A+B
RAZ = A - B

IZLAZ
A, B, SUMA,
RAZ

Struktura sa grananjem Kraj

Strana 97
Ova struktura se pojavljuje kada se u algoritmu pojavi korak odlučivanja, odnosno
aritmetičkog ili logičkog testa. U zavisnosti od vrste testa, kao i od broja testova,
algoritam može da sadrži dvije ili više grana.
Na narednoj slici je prikazan algoritam određivanja apsolutne vrijednosti broja.
Uvedeni su sljedeći nazivi: A – broj čija se apsolutna vrijednost traži i ABS – tražena
apsolutna vrijednost.

Petlja (ciklična struktura)


Odlikuje se višestrukim izvršavanjem jednog ili više algoritamskih koraka.
Prvi primjer ilustruje sumu niza:
A = {a1, a2, a3, ..., aN}
= {ai}, i = 1, ..., N

Strana 98
Drugi primjer ilustruje nalaženje vrijednosti binomnog koeficijenta.
Binomni koeficijenti se izračunavaju po sljedećoj formuli:

n n!
 
 i  i!(n  i )!
gdje je:
n!  n( n  1)(n  2)    2  1 i
0!  1

tako da je:

 n  nin
   
 i 1  i  1  i 

Koristeći nazive date u algoritmu i navedene početne vrijednosti, svaki naredni


binomni koeficijent (označen sa BIN) se izračunava kao prethodni binomni
koeficijent pomnožen faktorom (N-I)(I+1).

Strana 99
Struktura sa podalgoritmima
Složene probleme je pogodno razložiti na niz manjih potproblema koji se lakše
analiziraju i rješavaju. Po dobijanju rješenja svakog od problema, ta rješenja se
kombinuju kako bi se dobilo rješenje složenog problema.
Složeni problemi se strukturiraju u niz podalgoritama koji se odvojeno analiziraju i
predstavljaju blok dijagramima. Složeni algoritam se predstavlja u obliku hijerarhijske
strukture u kojoj se na vrhu nalazi glavni algoritam, koji kao svoje dijelove ima
podalgoritme na prvom nivou, koji mogu da se dalje dijele na podalgoritme na
drugom nivou itd.
Veza između algoritma i podalgoritama se ostvaruje pomoću lista ulazno-izlaznih
parametara. Lista parametara algoritma koji poziva podalgoritam naziva se stvarna
lista parametara, a lista parametara pozvanog podalgoritma se naziva formalna lista
parametara.
Osnovna razlika između stvarne i formalne liste parametara je u tome da se u stvarnoj
listi pojavljuju stvarne (konkretne) vrijednosti parametara, dok formalna lista sadrži
opšte parametre koji se zamjenjuju stvarnim u trenutku poziva, odnosno po završetku
podalgoritma.
Broj, redoslijed i vrsta parametara stvarne i formalne liste mora da se poklapa. Imena
parametara mogu biti različita, a njihovo izjednačavanje se vrši po mjestu na kome se
u listi nalaze.
Naredni primjer ilustruje algoritam sa odgovarajućim podalgoritmom za nalaženje
sume N brojeva.
Simbol terminal označen sa POVRATAK u podalgoritmu označava da se po završetku
izvršavanja podalgoritma nastavlja izvršavanje algoritma, i to od prvog sljedećeg
algoritamskog koraka iza poziva podalgoritma.

U algoritmu i podalgoritmu korišćeni su sljedeći nazivi:


Glavni algoritam
A(I) Niz od N sabiraka
I Indeks koji označava mjesto sabirka u nizu
N Broj saboraka u nizu
Strana 100
REZ Tražena suma
SABIR Ime podalgoritma koji vrši sabiranje
Podalgoritam SABIR (X, M, SUMA)
X(I) Niz koji se sabira
M Broj sabiraka
I Indeks mjesta sabirka u nizu
SUMA Zbir niza

Na narednoj slici predstavljen je blok dijagram algoritma za rješavanje problema


primjenom računara.

Strana 101
Blok dijagram algoritma za rješavanje problema primjenom računara

Postupci izrade algoritama nisu jednoznačni, te zahtijevaju i kreativnost. Inače bi već


postojali generatori algoritama.

15.5. Programiranje
Nakon analize problema i razvoja odgovarajućeg algoritma za rješavanje problema,
slijedi transformacija algoritma u računarski program, odnosno implementacija
algoritma na računaru.
Suština programiranja je kodiranje (prevođenje) algoritma (ili računarskih metoda) na
određeni programski jezik.
Program se može definisati kao niz naredbi (instrukcija) pisanih u određenom
programskom jeziku (izvornom jeziku) koji posjeduje implicitan ili eksplicitan
redoslijed izvršavanja na računaru.
Programiranje - naučiti sintaksu nekog proceduralnog jezika i steći osnovna intuitivna
znanja.

Nakon pisanja programa slijedi:


Strana 102
– testiranje i
– otkrivanje grešaka (debagiranje – debugging):
 greška u lošoj definiciji problema
 logičke greške u algoritmu
 greške prilikom unosa programa.

Literatura:

[1] Savić, M. Programiranje u Matlab-u, drugo izdanje, Građevinski fakultet u


Beogradu, 2005.
[2] Ćalasan, L., Petkovska, M. Matlab i dodatni moduli Control System Toolbox i
Simulink, Mikro knjiga, Beograd, 1996.
[3] Kovačević, I. Matlab, drugo izdanje, Singidunum, Beograd, 2006.
[4] Matlab – uputstvo za upotrebu, Elektrotehnički fakultet, Banja Luka
[5] Matlab – praktikum, Saobraćajni fakultet, Doboj, 2009.

Poštovani studenti,

Skripta je nastala iz potrebe olakšanja korišćenja i primjene MATLAB-a. Materijali su


prvenstveno korišćeni iz naznačene literature, kao i iz raznih izvora sa Interneta.
Materijal nije autorizovan, te se može koristiti samo za internu upotrebu.

Strana 103

You might also like