Matlab Manual

Embed Size (px)

Citation preview

  • Sveuilini studijski centar za strune studije

    Zavod za matematiku i fiziku

    Uvod u Matlab Verzija 1.1

    Karmen Rivier, Arijana Burazin Miura 1.11.2008

  • 1

    Uvod

    Matlab je interaktivni sistem namijenjen izvoenju numerikih izrauna. Omoguava nam jednostavan rad s matricama, crtanje funkcija i podataka, implementaciju algoritama i povezivanje s programima pisanim u drugim jezicima. Prvu verziju razvio je 1970. godine Cleve Moler, ef katedre za informatiku na University of New Mexico. Danas je Matlab komercijalni proizvod tvrtke Mathworks i ima vie od milion korisnika.

    Pokretanje

    Na Windows sistemima Matlab pokreemo dvostrukim klikom na Matlab ikonu na desktopu ili biranjem Matlab-a u Start izborniku. Daljnje naredbe se ukucavaju u komandnoj liniji oznaenoj sa >>. Odabirom izbornika File/Preferences moete promijeniti default postavke Matlab-a (font, boju,...).

    Help/Pomo

    Ukoliko vam je potrebna pomo tokom rada, pozivom help help dobit ete detaljan opis help funkcije. Ako vam je potrebna pomo za neko tono odreeno poglavlje, npr.general, unesete u komandnu liniju help general. S obzirom na veliki obim ispisanih informacija, ukoliko elite da one budu prikazane jedna po jedna, prvo morate unijeti naredbu more on, pa tek onda help general. Nakon toga, biranjem bilo koje tipke, na ekranu dobivate idui slijed informacija. Naredbom helpwin ili helpdesk otvara se interaktivni help prozor. Drugi nain pozivanja help prozora je biranjem izbornika Help/MATLAB Help.

    1. Sintaksa, konstante, varijable

    Brojevi

    Matlab razlikuje nekoliko razliitih vrsta brojeva:

    Cjelobrojni npr. 674, -674 Realni 1.234 Kompleksni 3+3i

    te posebni ili specijalni brojevi: Inf - beskonano (npr. rezultat koji dobijemo kad broj dijelimo s 0)

    NaN Not a number (npr. rezultat kod 0/0)

  • 2

    eps strojni epsilon, ocjena greke zaokruivanja realmin - vrijednost najmanjeg realnog broja realmax - vrijednost najveeg realnog broja i imaginarna jedinica (j takoer ima vrijedost imaginarne jedinice) pi - pi ans - automatski poprima vrijednost izraza kad izraz nije pridruen varijabli ( o tome vie u poglavlju Varijable)

    Formati

    Korisnik sam bira u kojem formatu e Matlab prikazati brojeve. To utjee iskljuivo na prikaz broja a ne i na nain na koji su izrauni izvreni i pohranjeni (sve kalkulacije Matlab izvodi koristei dvostruku preciznost double precision nain zapisa). Npr. pogledajmo kvocijent 4/3 prikazan u razliitim formatima:

    format short 1.3333 format short e 1.3333e+000 format long 1.33333333333333 format long e 1.333333333333333e+000 format rational 4/3 format bank 1.33

    Eksponencijalni zapis (formati koji koriste 'e' u zapisu) je uglavnom koriten za prikaz vrlo velikih, odnosno vrlo malih brojeva:

    -1.34567e+04=-13456.7 -1.34567e-01=-0.134567

    Naredba format compact brie prazne linije, dozvoljavajui tako prikaz vie informacija na ispisu. Ukoliko prazne linije elimo vratiti nazad, to radimo naredbom format loose.

    Aritmetike operacije

    Pogledajmo kako Matlab koristimo kao kalkulator.

    Aritmetika operacija Simbol Zbrajanje oduzimanje mnoenje dijeljenje potenciranje

    + -

    *

    / ili \ ^

  • 3

    MATLAB ima dvije operacije dijeljenja / - desno dijeljenje i \ - lijevo dijeljenje. One ne daju isti rezultat:

    >>47/3 ans = 15.6667 >>47\3 ans = 0.0638

    Primjetite da je rezultat od 47\3 jednak onom od 3/47.

    Matlab vodi rauna o prioritetima raunskih operacija. Prema tome, prvo izraunava vrijednosti u zagradama, zatim potenciranje, nakon toga operacije * i / (poevi s lijeva na desno) i na kraju operacije + i (s lijeva na desno). Npr:

    >>1+5/4*3 >>ans = 4.7500

    Matlab je prvo izraunao vrijednost izraza 5/4, to pomnoio s 3 i na kraju tu vrijednost dodao jedinici. Meutim ako je ono to ste htjeli izraunati vrijednost izraza

    3*451+

    onda morate

    koristiti zagrade:

    >>(1+5)/(4*3) >>ans = 0.5000

    Da bi uvidjeli vanost pravilne uporabe zagrada, pogledajte idui primjer:

    Matematiki izraz Matlabov zapis Vrijednost

    2284 ++

    22

    84+

    +

    2284

    +

    +

    2284+

    +

    22/84 ++

    ( ) 22/84 ++

    ( ) ( )22/84 ++

    ( )22/84 ++

    10

    8

    3 6

  • 4

    Logiki i relacijski operatori

    Operator Simbol jednako nije jednako manje, manje ili jednako vee,vee ili jednako i ili ne

    ==

    ~=

    = & | ~

    Primjer upotrebe:

    >> 5> 5>13 ans = 0

    Unoenje izraza 5> x=7; >> x > 3 | x == -3 ans = 1

    Varijable

    >> 3-2^4 ans = -13 >> ans*5 ans = -65

    Rezultat prve kalkulacije Matlab oznaava kao ans i koristi ga u drugoj kalkulaciji gdje je njegova vrijednost promijenjena i sad iznosi -65. Prema tome, ans je redefinirana varijabla u koju Matlab smjeta trenutnu vrijednost izrauna ukoliko korisnik ne specificira drukije.

    Za pohranjivanje vrijednosti preporuljivo je definirati vlastite varijable.

  • 5

    Ime varijable moe se sastojati od bilo koje kombinacije slova i znamenaka poevi sa slovom. Znakovi nisu dozvoljeni, dok koritenje specijalnih/rezerviranih imena kao to su eps, pi, Inf nije preporuljivo.

    >> x = 3-2^4 x =

    -13 >> y = x*5 y = -65

    Sada x ima vrijednost -13 , a y -65 i oni mogu biti koriteni u narednim raunima. Ukratko, da bi varijablu mogli koristiti na desnoj strani nekog izraza, prethodno joj moramo pridodati neku vrijednost.

    Ukoliko ne elimo na zaslonu vidjeti rezultate meuoperacija, izraz zavrimo s ; (toka-zarez):

    >> x=-13; >>y = 5*x y = -65

    Pored toga ; slui za razdvajanje vie naredbi u jednom redu. Ukoliko nam je naredba predugaka za jedan red dodavanjem na kraju tog reda ... ista se nastavlja u sljedeem redu.

    Naredba who (whos) daje listu svih koritenih varijabli. Naredba clear brie navedenu varijablu iz tekueg radnog prostora, a clear all brie vrijednost svih varijabli. clc brie/isti komandni prozor i postavlja kursor na vrh prozora

    Naredba % je koritena za komentare i Matlab ignorira cijelu liniju to slijedi nakon tog znaka.

    Ukoliko elite prekinuti Matlab u izvrenju neke naredbe (naprimjer zbog beskonane petlje u pogreno napisanom m-file-u) to radite istovremenim pritiskom na ctrl+c. Ovaj nain nije preporuljiv, ali je u nekim situacijama neophodan.

    Matlab nam omoguava jednostavno (ponovno) pozivanje jednom uneenih naredbi. Opetovanim koritenjem tipki (odnosno ) prikazivat e nam se prethodno unoene naredbe i ukoliko neku od njih elimo ponovo izvriti (po potrebi je moemo i izmijeniti) samo pritisnemo tipku enter. Unoenjem npr. naredbe p , ponovo e biti pozvana naredba koja poinje slovom p a posljednja je izvrena.

  • 6

    2. Matrice, unos matrica, operacije s matricama, determinante

    Osnovni objekt u Matlabu je matrica, kao to i samo ime kae (MATrix LABoratory). Matrica nm je pravokutna tabela brojeva koje se sastoji od m redaka i n stupaca. U matematici matrice obino prikazujemo u okruglim ili uglatim zagradama.

    Matlab ak i skalare tretira kao matrice (tipa 11 ). Da bi u Matlab unijeli matricu, potrebno je: - koristiti uglate zagrade [] - elemente retka razvojiti zarezima , ili praznim mjestom - retke razdvojiti toka zarezom ; ili prei u novi red (tipka enter)

    Matrice

    Na primjer za m = 2; n = 3 imamo matricu tipa 32 kao to je naredna

    A =[5 7 9 1 -3 -7]

    Da bismo unijeli tu matricu u Matlab, tipkamo red po red.

    >> A = [5 7 9 1 -3 -7] A = 5 7 9 1 -3 -7

    Redovi mogu biti odvojeni i toka zarezom a elemente moemo razdvojiti i zarezom:

    >> B = [-1 2 5; 9 0 5] B = -1 2 5 9 0 5 >> C = [0, 1; 3, -2; 4, 2] C = 0 1 3 -2 4 2

    Dvotoka : (engl. colon) vrlo je koristan znak u MATLAB-u. Evo samo nekih primjera njenog koritenja: Ako npr. drugi redak prije definirane matrice A elimo pospremiti u matricu D, koristimo naredbu D=A(2,:)

    >> D=A(2,:) D = 2 4 6

  • 7

    Slino, trei stupac matrice A dat e nam naredba E=A(:,3)

    >>E=A(:,3) E = -1 6

    Pogledajte to dobijemo iduom naredbom:

    >> E=A(2,2:3) E = -3 -7

    Vektori

    Vektor (redak i stupac) su poseban sluaj matrice, kod njih je jedna od dimenzija jednaka 1. Broj lanova vektora jo se naziva duljina (length) vektora a lanovi se jo nazivaju elementi ili komponente vektora. Razmotrimo prvo rad s vektorom retkom: To je lista brojeva odvojenih ili zarezima ili praznim mjestom. Elementi moraju biti prikazani u uglatim zagradama:

    >> v = [ 1 3, sqrt(5)] v = 1.0000 3.0000 2.2361 >> length(v) ans = 3

    Pravilno koritenje praznog mjesta je od presudne vanosti. Pogledajmo idui primjer:

    >> v2 = [3+ 4 5] v2 = 7 5 >> v3 = [3 +4 5] v3 = 3 4 5

    S vektorima jednake duljine moemo izvoditi neke aritmetike operacije. Takvi su naprimjer prethodno spomenuti vektori v i v3. .

    >> v + v3 ans = 4.0000 7.0000 7.2361

  • 8

    >> v4 = 3*v v4 = 3.0000 9.0000 6.7082 >> v5 = 2*v -3*v3 v5 = -7.0000 -6.0000 -10.5279 >> v + v2 ??? Error using ==> + Matrix dimensions must agree.

    Ova poruka upozorava nas da matrice nisu jednakih dimenzija.

    Vektor stupac konstruiramo na slian nain. Elemente razdvajamo znakom ; ili prelaskom u novi red.

    >> c = [ 1; 3; sqrt(5)] c = 1.0000 3.0000 2.2361

    Postoji brzi nain za generiranje nekih retanih vektora:

    >> 1:4 ans = 1 2 3 4 >> 3:7 ans = 3 4 5 6 7

    Openita sintaks je a : b : c i time je generiran vektor iji prvi element ima vrijednost a, a ostali elementi se dobiju uveavanjem a za vrijednost b sve dok je ta suma manja od c.

    >> 0.32:0.1:0.6 ans = 0.3200 0.4200 0.5200

    >> H=10:2:3 H = Empty matrix: 1-by-0

    Prethodna naredba kao rezultat daje praznu matricu jer je poetni element vei od zavrnog, a korak uveavanja pozitivan.

  • 9

    Matrine funkcije ugraene u Matlab

    Funkcija Argumenti to radi zeros(m,n) m, n su prirodni brojevi Generira nul-matricu od m redaka i n stupaca. eye(n) n je prirodni broj Generira jedininu matricu reda n. diag(X) X je jednoredna

    ili jednostupana matrica Generira dijagonalnu matricu iji su elementi redom elementi od X.

    rank(A) A je proizvoljna matrica Rauna rang matrice A. size(A) A je proizvoljna matrica Ispisuje broj redaka i stupaca matrice A. size(A,1) A je proizvoljna matrica Ispisuje broj redaka matrice A. size(A,2) A je proizvoljna matrica Ispisuje broj stupaca matrice A. sum(A) A je proizvoljna matrica Ako je A jednoredna ili jednostupana, zbraja sve elemente

    od A, a ako nije, zbraja ih po stupcima. prod(A) A je proizvoljna matrica Ako je A jednoredna ili jednostupana, mnoi sve elemente

    od A, a ako nije, mnoi ih po stupcima. det(A) A je kvadratna matrica Rauna determinantu matrice A. inv(A) A je kvadratna matrica Rauna inverznu matricu matrice A.

    Pogledajmo primjere koritenja nekih od navedenih funkcija:

    >> A = [5 7 9; 1 -3 -7]; >> size(A) ans = 2 3

    >> A' ans = 5 1 7 -3 9 -7

    Dijagonalnu matricu umjesto unoenja svih elemenata moemo generirati i na idui nain:

    >> d = [-3 4 2]; D = diag(d) D = -3 0 0 0 4 0 0 0 2

    U sluaju da funkciju diag primjenimo na matricu, dobit emo njene dijagonalne elemente:

    >> diag(A) ans = 5 -3

  • 10

    Funkcija sum zbraja elemente po stupcima

    >> sum(A) ans = 6 4 2

    U iduem sluaju, dvostrukom primjenom funkcije sum dobivamo sumu svih elemenata matrice (pogledajte jo jednom definiciju funkcije sum):

    >> sum(sum(A)) ans = 12

    Aritmetike operacije s matricama

    Operacija Znak Napomena Zbrajanje matrica + Matrice moraju biti istih dimenzija. Oduzimanje matrica - Matrice moraju biti istih dimenzija. Mnoenje matrice brojem * Mnoenje matrice matricom * Matrice moraju biti ulanene. Desno dijeljenje matrica / Matricu ne moemo dijeliti matricom! Lijevo dijeljenje matrica \ Potenciranje matrice ^ Matrica mora biti kvadratna. Transponiranje matrice Mnoenje elemenata dviju matrica lan po lan

    .* Matrice moraju biti istih dimenzija. S lijeve ili desne strane znaka moe biti i broj.

    Desno dijeljenje elemenata dviju matrica lan po lan

    ./ Matrice moraju biti istih dimenzija. S lijeve ili desne strane znaka moe biti i broj.

    Lijevo dijeljenje elemenata dviju matrica lan po lan

    .\ Matrice moraju biti istih dimenzija. S lijeve ili desne strane znaka moe biti i broj.

    Potenciranje elemenata dviju matrica lan po lan

    .^ Matrice moraju biti istih dimenzija. S lijeve ili desne strane znaka moe biti i broj.

    Posebno obratite panju na operacije koje poinju tokom. Zovemo ih operacije po pozicijama. One uglavnom nemaju matematiki ekvivalent osim u nekim posebnim sluajevima.

    Pojasnit emo poblie neke od navedenih operacija, odnosno ukoliko je mogue, nai emo njihove matematike ekvivalente:

  • 11

    1. mnoenje, dijeljene i potenciranje vektora Uzmimo dva vektora u i v jednake duljine n. Neka je u retani a v stupani vektor. Skalarni produkt vektora definira se kao skalar dobiven na sljedei nain:

    =

    =

    n

    iiivuuv

    1

    Neka je u=[1 2 3] a v=

    654

    . Pogledajmo emu je jednako uv:

    3218104635241 =++=++=uv

    U Matlabu to moemo izraunati ovako:

    >> x=[1 2 3]; y=[4; 5; 6]; >> x*y ans = 32

    Gore definirane vektore mogli bismo pomnoiti i ovako:

    [ ]nnvuvuvuvuvu 332211=

    Rezultat je vektor jednake duljine kao i vektori u i v, i dobiven je mnoenjem odgovarajuih elemenata dvaju vektora. Odgovarajui operator u Matlabu je .* a za vektore iz prethodnog izrauna, odgovarajui umnoak dobili bi transponirajui jedan od vektora, kako bi dobili vektore istog tipa (za dimenzije znamo da su jednake):

    >> x.*y' ans = 4 10 18

    >> x'.*y ans = 4 10 18

    to se tie dijeljenja dvaju vektora, ne postoji matematiki ekvivalent te operacije. Meutim, u Matlabu je za vektore iste duljine i istog tipa operacijom ./ definirano dijeljenje odgovarajuih elemenata. Poblie: [ ]nn vuvuvuvu ////. 2211=

  • 12

    Odnosno za vektore x i y:

    >> x./y' ans = 0.2500 0.4000 0.5000

    Ukoliko elimo kvadrirati elemente vektora u, to moemo napraviti na dva naina, ili kao u.*u ili jednostavnije u.^2

    >> x.*x ans = 1 4 9

    >> x.^2 ans = 1 4 9

    U kombinaciji s drugim operandima potenciranje, naravno ima prednost:

    >> z=y'; >> z.*x.^2 ans = 4 20 54

    2. mnoenje matrica Da bi dvije matrice mogli pomnoiti, one moraju biti ulanane, odnosno ako je matrica A tipa

    nm onda matrica B mora biti tipa pn (broj stupaca matrice A mora odgovarati broju redaka matrice B). Na taj nain, operand * vri standardno mnoenje matrica.

    >> A=[1 2 3; 4 5 6]; >> B=[1 2; 3 4; 5 6]; >> A*B ans = 22 28 49 64

    >> B*A ans = 9 12 15 19 26 33 29 40 51

    U ovom sluaju bilo je mogue izvriti i operaciju B*A jer su matrice B i A ulanane. Primjetite da je A*B B*A.

    Operandom .* definirano je mnoenje po pozicijama i matrice moraju biti istog tipa.

  • 13

    >> C=B'; >> size(A) ans = 2 3 >> size(C) ans = 2 3

    Vidimo da su matrice A i C istog tipa, stoga:

    >> A.*C ans = 1 6 15 8 20 36

    Pogledajmo naredni primjer:

    >>a=rand(3) >>a = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214

    Naredbom rand(3) generirana je matrica tipa 33 sastavljena od sluajnih brojeva.

    >> m=max(a) m = 0.9501 0.8913 0.8214

    Naredbom max dobili smo vektor koji sadri maksimalne vrijednosti stupaca matrice a. Ukoliko na vektor m primijenimo narebu max, dobit emo maksimalni element vektora.

    >>max(m) ans = 0.9501

    Ukoliko nas interesira pozicija maksimalnog elementa, to dobivamo sa:

    >> [v,ind]=max(m) v = 0.9501 ind = 1

  • 14

    Ponekad je praktino veliku matricu generirati uz pomo prethodno definiranih manjih matrica:

    >> D=[1 2; 3 4; 5 6]; X=[7; 8; 9]; >> E=[D X] E = 1 2 7 3 4 8 5 6 9

    Na ovaj nain matrica X dodana je pored matrice D, a u iduem primjeru matrice su postavljene jedna iznad druge:

    >> Y=[10 11]; >> F=[D; Y] F = 1 2 3 4 5 6 10 11

    Sada emo pokazati kako generirati tablicu koja e nam sluiti za usporedbu vrijednosti dviju funkcija za odreeni raspon vrijednosti argumenta:

    >>x = (0:0.1:0.5)'; [x 4*sin(3*x) 3*sin(4*x)]

    ans = 0 0 0 0.1000 1.1821 1.1683 0.2000 2.2586 2.1521 0.3000 3.1333 2.7961 0.4000 3.7282 2.9987 0.5000 3.9900 2.7279

    3. Definirane funkcije, funkcijski m-file

    Zajedniko obiljeje svih funkcija je da se argument uvijek pie u zagradi.

    Tabela nekih matematikih funkcija definiranih u Matlabu:

    Ime Znaenje Poziv Rezultat Sin Sinus sin(3*pi)

    ans = 3.6738e-016

    Cos Kosinus cos(2*pi/3)

    ans = -0.5000

  • 15

    Tan Tangens tan(pi/4) ans = 1.0000

    Asin arkus sinus asin(1) ans = 1.5708

    Acos arkus kosinus acos(1)

    ans = 0

    Atan arkus tangens atan(1)

    ans = 0.7854

    Sinh hiperbolni sinus sinh(0)

    ans = 0

    Cosh hiperbolni kosinus cosh(0)

    ans = 1

    Tanh hiperbolni tangens tanh(-3)

    ans = -0.9951

    asinh area sinus hiperbolni asinh(1)

    ans = 0.8814

    acosh area kosinus hiperbolni acosh(1)

    ans = 0

    atanh area tangens hiperbolni atanh(-0.9951) ans = -3.0046

    Sqrt kvadratni (drugi) korijen sqrt(2) ans = 1.4142

    Exp eksponencijalna funkcija (baza e)

    exp(1)

    ans = 2.7183

    Log logaritamska funkcija (baza e) log(1)

    ans = 0

    log10 logaritamska funkcija (baza 10)

    log10(0)

    Warning: Log of zero ans = -Inf

    Abs apsolutna vrijednost (modul) abs(3-4*i)

    ans = 5

    Real realni dio kompleksnog broja real(-3+2*i)

    ans = -3

    Imag imaginarni dio kompleksnog broja

    imag(-3+2*i) ans = 2

    Conj kompleksno konjugiranje conj(-3+2*i)

    ans = -3.0000 - 2.0000i

    Round zaokruivanje broja na najblii cijeli broj

    round(2.3) ans = 2

    round(3.5)

    ans = 4

  • 16

    Trigonometrijske funkcije

    One poznate Matlab-u su sin,cos, tan i njihov argument mora biti u radijanima.

    >> x = 5*cos(pi/6), y = 5*sin(pi/6) x =

    4.3301 y = 2.5000

    U iduem primjeru pogledajte pogrenu a zatim i ispravnu upotrebu funkcije sinus:

    >> sin 1 ans = -0.9538 >> sin(1) ans = 0.8415

    Matlab nam na upit sin 1 vraa odgovor -0.9538 i ne upozorava nas na pogrean unos.

    Funkcije inverzne trigonometrijskim funkcijama su asin, acos, atan i njihov rezultat je izraen u radijanima.

    >> acos(x/5), asin(y/5) ans = 0.5236 ans = 0.5236 >> pi/6 ans = 0.5236

    Ostale elementarne funkcije ( sqrt, exp, log, log10)

    >> x = 9; >> sqrt(x),exp(x),log(sqrt(x)),log10(x^2+6) ans = 3 ans = 8.1031e+03 ans = 1.0986 ans = 1.9395

  • 17

    exp(x) oznaava eksponencijalnu funkciju exp(x) = ex i njen inverz je logaritamska funkcija log.

    >> format long e, exp(log(9)), log(exp(9)) ans = 9.000000000000002e+00 ans = 9 >> format short

    Ovdje vidimo malu greku zaokruivanja u prvom izraunu.

    Funkcija log(x) je oznaka za matematiku funkciju ln x, dok log10 izraunava logaritam po bazi 10. Postoji jo i funkcija log2 koja oznaava logaritam po bazi 2.

    Polinomi

    U Matlabu polinome prikazujemo pomou vektora iji su elementi koeficijenti polinoma zapisani u odgovarajuem slijedu, npr. polinom 575 34 ++ xxx bit e prikazan vektorom [5 -1 0 7 5].

    Vrijednost polinoma izraunava se koristei funkciju polyval(). Tako npr. ako elimo izraunati vrijednost prije spomenutog polinoma u x=3, to radimo ovako:

    >>p=[5 -1 0 7 5]; >>val=polyval(p,3) val = 404

    Nul-toke, odnosno korijeni polinoma nalaze se koritenjem funkcije roots:

    >> roots(p) ans = 0.8053 + 1.0129i 0.8053 - 1.0129i -0.7053 + 0.3160i -0.7053 - 0.3160i

    Prethodni polinom oito je imao dva para konjugirano kompleksnih nul-toaka.

    Ukoliko polinome elite zbrojiti ili oduzeti, morate voditi rauna da matrice koje ih reprezentiraju moraju biti istog tipa. U protivnom, zbrajanje, odnosno oduzimanje nije mogue izvriti i Matlab e vas upozoriti na pogreku. Recimo da prethodnom polinomu elimo dodati polinom q=2x-3.

  • 18

    >>q=[2 -3]; >>p+q ??? Error using ==> + Matrix dimensions must agree.

    Meutim, ako polinom q lano prikaemo polinomom etvrtog stupnja, rijeit emo problem:

    >>q1=[0 0 0 2 -3] >>p+q1 ans =

    5 -1 0 9 2

    Za mnoenje dva polinoma, koristimo funkciju conv:

    >>conv(p,q)

    ans = 10 -17 3 14 -11 -15

    A za dijeljenje, funkciju deconv koja osim rezultata dijeljenja vraa i ostatak:

    >> [d, R] = deconv(p,q) d = 2.5000 3.2500 4.8750 10.8125 R = 0 0 0 0 37.4375

    Petlje/Naredbe kontrole toka

    Ponekad elimo neku naredbu ili niz naredbi ponoviti odreeni broj puta. Ovisno o tome da li unaprijed znamo koliko emo puta ponoviti naredbu ili se ponavljanje nastavlja dok god je ispunjen odreeni uvjet, koristimo neku od dolje navedenih naredbi:

    Naredba for

    Naredba for slui za ponavljanje odreene naredbe ili niza naredbi unaprijed zadani broj puta. Sintaksa for petlje:

    for varijabla=izraz1:izraz2:izraz3 naredbe end

    varijabla (broja petlje) poprima vrijednosti od izraz1 do izraz3 s korakom izraz2. (Ako je korak 1, ne moramo ga pisati)

  • 19

    Idua petlja rauna vrijednosti funkcije 6

    sin pin za n=1,2,3,4,5,6 :

    >> for n = 1:6 sin(n*pi/6) end

    ans = 0.5000 ans = 0.8660 ans = 1 ans = 0.8660 ans = 0.5000 ans = 1.2246e-016

    Primjetite da smo iste vrijednosti mogli dobiti i bez koritenja petlje:

    >> sin([1:6]*pi/6) ans = 0.5000 0.8660 1.0000 0.8660 0.5000 0.0000

    Posljednja izraunata vrijednost ( 0000.0sin =pi ) razlikuje se od one dobivene koritenjem for petlje (1.2246e-016) meutim to je rezultat finesa IEEE aritmetike.

    Broja petlje takoer moe biti eksplicitno zadan vektor, npr:

    >> for counter = [23 11 19 5.4 6] .......

    end

    Naredba while

    Ponekad elimo ponavljati niz naredbi dok god je vrijednost nekog logikog izraza ispunjena, ali ne moemo unaprijed znati koliko e to biti puta. U tom sluaju koristimo while petlju. Naredba while ponavlja odreenu naredbu ili niz naredbi dok je ispunjen uvjet iz izraza.

    Sintaksa while-petlje: while izraz naredbe end

    Za izlaz iz petlje (for i while) esto se koristi naredba break.

  • 20

    Primjer: koja je najvea vrijednost n-a za koju je suma 1+2+3+...+n < 100?

    >> S = 1; n = 1; >> while S+(n+1)> [S, n] ans = 91 13

    Naredba if...then...else...end

    Omoguava nam izvravanje razliitih komandi ovisno o istinitosti logikog testa.

    if izraz naredbe end

    osnovni oblik naredbe if

    proireni oblik naredbe if

    if izraz naredbe else naredbe end

    Funkcijski m-file

    Da bismo pojednostavnili pisanje nizova naredbi koji se ponavljaju i kreirali nove funkcije, koristimo m fileove.

    Kreiranje m-file-a: U Matlabovom glavnom izborniku biramo FileNewM-file ili kliknemo na ikonu New M-File na alatnoj traci. Otvorit e se editor u kojem unosimo naredbe naeg file-a. Kada smo gotovi, file treba spremiti. U editoru kliknemo na ikonicu Save, ili u izborniku File biramo opciju Save/Save As. 1. Promijenimo direktorij u C:\WORK (provjeriti u dokumentaciji koji direktorij Matlab automatski pronalazi). 2. Dodijelimo ime pod kojim e se file (datoteka) pohraniti u memoriju. Novije verzije Matlaba automatski dodaju ekstenziju .m, dok je u starijim verzijama potrebno eksplicitno navesti ekstenziju kada datoteci dodjeljujemo ime. 3. Kliknemo na Save.

    File pokreemo/izvravamo tako da u komandnoj liniji napiemo njegovo ime i znak Enter.

    Funkcijskim mfileom kreiramo novu funkciju. Ovako kreirana funkcija ravnopravna je funkcijama ugraenim u MATLAB-u (kao to su npr. sin, log, det, itd.) Na taj nain moemo prema naoj volji i potrebama proiriti biblioteku postojeih funkcija. Sintaksa je:

  • 21

    function varijabla=ime funkcije(ulazne varijable) naredbe

    U prvom retku mora biti ime funkcije i varijable kojima operira.

    Ime funkcijskog m-filea mora biti isto kao i ime funkcije koja se njima definira. Samu funkciju pozivamo kao i svaku drugu funkciju, koristei njeno ime, zagrade, ulazne i izlazne varijable. Varijable mogu biti i brojevi i matrice. Jasno je da broj i tip varijabli u definiciji i pozivu funkcije moraju biti isti.

    function [izlazne varijable]=ime funkcije(ulazne varijable) naredbe

    Funkcija moe imati i vie izlaznih varijabli.

    Budite sigurni da ime funkcije nije u sukobu s nekom funkcijom koja ve postoji u Matlabu. Primjer: funkcija koja rauna povrinu trokuta kojem znamo duljine stranica.

    function [P] = povrsina(a,b,c) % Rauna povrinu trokuta kom znamo duljine stranica % Ulazni podaci: % a,b,c: Duljine stranica % Rezultat: % P: povrina trokuta % Upotreba: % Povrsina = povrsina(2,3,4); % Written by dfg, Oct 14, 1996. s = (a+b+c)/2; P = sqrt(s*(s-a)*(s-b)*(s-c)); %%%%%%%%% end %%%%%%%%%%%

    Ukoliko u Matlabovom prozoru napiemo >> help povrsina Bit e prikazani komentari iz m-file-a: Rauna povrinu trokuta kom znamo duljine stranica Ulazni podaci: a,b,c: Duljine stranica Rezultat: P: povrina trokuta Upotreba: Povrsina = povrsina(2,3,4); Written by dfg, Oct 14, 1996.

    Da bi izraunali povrinu trokuta kom su duljine stranica 10, 15, 20: >> Povrsina = povrsina(10,15,20) Povrsina = 72.6184 Vidimo da je rezultat izrauna pridruen varijabli Povrsina.

  • 22

    4. Graf funkcije

    Graf elementarnih funkcija

    Osnovni alat koriten za crtanje u Matlabu je funkcija plot(). Da bi shvatili kako ta funkcija radi, zamislimo da elimo nacrtati liniju koja prolazi kroz toke (1, 4) i (3, 6). Prvo definiramo x vrijednosti kao vektor x=(1,3) (vektor apscisa) i y vrijednosti kao vektor y=(4,6) (vektor ordinata). Zatim nacrtamo toke definirane tim vektorima (to su (1,4) i (3,6) ) i poveemo ih linijom. Odgovarajue naredbe u Matlabu bile bi:

    >>x=[1 3] x =

    1 3 >>y=[4 6] y = 4 6 >>plot(x,y)

    Na ekranu se pojavio grafiki prozor naziva Figure no.1 sa sljedeim sadrajem:

    Krenimo sada na sloeniji primjer: Pretpostavimo da elimo nacrtati graf funkcije y=sin 3x na intervalu od 0 do 1. To emo napraviti na sljedei nain: funkciju emo opisati proizvoljnim brojem toaka i onda emo te toke povezati ravnim linijama. Prepostavimo da uzmemo N+1 toaka koje su udaljene za h:

    >> N = 10; h = 1/N; x = 0:h:1;

  • 23

    Na taj nain dobivamo niz x = 0; h; 2h; ; 1-h; 1. Isto tako smo mogli koristiti naredbu linspace: openiti oblik naredbe je linspace (a,b,n) koja generira n+1 jednako udaljenih toaka izmeu a i b, ukljuujui rubove (a,b). Tako smo mogli koristiti komandu:

    >> x = linspace (0,1,11);

    Zatim raunamo njima odgovarajue vrijednosti y:

    >> y = sin(3*pi*x);

    I konano, to crtamo sa:

    >> plot(x,y)

    Rezultat je vidljiv na gornjoj slici i oito je da je uzeti N premalen. Ako N poveamo na 100, rezultat je puno bolji:

    >> x = linspace (0,1,100); >> y = sin(3*pi*x); >> plot(x,y)

  • 24

    Punu crvenu liniju dobijemo sa:

    >> plot(x,y,'r-')

    Trei argument u funkciji plot je string u kojem prvo slovo specificira boju, a drugo stil linije. Opcije za boje i stilove su:

    Boja Oznaka toaka Oznaka linije y yellow m magenta c cyan r red g green b blue w white k black

    . point o circle x x-mark + plus * star s square d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram

    : dotted -. dashdot -- dashed - solid

    Jednostavniji nain za crtanje grafa funkcije bio bi koristei naredbu ezplot.

    ezplot(f) crta izraz f = f(x) na domeni: -2 < x < 2.

    ezplot(f,[min,max]) crta f = f(x) na domeni: min < x < max.

    Ukoliko elimo uveati neki dio grafa, u izborniku grafikog prozora biramo Tools/Zoom In. Koristei mia oznaimo dio krivulje ili samo kliknemo na dio koji elimo poveati i Matlab e automatski regenerirati crte poveavajui prethodno mjerilo (raspon vrijednosti na koordinatnim osima e biti promijenjen koristei faktor 2). Postupak moemo ponoviti eljeni broj puta. Isto moemo postii biranjem ikone Zoom In na alatnoj traci grafikog prozora. Naredba/ikona Zoom Out vraa poveani dio na prethodnu dimenziju. Trei nain za uveavanje prikaza bio bi unoenjem naredbe zoom odnosno zoom off u komandnom prozoru. Ako elimo da graf bude nacrtan u novom prozoru, prije pozivanja plot naredbe, unesemo naredbu figure. Pozivanje naredbe npr. figure (2) otvorit e prozor s oznakom 'Figure 2'. Ukoliko je prozor s tom oznakom ve postojao u pozadini, postat e aktivan i u njemu e biti prikazan rezultat idue plot naredbe. Naredba clf brie sadraj grafikog prozora.

  • 25

    Dodavanje naslova i oznaka na graf

    Ukoliko na graf elimo dodati naslov, te oznake osi, koristimo:

    >> title('Graf funkcije sinus') >>xlabel('x-os') >>ylabel('y-os')

    Ako na graf zelimo dodati mreu, dodajemo je i isto tako briemo naredbom grid.

    Recimo da na istom crteu elimo usporediti grafove funkcija xpi4sin i xpi4cos . To radimo na sljedei nain:

    >> x = linspace (0,1,100); >> plot(x, sin(4*pi*x),'r-',x,cos(4*pi*x),'g--'); >> legend('Sin krivulja','Cos krivulja'); >> title('Multi-plot'); >> xlabel('x'), ylabel('y') >> grid

    Pozivanjem naredbe plot, brie se sadraj grafikog prozora prije prikazivanja novog grafa. Ukoliko elimo zadrati sadraj grafikog prozora, to postiemo naredbom hold, odnosno hold on. Naredba hold off prekida takvo ponaanje.

    Komanda subplot(m,n,p) dijeli sadraj grafikog prozora na nm podruja (m redaka, n stupaca) i bira p-to podruje za prikaz grafa. Podruja se broje s lijeva na desno, od gore prema dolje, kao kod itanja teksta. Pogledajmo primjer:

    >>x = 0 : 0.1 : 2*pi; subplot(2,2,1); plot(x,sin(x)), axis auto subplot(2,2,2); plot(x,sin(x)), axis tight subplot(2,2,3); plot(x,sin(x)), axis tight, axis off subplot(2,2,4); plot(x,sin(x)), axis([0 7 -1 1]), grid on

  • 26

    (Pogledajte detaljnije naredbu axis koristei help axis.)

    5. Dodatak

    uvanje zapisa

    Koritenje naredbe diary

    >>diary mojrad

    e uzrokovati da sav tekst koji se pojavi nakon toga bude spremljen u datoteku mojrad, kreiran u direktoriju u kojem Matlab radi. Ime datoteke moe biti bilo to osim on i off. Zapisivanje se moe zaustavit sa diary off

    Ukoliko elite zatvoriti Matlab te poslije nastaviti s radom:

    >>save zadnjakalkulacija

    i Matlab e spremiti sve varijable sa njihovim trenutnim vrijednostima u datoteku zadnjakalkulacija.mat. Kada idui put pokrenemo Matlab, naredbom:

    >> load zadnjakalkulacija

    sve varijable koritene u trenutku zatvaranje e dobiti svoje tadanje vrijednosti.

  • 27

    Literatura:

    1. David F. Griffiths: An Introduction to Matlab, Version 2.3 The University Dundee, September 2005 http://www.maths.dundee.ac.uk/~ftp/na-reports/MatlabNotes.pdf

    2. Ivo Baras: Radni materijali za laboratorijske vjebe iz PiNM, Studijski Sveuilini Centar u Splitu

    3. Edward Neuman: Getting started with Matlab, Southern Illinois University at Carbondale http://www.math.siu.edu/matlab/tutorial1.pdf

    4. Quick introduction to matlab, PartI and PartII, Department of Mathematics, University of Colorado at Colorado Springs, http://www.uccs.edu/~math/docs/QuickIntroMatlabPartI.pdf http://www.uccs.edu/~math/docs/QuickIntroMatlabPartII.pdf

    5. Milan Vrdoljak: Uvod u MATLAB, Fakultet strojarstva i brodogradnje, Zagreb http://titan.fsb.hr/~mvrdolja/matlab/