MATLAB - pmfst.unist.hrgorerc/MPAII/BeamerMatlab.pdf · Uvod Matrice Skripte i funkcije Gra ka...

Post on 29-Nov-2019

11 views 0 download

Transcript of MATLAB - pmfst.unist.hrgorerc/MPAII/BeamerMatlab.pdf · Uvod Matrice Skripte i funkcije Gra ka...

UvodMatrice

Skripte i funkcijeGrafika

MATLAB

10. travnja 2012.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Table of contents

1 Uvod

2 MatriceVarijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

3 Skripte i funkcijeSkripteNaredbe grananjaFunkcije

4 GrafikaFunkcija PlotMijenjanje elemenata grafaRad sa grafikom

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

MATLAB

Matlab (MATrix LABoratory) je programsko okruzenje za tehnickoi znanstveno racunanje.Omogucava:

izvodenje kompleksnih proracuna

vizualizaciju rezultata

izvodenje simulacija

programiranje

MATLAB ima vlastiti (interpretirani) programski jezik visokognivoa koji je jednostavan za koristenje i upotrebljavastandardiziranu matematicku sintaksu. Podrzava iobjektno-orijentirani pristup.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Korisnicko sucenje

Dijelovi korisnickog sucelja:

Command Window (interaktivna konzola) - interaktivnakonzola u koju utipkavamo naredbe i vidimo njihov rezultat

Workspace (radni prostor) - popis svih varijabli i njihovaosnovna svojstva

Command History - popis ranije izvrsenih naredbi

Current Folder (trenutni direktorij) - direktorij u kojem senalaze programi dostupni za izvrsavanje

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Help

MATLAB dolazi sa vrlo iscrpnim sustavom pomoci, pod menijem

Help -> Product Help

Osim toga, pomoc je dostupna u interaktivnoj konzoli:

help eig

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Znacenje

U MATLAB okruzenju, matrica je pravokutno polje brojeva.1× 1 matrice zovemo skalarima.Matrice sa jednim stupcem ili retkom zovemo vektori.Unosimo ih na vise razlicitih nacina:

eksplicitan unos niza elemenata

punjenje matrice koristeci vanjsku podatkovnu datoteku (eng.external data files)

generiranje matrice koristenjem ugradenih funkcija (eng.built-in functions)

kreiranje matrica koristenjem datoteka sa vlastitim funkcijama

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Operacije sa matricama

Upisemo u command window

A = [ 16 2 5 7; 5 11 3 23; 1 2 1 5; 7 1 15 17 ]

i stisnemo Enter. S time smo kreirali matricu A reda 4× 4. Akozelimo provjeriti sto nam predstavlja A, samo upisemo A i stisnemoEnter.Pogledajmo koje funkcije su nam dane za rad sa matricama(build-in functions).sum(A), A’, A.’, diag(A), size(A), length(A),

min(A), max(A)

nam redom daju: retcani vektor koji je suma pojedinih stupacamatrice A, matricu koja je adjungirana matrica matrice A,

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Operacije sa matricama - nastavak

matricu koja je transponirana matrica matrice A, stupcani vektorkoju cine elementi na glavnoj dijagonali matrice A, . . .Ako zelimo dohvatiti elemente matrice u i-tom retku i j-tomstupcu, izraz je A(i, j).Ako zelimo dohvatiti cijeli k-ti stupac, izraz je A(1:4;k).Ako zelimo dohvatiti cijeli k-ti redak, izraz je A(k, 1:4)Pokusajmo unijeti izraz A(4, 6). Normalno, javlja nam se graska,jer matrica nema toliko stupaca (sto i pise u objasnjenju greske).Ako zelimo promijeniti vrijednost pojedinog elementa matrice (navrijednost k), koristimo izraz A(i, j) = k.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Generiranje matrica

zeros(i, j) nam daje matricu i × j sa svim elementima 0.ones(i, j) nam daje matricu i × j sa svim elementima 1.Konkatenacija je spajanje vise manjih matrica u jednu veliku.Npr. A=[1 2; 3 4];

