Professional Documents
Culture Documents
Lazi
Milan R. Ristanovi
Programiranje u Matlab -u r
Uvod
1
Poglavlje 1. Uvod 2
u bilo kom programu za obradu teksta, osnosno u editoru teksta i dibageru koji je
deo paketa Matlaba. Kreirana skript datoteka se izvrxava kucanjem njenog imena
u komandoj liniji bez sufiksa “.m” ili direktno iz Matlabovog editora.
>> a = 5.23
a =
5.2300
>> b = 3
b =
3
>> c = -0.68
c =
-0.6800
>> a = 5.23;
>> b = 3;
>> c = -0.68;
Matlab dozvoljava unos vixe naredbi u komandnoj liniji, koje moraju biti razd-
vojene bilo zapetom (,), ili znakom taqka-zapeta (;). Ako se koristi zapeta, tada
sistem daje ispis na naredbu. Prethodni unos se moe kompaktnije napisati kao:
>> d = (a - 2*c)^(1/b)
d =
1.8748
help ImeFunkcije.
Matlab i matrice
2.1 Matrice
Neka je skup A polje (A = P) i neka su njegovi elementi oznaqeni sa a11 , a12 , . . . , amn .
Skup od mn elemenata a11 , a12 , . . . , amn polja A ureen u obliku pravougaone xeme
a11 a12 · · · a1n
a21 a22 · · · a2n
.. .. . . .. ,
. . . .
am1 am2 · · · amn
>> A = [1 2 -3; 4 -1 8; -3 0 6]
A =
1 2 -3
4 -1 8
-3 0 6
4
Poglavlje 2. Matlab i matrice 5
size(A)
ili
[m,n] = size(A)
Ako su svi elementi aij = 0 tada se matrica naziva nula matrica, A = (0) = 0.
Naredba u Matlabu za nula matricu dimenzije (r, c) je
zeros(r,c)
Na primer:
nula_mat =
0 0 0
0 0 0
Elementi a11 , a22 , . . . , ann kvadratne n × n matrice A qine njenu glavnu dijagonalu.
Ako su svi elementi van glavne dijagonale jednaki nuli, aij = 0, ∀i, j = 1, 2, . . . , n,
i 6= j, tada se kvadratna matrica naziva dijagonalna i oznaqava sa
d =
1 0 0
0 2 0
0 0 6
Ako su svi elementi aii dijagonalne n × n matrice jednaki jedinici ona se naziva
jediniqna matrica i oznaqava sa In ,
In = diag {1 1 . . . 1}.
eye(n)
>> I = eye(3)
I =
1 0 0
0 1 0
0 0 1
2.2 Vektori
Matrica An1 tipa n × 1 se naziva vektor kolona, ili krae, vektor, a matrica B1n
se naziva vektor vrsta. Transpozicijom vektora kolone dobija se vektor vrsta i
obratno. Vektore emo oznaqavati sa a = (ai ), b = (bi ), itd.:
a1
a2 ¡ ¢
a = . ⇒ aT = a1 a2 · · · an .
..
an
a = [a b c . . .]
ili
a = [a, b, c . . .]
gde su a, b, c, . . . bilo identifikatori promenljivih, brojevi, izrazi, ili stringovi.
U prvom sluqaju, izmeu simbola se zahteva blanko karakter, dok u drugom sluqaju
po elji moe da se izostavi.
Vano je napomenuti, da ako se na mestu nekog elementa matrice eksplici-
tno napixe matematiqki izraz, onda izmeu alfanumeriqkih karaktera i simbola
matematiqkih operatora ne smeju da se stavljaju blanko karakteri.
Matlab prua vixe razliqitih naqina da se dodele brojqane vrednosti vek-
toru. Jedan od naqina je da se specificira opseg vrednosti i priraxtaj izmeu
dva susedna broja naredbom oblika:
Na primer:
>> t = 0:0.1:2
t =
Columns 1 through 12
Poglavlje 2. Matlab i matrice 7
1.0000 1.1000
Columns 13 through 21
n = length(t)
>> t = 0:10
t =
0 1 2 3 4 5 6 7 8 9 10
recimo,
t =
Columns 1 through 12
1.0000 1.1000
Columns 13 through 21
b = [b1 b2 b3 . . . bn ].
b = [b1 b2 b3 . . . bn ]T
to znaqi da smo kreirali vektor kolonu, tj. (n × 1) matricu. Trei element vektora
se indeksira sa b(3), ili b(3,1). Meutim, ako se zahteva b(1,3), Matlab e javiti
poruku o grexci jer trea kolona ne postoji.
Neka je vektor x definisan kao
x = [1 3 -5 8 2 0 -1 4 -3]
ili,
Isti rezultat se dobija ako se najpre definixe vektor koji sadri odgovarajue
indekse
index = [1 3:5 9]
y = x(index)
oduzmemo skalar
x = x + 1;
x(1) = x(1)/3;
x(2:5) = x(2:5)/x(1);
x(7) = x(7) + 2;
z = sort(x)
xto vraa index = [3 4 9], a novi vektor u koji sadri samo nepozitvne elemente
vektora x moe da se dobije na sledei naqin
u = x(index)
>> x1 = (0:4);
>> x2 = 1:0.25:2;
>> x3 = [-24 38 12 8 1];
>> A = [x1; x2; x3]
A =
0 1.0000 2.0000 3.0000 4.0000
1.0000 1.2500 1.5000 1.7500 2.0000
-24.0000 38.0000 12.0000 8.0000 1.0000
Meutim, ako se isti vektori posmatraju kao matrice kolone, onda mogu da daju
matricu (5 × 3):
>> x1 = (0:4);
Poglavlje 2. Matlab i matrice 10
>> x2 = 1:0.25:2;
>> x3 = [-24 38 12 8 1];
>> A = [x1’, x2’, x3’]
A =
0 1.0000 -24.0000
1.0000 1.2500 38.0000
2.0000 1.5000 12.0000
3.0000 1.7500 8.0000
4.0000 2.0000 1.0000
Svakom elementu matrice se pristupa na isti naqin kao i kod vektora. Meutim,
veoma je korisno nauqiti kako iz matrice izdvojiti odreenu vrstu, odnosno kolonu.
Za to slui sledea notacija
A(3,:)
A(:,3)
A(1:3, 2:3)
matrice. U tu svrhu se uvodi dot (.) operator. Taqka (.) koja prethodi nekom oper-
atoru (kao * / \ ili ˆ) oznaqava matriqnu operaciju. Na primer, ako su definisane
(3 × 4) matrice A i B
a11 a12 a13 a14
A = a21 a22 a23 a24
a31 a32 a33 a34
b11 b12 b13 b14
B= b21 b22 b23 b24
b31 b32 b33 b34
a11 b11 a12 b12 a13 b13 a14 b14
C = A. ∗ B = a21 b21 a22 b22 a23 b23 a24 b24
a31 b31 a32 b32 a33 b33 a34 b34
a11 /b11 a12 /b12 a13 /b13 a14 /b14
C = A./B = a21 /b21 a22 /b22 a23 /b23 a24 /b24
a31 /b31 a32 /b32 a33 /b33 a34 /b34
b11 /a11 b12 /a12 b13 /a13 b14 /a14
C = A.\B = b21 /a21 b22 /a22 b23 /a23 b24 /a24
b31 /a31 b32 /a32 b33 /a33 b34 /a34
a11ˆb11 a12ˆb12 a13ˆb13 a14ˆb14
C = A.ˆB = a21ˆb21 a22ˆb22 a23ˆb23 a24ˆb24
a31ˆb31 a32ˆb32 a33ˆb33 a34ˆb34
π
y(t) = t2 e−t/2 sin(3t + )
8
za t ∈ [0, 0.1, . . . 10], kompaktno rexenje problema bi bilo
Poglavlje 2. Matlab i matrice 12
norma = sum(x.^2)^0.5
onda je B = A’ matrica (n × m)
b11 = a11 b12 = a21 ··· b1m = am1
b21 = a12 b22 = a22 ··· b2m = am2
B = A’ = .. .. .. .. .
. . . .
bn1 = a1n bn2 = a2n · · · bnm = amn
Primer:
>> A = [1 2 4; 6 0 5]
A =
1 2 4
6 0 5
>> B = A’
B =
1 6
2 0
4 5
A ± B = (aij ± bij ).
Poglavlje 2. Matlab i matrice 13
αA = (αaij ).
A*B
(AB)T = BT AT .
tada
(a, b) = ab
oznaqava njihov skalarni proizvod ili unutraxnji proizvod, jer je u matriqnom
smislu ovakav proizvod daje (1 × n)(n × 1) = (1 × 1) matricu. Naredba u Matlabu za
skalarni proizvod ova dva vektora je
a*b
ili
dot(a,b)
AB = BA = I.
B = A−1 .
Poglavlje 2. Matlab i matrice 14
>> A = [1 3; -2 4];
>> d = det(A)
d =
10
A^-1
ili,
inv(A)
Ax = λx, A ∈ Rn×n ,
koji su ujedno i sopstvene vrednosti matrice A (od koje je taj polinom nastao) mogu
da se izraqunaju korixenjem Matlabove funkcije:
lambda = eig(A)
[V,D] = eig(A)
On je saglasan ako i samo ako postoji najmanje jedno x∗ za koje je Ax∗ = h. Ovo
x∗ je rexenje datog sistema. Ako rexenje sistema jednaqina ne postoji onda je on
nesaglasan.
Ako je A kvadratna matrica reda n (m = n) tada sistem pri h 6= 0 ima jedinstveno
rexenje ako i samo ako je A nesingularna matrica.
x = A^-1*h
ili,
x = inv(A)*h
x = A\h
xto predstavlja deljenje matrica s leve strane. Ova notacija moe da se primeni
i u sluqaju kada matrica A nije kvadratna, tada deljenje matrica s leva x = A\h,
zapravo izvodi pseudo inverziju matrice A, x = (AT A)−1 AT h. Ovakav pristup ima
prednosti jer je vreme sraqunavanja izraza krae nego da se trai inverzna matrica.
Osim toga, u sluqaju velikih matrica ovaj pristup daje taqnije rexenje.
Qitaocu se ostavlja da istrai mogunosti nekih od vanih naredbi za rad sa
matricama kao xto su: rank, expm, pinv, cond i svd.
Spisak svih ugraenih funkcija u Matlabu za rad sa matricama se dobija sa
help matfun
Poglavlje 3
Ulaz/izlaz podataka
load
Ako se radi o tekstualnoj datoteci, naredba load qita red po red te datoteke
dok ne doe do sekvence koja predstavlja kraj datoteke. Podaci u okviru reda se
razdvajaju blanko karakterom ili zapetom. Broj kolona u okviru svake vrste mora
da bude isti, a broj vrsta u svakoj koloni takoe mora da bude isti.
Ako se u datoteci podaci.dat nalaze podaci koje elimo da uqitamo, jedan od naqina
da to uradimo je naredbom
load podaci.dat
U radnoj memoriji e se pojaviti matrica koja ima isto ime kao i sam naziv da-
toteke samo bez ekstenzije (u ovom sluqaju bez “.dat”). To moe da se vidi naredbom
whos. Na gore opisani naqin se uqitava navedena datoteka koja se nalazi u tekuem
direktorijumu. U suprotnom, neophodno je ili navesti celokupnu putanju gde se
nalazi datoteka, ili podesiti radni direktorijum.
Pretpostavimo da su kao rezultat izraqunavanja nastali vektori kolone x, y i
z, jednakih duina. Ako hoemo da snimimo dobijene rezultate kao tekstualnu da-
toteku, moemo najpre da vektore poreamo u matricu, npr. out, a zatim bi trebalo
da napixemo:
Binarna datoteka se snima tako xto se navede ime fajla sa ekstenzijom “.mat”
i navede lista promenljivih. Ako se izostavi ekstenzija, onda se imenu datoteke
automatski pridodaje “.mat”. Prilikom uqitavanja binarne datoteke, ako se navede
ime datoteke bez ekstenzije, Matlab tu datoteku takoe tretira kao binarnu. Pri-
likom uqitavanja binarne datoteke, sve zahtevane promenljive se pojavljuju u radnom
prostoru.
16
Poglavlje 3. Ulaz/izlaz podataka 17
3.2 Stringovi
Matlab podrava kreiranje, quvanje i manipulisanje matrica sa bilo kojom kombi-
nacijom slova, brojeva i specijalnih znakova, tj. stringova. Stringovi se defin-
ixu na sliqan naqin kao vektori i matrice, s tim xto se prilikom definisanja
stringa alfanumeriqki karakteri nalaze izmeu jednostrukih znakova navoda (’ . . .
’). Svaki karakter u stringu predstavlja jedan element u vektoru ili matrici.
Definiximo sledei string ’Masinski fakultet’, xto bi bilo ekvivalentno
kreiranju sledeeg vektora:
s = ’Masinski fakultet’
ili
s = [’Masinski fakultet’]
>> s(10:17)
ans =
fakultet
Na ovaj naqin smo uneli skalar. Naredba za unos vektora je potpuno ista, s tim
xto nakon ispisane poruke korisnik mora da unese elemente vektora strogo izmeu
uglastih zagrada. Prirodno, u sluqaju unosa matrice, moraju da se poxtuju pravila
za kreiranje matrica.
Kod unosa stringa, naredba input ima dodatni argument ’s’:
Grafika
4.1 Uvod
Matlab sadri veoma fleksibilne funkcije za dvodimenzionalnu i trodimenzion-
alnu grafiku. Ovim funkcijama je mogue generisati krive ili povrxi, vrxiti
manipulacije sa dijagramima i menjati karakteristike i notaciju na dijagramima.
Svaki dijagram se kreira u prozoru slike, tj. u prozoru koji otvori Matlab za
vreme izvrxavanja funkcije koja kreira dijagram. Ako se u programu koristi vixe
funkcija koje generixu dijagrame, Matlab e pri izvrxavanju svake funkcije da
kreira novi prozor slike koji e da prebrixe prethodni. Da bi se zadrao svaki
novi dijagram u novom prozoru slike, potrebno je to uqiniti funkcijom
figure(n)
gde je n prirodan broj koji oznaqava broj slike. Ako se ovaj broj izostavi Matlab
sam dodeljuje sledeu vrednost.
Kada je potrebno na jednoj slici postaviti vixe nezavisnih dijagrama neophodno
je da se koristi funkcija
subplot(k,l,m)
gde prva dva argumenta dele sliku na sektore, poput matrice sa k vrsta i l kolona,
dok poslednji argument predstavlja redni broj dijagrama poqev od gornjeg levog ugla,
raqunajui s leva na desno i odozgo na dole.
Poxto svako generisanje dijagrama kreira novi prozor slike, da bi se u okviru
istog dijagrama nacrtalo vixe od jedne linije ili povrxi potrebno je “zamrznuti”
tekui prozor da bude aktivan naredbom
hold on
19
Poglavlje 4. Grafika 20
plot(x,y,s)
plot(-1, 2, ’bo’)
odnosno
x = xc + ρ · cos(θ),
y = yc + ρ · sin(θ).
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1 −0.5 0 0.5 1
t = 0:0.1:10;
T = 0.5:0.5:3;
K = 1;
[TT, tt] = meshgrid(T, t);
yy = K * (1 - exp( -tt./TT ));
plot(t, yy)
t = 0:0.1:10; T = 1; K = 1;
y = K * (1 - exp( -t/T ));
ydot = K / T * exp( -t/T );
plot(t, y, ’b’, t, ydot, ’m:’)
Poglavlje 4. Grafika 22
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10
ili
t = 0:0.1:10; T = 1; K = 1;
y = K * (1 - exp( -t/T ));
ydot = K / T * exp( -t/T );
plot(t, y, ’b’)
hold on
plot(t, ydot, ’m:’)
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10
6
y(t), dy(t)/dt
0
0 1 2 3 4 5 6 7
t [s]
Slika 4.4: Odziv i prvi izvod odziva sistema prvog reda sa grafiqkom opremom
slike.
4.4 Linije u 3D
Naredba kojom se crtaju linije u tri dimenzije je
plot3(x,y,z,s)
pri qemu su x, y i z bilo taqke ili nizovi taqaka, odnosno tripleti brojeva, vektora
iste duine, matrica istog tipa ili izraza koji kada se sraqunaju daju jednu od
prethodno nabrojanih veliqina. Argument s je string karakter kojim se definixe
boja taqke, odnosno linije, tip taqke na dijagramu i vrsta linije kao kod naredbe
plot.
Sledei skript crta heliks, slika 4.5.
t = 0:pi/50:10*pi;
Poglavlje 4. Grafika 25
40
30
20
10
0
1
0.5 1
0 0.5
0
−0.5 −0.5
−1 −1
4.5 Povrxi
Matlab raspolae monim funkcijama za trodimenzionalno prikazivanje povrxi,
kontura, zapremina, kao i kombinacija prethodno nabrojanih.
Osnovne funkcije za crtanje povrxi su surf i mesh.
Funkcija surf crta mreu qija su polja obojena, dok se kod funkcije mesh crtaju
granice polja na mrei, a sama polja ostaju bela. Kod naredbe surf granice polja su
crne boje, a boja polja zavisi od intenziteta z, dok mesh boja granice polja mree
odreena intenzitetom z.
Neka je funkcija v(x1 , x2 ) definisana kao
v(x1 , x2 ) = x21 + x22 + x1 x2 .
300
250
200
150
100
50
0
10
5 10
0 5
0
−5
−5
−10 −10
300
250
200
150
100
50
0
10
5 10
0 5
0
−5
−5
−10 −10
Na slici 4.9 prikazan je odziv sistema drugog reda na jediniqnu odskoqnu pro-
menu ulaza za razliqite vrednosti stepena priguxenja. Skript za taj primer je
close all, clear, pack
t = 0:0.1:10;
wn = 1;
zeta = 0:0.2:1;
y = zeros(length(t), length(zeta));
for k = 1:length(zeta)
y(:, k) = step(tf([wn^2], [1 2*zeta(k)*wn wn^2]), t);
end
mesh(t, zeta, y’)
xlabel(’t [s]’), ylabel(’\zeta’), zlabel(’y(t)’)
Poglavlje 4. Grafika 27
300
250
300
250
200
200
150
150
100
50
100
0
10
5 10 50
5
0
0
−5
−5
0
−10 −10
1.5
1
y(t)
0.5
0
1
0.8 10
0.6 8
0.4 6
4
0.2
2
0 0
ζ t [s]
5.1 Uvod
Kontrola toka izvrxavanja naredbi u okviru programa napisanog u Matlabu se vrxi
pomou sledee qetiri naredbe: while, if, for i switch. Sintaksa ovih naredbi
odreuje da se svaka od ovih naredbi zavrxava naredbom end. Dakle, sve naredbe
ili izrazi koji se nalaze izmeu jedne od naredbi kontrole toka programa i naredbe
end e se izvrxiti ako je zadovoljen odgovarajui logiqki uslov. U okviru jedne
naredbe kontrole toka je mogue ugnezditi i druge naredbe za kontrolu toka.
Kada se koriste naredbe za kontrolu toka programa, dobra programerska praksa
je da se naredbe koje se nalaze pod kontrolom tih naredbi uvuku nekoliko karak-
tera. Nazubljivanje programa znatno poveava qitljivost programa qime se olak-
xava traenje grexaka i odravanje programa. Kada se koristi Matlabov edi-
tor/dibager, nazubljivanje se vrxi automatski.
while uslov
naredbe
end
Naredba while ponavlja naredbe neograniqen broj puta sve dok je ispunjen uslov.
Uslov se najqexe daje kao izraz u obliku
N
X 1
SN =
n2
n=1
28
Poglavlje 5. Kontrola toka programa 29
n = 1; S = 0; eps = 1e-5;
while 1/n^2 > eps
S = S + 1/n^2;
n = n + 1;
end
fprintf(1,’Suma %d elemenata je S = %6.4f’,n,S)
For petlja ponavlja naredbe odreen broj puta. Qesto promenljiva = izraz ima oblik
brojachka promenljiva = N 1 : N 2 : N 3, pri qemu je N 1 inicijalna vrednost, N 3 krajnja
vrednost, a N 2 priraxtaj indeksne promenljive. Treba primetiti da N 3 moe da
bude manja od N 1, u kom sluqaju N 2 mora da bude negativno. Ako se N 2 izostavi,
podrazumeva se da se indeksna promenljiva uveava za jedan.
Primena for petlje e biti ilustrovana na sledeem primeru, gde je potrebno
sraqunati sumu kvadrata svih elemenata (m × n) matrice
A = magic(5);
[m, n] = size(A);
S = 0;
for k = 1:m
for l = 1:n
S = S + A(k,l)^2;
end
end
disp([’Suma kvadrata elemenata matrice A je: ’,num2str(S)])
5.4 If naredba
Opxti oblik naredbe if je
if uslov1
naredbe1
elseif uslov2
naredbe2
else
naredbe3
end
naredba nakon end. Ako uslov1 nije ispunjen, ispituje se uslov2. Ukoliko je taj uslov
ispunjen, izvrxavaju se naredbe2, a zatim se izvrxavanje programa nastavlja ispod
end. Ukoliko ni jedan od uslova nije ispunjen, izvrxavaju se naredbe3. Naredbe
elseif i else ne moraju obavezno da se koriste. Osim toga, mogue je koristiti
vixe od jedne elseif naredbe.
Naredba if moe da se koristi da se realizuje funkcija sign(x):
1 ako je x > 0,
sign(x) = 0 ako je x = 0,
−1 ako je x < 0.
Program kojim se ova funkcija realizuje je:
if x > 0
y = 1;
elseif x == 0
y = 0;
else
y = -1;
end
n = 1; suma = 0;
while 1
str = sprintf(’Unesite element broj %d: ’, n);
x = input(str);
if x <= 0 | x >= 50
disp([’Pogresan broj! Uneste ponovo!’])
continue;
else
suma = suma + x;
n = n + 1;
end
if n > 10
break;
end
end
Poglavlje 5. Kontrola toka programa 31
disp([’Suma = ’, num2str(suma)])
Najpre se izraqunava switch izraz, koji moe biti ili skalar ili string, a zatim
se proverava da li postoji case izraz sa istom vrednoxu, poqev od prvog. Ako po-
stoji case izraz, izvrxavaju se naredbe u oviru istog case-a, a zatim se prelazi na
prvu naredbu iza end. Ako ne postoji ni jedan case izraz koji odgovara switch izraz-
u, izvrxie se naredbeN+1. Za razliku od programskog jezika C, kada se izvrxe
naredbe u okviru jednog case-a, Matlab ne prolazi kroz preostale case-ove, pa se
zbog toga ne koristi naredba break.
Sledei program ilustruje upotrebu naredbe switch.
Funkcije
6.1 Uvod
Jedan od naqina da se grupixe sekvenca naredbi je u obliku skript datoteke sa
ekstenzijom ’.m’. Drugi oblik m-datoteke je funkcija. Funkcije su skript datoteke
koje kreiraju sopsteveni radni prostor i lokalne promenljive pod okriljem Matlaba.
Sve promenljive koje se kreiraju u okviru funkcije su lokalne za tu funkciju i
ne korespondiraju sa promenljivama istih imena u drugim skript ili funkcijskim
datotekama. Sve ugraene naredbe u Matlabu su funkcije ovog tipa. Upotrebom
funkcija uproxava se sloenost i poveava qitljivost izvornog kôda, izbegava se
dupliranje kôda, poveava portabilnost, itd.
Svakoj funkciji mora da se dodeli ime koje bi trebalo da bude smisleno i do-
voljno indikativno da ukazuje na to xta ta funkcija radi. Xta vixe, ime ’.m’
datoteke mora da bude isto kao i ime funkcije. Prva linija u funkciji predstavlja
prototip funkcije, qime se specificira broj promenljivih i njihov tip (skalar, vek-
tor, matrica) koje se prenose iz glavnog programa u funkciju i obratno. Komentare,
koji se nalaze neposredno ispod deklaracije funkcije, Matlab tretira kao help in-
formacije vezane za tu funkciju, i ispisuju se kada se u komandnoj liniji Matlaba
unese:
help ImeFunkcije
Na kraju funkcije se ne nalazi terminator karakter ili izraz kao xto je end kod
naredbi kontrole toka.
Kada se u komandnoj liniji napixe ime funkcije Matlab pokuxava da prepozna
funkciju po imenu. Preciznije, Matlab najpre proverava da li je ime funkcije
promenljiva. Ako to nije, proverava se da li ta funkcija ne pripada skupu in-
32
Poglavlje 6. Funkcije 33
Nakon poziva funkcije Odziv u radnom prostoru se naxla matrica y, koja ima dve
vrste i onoliko kolona koliko i vektor t.
Ako bi eleli da funkcija vrati obe sraqunate promenljive pojedinaqno, kôd
funkcije bi mogao da izgleda
a odgovarajui skript
t = 0:0.1:10;
tau = 1:5;
y1 = zeros(length(tau), length(t));
y2 = zeros(length(tau), length(t));
for k = 1:length(tau)
[y1(k,:) y2(k,:)] = odziv(t, tau(k), 1);
end
generalizuje kao
function ImeFunkcije(Argumenti)
6.2.3 Inline
Matlab dozvoljava da se naredbom inline kreira funkcija koja ne mora da se saquva
u posebnoj datoteci. Funkcija kreirana na ovaj naqin mora da bude saqinjena
iskljuqivo od Matlabovskih izraza i ne moe da poziva druge inline funkcije.
Ovakva funkcija moe da vraa samo jednu promenljivu (nikako vixe promenljivih
poreanih u vektor). U opxtem sluqaju naredba inline se koristi na sledei naqin
Izlaz =
Inline function:
Izlaz(t,tau,K) = K * (1 - exp( t/tau ))
y = Izlaz(0:0.1:10, 1, 1);
Matlab ima ugraenu funkciju koja trai rexenje f (x) = 0 unutar tolerancije t0
bilo u okolini x0 ili na intervalu [x1 x2 ]. Ova naredba u opxtem sluqaju je
oblika
fzero(ImeFunkcije,x0,opcije,p1,p2,. . .)
gde je ImeFunkcije ime funkcijske datoteke izmeu jednostrukih znakova navoda, ali
bez sufiksa “.m’’. Ako se koristi inline nisu potrebni znaci navoda. Na primer,
ili,
roots(c)
>> c = poly(r)
c =
1.0000 6.0000 11.0000 6.0000
conv(a,b)
Argument ImeFunkcije moe da bude ili ime funkcijske datoteke izmeu jedno-
strukih znakova navoda bez sufiksa “.m” ili identifikator funkcije definisane
sa inline. U svakom sluqaju mora da bude oblika, na primer
d2 y(t) dy(t)
2
+ 2ζwn + wn2 y(t) = wn2 u(t).
dt dt
Diferencijalna jednaqina moe da se, nakon uvoenja smene
y1 = y,
dy
y2 = ,
dt
napixe kao sistem dve diferencijalne jednaqine prvog reda
dy1
= y2 ,
dt
dy2
= −wn2 y1 − 2ζwn y2 + wn2 u.
dt
Sada moe da se napixe funkcija koja predstavlja sistem
1.4
1.2
0.8
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
close all
hold on
for k = 0:0.2:1
[tt, yy] = ode45(’DrugiRed’, [0 10], [0 0]’, [], k, 1, 1);
plot(tt, yy(:,1))
pause(0.1)
end
1.8
1.6
1.4
1.2
0.8
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
Slika 6.2: Jediniqni odskoqni odziv sistema drugog reda za razliqite vredosti ζ.