Upload
mikela-ljermontova
View
20
Download
0
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/