B=[5 6; 7 8];

qverb—C=[A ; B]—Cijeli k-ti redak matrice brisemo sa A(k, :) = [].Determinantu matrice A dobijamo sa det(A).Pogledajmo gresku koju nam MATLAB javlja u slucaju:A = [2 4; 8 1]; inv(A).poly(A) daje koeficijente karakteristicnog polinoma matrice A.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Napomena - polinomi

Polinomi se u MATLABU predstavljaju sa retcanim vektorima kojisadrzavaju koeficijente uz pojedine potencije varijable x. Npr. akobi zeljeli raditi sa polinomom P(x) = 7x3 + 4x2 + 3, u MATLABUbi unijeli P =[7 4 0 3]Neke funkcije za rad sa polinomima su:roots(P), conv(P, Q), [R S] = deconv(P, Q), polyder(P)koji redom daju:korijene polinoma P, umnozak polinoma P i Q, dijeljenje polinomaP i Q (R je rezultat dijeljenja, S je ostatak), derivacija polinomaP.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Operatori

Bez matematickog znanja o matricama, one nam predstavljajudvo-dimenzionalna numericka polja. Lista operatora za rad sanjima je:

+ zbrajanje− oduzimanje.∗ mnozenje pripadnih elemenata./ dijeljenje pripadnih elemenata.\ dijeljenje slijeva pripadnih elemenata.^ potenciranje pripadnih elemenata.’ transponiranje

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - matrice

Primjer

A =[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];

B=[1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4];

A + B

A - B

A.*B

A./B

A.\B

A.^B

A.’

A(~isprime(A))=0

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Slaba tipiziranost

MATLAB je slabo tipiziran jezik. Nije potrebno deklarirativarijable, pojedine varijable mogu mijenjati svoj tip ”u let”:

a = [1 2 3; 4 5 6; 7 8 9]

a = ’neboder’

a.element = 123

Kada MATLAB naide na novu varijablu, automatski se kreira tavarijabla i alocira se spremnik prikladne velicine. Ako varijabla vecpostoji, MATLAB joj promijeni sadrzaj i, ukoliko je potrebno,alocira novi spremnik.Ime varijable mora poceti sa slovom. Ime varijable moze bitiproizvoljne duljine, ali MATLAB za raspoznavanje koristi prvihnamelength znakova.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Interne varijable

eps=2.2204e-16 tocnost realnih brojeva(razlika izmedu 1.0 i prvogveceg)

realmin=2.2250733858507202e-308 vrijednost najmanjeg realnogbroja

realmax=1.797697134862316e+308 vrijednost najveceg realnogbroja

pi=3.14154265358979 vrijednost broja

Inf dobija se dijeljenjem sa 0 ili ako dode do overflowa

Nan (not a number) se dobiva evaluacijom izraza tipa 00 ili

∞∞

i,j imaginarna jedinica kompleksnih brojeva

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Eksterne varijable

Ime varijable:

potrebno je razlikovati uporabu velikih/malih slova

maksimalni broj znakova je 31

prvi znak mora biti slovo

specijalne varijable ciji su nazivi rezervirani: ans, pi, eps, flops,inf, nan, i, j, nargin, nargout, realmin, realmax

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Napomena - save, load

Deklarirane varijable mozemo spremiti u binarnu mat datoteku ikasnije ih ponovno ucitati. Varijable x, yy, ZZZ spremamo udatoteku var.mat pomocusave(’var.mat’, ’x’, ’yy’, ’ZZZ )Sve deklarirane varijable spremamo u datoteku var.mat pomocusave( ’var.mat’)Varijable x, yy, ZZZ ucitavamo iz datoteke var.mat pomocuload( ’var.mat’, ’x’, ’yy’, ’ZZZ’ )Sve varijable koje postoje u datoteci var.mat ucitavamo saload( ’var.mat’ )

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Brojevi

