matlab
DESCRIPTION
predavanje iz matlabaTRANSCRIPT
-
5/21/2018 Matlab
1/40
PRIMJENA INENJERSKIHSOFTVERSKIH PAKETA
Doc. dr. Emir Skeji
-
5/21/2018 Matlab
2/40
Kratak pregled
(1) Funkcije(2) Relacijski i logiki operatori(3) Kontrola toka programa
2
-
5/21/2018 Matlab
3/40
Korisniki definirane funkcije
Funkcije izgledaju ba kao skripte, ali s JEDNOM razlikom Funkcije moraju imati deklaraciju
Help datoteka
Deklaracija funkcijeUlaziIzlazi
3
-
5/21/2018 Matlab
4/40
Korisniki definirane funkcije
Oblik deklaracije funkcije
Nema potrebe za return: Matlab vraa varijable ija seimena podudaraju sa onima u deklaraciji funkcije
Doseg varijabli: Bilo koja varijabla kreirana unutar funkcijea koja se ne vrati, nestaje nakon to se funkcija prestaneizvravati
function [x, y, z] = funName(in1, in2)
Mora postojati rezervisanarije: function Ime funkcije bi trebalo bitiisto kao i ime m-datoteke
Ako postoji vie od jednog izlaza,moraju biti u uglastim zagradama
Ulazi moraju biti specificirani
4
-
5/21/2018 Matlab
5/40
Funkcije: overloading
Ve su poznate funkcije zeros
size
length
sum
Pogledajte help datoteku za funkciju size ukucavajui help size
U help datoteci opisano je nekoliko naina da se pozove ova
funkcijaD = SIZE(X) [M,N] = SIZE(X) [M1,M2,M3,...,MN] = SIZE(X)M = SIZE(X,DIM) 5
-
5/21/2018 Matlab
6/40
Funkcije: overloading
Matlab funkcije su openito preoptereene (engl. overloaded) Mogu primiti promjenljiv broj ulaza Mogu vratiti promjenljiv broj izlaza
ta bi vratile sljedee naredbe: a=zeros(2,4,8); % n-dimenzionalne matrice su OK
D=size(a)
[m,n]=size(a)
[x,y,z]=size(a)
m2=size(a,2)
Vlastite funkcije mogu se preopteretiti pomou promjenljivihulaznih i izlaznih argumenata (vidi varargin, nargin,varargout, nargout)
Iskoristite prednosti preoptereenih metoda da biste va kduinili preglednijim! 6
-
5/21/2018 Matlab
7/40
Funkcije: Vjeba 1
Uzmite skriptu koju smo napisali za izraun ukupnog brojabodova studenta i pretvorite je u funkciju
Ulazi trebaju biti vektor-red scores vektor-red weights, iste duine kao iscores
Izlaz treba bitiSkalar: ukupan broj bodova (overall score)
Pretpostavite da korisnik poznaje ulazna ogranienja (nemapotrebe provjeravati da li su ulazi u ispravnom
formatu/veliini)
Funkciji dajte ime overallScore.m
7
-
5/21/2018 Matlab
8/40
Funkcije: Vjeba 1
8
-
5/21/2018 Matlab
9/40
Funkcije: Vjeba 2
Skriptna datoteka sabiranje.mclear allclc
a=input('Upii prvi broj -> ');b=input('Upii drugi broj-> ');fprintf('Suma prvog i drugog broja iznosi: %g\n',
suma(a,b))
Funkcijska datoteka suma.mfunction y=suma(a,b)% rauna sumu dva brojay=a+b;
Rezultati u komandnom prozoru nakon pokretanja skriptnedatoteke: Upii prvi broj -> 5 Upii drugi broj-> 7 Suma prvog i drugog broja iznosi: 12 9
-
5/21/2018 Matlab
10/40
Funkcije: Vjeba 3
Funkcija za pronalaenje najveeg elementa vektora X
10
-
5/21/2018 Matlab
11/40
Funkcije: Vjeba 4
Napisati funkciju sa sljedeom deklaracijom:function plotSin(f1)
U funkciji, nacrtati sinusni talas s frekvencijom f1, naintervalu [0,2]:
Za postizanje dobrog uzorkovanja koristiti 16 taaka poperiodu.
1sin x
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
11
-
5/21/2018 Matlab
12/40
Funkcije: Vjeba 4
Napisati funkciju sa sljedeom deklaracijom:function plotSin(f1)
U funkciji, nacrtati sinusni talas s frekvencijom f1, naintervalu [0,2]:
Za postizanje dobrog uzorkovanja koristiti 16 taaka poperiodu.
U m-datoteci spremljenoj kao plotSin napisati sljedee: function plotSin(f1)
x=linspace(0,2*pi,f1*16+1);figureplot(x,sin(f1*x))
1sin x
12
-
5/21/2018 Matlab
13/40
Funkcije: Vjeba 5
Napisati funkciju sa sljedeom deklaracijom:function m = dijagonala(x)
Funkcija uzima vektor x i vraa matricu m izgraenu nasljedei nain:
svi rubni elementi matrice su jednaki 1 sporednu dijagonalu submatrice ine elementi vektora x.
Funkciju implementirati bez petlji.
Primjer poziva funkcije:>> m = dijagonala([4 1 10 8 5])m =
1 1 1 1 1 1 1
1 0 0 0 0 5 11 0 0 0 8 0 11 0 0 10 0 0 11 0 1 0 0 0 11 4 0 0 0 0 11 1 1 1 1 1 1 13
-
5/21/2018 Matlab
14/40
Funkcije: Vjeba 5
Napisati funkciju sa sljedeom deklaracijom:function m = dijagonala(x)
Funkcija uzima vektor x i vraa matricu m izgraenu nasljedei nain:
svi rubni elementi matrice su jednaki 1 sporednu dijagonalu submatrice ine elementi vektora x.
Funkciju implementirati bez petlji.
14
function m = dijagonala(x)
m = ones(length(x)+2);
m(end-1:-1:2,2:end-1) = diag(x);
dijagonala.m
-
5/21/2018 Matlab
15/40
Kratak pregled
(1) Funkcije(2) Relacijski i logiki operatori(3) Kontrola toka programa
15
-
5/21/2018 Matlab
16/40
Relacijski operatori
Matlab veinom koristi standardne relacijske operatorejednako == nijejednako ~= vee od > manje od < vee ili jednako >=
manje ili jednako
-
5/21/2018 Matlab
17/40
Vjeba: Relacijski operatori
1 3 2
2 5 4A
6 3 3
1 5 2B
>> A>=B
ans =
0 1 0
1 1 1
>> A>2
ans =0 1 0
0 1 1
>> A~=B
ans =
1 0 1
1 0 1
17
-
5/21/2018 Matlab
18/40
Vjeba: Logiki operatori
1 3 2A=
2 5 4
6 3 3B=
1 5 2
>> A>2&B> ~(A> A&A>2
ans =0 1 0
0 1 1
18
-
5/21/2018 Matlab
19/40
Kratak pregled
(1) Funkcije(2) Relacijski i logiki operatori(3) Kontrola toka programa
19
-
5/21/2018 Matlab
20/40
if/else/elseif
Osnovna kontrola toka, zajednika svim jezicima Matlab sintaksa je pomalo jedinstvena
IF
ifcond
naredbe;end
ELSE
ifuslovni_izraz
naredbe1;else
naredbe2;
end
ELSEIF
ifcond1
naredbe1;elseif cond2
naredbe2;
else
naredbe3;
end
Nema potrebe za zagradama: blokovi naredbi su izmeurezervisanih rijei
Uslovni izraz (conditional
statement): evaluira se
kao true ili false
20
-
5/21/2018 Matlab
21/40
switch, case i otherwise
Naredba switch u Matlabu izvrava grupu instrukcija ilinaredbi na osnovu vrijednostivarijable iliizraza. To je vrstanaredbe za kontrolu izbora (engl. selection controlstatement) koja postoji u najmodernijim imperativnimprogramskim jezicima.
Kljune rijei case i otherwise oznaavaju i razdvajajublokove naredbi. Izvrava se samo prvi case za koji jeispunjen uslov. Za zavretak naredbe switch obavezno sekoristi end.
21
-
5/21/2018 Matlab
22/40
switch, case i otherwise
Sintaksa je:switch switch_exprcase case_exprstatement
...
case {case_expr1,case_expr2,case_expr3,...}
statement...
otherwisestatement
...
end
MATLAB switch se ne procesira u potpunosti. Ako jeprvi caseiskazistinit, ostali case iskazi nee se izvravati. Dakle, breakiskazi nisu potrebni.
22
-
5/21/2018 Matlab
23/40
Vjeba: switch, case i otherwise
Izvriti odreeni blok kda ako je string 'boja' postavljen na:boja = 'ruiasta';
switch lower(boja)case {'crvena', 'svijetlocrvena', 'ruiasta'}
disp('Boja je crvena')
case 'plava'disp('Boja je plava')
case 'bijela'disp('Boja je bijela')
otherwisedisp('Nepoznata boja')
end
Matlab-ov odgovor je:
Boja je crvena>> 23
-
5/21/2018 Matlab
24/40
for
for petlje: koristiti za konaan broj iteracija MATLAB sintaksa:
for n=1:100naredbe;
end
Varijabla petlje se definira kao vektorje skalar unutar bloka naredbi
ne mora imati uzastopne vrijednosti (ali je obino jasnijeako su uzastopne)
Blok naredbiBilo ta izmeu for i end
Varijabla petlje
Blok naredbi
24
-
5/21/2018 Matlab
25/40
while
while je vrsta petlje gdje se: ne mora znati broj iteracija
Blok naredbi e se izvravati sve dok je logiki izraz taan Vodite rauna da ne kreirate beskonanu petlju!
WHILE
while logicki_izraznaredbe;end
25
-
5/21/2018 Matlab
26/40
Vjeba 1: Kontrola toka
Napisati funkciju koja rauna faktorijel cijelog broja Nkoritenjem petlje (moete koristiti for ili while petlju). Akoje ulaz manji od 0, vratiti NaN. Testirati je koristeinekoliko vrijednosti.
function a = factorial(N)
if N
-
5/21/2018 Matlab
27/40
Vjeba 2: Kontrola toka
Napisati funkciju FtoC(donja,gornja,korak) koja pretvaratemperaturu iz stepena Fahrenheita u stepene Celsiusa. Funkcija prima tri argumenta i daje tabelarni prikaz
temperatura u opsegu od donja do gornja sa korakomkorak.
Funkcija nema povratnih argumenata.
Tabelarni prikaz temperatura formatirati tako da svakavrijednost temperature ima dva decimalna mjesta.
Formula za konverziju glasi
=
( )
27
-
5/21/2018 Matlab
28/40
Vjeba 2: Kontrola toka
Napisati funkciju FtoC(donja,gornja,korak) koja pretvaratemperaturu iz stepena Fahrenheita u stepene Celsiusa. Funkcija prima tri argumenta i daje tabelarni prikaz temperatura u
opsegu od donja do gornja sa korakom korak. Funkcija nema povratnih argumenata. Tabelarni prikaz temperatura formatirati tako da svaka vrijednost
temperature ima dva decimalna mjesta.
Formula za konverziju glasi =
( )
function FtoC(donja,gornja,korak)
fahr = donja;
fprintf('%6s\t%6s\n','Fahr.','Cels.');
while (fahr
-
5/21/2018 Matlab
29/40
Vjeba 3: Kontrola toka
Ispisati trougao zvjezdica u n redova
n = input('Unesite broj redova: ');for ii = 1:n,
for jj = 1:ii,
fprintf('*');endfprintf('\n');
end
29
-
5/21/2018 Matlab
30/40
Vjeba 4: Kontrola toka
Odrediti broj pozitivnih brojeva u vektoru
x = input('Unesite vektor: ');count = 0;for ii = 1:length(x)
if (x(ii) > 0)count = count + 1;
endendfprintf('Broj pozitivnih vrijednostiu vektoru je %d\n', count);
30
-
5/21/2018 Matlab
31/40
Vjeba 5: Kontrola toka
Odrediti indeks najveeg broja u vektorux = input('Unesite vektor: ');
max_vr = x(1);max_indeks = 1;for ii = 2:length(x)
if (x(ii) > max_vr)max_vr = x(ii);max_indeks = ii;
endendfprintf('Maks. vrijednost je %d\n', max_vr);fprintf('Indeks maks. vrijednosti je %d\n',
max_index);
ta ako se maksimalna vrijednost pojavi vie odjednom?
31
-
5/21/2018 Matlab
32/40
Vjeba: Uslovni izrazi
Modificirajte funkcijuplotSin(f1) tako da prima dvaulaza:plotSin(f1,f2)
Ako je broj ulaznih argumenata 1, izvrite naredbu plotkoju ste ranije napisali. U suprotnom, ispiite liniju teksta'Zadali ste dvije ulazne vrijednosti'
Uputa: Broj ulaznih argumenata je u ugraenoj varijablinargin
32
-
5/21/2018 Matlab
33/40
Vjeba: Uslovni izrazi
Modificirajte funkcijuplotSin(f1) tako da prima dva ulaza:plotSin(f1,f2)
Ako je broj ulaznih argumenata 1, izvrite naredbu plot koju steranije napisali. U suprotnom, ispiite liniju teksta 'Zadali stedvije ulazne vrijednosti'
Uputa: Broj ulaznih argumenata je u ugraenoj varijabli narginfunction plotSin(f1,f2)
x=linspace(0,2*pi,f1*16+1);figure
if nargin == 1plot(x,sin(f1*x));elseif nargin == 2
disp('Zadali ste dvije ulazne vrijednosti');end
33
-
5/21/2018 Matlab
34/40
Naredba break
Naredbabreak u MATLAB-u se koristi za izlazak iz petlje for iliwhile iskaza, to jest, prekida izvravanje petlje.
Pretpostavimo da je potrebno izraunati vrijednost izraza 50 za sve cijele brojeve u intervalu [-10,10], ali samodok je 50 0.
% Petlja ispod ce izracunavati vrijednosti izraza% k^2-50 za sve vrijednosti trazenog k sve dok% izraz ne postane negativan
for k=-10:1:10if (k^2-50
-
5/21/2018 Matlab
35/40
Naredba continue
Naredba continue u MATLAB-u se koristi za prosljeivanjekontrole na sljedeu iteraciju u for iwhile iskazima.
Pretpostavimo da je potrebno izraunati i ispisati vrijednostizraza 50 za sve cijele brojeve u intervalu [-10,10], alisamo ako je 50 > 0.
% Petlja ispod ce izracunati i ispisati% vrijednosti izraza k^2-50 za sve vrijednosti% trazenog k za koje je k^2-50 pozitivno.
for k=-10:1:10if (k^2-50
-
5/21/2018 Matlab
36/40
try/catch
Kada imate iskaze u kdu koji mogu dati neeljenerezultate, stavite ih u try-catch blok koji e "uhvatiti"greke i obraditi ih na prikladan nain.
Primjer ispod prikazuje try-catch blok unutar funkcije kojamnoi dvije matrice:
function pomnoziMatrice(A, B)
try
X = A * B
catch
disp '** Greka pri mnoenju A * B'end
36
-
5/21/2018 Matlab
37/40
try/catch
try-catch blok je podijeljen u dvije sekcije. Prva sekcijapoinje sa try a druga sa catch. Blok se zavrava sa end: Sve naredbe u segmentu try se izvravaju normalno,
kao da se radi o regularnom kdu. Meutim, ako bilokoja od ovih operacija rezultira grekom, MATLABpreskae preostale iskaze u try segmentu i skae na
catch segment bloka. Segment catch rukuje grekom. U ovom primjeru,
prikazuje optu poruku o greki. Ako postoje razliitevrste greaka koje se mogu dogoditi, moete utvrditi dokoje je greke dolo i reagirati na tu specifinu greku.Takoer, moete pokuati da ispravite greku u catch
sekciji.
37
-
5/21/2018 Matlab
38/40
Evaluacija stringa: eval
Funkcija eval interpretira stringove koji sadre Matlabizraze
Definirati izraz ili funkciju kao string>> var35 = 'xseven(5)';
>> x = 'sin(n)';
Evaluirati s funkcijom eval>> thirtyfive = eval(var35)
thirtyfive =
35
>> n = 1;
>> y = eval(x)
y =
0.8415
Funkcija eval uitava cijeli komandni interpreter
function y = xseven(x)
y=x*7;
end
xseven.m
38
-
5/21/2018 Matlab
39/40
Evaluacija stringa: feval
Neke funkcije kao ulazni argument uzimaju ime drugefunkcije, koja je specificirana kao string Funkcijski stringovi mogu biti direktno evaluirani
Funkcija feval uitava samo ono to je potrebno time je ibra
Ulazi funkcije su zasebni argumenti Primjeri
>> sample35 = feval('xseven',5)
sample35 =
35
>> n = 1;>> x = 'sin(n)';
>> z = feval('asin', eval(x))
z =
1 39
-
5/21/2018 Matlab
40/40
Kraj predavanja 4
(1) Funkcije(2) Relacijski i logiki operatori(3) Kontrola toka programa
Nadam se da nije biloprevie!
40