Professional Documents
Culture Documents
Uvod u MATLAB
1.1. Uvod
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.
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 [ ].
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
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 +
>> a
a=
++
(prikazuje se samo znak)
Strana 4
>> a
a=
2/5 1/817441
(prikazuju se prazni redovi između redova sa određenim sadržajem).
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.
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.
Strana 6
>> rp1 Pokušaj prikaza niza
??? Undefined function or variable 'rp1'. MATLAB javlja grešku
>>
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.
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:
» A = [1 2 3; 4 5 6; 7 8 9];
» A(2,2)
ans =
5
» 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:
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
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.
Slijedi primjer:
» sqrt (2)
ans =
1.4142
??? y=sin(x
|
Error: ")" expected, "end of line" found.
>> riječ='student'
riječ =
student
Strana 11
PRIMJER 2:
U riječi student odrediti broj slova.
>> size(riječ)
ans =
1 7
+ 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
< manje od
> veće od
== jednako
~= nejednako
PRIMJER 7:
Izračunati vrijednost izraza:
Strana 13
Zamijenimo sada = = sа =
>> 5<(7=8)
??? 5<(7=8)
|
Error: ")" expected, "=" found.
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
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.
>> z=log10(x)+abs(y)
z=
59.6990
1 i 100
2. Izračunati z , ako je z .
1 i 96 i1 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:
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
PRIMJER 4:
Unijeti matricu Z iz prethodnog PRIMJERA tako što elemente odmah
unosimo kao kompleksne brojeve.
Strana 17
3.0000 + 7.0000i 4.0000 + 8.0000i
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(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).
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
Strana 19
C=
0 4 8
4 8 12
8 12 16
>>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
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
Slijedi primjer:
» x = [1 2 3];
» y = [4 5 6];
» x .* y
ans =
4 10 18
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
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
Strana 24
4
6
3
>>sum(A)
ans =
17 16 9
>> prod(A)
ans =
160 96 0
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
>> 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 .
(Uputstvo: AX B � X A1 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
A1
, korišćenjem date matrice A .
4 det A
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
d) Pomoću matrice
A=
2 1
-1 -5
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
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
>>
» 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
>>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
>>x(2:4)
Strana 31
ans =
1.0472 2.0944 3.1416
>>s=linspace(0,10,3)
s=
0 5 10
Funkcije zaokruživanja
>>x=-pi:pi/4:pi
x=
Columns 1 through 7
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
>>sign(x)
ans =
-1 -1 -1 -1 0 1 1 1 1
Zadatak za vježbu
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
>>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+')
BOJE LINIJE
y yellow .
Strana 37
m magenta o
c cyan x
r red +
g green -
b blue :
w white -.
k black --
>>plot(x,y,'k', x,y/2,'g');
>>legend('Funkcija','Pola funkcije');
Naredba hold omogućava da svi daljnji pozivi funkciji plot crtaju grafikone na istom
crtežu. Isključuje se sa hold off.
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
PRIMJER 2:
Nacrtati vektor zadat koordinatama x (1, 2, 4,8,16) i y (1, 2, 4,8,16) .
14
12
10
-2
-4
0 2 4 6 8 10 12 14 16
PRIMJER 3:
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:
-1
-2
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Funkcija koju crtamo ima oblik f x , gde je x vektor čiji je prvi element
xmin, a poslednji element xmax.
Strana 41
PRIMJER 6:
Nacrtati funkciju y x 2 9 u domenu x �[ 3,3] .
-1
-2
-3
-4
-5
-6
-7
-8
-9
-3 -2 -1 0 1 2 3
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
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
PRIMJER 11:
Korišćenjem naredbe subplot, nacrtati funkcije: yx x �[ 1,1] ,
y xe x
x �[ 0,1] , yx 2
x �[ 2, 2] , y cos x x �[ , ] .
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
PRIMJER 12:
Nacrtati funkciju y sin x za -2 �x �2 , a zatim postaviti da opseg po x
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 .
Strana 44
3. Nacrtati funkciju y x 2 5 x 6 u proizvoljnom opsegu i opisati je tekstom.
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
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
6.4. 3D grafika
>>t = 0:pi/50:10*pi;
>>plot3(sin(t),cos(t),t)
>>grid on
>>axis square
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
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
>>roots(f)
ans =
1.6293
-0.0781 + 1.3303i
-0.0781 - 1.3303i
-0.8064
>>polyval(f,3+2*i)
ans =
-3.5600e+002 +2.7000e+002i
Strana 49
7.1. Numeričko rješavanje sistema 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
>>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
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 .
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:
p=
1 -5 6
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
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=
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
x=fzero('funkcija',x0)
x je skalarna vrijednost
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
>> x1=fzero('x*exp(-x)-0.2',0.7)
x1 =
0.2592
>> x1=fzero('x*exp(-x)-0.2',2.8)
x1 =
2.5426
Strana 53
gdje je D determinanta tog sistema, a D j determinanta dobijena tako što su u
PRIMJER 7:
Kreirati fajl Cramer za rješavanje sistema linearnih algebarskih jednačina
koristeći Kramerovo pravilo.
PRIMJER 8:
2x 4 y z 0
x 2 y 2z 6
3x 6 y 6
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
>> 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
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
4) Riješiti jednačinu x 4 2 x 2 1 0 .
2 x y 3z 9
3 x 2 y 4 z 11 .
x yz 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.
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...)
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.
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.
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=');
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'.
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.
a=input('unesi a:');
Strana 61
if rem(a,2)==0
disp(‘broj je paran’)
else
disp('broj je neparan’)
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
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);
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);
while izraz
naredbe
end
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.
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
>>test
function P=povrsina(a,b,c)
s=(a+b+c)/2;
P=sqrt(s*(s-a)*(s-b)*(s-c));
>> povrsina(3,4,5)
ans =
6
» S=povrsina(3,4,5)
S=
6
% 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:
PRIMJER 2:
Formirati funkcijski fajl u kome se definiše nova funkcija f x e sin x
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
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)];
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
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.
PRIMJER 1:
»x=linspace(0,2*pi,100);
»y=sin(x).^2./sqrt(1+cos(x).^2);
»trapz(x,y)
ans
2.84783411343745
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.
s max
u max
r fun(u , s )du ds
s min u min
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:
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 ,...
y(a) = α i y(b) = β,
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.
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
sistem.m
A = [10 2 6; 1 10 9; 2 -7 -10];
b = [28 7 -17]’;
x = A\b
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));
>>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:
Zadatak br. 6:
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
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
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.
Edit Text
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
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
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
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.
klikom na dugme run izvršava se program koji čita koeficijente polinoma, iscrtava
polinom u području 0 do 100, te ispisuje korijene polinoma.
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.
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
Početak 1
XA 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.
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
IZLAZ
A, B, SUMA,
RAZ
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.
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 nin
i 1 i 1 i
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.
Strana 101
Blok dijagram algoritma za rješavanje problema primjenom računara
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.
Literatura:
Poštovani studenti,
Strana 103