Neki zapisi brojeva su:

4, 57, 0.03004, 1.34e23, 2i, 5e2j

MATLAB interno sprema brojeve u long formatu koristeci IEEEstandard sa pomicnom tockom. Ti brojevi imaju preciznost odotprilike 16 znacajnih decimalnih brojeva.( od 10−308 do 10308).

Primjer

x=3333333333333333333333333333333333333331;

y=3333333333333333333333333333333333333332;

x==y

Zasto MATLAB javlja da su x i y jednaki?

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer (kompleksni brojevi)

Primjer

Koristimo funkciju sort na dva kompleksna broja:

a = 2 + 5i;

b= 1 + 7i;

sort([a, b])

Zasto? Jer se sortira po fazama.

angle(a)

angle(b)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Operatori

+ zbrajanje- oduzimanje* mnozenje/ dijeljenje\ dijeljenje slijeva^ potencija’ adjungiranje

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Logicki i relacijski operatori, funkcije

Svi logicki i relacijski operatori i navedene funkcije se izvrednjavajupo elementima.

~A (logicko NE), A&B (logicki I), AIB (logicki ILI)

A<B, A<=B, A>B, A>=B, A==B, A~=B

sin, cos, asin, acos, sinh, cosh, asinh, acosh, exp,

log, log10, sqrt, abs, round

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Ugradene funkcije

MATLAB nam pruza veliki broj standardnih matematickih funkcija(npr. abs, sqrt, exp, sin). Listu mozemo dobiti naredbomhelp elfunSiru listu mozemo dobiti naredbamahelp specfun ili help matInf se dobija dijeljenjem sa 0 ili ako dode do overflowa. NaN (not anumber) se dobiva evaluacijom izraza tipa 0

0 ili ∞∞

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Funkcija format

MATLAB moze ispisivati realne brojeve u 4 osnovna formata. Npr.kako se a = 31.4 ispisuje u razlicitim formatima?

a = 3.14

format short

a

format long

a

format short e

a

format long e

a

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Visedimenzionalna polja

Visedimenzionalna polja u MATLAB okruzenju su polja sa 3 ili viseindeksa.

Primjer

A = ones(2, 3, 4);Asum(A, 1)sum(A, 2)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Cell-arrays

Cell-arrays u MATLABU su visedimenzionalna polja ciji elementi sukopije drugih polja. Najcesce ih kreiramo stavljanjem objekata uviticaste zagrade.

Primjer

A=[1 2 3; 4 5 6; 7 8 9];B={ A sum(A) prod(prod(A)) }B{1}B{2}B{3}A(1, 1)=10B{1}

Primijetimo, promijenili smo A, ali se sa B nije nista dogodilo.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer

Primjer

A = cell(5, 1);for n = 1:5A{n} = ones(n);endAA{1}A{2}

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Znakovi i tekst

Tekst se unosi u MATLAB koristeci navodnike.z = ’Rezultat’Dobili smo polje od osam znakova. Interno se ti znakovi spremajukao brojevi.a= double(z)b = char(a)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - znakovi

Primjer

a = [z, ’ u redu’]

b = [z; ’ u redu’]

c = [z; ’normalan’]

d = char(z, ’u redu’, ’jer char sam uredi’,

’(doda svakom redu tako da su redovi iste duljine)’)

e = { z; ’sa cell-array-ima nema problema’;

’Kako to?’ }

length(c)

size(d)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Strukture

Strukture su visedimenzionalna polja u MATLABU, do cijihelemenata se dolazi preko njihovih imena (eng. field designators).Strukture mogu sadrzavati elemente raznih tipova:

Primjer

Kreirajmo strukturu s koja se sastoji od tri polja:

s.ime = Mirko;

s.ocjena = 5;

s.matrica = [1 2 3; 4 5 6];

s

k-ti element strukture dohvacamo preko s(k), a pojedino poljek-tog elementa sa s(k).imepolja

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - nastavak

