matlab

40
PRIMJENA INŽENJERSKIH SOFTVERSKIH PAKETA Doc. dr. Emir Skejić

Upload: edin-hujdur

Post on 11-Oct-2015

10 views

Category:

Documents


0 download

DESCRIPTION

predavanje iz matlaba

TRANSCRIPT

  • 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