Professional Documents
Culture Documents
O MATLAB-u
Program MATLAB slui za rjeavanje razliitih matematikih problema, te
itav niz izraunavanja i simulacija vezanih uz obradu signala, upravljanje,
regulaciju i identifikaciju sustava. Prva verzija MATLAB-a napisana je krajem
1970. godine na sveuilitima University of New Mexico i Stanford University s
ciljem primjene u matrinoj teoriji, linearnoj algebri i numerikoj analizi.
Razvijene su poznate fortranske biblioteke funkcija LINPACK i EISPACK.
Danas svojstva MATLAB-a daleko prelaze originalni matrini laboratorij.
Radi se o interaktivnom sustavu i programskom jeziku za opa tehnika i
znanstvena izraunavanja. Uz osnovni paket postoje i brojni programski paketi
koji pokrivaju gotovo sva podruja inenjerske djelatnosti: obradu signala, slike,
2D i 3D grafike prikaze, automatsko upravljanje, identifikaciju sustava,
statistike obrade, analizu u vremenskoj i frekvencijskoj domeni, simboliku
matematiku i brojne druge. Paket SIMULINK je dodatak MATLAB-u koji
omoguuje simulaciju kontinuiranih i diskretnih sustava pomou funkcijskih blok
dijagrama i dijagrama stanja. MATLAB je otvoren sustav u kojem korisnik moe
graditi svoje vlastite alate i biblioteke te modificirati postojee, jer su dostupni
u obliku izvornog koda.
5
7-4*5.1 <ENT>
ans =
-13.4000
Rezultat izraunavanja pojavljuje se u sljedeim recima (ans = 13.4000), kao i oznaka za unos sljedee naredbe. MATLAB potuje matematiki
redoslijed operacija: potenciranje (13^2) prije mnoenja (13*2) i dijeljenja
(13*2), mnoenje i dijeljenje prije zbrajanja (13+2) i oduzimanja (13-2), a
mogue je i koritenje zagrada:
(5 + 2 * (3 - 7.26)) / 1e2 + 2^3 <ENT>
ans =
7.9648
5 + 2 * 3 - 7.26 / 1e2 + 2^3 <ENT>
ans =
18.9274
2
5
3
6
B = [1, 2; 3, 4; 5, 6] <ENT>
B =
1
3
5
2
4
6
Toka-zarez (;) razdvaja retke matrice, a razmak ili zarez elemente istog
retka. Alternativni nain unosa istih matrica je:
A=[1 2 3 <ENT>
4 5 6]; <ENT>
B = [1, 2 <ENT>
3, 4 <ENT>
5, 6] ; <ENT>
Bytes
2x3
3x2
1x1
48
48
8
Class
double array
double array
double array
Ispis sadraja postojee varijable postie se unosom njenog imena (bez ;):
A <ENT>
A =
1
4
2
5
3
6
clear B <ENT>
clear <ENT>
1.1000
1.2000
1.3000
1.4000
1.5000
1.6000
Prvi broj u uglatoj zagradi (1) je poetna vrijednost, drugi je korak (0.1), a
trei zavrna vrijednost (1.6). Operator dvotoka zadaje raspon vrijednosti, od
poetne do zavrne. Negativna vrijednost koraka rezultirala bi padajuim nizom
brojeva. Ako korak nije naveden, podrazumijeva se vrijednost 1:
t = [1:10] <ENT>
t =
1
10
2
5
3
6
% ispis elementa matrice A u drugom retku i treem stupcu
A(2,3) <ENT>
ans =
6
C =
6
C = A(:,3) <ENT>
C =
3
6
C = A(2,:) <ENT>
C =
4
Operator dvotoka bez zadanog raspona daje sve elemente neko stupca ili
retka. No raspon moe biti i zadan tako da na jednostavan nain moemo
odabrati neku podmatricu matrice. Moemo na primjer spremiti elemente
matrice A koji su u drugom retku od drugog do treeg stupca u matricu D na
slijedei nain:
D = A(2,2:3) <ENT>
D =
5
z = 3 + 4 * i <ENT>
z =
3.0000 + 4.0000i
z = 3 + 4 * j <ENT>
z =
3.0000 + 4.0000i
z = 3 + 4 * sqrt(-1) <ENT>
z =
3.0000 + 4.0000i
z=5*exp(i*0.927295218) <ENT>
z =
3.0000 + 4.0000i
2.0000 + 6.0000i
4.0000 + 8.0000i
help
help
help
help
help
help
ops
mldivide
mrdivide
inv
ime_naredbe
Ako nas zanima funkcija cos pomo moemo dobiti naredbom help:
help cos <ENT>
COS
Cosine.
COS(X) is the cosine of the elements of X.
Overloaded methods
help sym/cos.m
tom sluaju ponovnim pritiskom na <TAB> dobivamo popis moguih naredbi. Ako
znamo da neka naredba zapoinje s npr. imag, moemo napisati imag te
upotrijebiti <TAB>. Tada MATLAB ispisuje sve valjane naredbe koje zapoinju s
imag:
imag <TAB><TAB>
imag
imagedemo
image
imageext
imag
imagem
imagesc
imageview
Osnovne operacije
Osnovne matematike operacije
Na matrice je mogue primijeniti osnovne aritmetike operacije +, -, * i /.
MATLAB sve ove operacije primjenjuje na matrice. Kod mnoenja matrica broj
stupaca lijeve matrice mora biti jednak broju redaka desne:
A = [1 2 3; 4 5 6]; <ENT>
B = [1 2; 3 4; 5 6]; <ENT>
C = A * B <ENT>
C =
28
64
D = [4 5 6; 1 2 3]; <ENT>
S = A + D <ENT>
S =
5
5
7
7
9
9
2 * A <ENT>
ans =
2
8
4
10
6
12
4
7
5
8
% to odgovara izrazu
% je isto to i
Operacije po elementima
Matematike operacije mogue je obaviti i izmeu pojedinanih elementa
matrica. Tada prije matematikog eljenog operatora stavljamo toku . (.*, ./,
.^, itd.):
x = [1 2 3]; <ENT>
y = [4 5 6]; <ENT>
z = x .* y <ENT>
z =
4
10
18
z =
32
z = x' * y <ENT>
z =
4
8
12
5
10
15
6
12
18
tt = x .^ y <ENT>
tt =
1 32 729
tt = x .^ 2 <ENT>
tt =
1 4 9
Relacijski operatori
MATLAB podrava sljedee relacijske operatore:
a
a
a
a
< b
<= b
> b
>= b
% manje
% manje ili jednako
% vee
% vee ili jednako
% jednako
% nije jednako
a == b
a ~= b
Rezultat relacijskog operatora je 0 ako uvjet nije zadovoljen ili 1 ako jest.
b = 123 > 11 <ENT>
b=
1
b ~= b <ENT>
ans=
0
a & b
a | b
a ~ b
0
1
1
1
Posebne matrice
Funkcija ones(m,n) vraa matricu sa m redaka i n stupaca popunjenu
jedinicama, dok funkcija zeros(m,n) vraa matricu istih dimenzija popunjenu
nulama. Iz navedenog primjera vidimo da ako MATLAB funkcija ima vie
argumenata, oni se meusobno odvajaju zarezom:
A = ones(3) <ENT>
A =
1
1
1
1
1
1
1
1
1
A = ones(2,3) <ENT>
10
A =
1
1
1
1
1
1
% daje redak od 3 elementa vrijednosti 1.2
A = 1.2*ones(1, 3) <ENT>
A =
1.2000
1.2000
1.2000
0
1
0
0
0
1
-0.4161
0.2837
-0.9900
0.9602
11
2.7183
20.0855
7.3891
54.5982
expm(A) <ENT>
% dok se matrina eksponencijala primjenjuje na matricu
ans =
51.9690
112.1048
74.7366
164.0738
No kako pronai najvei element u matrici ako ona ima vie stupaca? Jedna
od mogunosti je uzastopna primjena naredbe max, no mogue je odrediti
maksimalni element i koritenjem naredbe reshape:
max(max(A)) <ENT>
ans =
6
max(reshape(A,1,prod(size(A)))) <ENT>
ans =
6
Naime, naredba max i sve sline naredbe operiraju na stupcima osim ako se
radi o vektoru. Naredbe koje operiraju nad stupcima ne razlikuju vektor-retke
ili vektor-stupce tako da uzastopnom primjenom naredbe max moemo odrediti
maksimum.
MATLAB sve matrice pamti na jednak nain kao niz elemenata. Sama
dimenzija matrice je posebna informacija koju moemo promijeniti naredbom
reshape. U gornjem primjeru kada smo traili maksimalni element matrice
naredbom reshape smo matricu A veliine 23 pretvorili u novu matricu
veliine 123.
12
Prikaz rezultata
Osnovna MATLAB ljuska nije pogodna za grafiki prikaz rezultata. Da bi
mogli grafiki prikazati rezultate moramo otvoriti novi prozor za njihov prikaz
to se postie naredbom figure.
figure <ENT>
Ako koristimo naredbu plot i ako ne postoji aktivni grafiki prozor, MATLAB
e otvoriti jedan.
Naredba plot(x) crta vektor x na taj nain da se na x-osi nalaze indeksi
vektora x, a na y-osi nalaze vrijednosti vektora. Na samom prikazu naredba
plot toke (indeks, vrijednost vektora za indeks) spaja pravcima. Ako ne
elimo spajati toke pravcima moemo koristiti sljedee:
plot(x,'o'); <ENT>
stem(x); <ENT>
stairs(x); <ENT>
MATLAB funkcija plot moe se koristiti i za crtanje matrica. Pri tome isto
kao i za naredbu max matrica se promatra po stupcima, tj. pretpostavlja se da
svaki stupac predstavlja pojedinani signal.
y = [1 2 3 <ENT>
4 5 6 <ENT>
7 8 9 <ENT>
13
10 11 12]; <ENT>
plot(y) <ENT>
plot(x1,y1,'r-',x2,y2) <ENT>
plot(x1,y1,':',x2,y2,'g') <ENT>
t = [1:0.01:10]; <ENT>
x = sin(2*pi*t); <ENT>
plot(t,x) <ENT>
hold on <ENT>
% ukljuujemo crtanje preko postojeeg
plot(t, t) <ENT>
hold off <ENT>
% iskljuujemo crtanje preko postojeeg
14
3x3
3x3
1x1
72
72
8
double array
double array
double array
3x3
3x3
72
72
double array
double array
15
Nekad osim samog spremanja varijabli elimo imati biljeke svega to smo
napravili tijekom interaktivnog rada s MATLAB-om. U tu svrhu se koristi naredba
diary.
diary moj_rad <ENT>
whos <ENT>
Name
Size
A
B
a
3x3
3x3
1x1
Class
double array
double array
double array
Simbolika matematika
Jedan od mnogih programskih paketa/modula unutar MATLAB-a podrava
simboliku matematiku. Njegove mogunosti moete pogledati naredbom help
symbolic, dok naredba symintro daje kratki uvod s primjerima.
Osim numerikih varijabli koje smo ve upoznali MATLAB sa simbolikim
paketom podrava simbolike varijable:
lambda = sym('lambda') <ENT>
lambda =
lambda
whos
Name
A
a
lambda
Size
3x3
1x1
1x1
Bytes
72
8
136
Class
double array
double array
sym object
Svaki simboliki objekt moe imati i dodatna svojstva koja se odreuju kod
deklaracije varijable:
16
x = sym('x'); <ENT>
x = sym('x','real'); <ENT>
Ako nam dodatna svojstva nisu bitna naredbom syms moemo odmah
definirati vie simbolikih varijabli:
syms x y z <ENT>
-4*i,
3+3*i]
lambda+6+i,
-3-3*i]
-4*i, lambda+6+3*i]
% simbolike varijable a i x
% definiramo simboliku funkciju f(x)
f =
sin(a*x)
diff(f) <ENT>
% derivacija funkcije po x
ans =
cos(a*x)*a
int(f) <ENT>
17
ans =
-cos(a*x)/a
syms Donja Gornja <ENT>
int(f, Donja, Gornja) <ENT>
ans =
-cos(Gornja*a)/a+cos(Donja*a)/a
taylor(f,7) <ENT>
ans =
a*x-1/6*a^3*x^3+1/120*a^5*x^5
ans =
a/(s^2+a^2)
Programiranje u MATLAB-u
Jednostavni MATLAB program
MATLAB je potpun programski jezik u kojem je mogue napisati vlastite
programske odsjeke. Pojedine naredbe mogue je izvriti uvjetno ili ponoviti
vie puta.
Pomou ugraenih funkcija i programskih paketa mogue je graditi nove
programe. Svaki skup MATLAB naredbi napisan koritenjem bilo kojeg tekst
editora koji je pohranjen u datoteci s nastavkom .m predstavlja jedan MATLAB
program. Dakle, svi MATLAB programi se spremaju u obine tekstualne datoteke
a najjednostavnije ih je pisati koritenjem ugraenog editora koji se poziva
naredbom edit.
edit <ENT>
18
1.
2.
3.
4.
5.
Prenoenje argumenata
Pokaimo sada kako izgleda prenoenje varijabli u funkciju te kako funkcija
vraa rezultat na primjeru funkcije koja zbraja dva broja.
1.
2.
function c = zbroji(a, b)
% ZBROJI - Zbrajanje dva broja
3.
4.
5.
6.
7.
8.
9.
10.
% Kod programa.
c = a + b;
19
ans =
6
Kada smo pozvali funkciju zbroji bez argumenata MATLAB je ispisao nau
poruku o pogreci (esta linija koda). Od pete do sedme linije koda ispitujemo
koliki je broj ulaznih argumenata pomou funkcije nargin, te u sluaju da
nemamo dva ulazna argumenta ispisujemo poruku o pogreci. ee umjesto
poruke o pogreci neprenesenim varijablama pridruimo neku predefiniranu
vrijednost:
1.
2.
3.
4.
5.
6.
7.
8.
9.
for i = X
disp(i);
end
for i = [1 2 5 7]
disp(i);
end
20
a = zeros(1,10);
for i = 1:0.5:10
a(i) = i*i -3;
end
% inicijaliziraj vektor a
% za svaki i od 1 do 10 s korakom 0.5
% na i-to mjesto vektora a ubaci vrijednost i*i-3
% kraj for petlje
i = 7;
while (i >= 0)
if (a(i) ~= 5)
a(i) = a(i) - 3;
else
a(i) = 127;
end
i = i - 1;
end
% inicijaliziraj varijablu i
% dok je i vei ili jednak 0 ponavljaj
%
ako a(i) nije jednako 5
%
tada a(i) smanji za tri
%
inae
%
u a(i) spremi 127
%
kraj if naredbe
%
smanji i za 1
% kraj while petlje
i = 7;
while (i >= 0)
if (i > 10)
break
end
end
% ako je i vei od 10
%
bezuvjetno prekini petlju
% kraj if naredbe
if a == b
c = a + b;
elseif abs(a) == b
c = a - b;
else
c = 0;
end
21
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
n=[0 1 2 3 4 5 6 7 8 9];
m=[0:0.1:12];
figure, plot(m,besselj(n',m)), grid;
set(gca,'FontName','Times');
xlabel('\sl m'), ylabel('\sl J_n(m)');
title('Besselove funkcije prve vrste,'...
'reda \sl n \rm varijable \sl m');
print -deps besselm.eps;
11.
12.
13.
14.
15.
16.
17.
18.
19.
n=[0:0.1:12];
m=[1 2 3 4 5 6 7];
figure, plot(n,besselj(n',m)), grid;
set(gca,'FontName','Times');
xlabel('\sl n'), ylabel('\sl J_n\rm(\sl m\rm)');
title('Besselove funkcije prve vrste,'...
'reda \sl n \rm varijable \sl m');
print -deps besseln.eps;
5.
6.
% autor, datum
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
% Tijelo funkcije
izlaz1 = TeskaMatematika(ulaz1, ulaz2, ...);
izlaz2 = JosTezaMatematika(ulaz1, ulaz2, lokalna_varijabla);
23.
24.
25.
26.
27.
22
function tic
%TIC Start a stopwatch timer.
%
The sequence of commands
%
TIC, operation, TOC
%
prints the time required for the operation.
%
%
See also TOC, CLOCK, ETIME, CPUTIME.
%
%
23
Reference
This section contains detailed descriptions of all MATLAB functions. It begins
with a list of functions grouped by subject area and continues with the
reference entries in alphabetical order. Information is also available through the
on-line Help facility.
General
help
demo
who
what
size
length
clear
computer
^C
quit
exit
help facility
run demonstrations
list variables in memory
list M-files on disk
row and column dimensions
vector length
clear workspace
type of computer
local abort
terminate program
same as quit
addition
subtraction
multiplication
right division
left division
power
conjugate transpose
+
.*
./
.\
.^
.'
addition
subtraction
multiplication
right division
left division
power
transpose
&
I
~
AND
OR
NOT
less than
less than or equal
greater than
greater than or equal
equal
not equal
24
Special Characters
=
[
]
(
)
.
...
,
;
%
:
!
assignment statement
used to form vectors and matrices
see [
arithmetic expression precedence
see (
decimal point
continue statement to the next line
separate subscripts and function arguments
end rows, suppress printing
comments
subscripting, vector generation
execute operating system command
Special Values
ans
eps
pi
i,j
Inf
NaN
clock
date
flops
nargin
nargout
25
Graph Paper
plot
loglog
semilogx
semilogy
polar
mesh
contour
meshdom
bar
stairs
errorbar
Graph Annotation
title
xlabel
ylabel
grid
text
gtext
ginput
plot title
x-axis label
y-axis label
draw grid lines
arbitrarily positioned text
mouse-positioned text
graphics input
Control Flow
if
elseif
else
end
for
while
break
return
pause
26
Disk Files
chdir
delete
diary
dir
load
save
type
what
fprintf
pack
logical conditions
logical conditions
find array indices of logical values
check if variables exist
detect NaNs
detect infinities
detect empty matrices
detect string variables
compare string variables
Trigonometric Functions
sin
cos
tan
asin
acos
atan
atan2
sinh
cosh
tanh
asinh
acosh
atanh
sine
cosine
tangent
arcsine
arccosine
arctangent
four quadrant arctangent
hyperbolic sine
hynerbolic cosine
hyperbolic tangent
hyperbolic arcsine
hyperbolic arccosine
hyperbolic arctangent
27
Polynomials
poly
roots
roots1
polyval
polyvalm
conv
deconv
residue
polyfit
characteristic polynomial
polynomial roots - companion matrix method
polynomial roots - Laguerre's method
polynomial evaluation
matrix polynomial evaluation
multiplication
division
partial-fraction expansion
polynomial curve fitting
Matrix manipulation
rot90
fliplr
flipud
diag
tril
triu
reshape
.'
:
rotation
flip matrix left-to-right
flip matrix up-and-down
extract or create diagonal
lower triangular part
upper triangular part
reshape
transposition
general rearrangement
28
matrix exponential
matrix logarithm
matrix square root
characteristic polynomial
determinant
trace
Numerical Integration
quad
quad8
29
maximum value
minimum value
mean value
median value
standard deviation
sorting
sum of elements
product of elements
cumulative sum of elements
cumulative product of elements
approximate derivatives
histogram
correlation coefficients
covariance matrix
reorder into complex pairs
Signal Processing
abs
angle
conv
corrcoef
cov
deconv
fft
fft2
ifft
ifft2
fftshift
complex magnitude
phase angle
convolution
correlation coefficients
covariance
deconvolution
fast Fourier transform
two-dimensional FFT
inverse fast Fourier transform
inverse 2-D FFT
swap quadrants of matrices
30