Primjer

Moguce je doznati da je li nesto element strukture:

isfield( s, ’ime’)

isfield( s, ’prezime’)

Takoder, mozemo dodavati element po element:

s(2).ime = ’Petra’;

s(2).ocjena = 4;

s(2).matrica = [ 7 8 9; 10 11 12 ]

Pregled svih ocjena mozemo dobiti sa [s.ocjena], a varijable saimenima mozemo kreirati sa [A B] = s.imena

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Simbolicke varijable

Varijable koje koristimo kod simbolickog izracuna je potrebnokreirati kao x=sym(’x’) ili syms x y .Ukoliko je potrebno kreirati kompleksnu simbolicku varijablukoristimo syms x y real; z = x + y*i.Simbolicku varijablu mozemo zamijeniti sa nekom vrijednostikoristeci subs(f,x,xvrijednost)

Primjer

S=sym(’sin(x)^2+cos(x)^2’);

S

simplify(S)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Kreiranje simbolickih izraza

Simbolicke izraze i varijable kreiramo na dva nacina: definiramosimbolicki izraz odjednom pomocu naredbe sym (kako smo vecpokazali) ili naredbom syms navedemo sve simbolicke varijable, azatim definiramo simbolicki izraz S (bez koristenja sym). U prvomslucaju u radnom prostoru bit ce samo S, dok ce u drugom slucajubiti S, a, x i y.

Primjer

syms a b c ;

A=[a b c;a b c;a b c];

A

sum(A(1,:))

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - deriviranje

Primjersyms x;

f = x^2*sin(x);

diff(f,2)

syms y z;

g = y^2*z+2*z^2*y;

diff(diff(g,y),z)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - integriranje

Primjersyms x;

f = x*exp(-x);

F = int(f)

syms y a b;

g = y*exp(-y);

G = int(g, y, a, b)

subs(G, {a,b}, [0,10])

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - limes

Primjer

syms x a b;

f = x*(1+a/x)^x*sin(b/x);

limit(f,x,inf)

syms y;

limit(1/y, y, 0)

limit(1/y, y, 0, ’left’)

limit(1/y, y, 0, ’right’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - pojednostavljenje izraza

Primjersyms x y;

expand(cos(x + y))

factor(x^3 - y^3)

syms z;

f = (z^2 + 5*z + 6)/(z + 2);

simplify(f)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Varijable, brojevi, ugradene funkcijeStrukture podatakaSimbolicko racunanje

Primjer - jednadzbe

Primjer

S=solve(’x^2+y^2-1=0’,’y=4*sqrt(3)*x^3’)

S.x

S.y

dsolve(’Dy = y + sin(t)’)

dsolve(’Dy = y + sin(t)’,’y(0)=1’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Skripte i funkcije

Naredbe se mogu unositi jedna po jedna u command windowu ilimozemo napisati niz naredbi u neku datoteku koje onda izvrsimokao i svaku drugu MATLAB funkciju. Za unos niza naredbikoristimo bilo koji editor (najbolje koristiti MATLAB Editor).Postoje dvije vrste programskih datoteka:

Skripte . . . ne primaju input argumente, ne vracaju outputargumente. Koriste se podacima iz radnog prostora

Funkcije . . . primaju input argumente, vracaju outputargumente. Interne varijable su lokalne samo za tu funkciju.

Sadrzaj neke programske datoteke imena nekoime mozemo vidjetinaredbomtype nekoime

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Nacin rada

Niz naredbi kojeg zelimo kasnije ponovno pozvati mozemo napisatiu bilo kojem editoru teksta i spremiti u m-datoteku.MATLAB takodder ima svoj editor:Window->Editor

Ako niz naredbi spremimo u datoteku skripta.m, onda ih mozemoredom sve izvrsiti tako da u interaktivnoj konzoli napisemo naredbuskripta. Vazno je da datoteka skripta.m bude ili u trenutnomdirektoriju (Current Folder) ili u putanji (path). Bilo koji direktoriju putanju mozemo dodati preko File->Set Path ...

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Primjer

U nekom tekst-editoru unesemoclear; A=fix(rand(3)*10);

B=fix(rand(3)*10);

whos

te spremimo pod imenom primjer.m.Ako sada u konzoli upisemo primjer, Matlab ce potraziti m-file sanavedenim imenom i izvrsiti naredbe zapisane u njemu, sto cerezultirati brisanjem svih postojecih varijabli (clear), stvaranjemdviju slucajnih matrica A i B, te ispisivanjem trenutnih varijabli saprikazom potrosnje memorije svake varijable (whos). Imenam-datoteka ne smiju biti ista kao i imena standardnih naredbi ilifunkcija, te se iste moraju snimiti u neki od foldera koji Matlabpregledava prilikom izvodenja (path).

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Petlje1

Unutar skripti dostupne su nam standardne naredbe za grananje, tepetlje:

if uvjet_1

naredba_1;

naredba_2;

elseif uvjet_2

naredba_3;

else

naredba_4;

end

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Petlje2

for brojac = vektor-redak

naredba_1;

naredba_2;

end

while uvjet

naredba_1;

naredba_2;

end

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

If - then

Ako brojevi x i y nisu preblizu, napravite 1x−y .

Primjer

x = input(’Unesite prvi broj:’);

y = input(’Unesite drugi broj:’);

if abs( x - y ) < 1e-8

’Brojevi x i y su preblizu’

else

z = 1 / ( x - y );

end

z

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

If - else if - else

Ispisite da li je unijeti broj pozitivan, negativan ili jednak nuli.

Primjer

broj = input(’Unesite broj: ’);

if broj < 0

disp(’Broj je negativan’)

elseif broj > 0

disp(’Broj je pozitivan’)

else

disp(’Broj je jednak nuli’)

end

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Switch

Napisite koji broj od 1 do 5 je unijet. Ako nije od 1 do 5, napisite’Unijeti broj nije ispravan’.

broj = input(’Unesite broj od 1 do 5: ’);

switch broj

case 1

display(’Unijeti broj je 1’)

case 2

display(’Unijeti broj je 2’)

case 3

display(’Unijeti broj je 3’)

case 4

display(’Unijeti broj je 4’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Switch - nastavak

case 5

display(’Unijeti broj je 5’)

otherwise

display(’Unijeti broj nije ispravan!’)

end

Napomena: naredbu switch koristimo samo ako uvjet kojiprovjerava postize konacan (mali) broj stanja. Ne mozemo gakoristiti ako je uvjet da je stanje vece ili manje od necega.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

For petlja

Primjer

data=[3 9 45 6; 7 16 -1 5];

for n = data

y = n(1) - n(2)

end

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

While petlja

Primjer

S=1;

n=1;

while S+(n+1)^2 < 100

n = n + 1;

S = S + n^2;

end;

[n, S]

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Napomena

Pogledati:continuebreakreturnerrortry - catch

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Nacin rada

Funkcije takoder mozemo spremiti u m-datoteku. Unutar jednem-datoteke moze biti vise funkcija, ali samo prvu (koja mora imatiime kao i datoteka) ce biti moguce pozvati izvana. Ostale funkcijeunutar m-datoteke su pomocne.Unutar skripte nije moguce definirati funkcije.Definicija funkcije:function [x_1, x_2, ...] = ime_fje(p_1, p_2, ...)

x_1, x_2, ... su povratne vrijednosti, a p_1, p_2, ...

parametri funkcije.Funkciju treba spremiti u datoteku ime_fje.m

Funkcija se iz konzole poziva sa:[var_1, var_2, ...] = ime_fje( arg_1, arg_2, ... )

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Primjer prvi

function s = sumakvadrata( v )

% Racuna sumu kvadrata svih elemenata vektor-retka v

if( size( v, 1 ) ~= 1 )

error( ’Funkciji nije poslan vektor-redak!’ );

end

s = 0;

for i = 1 : length( v )

s = s + kvadrat( v( i ) );

end

end

function k = kvadrat( x )

k = x .^ 2;

end

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Primjer - nastavak

U editoru (Desktop -> Editor)smo prethodni primjer napisali ispremili pod imenom sumakvadrata.m.U interaktivnoj konzoli pokrenemo:v = [2 5 1];

x = sumakvadrata( v );

x

Funkcija kvadrat nije dostupna iz konzole (to je podfunkcija).Funkcija sumakvadrata je glavna funkcija.MATLAB prosljeduje parametre po vrijednosti - dakle, funkcija nemoze promijeniti varijablu koja joj je poslana (stvara se lokalnakopija unutar funkcije).Dio iza % (pa do kraja retka) unutar funkcije je komentar. Mogucega je vidjeti naredbom help sumakvadrata

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Primjer drugi

Kreirajmo m-file koji racuna povrsinu trokuta sa stranicama a, b, cpo formuliP =

√(s ∗ (s − a) ∗ (s − b) ∗ (s − c)), s = (a + b + c)/2.

function P = povrsina(a,b,c)

s = (a+b+c)/2;

P = sqrt(s*(s-a)*(s-b)*(s-c))

Ukoliko ovaj m-file snimimo pod imenom povrsina.m pozivamo gau Matlabu na slijedeci nacin:povrsina(3,4,5)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Zadatak

Napisite skriptni M-file koji trazi od korisnika da upisuje brojevesve dok im je suma manja od 200. Ispisuju se svi unijeti brojevi ikoliko ih je.

suma=0;

br=0;

while suma < 200

br = br+1;

a(br) = input(’Upisi broj:’)

suma = suma + a(br);

end

a

br

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Zadatak

Napisite skriptni m-file koji trazi od korisnika da upisuje broj svedok ne upise broj djeljiv sa 7, ispise taj broj i koliko je brojevaupisano.

brojac = 0;

a = 1;

while mod(a, 7) ~= 0

a = input(’Unesite broj: ’);

brojac = brojac + 1;

end

a

brojac

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Zadatak

Kreirajte funkcijski m-file koji kao ulaznu varijablu prima prirodnibroj i ispisuje taj broj te sve njegove djelitelje.

function [broj, dj]=djelitelji(br)

br2=br; d=2; i=1; dj=[];

while br2>1

if mod(br2, d)==0

br2=br2/d; dj=[dj d];

else

d=d+1;

end

end

br

dj

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Anonymous funkcija

To je MATLAB funkcija definirana jednim MATLAB izrazom.Sintaksa za kreiranje je f = @(listaarg) izraz

Primjer

kvadrat = @(x) x.^2;

a = kvadrat(5)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Globalne varijable

Ako varijablu u funkciji proglasimo globalnom (naredba globalimevarijable), ona je dostupna svim funkcijama.Ako u interaktivnoj konzoli upisemo isto, varijabla je dostupna iglavnom radnom prostoru.

Primjer

Kreiramo funkciju mnozenjekonstantom

function a = mnozenjekonstantom(x)

golobal CONST

a = CONST * x;

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Globalne varijable - nastavak

Primjer

a u konzoli

global CONST

CONST = 10;

b = mnozenjekonstantom(5);

CONST = 20;

c = mnozenjekonstantom(5);

b

c

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

SkripteNaredbe grananjaFunkcije

Handle funkcije

Za bilo koju Matlab funkciju mozemo kreirati njezin handlepomocu kojeg se poslije mozemo referencirati na tu funkciju.Najcesce handle funkcije koristimo kao argument neke drugefunkcije, npr. prilikom crtanja grafova. U ovom slucaju handlefunkcije sin ce biti fhandle

Primjer

fhandle = @sin

f(5)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Plot - primjena

Plot funkcija ima razne forme, ovisno o input argumentima.

Primjer

x = 0 : pi/100 : 2*pi;

y = sin(x);

plot(x, y)

Ako zelim dodati oznake na osi i sam graf (tu smo i povecalislova), koristimo:

xlabel(’x = 0 : 2/pi’)

ylabel(’Sinus od x’)

title(’Graf funkcije sinus’, ’FontSize’, 12)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Vise funkcija na istom grafu

Primjer

x = 0 : pi/100 : 2*pi;

y = sin( x );

y2 = sin( x - .25 );

y3 = sin( x - .5 );

plot( x, y, x, y2, x, y3)

Vidimo da se razlicitim funkcijama pridruzuju razlicite boje.Mozemo sa strane staviti legendu koristecilegend(’sin(x)’, ’sin(x - .25)’, ’sin( x - .5)’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Primjer - grafika sa dvije slike

Primjer

t = 0 : pi/20 : 2*pi;

y = exp(sin( t ));

plotyy(t, y, t, y, ’plot’, ’stem’)

xlabel(’X Axis’)

ylabel(’Plot Y Axis’)

title(’Two Y Axes’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Koristenje radnog prostora

Grafiku mozemo kreirati i koristeci varijable iz radnog prostora.Izaberemo varijable iz radnog prostora (ako su uzastopne, mozemosa Shift+klik, ako nisu mozemo sa Ctrl+klik). Nakon togadesni klik misa nam daje izbor najcesce koristenih nacina crtanjagrafova. Ako zelimo neki drugi, kliknemo More Plots....Napomena: naredbu za crtanje tog grafa vidimo kao zadnjunaredbu u interaktivnoj konzoli.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Elementi grafa

Grafovi su komponirani od objekata. Oni imaju neka svojstva kojase mogu mijenjati. Ta svojstva odreduju kako neki dijelovi grafaizgledaju ili se ponasaju.Na primjer, osi kojima definiramo koordinatni sustav imaju svojstvapoput granice, medusobni odnos, naziv, boju, . . . Linije grafa imajusvojstva poput boje, tip markera koji se koristi za crtanje tocakakoje se koriste za crtanje grafa, stil linije, . . .

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Linije grafa

Kod linija grafa mozemo mijenjati boju, stil i markere. To se radisa opcijom ’boja_stil_marker’ na kraju naredbe Plot. Opcijasadrzi od jednog do cetiri znaka unutar navodnika.

Primjer

x = 0 : pi/100 : 2*pi;

y = sin(x);

plot(x, y)

plot(x, y, ’g--o’)

plot(x, y, ’b:d’)

plot(x, y, ’c-*’)

plot(x, y, ’ks’) (kada se ne specificira stil linije, crta se samomarker)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Primjer - markeri

Primjer

x1 = 0 : pi/100 : 2*pi;

x2 = 0 : pi/10: 2*pi;

plot(x1, sin(x1), ’r:’, x2, sin(x2), ’r+’)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Napomena - hold on

Kada crtamo novi graf, po defaultu se stari graf brise i na njegovomjesto dolazi novi. Ako zelimo novi graf samo dodati starom,moramo u konzolu unijeti naredbu hold on, a zatim unijeti novigraf.

Primjer

x = -1 : .1 : 1;

y = x.^3;

plot(x, y)

hold on

z = sin(x);

plot(x, z)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Vise slika, jedan graf

Naredba subplot(m, n, p) particionira prozor za grafiku na m × npolje manjih slika, a trenutni plot je p-ti (brojimo ih redak poredak).

Primjer

x = 0 : pi/100 : 2*pi;

y = sin( x );

z = cos( x );

u = x.^2;

v = x;

subplot(2, 2, 1); plot(x, y)

subplot(2, 2, 2); plot(x, z)

subplot(2, 2, 3); plot(x, u)

subplot(2, 2, 4); plot(x, v)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Osi

Po defaultu MATLAB sam bira vrijednosti na osima prema rubnimvrijednostima danih podataka. Ako zelimo promijeniti vrijednostina osima, koristimo naredbu axis.

Primjer

x = 0 : pi/100 : 2*pi;

y = sin(x);

plot(x, y)

axis([ -5 10 -2 2])

Ako zelimo vratiti postavke osi na pocetak koristimo naredbu axisauto normal.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Primjer - tekst unutar grafike

Primjer

text( 0.5, 0.5, ABC );

text( -2, 1, DEF );

set( gca, XLim, [-3, 3], YLim, [-1, 2] )

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Spremanje grafike

Za spremanje grafike koristimo:File -> Save as -> imegrafike, te izaberemo u kojemformatu je zelimo spremiti (npr. FIG-datoteka za MATLABgrafiku, JPG, EPS, . . . ).Ako zelimo spremiti grafiku sa nekim dodatnim opcijama (visinagrafike, sirina grafike, . . . ) koristimo:File -> Export Setup ... , zatim, nakon sto smo izabralineke dodatne opcije, koristimo Apply to Figure,Export -> imegrafike, te izaberemo format.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Generiranje koda grafike

Ako ne zelimo spremiti sam graf nego zelimo sacuvati kod koji jegenerirao grafiku, koristimo opciju na graficiFile -> Generate M-file. Kada zelimo koristiti taj kod zageneriranje grafa u interaktivnoj konzoli, samo unesemo imeM-filea.Paziti: sam kod nema definirane varijable. Njih treba unijeti ukonzoli. Pretpostavimo da smo kod grafike sin spremili u M-fileprimjer. Sada prije samog pozivanja iz konzole, kreiramovarijable koje treba, pa tek onda zovemo primjer sa argumentimakoje smo kreirali.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Plot (3D)

Za crtanje funkcije dvije varijable, prvo generiramo matrice X i Ykoje ce nam predstavljati domenu funkcije. Zatim koristimo X i Yza evaluaciju i crtanje grafike.

Primjer

x1 = linspace(-5, 5, 100);

y1 = linspace(-10, 10, 100);

[X, Y] = meshgrid(x1, y1);

Z = X.^2 + Y.^2;

mesh(X, Y, Z)

Pogledati: Camera Toolbar, Rotate 3D.

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Primjer

Jednoliku boju grafa biramo sa:mesh(X, Y, Z, ’EdgeColor’, ’green’)

Ako zelimo mijenjati boju grafa s obzirom na razinske krivulje,koristimo:

surf(X, Y, Z)

colormap hsv

colorbar

Na prozirnost grafa mozemo utjecati sa naredbom alpha(x), gdjeje x broj izmedu 0 i 1 npr.alpha(0.5)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Primjer - Property Editor

Unesemox = -1 : .1 : 1;

y = x.^3;

plottools

te izeberemo x i y varijable, te npr. funkciju plot. Drzimo lijeviklik na liniji grafa pritisnut sve dok se ne pojaviProperty Editor - Lineseries. Promijenimo tu neka svojstva(npr. line to no line, marker to o (circle), marker size to 4.0,marker fill color to red).Mozemo promijeniti i funkciju kojom crtamo (izaberemo varijableiz Variables na grafici, te zatim desnim klikom dobijamo funkcijeza crtanje, te izaberemo jednu (npr. area ili stem)

MATLAB

UvodMatrice

Skripte i funkcijeGrafika

Funkcija PlotMijenjanje elemenata grafaRad sa grafikom

Handle grafike

Prilikom kreiranja grafike u MATLABU, pridjeljuje mu se handle,identifikator te grafike. Koristeci taj handle, moze se pristupiti tojgrafici i njenim svojstvima.

Primjer

x = 0 : pi/100 : 2*pi;

y = sin(x);

a = plot(x, y)

set(a, ’Color’, ’red’)

b = plot(x, y, ’Color’, ’cyan’)

c = get(a, ’Color’)

d = get(b, ’Color’)

get(a, ’LineWidth’)

get(a)

MATLAB