331
M. Essert: Matlab interaktivno 1 Računalna matematika, FSB Zagreb, 2008. MATLAB – matrični laboratorij Interaktivni alat (kalkulator), programski jezik, grafički procesor Program = algoritam + strukture podataka TIPOVI PODATAKA temeljni tip - kompleksna matrica brojevi - double (s pretvorbama u integer-e (u)int8,16,32,64 ) nepopunjena matrica - sparse znak i niz znakova unutar jednostrukih navodnika - char, string ćelija - cell, polje različitih tipova struktura - struct, polje različitih tipova funkcijski tip - function handle @ (funkcija kao argument) objekti - Java i INLINE object. KONSTANTE I VARIJABLE pi - 3.141592... i,j - kompleksne veličine, sqrt(-1) eps - relativna točnost, najmanji iznos između dva realna broja inf, NaN - beskonačno (infinitum) i nije broj (not a number) realmax, realmin - najveći i najmanji realni broj bitmax - najveći cijeli broj (floating point) integer. ans - varijabla odgovora (ansver) ime_varijable - alfanumerički niz znakova, početni znak slovo, bez posebnih znakova, osjetljivost na velika i mala slova. Jednom definirana varijabla x može se ispisati jednostavnim pozivom imena x i tipke enter (return). FUNKCIJA Poziv: [iz1, iz2, ...] = ime_funkcije (ul1, ul2, ...) Definicija: Function [iz1, iz2, ...] = ime_funkcije (ul1, ul2, ...) gdje su: ul1, ul2, ... - ulazni argumenti u funkciju iz1, iz2, ... - izlazna rješenja funkcije (potprograma) ugrađene (bilt-in function) – abs(), sin(), sqrt(), exp(), ... ZAGRADE ( ) - grupiranje izraza, grupiranje funkcijskih argumenata, indeksiranje vektora (matrica) [ ] - grupiranje vektorskih (matričnih) elemenata { } - ćelije = polja različitih tipova podataka s klasičnim indeksiranjem

#Matlab Sve Pomalo

Embed Size (px)

Citation preview

Page 1: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 1

Računalna matematika, FSB Zagreb, 2008.

MATLAB – matrični laboratorij Interaktivni alat (kalkulator), programski jezik, grafički procesor

Program = algoritam + strukture podataka TIPOVI PODATAKA

temeljni tip - kompleksna matrica brojevi - double (s pretvorbama u integer-e (u)int8,16,32,64 ) nepopunjena matrica - sparse znak i niz znakova unutar jednostrukih navodnika - char, string ćelija - cell, polje različitih tipova struktura - struct, polje različitih tipova funkcijski tip - function handle @ (funkcija kao argument) objekti - Java i INLINE object.

KONSTANTE I VARIJABLE

pi - 3.141592... i,j - kompleksne veličine, sqrt(-1) eps - relativna točnost, najmanji iznos između dva

realna broja inf, NaN - beskonačno (infinitum) i nije broj (not a

number) realmax, realmin - najveći i najmanji realni broj bitmax - najveći cijeli broj (floating point) integer. ans - varijabla odgovora (ansver) ime_varijable - alfanumerički niz znakova, početni znak slovo,

bez posebnih znakova, osjetljivost na velika i mala slova.

Jednom definirana varijabla x može se ispisati jednostavnim pozivom imena x i tipke enter (return). FUNKCIJA

Poziv: [iz1, iz2, ...] = ime_funkcije (ul1, ul2, ...) Definicija:

Function [iz1, iz2, ...] = ime_funkcije (ul1, ul2, ...) gdje su:

ul1, ul2, ... - ulazni argumenti u funkciju iz1, iz2, ... - izlazna rješenja funkcije (potprograma)

ugrađene (bilt-in function) – abs(), sin(), sqrt(), exp(), ... ZAGRADE

( ) - grupiranje izraza, grupiranje funkcijskih argumenata, indeksiranje vektora (matrica)

[ ] - grupiranje vektorskih (matričnih) elemenata { } - ćelije = polja različitih tipova podataka

s klasičnim indeksiranjem

Page 2: #Matlab Sve Pomalo

2 M. Essert: Matlab interaktivno

Računalna matematika, FSB Zagreb, 2008.

RADNO OKRUŽENJE Command window – radni prozor Workspace – memorijski radni prostor (who – varijable) Current directory – trenutačni radni prostor Command history – povijesni redoslijed naredbi File->New->M-file (CTRL+N) – editor za m-datoteke

ZNAKOVI NA NAREDBENOJ LINIJI

>> - Matlabov upit korisniku, engl. prompt , - odvajanje naredbi ; - sprječavanje ispisa rezultata ... - nastavak naredbe u idućoj liniji % - komentar (od znaka udesno)

POČETAK RADA

help - poziva pomoć help ops - pomoć o operatorima help format – pomoć o formatima help elfun – pomoć o elementarnim funkcijama ...

intro - uvod o Matlabu demo - demonstracija primjera lookfor - pretraživanje pojmova CTRL+C - prekid izvođenja diary - vođenje dnevnika rada quit - završetak rada

OPERATORI Arithmetički operatori

= - pridružba, assignment plus, uplus - plus, unarni plus + minus, uminus - minus, unarni minus - mtimes - matrično množenje * mldivide - matrično dijeljenje s lijeva \ mrdivide - matrično dijeljenje s desna / mpower - matrično potenciranje ^

Točka

. - decimalna točka pristup polju strukture, npr. A(i).field

Operatori nad elementima - upotreba Hadamard-ovog ('točka', engl. 'dot') operatora.

power - potenciranje nad poljem .^ times - množenje elemenata u polju .* ldivide - lijevo dijeljenje u polju .\ rdivide - desno dijeljenje u polju ./

Page 3: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 3

Računalna matematika, FSB Zagreb, 2008.

C=A.*B znači c(i,j)=a(i,j)b(i,j) C=A./B znači c(i,j)=a(i,j)/b(i,j) C=A.\B znači c(i,j)=b(i,j)/a(i,j) C=A.^B znači c(i,j)=a(i,j)^{b(i,j)} C=A.^r znači c(i,j)=a(i,j)^r , r je broj. C=r.^A znači c(i,j)=r^{a(i,j)}

Relacijski operatori

eq - jednako == ne - nejednako ~= lt - manje nego < gt - veće nego > le - manje ili jednako <= ge - veće ili jednako >=

Logički operatori

logički I (AND) među izrazima && logički ILI (OR) među izrazima ||

and - logički I (AND) elemenata & or - logički ILI (OR) elemenata | not - logički NE (NOT) ~ xor - logički exclusivni ILI (XOR) any - Istina (True, 1) ako je bilo koji element

vektora različit od nule all - Istina (True, 1) ako su svi elementi vektora

različit od nule Operatori na razini bita

bitand - I (AND) na razini bita. bitcmp - komplement bitova. bitor - ILI (OR) na razini bita. bitxor - EX-ILI (XOR) na razini bita . bitset - Postavi bit bitget - Provjeri bit. bitshift - Pomak (shift) bitova.

Operatori skupova

union - unija skupova. unique - jedincatost (unique) skupa. intersect - presjek (intersection) skupova. setdiff - razlika (difference) skupova. setxor - Ex-Ili (exclusive-or) skupova. ismember - Istina (True) ako član (member) skupa.

STRING – NIZ ZNAKOVA

'nesto' - niz znakova (nesto), string SISTEMSKI ZNAKOVI

.. - prethodni directorij, roditeljski (parent) folder ! - pozivanje sistemske naredbe

Page 4: #Matlab Sve Pomalo

4 M. Essert: Matlab interaktivno

Računalna matematika, FSB Zagreb, 2008.

ZNAKOVI S VEKTORIMA (MATRICAMA) horzcat - [a b], [a, b] nadoveza elemenata u retku. vertcat - [a; b] stupčana nadoveza elemenata. transpose - .' za transpoziciju vektora (matrice) ctranspose - ' kompleksno konjugirana transpozicija colon - : ili dvotočje, za raspon

vrijednosti argumenata SLOŽENI PODACI Structures – spline, solve, diff. i optimisation solvers, OOP; Cells – varargin, vargout, text in graphics, switch-case; Polje struktura: ime(1...dim).polje_x ili struct('polje_x',{podaci}) Polje ćelija: Ime_polja_celija={elem1, elem2, ..., elemn} Poziv: Ime_polja_celija{element/-i} Primjeri 1. a=[1 2 3] c=[4; 5; 6] a*c dot(a,c) b=a' A=c*a a*a a.*a b=a.^2 a.*b exp(a) log(ans) sqrt(a) format long sqrt(a) format 2^(-24)

n=4; testmat(1).ime='Hilbert'; testmat(1).mat=hilb(n); testmat(2).ime='Pascal'; testmat(2).mat=pascal(n); testmat(1).mat testmat(2).ime Moja_celija={pi*n, magic(3); 'Mario radi', rand(5)} Moja_celija{4} Moja_celija{4}(2,1) Cellplot(Moja_celija) Moja_celija{2}(1,3)

NEKE ELEMENTARNE MATEMATIČKE FUNKCIJE Trigonometrijske sin, sinh - sinus, hiperbolični sinus asin, asinh - inverzni sinus, inverzni hiperbolični sinus cos, cosh - kosinus, hiperbolični kosinus acos, acosh - inverzni kosinus, inverzni hiperb. kosinus tan, tanh - tangens, hiperbolični tangens atan, atanh - inverzni tangens, inverzni hiperb. tangens atan2 - inverzni tangens u četvrtom kvadrantu sec, sech - sekans, hiperbolični sekans asec, asech - inverzni sekans, inverzni hiperbolični sekans

Page 5: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 5

Računalna matematika, FSB Zagreb, 2008.

csc, csch - sekans, hiperbolični sekans acsc, acsch - inverzni kosekans, inverzni hiperb. kosekans cot, coth - kotangens, hiperbolični kotangens acot, acoth - inverzni kotangens,inverzni hiperb. kotangens Eksponencijalne exp - eksponencijalna log - prirodni logaritam. log10 - obični (baza 10) logaritam log2 - logaritam po bazi 2 pow2 - potencija po bazi 2 realsqrt - kvadratni korijen broja >= 0 sqrt - kvadratni korijen Kompleksne abs - apsolutna vrijednost angle - fazni kut complex - Komplesni broj iz realnog i imaginarnog dijela conj - Konjugirani kompleksni broj imag - Imaginarni dio kompleksnog broja real - realni dio kompleksnog broja isreal - True (istina) za realna polja Zaokruživanje i ostatak fix - zaokruživanje prema nuli floor - zaokruživanje prema minus beskonačnom ceil - zaokruživanje prema plus beskonačnom round - zaokruživanje na najbliži cijeli broj mod - modulo funkcija (kao rezultat ostatka dijeljenja). rem - ostatak nakon dijeljenja sign - funkcija predznaka TVORBA VEKTORA a) Utipkavanje elemenata vektora unutar [] ili programsko generiranje s pomoću petlje (engl. loop). b) Tvorba s rubovima i razmakom

{početak} : {korak} : {dočetak} ako je korak=1 može se pisati samo

{početak} : {dočetak} Korak može biti i negativan, a ako je pritom 'početak' manji od 'dočetka' onda će generirani vektor biti prazan ([]). c) preko funkcija 'linspace()' i 'logspace()' U oba slučaja prva dva argumenta su početak i dočetak vektora (u drugom kao potencije broja 10), a treći je broj elemenata između njih. Razlika je što su prvi linearno, a drugi logaritamski udaljeni jedni od drugih.

Page 6: #Matlab Sve Pomalo

6 M. Essert: Matlab interaktivno

Računalna matematika, FSB Zagreb, 2008.

CRTANJE help plot PLOT Linear plot. PLOT(X,Y) crta vektor Y prema vektoru X. Različite tipovi linija, simbola i boja mogu se postići s naredbom PLOT(X,Y,S) gdje je S niz znakova (string) dobiven iz bilo kojeg od tri(ili svih) stupaca ispod: b plava . točka - čvrsto g zelena o kružić : točkasto r crvena x x-znak -. crt_točka c cyan + plus -- crtkano m magenta * zvijezda y žuta s kvadratić k crna d romb v trokut (dolje) ^ trokut (gore) < trokut (lijevo) > trokut (desno) p pentagram h hexagram Na primjer, PLOT(X,Y,'c+:') crta cyan točkastu liniju s + znakom na svakoj točki; PLOT(X,Y,'bd') crta rombove na svakoj točki podatka, ali ih ne povezuje linijom. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) kombinira grafove definirane trojcima (X,Y,S), gdje su X i Y vektori ili matrice, a S su stringovi. Na primjer, PLOT(X,Y,'y-',X,Y,'go') crta podatke dvaput, s punom žutom linijom interpolirajući zelenim kružićima točke podataka. Uz Plot() obično se koriste i funkcije: title('tekst') dodaje tekst na vrh grafa. xlabel('tekst'), ylabel('tekst') dodaje tekst uz X-os ili Y-os. text(X,Y,'string') dodaje string u navodnicima na (X,Y) poziciju. subplot(nmk) crta k-ti podgraf u (n x m) matrici grafova Primjeri 2. 2.1 x = linspace(0,1,11) ; y = sin(2*pi*x) ; plot(x,y) 2.2 x=logspace(.01,1,15); y=log(x); plot(x,y,x,y,'*')

Page 7: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 7

Računalna matematika, FSB Zagreb, 2008.

2.3 %Generiranje signala sa 'šumom' (noise): x=0:.025:2; y=sin(pi*x); yn=y+.25*(rand(size(x)) - .5); plot(x,y,'--',x,yn) title(['crtkana linija: sin(pi*x),' ... ' cvrsta linija: podaci sa šumom']) xlabel(['šum je slucajan iz [-1/8,1/8]']) 2.4 %Ubrzanje računanja preko odsječaka: m=5; n=4*m+1; x=linspace(0,1,n) ; % [x(1),x(2), ... x(21)], x(j)-x(j-1)=.05 y=zeros(1,n); xf=x( 1:(2*m+1) ) ; % the values [0, .05, ... ,.5] y(1:(2*m+1))=sin(2*pi*xf); y( (2*m+2):n )= -y(2:(2*m+1)) ; % koristi se činjenica da je % sin(x+pi)=-sin(x) plot(x,y) Ključno je ovo: ako je J=[J(1),J(2),...,J(k)] vektor indeksa vektora x=[x(1),x(2),...,x(n)], onda je w=x(J) vektor w= [x(J(1)),...,x(J(k))]. TVORBA MATRICA 1. Mogu se utipkati elementi: npr. A=[2 4 5; 2 6 3; -l 6 2] što daje 3 x 3 matricu. Ulazni podaci se tipkaju u redu (elementi se odvajaju prazninom ili zarezom), a s točkom-zarez (;) deklarira se početak novog retka. S naredbom rand(n) ili rand(n,m) generira se matrica reda (n x n) odnosno (n x m) sa slučajnim elementima koji su raspršeni preko normalne razdiobe između 0 i 1. 2. Naredbe

a=fix(10*rand(5)) b=round(10*rand(5))

generiraju 5 x 5 matrice s cjelobrojnim elementima. Ako su A = [dij] i B = [bij] (n x m) matrice i C = [cij] je (m x p) matrica, onda imamo sljedeće matrične aritmetičke operacije: (a) A + B = [ai j + bij] i A — B = [ai j - bi j] (b) A * C = D gdje je D (n x p) matrica s veličinama dobivenim matričnim množenjem. 3. Općenito za (n x m) matricu A vrijedi: (a) veličina (tj. broj redaka i stupaca) dobiva se kao [n,m]=size(A) (b) i-ti redak je A(i,:) (c) j-ti stupac je A(:,j) (d) podmatrica B sa i do j redaka i p do q stupaca je B=A(i:j,p:q)

Page 8: #Matlab Sve Pomalo

8 M. Essert: Matlab interaktivno

Primjeri 3. 3.1 A=[1 2 5 ; -2 1 4] B=[4 2 0 ; 4 2 -7] C=[3 6 ; -2 1 ;-4 2] A+B A*C 3*A 3.2 A=[3 1;5 2] A^2, A^3 A^(-1), inv(A) A*A^(-1) C=A^(-2) C*A^2

3.3 A=[1 2; 3 4]; B=[1 2; 2 4] T1= A == B T2= A <= B T3= A > B T4= A <= 3 T5= A ~= B T1=[1 1; 0 1]; T2=[1 0; 0 0] T=T1 & T2 T=T1 | T2 T=~T1 bitand(13,7) bitxor(13,7)

3.4 Inverz matrice Matrica ima inverz ako joj je determinanta različita od nule. A=[3 1; 5 2]

d=det(A) Problem određivanja kada kvadratna matrica ima inverz nema lak odgovor.

A=[3 1; 5 2] B=[3 1; 6 2]

Matrica A nije singularna onda i samo onda kad vrijedi jedno od slijedećih zaključaka: (a) det A 0 ≠

det (A) det (B)

(b) Reducirani 'row echelon' forma od A je identitet rref(A) rref(B)

(c) A ima inverz inv(A) inv(B)

(d) Jedino rješenje jednadžbe Ax = 0 je x = 0, tj., nul-prostor je nul-vektor. Matlab naredba "null" računa bazu za nul-prostor. Primjetite da ona ne ispisuje nul-vektor.

null(A) null(B)

(e) Matrica A ima puni rang. Ako je A reda (n x n) onda je rang od A jednak n.

rank(A) rank(B)

Neke matrične funkcije size( ) - veličina matrice, broj redaka i stupaca ' - transpozicija matrice diag() - dijagonalna matrica eye() - jedinična (identity) matrica zeros() - nul matrica sparse(i,j,v) - sparse matrica, na (i,j) mjestu v-ti element

Računalna matematika, FSB Zagreb, 2008.

Page 9: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 9

Računalna matematika, FSB Zagreb, 2008.

Polinomi kao matrice roots - nalazi korijen polinioma poly - pretvara korijen u polinom Primjeri 4. A=[5 7 9; 1 -3, -7] B=[-1,2,5;9 0 5] C=[0,1;3,-2;4,2] D=[1:5; 6:10; 11:2:20] size(A) size(ans) [r c]=size(A'), S=size(A') D, D' size(D), size(D') P=ones(2,3) Z=zeros(2,3), zeros(size(P')) S=[2 -1 0; -1 2 -1; 0 -1 2] St=S' S-St I=eye(3), x=[8; -4; 1], I*x D=[-3 0 0; 0 4 0; 0 0 2] diag(D) d=[-3 4 -2], D=diag(d) F=[0 1 8 7; 3 -2 -4 -2; 4 2 1 1] diag(F) x=[8; -4; 1] G=[C x]

A, B, H=[A;B] J=[1:4; 5:8; 9:12; 20 0 5 4] K=[diag(1:4) J; J' zeros(4,4)] spy(K),grid J(1,1), J(2,3), J(4,5) J(4,1)=J(1,1)+6 J(1,1)=J(1+1)-3*J(1,2) J(:,3) J(:,2:3) J(4,:) J(2:3,2:3) A,B,A.*B A.*C A.*C' i=[1,3,5]; j=[2,3,4]; v=[10 11 12] S=sparse(i,j,v) T=full(S) roots([1 -3 2]) poly(ans)

KONTROLNE STRUKTURE PROGRAMIRANJA INPUT naredba: x=input('neki tekst') dozvoljava interaktivan unos za x varijablu u izvođenju programa. Na zaslonu se pritom ispisuje neki tekst.

x=input('neki tekst',s) sprema uneseni tekst kao string u varijablu x. IF kontrolna struktura odgovara na pitanje ako – onda – inače: if {relacija} {naredbe} end ili još općenitije:

if {relacija} {naredbe} elseif { relacija } { naredbe } else { naredbe } end

Page 10: #Matlab Sve Pomalo

10 M. Essert: Matlab interaktivno

Računalna matematika, FSB Zagreb, 2008.

SWITCH struktura izabire vrijednost između više ponuđenih izraza. switch {izraz} case {slučaj_1}, naredba, ..., naredba case {slučaj2, slučaj3, ...} naredba, ..., naredba ... otherwise, naredba, ..., naredba end Izraz može biti skalar ili string. Postoji dva tipa petlji: (a) for petlja. Sintaksa je for {varijabla} = {vektor vrijednosti brojila} {naredba/-e} end (b) while petlja odgovara na pitanje 'sve dok je istina – čini':

while {relacije} {naredbe} end

Programske funkcije: break - završava izvođenje for ili while petlje continue - prebacuje kontrolu na iduću iteraciju petlje try - početak TRY bloka catch - početak CATCH bloka eval - izvršava string s MATLAB izrazom. feval - izračunava funkciju specificiranu stringom run - izvršava script-a function - dodaje novu (korisničku) funkciju global - definira globalne varijable return - povratak iz pozvane funkcije nargin - broj ulaznih argumenata funkcije nargout - broj izlaznih argumenata funkcije varargin - lista promjenljive duljine ulaznih argumenata varargout - lista promjenljive duljine izlaznih argumenata disp - ispis polja (obično stringa) fprintf - ispis formatirane poruke sprintf - ispis formatirane poruke u string pause - čekanje na korisnikov odziv (pauza) error - ispis pogreške poruke ili prekidne funkcije warning - prikaz poruke upozorenjawarning message

Page 11: #Matlab Sve Pomalo

M. Essert: Matlab interaktivno 11

Računalna matematika, FSB Zagreb, 2008.

Primjeri 5. 5.1 for i=1:3 x(i)=i^2 end 5.2 for i=1:5 for j=1:5 a(i,j)=1/(i+j) end end aa=hilb (5) 5.3 n=4 clear A for i=1:n for j=1:n if i < j A(i,j)=-1; elseif i > j A(i,j)=0; else A(i,j)=1; end end end A AA=eye(n)-triu(ones(n),1) 5.4 j=1 while j <= 10 k(j)=cos(j*pi); j=j+1; end k % usporedi sa: kk=cos((1:10)*pi) 5.5 x=(1:5)*2*pi; sprintf(' %5.3f',x) x=(1:5)*2*pi; sprintf(' %5.3f\n',x)

5.6 n=input(' unesi cijeli broj n = '); v=(1:2:n).^2 5.7 % Naći najmanji pozitivni % cijeli broj q za koji % vrijedi 2-q = 0: x=1; q=0; while x>0 x=x/2; q=q+1; end q 5.8 % Naći najmanji cijeli broj p % tako daje 1 + 2-p = 1 % u aritmetici s pomičnim % zarezom: x=1; p=0; y=1; z=x+y; while x~=z y=y/2; p=p+1; z=x+y; end p 2*y eps Primjetite da 2*y daje najmanji realni broj različit od nule u Matlab-u, tj. eps. 5.9 method = 'bilinear'; switch lower(method) case {'linear','bilinear'} disp('Method is linear') case 'cubic' disp('Method is cubic') case 'nearest' disp('Method is nearest') otherwise disp('Unknown method.') end

Page 12: #Matlab Sve Pomalo

12 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

5.10 %Formatirani ispis dobiva se upotrebom sprintf funkcije: disp('n sum(1:n) n*(n+1)/2 ') disp('------------------------------') for n=1:10 disp(sprintf(' %3.0f %5.0f %5.0f'... ,n,sum(1:n) ,n*(n+1)/2)); end 5.11 % Script file SineTable.m % % Ispisuje kratku tablicu proračuna sinusa. % n = 21; x = linspace(0,1,n); y = sin(2*pi*x); disp(' ') disp(' k x(k) sin(x(k))') disp('------------------------') for k=1:21 degrees = (k-1)*360/(n-1); disp(sprintf(' %2.0f %3.0f %6.3f'... ,k,degrees,y(k))); end disp( ' '); disp('x(k) je dan u stupnjevima.') disp(sprintf('Jedan stupanj = %5.3e radijana',pi/180)) 5.12 % Script File Zoom % % Nacrtajte (x-1)^6 uz točku x=1 sa % slijedno povećanom skalom. % Izračunavanje (x-1)^6 preko % x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6x +1 % dovodi do ozbiljnih promišljanja. close all k=0; for delta = [.1 .01 .008 .007 .005 .003 ] x = linspace(1-delta,1+delta,100)'; y = x.^6 - 6*x.^5 + 15*x.^4 - 20*x.^3 ... + 15*x.^2 - 6*x + ones(100,1); k=k+1; subplot(2,3,k) plot(x,y,x,zeros(1,100)) axis([1-delta 1+delta -max(abs(y)) max(abs(y))]) end

Page 13: #Matlab Sve Pomalo

M. Essert: Matlab programski 13

Računalna matematika, FSB Zagreb, 2008.

SCRIPTA 6.1 ime1.m h=input('korak h= '); x=0:h:2; y=x.^2 – 2*x+1; y1=sin(x); plot(x,y,'r-.',x,y1,'g:<') 6.2 ime2.m h=input('korak h= '); x=0:h:pi; y=cos(x).*(x<=pi/2)+(-x+pi/2).*(x>pi/2); plot(x,y) 6.3 epicikloida.m a=12; b=5; t=0:0.005:10*pi; x=(a+b)*cos(t)-b*cos((a/b+1)*t); y=(a+b)*sin(t)-b*sin((a/b+1)*t); plot(x,y) axis equal axis ([-25 25 -25 25]) grid on title('Epicikloida: a=12, b=5') xlabel('x(t)'), ylabel('y(t)') 6.4 % ovo je test m-datoteka nazvana test.m h=input('mesh size h = '); x=(0:h:1); lx=length(x); y=x.^2; int=(h/2)*(y(1)+2*sum(y(2:(lx-1)))+y(lx) ) % trapezno pravilo za integral s egzaktnom vrijednošću 1/3

Page 14: #Matlab Sve Pomalo

14 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

INLINE FUNKCIJA 6.5 f=inline('exp(x)-1'),f(2) f=inline('log(a*x)/(1+y^2)') f=inline('log(a*x)/(1+y^2)','x','y','a') 6.6 fd_deriv.m function y=fd_deriv(f,x,h) %FD_DERIV Aproksimacija derivacije if nargin < 3, h=sqrt(eps); end y=(feval(f,x+h) -feval(f,x))/h; fd_deriv(@sqrt,0.1) f=inline('exp(-x)/(1+x^2)'); fd_deriv(f,pi) M-FUNKCIJE FUNCTION dodaje novu funkciju. Nove funkcije sadržavaju stare, a spremaju se u datoteku s imenom istim kao ime funkcije, uz ekstenziju '.m'. Početak datoteke je sintaktički čvrsto određen. Komentar poslije funkcijske definicije koristi se u help-u. Primjer: function [mean,stdev] = stat(x) %STAT Interesting statistics. n = length(x); mean = sum(x) / n; stdev = sqrt(sum((x - mean).^2)/n); Podfunkcija (subfunction) koja je vidljiva drugim funkcijama unutar iste datoteke definira se nakon već napisane funkcije. function [mean,stdev] = stat(x) %STAT Interesting statistics. n = length(x); mean = avg(x,n); stdev = sqrt(sum((x-avg(x,n)).^2)/n); %------------------------- function mean = avg(x,n) %MEAN subfunction mean = sum(x)/n; Podfunkcije nisu vidljive izvan datoteke u kojoj su definirane.

Page 15: #Matlab Sve Pomalo

M. Essert: Matlab programski 15

Računalna matematika, FSB Zagreb, 2008.

6.7 maxentry.m function y=maxentry(A) %MAXENTRY Nalazi najveci broj u matrici A y=max(max(abs(A))); maxentry([1 2; 11 -4; 8 2]) 6.8 area.m function [A]=area(a,b,c) %Izračunava površinu trokuta koji ima stranice % dužine a, b i c % Inputs: % a, b,c – duljine stranica % Output: % A – površina trokuta % Usage: % Pov = area(2,3,4) % Napisao M.M., FSB Zagreb, 05.03.2003. s = (a+b+c)/2; A=sqrt(s*(s-a)*(s-b)*(s-c)); 6.9 flogist.m function [f,fprime]=flogist(x,a) %FLOGIST logističa funkcija i njena derivacija f= x.* (1-a*x); fprime=1-2*a*x; f=flogist(2,.1) [f,fprime]=flogist(2,.1) flogist(1:4,2) 6.10 comfun.m function comfun(x,y,z) %COMFUN prikaz funkcije s tri string argumenta disp(x), disp(y) disp(z) comfun('ab','ac','ad') comfun ab cd eg disp('hello'), disp hello diary ('moja.txt'), diary moja.txt sqrt 2 % sto nam daje ????

Page 16: #Matlab Sve Pomalo

16 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

6.11 marks.m function [x_sort, x_mean, x_med, x_std]=marks(x) % MARKS statistička analiza vektora x_sort=sort(x); if nargout>1, x_mean=mean(x); end if nargout>2, x_med=median(x); end if nargout>3, x_std=std(x); end marks([12 3 4 5 -4 5]) [a,b]=marks([12 3 4 5 -4 5]) [a,b,c]=marks([12 3 4 5 -4 5]) [a,b,c,d]=marks([12 3 4 5 -4 5]) 6.12 defn.m function z=defn(x,y) z=-x*y; moja5-16.m clear % ovaj program poziva funkciju de_fn.m a=input('lijeva krajnja točka a = '); b=input('desna krajnja točka b = '); N=input(' broj podintervala, N = '); ya=input('početna vrijednost u x=a, ya= '); h=(b-a)/N; x=a+h*(1:(N+1)); lx=length(x); y(1)=ya; for j=1:N y(j+1)=y(j)+h*defn(x(j),y(j)); end plot(x,y) 6.13 function [x,iter]=sqrt_newton(a,tol) % SQRT_NEWTON - traženje kvadratnog korijena Newtonovom metodom % X=SQRT_NEWTON(A,TOL) vraća X kao rješenje korijena koji je >= 0 % TOL je tolerancija konvergencije (pretpostavljena je EPS) % [X, ITER]=SQRT_NEWTON(A,TOL) vraća također i broj iteracija ITER if nargin < 2, tol=eps; end x=a; iter=0; xdiff=inf; fprintf(' k x_k rel_promjena\n') while xdiff>tol iter=iter+1; xold=x; x=(x+a/x)/2;

Page 17: #Matlab Sve Pomalo

M. Essert: Matlab programski 17

Računalna matematika, FSB Zagreb, 2008.

xdiff=abs(x-xold)/abs(x); fprintf('%2.0f: %20.16e %9.2e\n',iter,x,xdiff) if iter>50 error('Ne konvergira nakon 50 iteracija!') end end REKURZIVNE FUNKCIJE 6.14 function koch(pl,pr,level) %KOCH Recursively generated Koch curve. % KOCH(PL, PR, LEVEL) recursively generates a Koch curve, % where PL and PR are the current left and right endpoints % and LEVEL is the level of recursion if level==0 plot([pl(1),pr(1)], [pl(2),pr(2)]); %Join pl and pr hold on else A=(sqrt(3)/6)*[0 1; -1 0]; % Rotate/scale matrix pmidl=(2*pl + pr)/3; koch(pl,pmidl,level-1) % Left branch ptop=(pl + pr)/2 + A*(pl-pr); koch(pmidl,ptop,level-1) % Left mid branch pmidr=(pl + 2*pr)/3; koch(ptop,pmidr,level-1) % Right mid branch koch(pmidr, pr, level-1) % Right branch end a) pl=[0;0]; pr=[1;0]; for k=1:4 subplot(2,2,k) koch(pl,pr,k) axis('equal') title(['Koch curve: level = ' , num2str(k)], 'FontSize',16) end b) level=4; edges=7; for k=1:edges pl=[cos(2*k*pi/edges); sin(2*k*pi/edges)]; pr=[cos(2*(k+1)*pi/edges); sin(2*(k+1)*pi/edges)]; koch(pl,pr,level) end axis('equal') title('Koch snowflake','FontSize',16,'FontAngle','italic')

Page 18: #Matlab Sve Pomalo

18 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

Fibon6.15

acci sequence

a) function f = Fib1(n) % Returns the nth number in the % Fibonacci sequence. F=zeros(1,n+1); F(2) = 1; for i = 3:n+1 F(i) = F(i-1) + F(i-2); end f = F(n); b) function f = Fib2(n) % Returns the nth number in the % Fibonacci sequence. if n==1 f = 0; elseif n==2 f = 1; else f1 = 0; f2 = 1; for i = 2:n-1 f = f1 + f2; f1=f2; f2 = f; end end c) function f = Fib3(n) % Returns the nth number in the % Fibonacci sequence. if n==1 f = 0; elseif n==2 f = 1; else f = Fib3(n-1) + Fib3(n-2); end d) function f = Fib4(n) % Returns the nth number in the % Fibonacci sequence. A = [0 1;1 1]; y = A^n*[1;0]; f=y(1);

Page 19: #Matlab Sve Pomalo

M. Essert: Matlab programski 19

Računalna matematika, FSB Zagreb, 2008.

FUNKCIJE S VARIJABILNIM BROJEM ARGUMENATA 6.16 Moments.m function varargout=moments(x) %MOMENTS Moments of a vector. % [m1,m2,...,m_k]=MOMENTS(X) returns the first, second, ..., % k'th moments of the vector X, where the j'th moment % is SUM(X.^j)/LENGTH(X). for j=1:nargout, varargout(j)={sum(x.^j)/length(x)}; end >> m1=moments(1:4) m1 = 2.5000 >> [m1,m2,m3]=moments(1:4) 6.17 companb.m function C=companb(varargin) %COMPANB Block companion matrix % C=COMPANB(A_1,A_2,...,A_m) is the block companion matrix % corresponeding to the n-by-n matrices A_1,A_2,...,A_m. m=nargin; n=length(varargin{1}); C=diag(ones(n*(m-1),1),-n); for j=1:m Aj=varargin{j}; C(1:n,(j-1)*n+1:j*n)= -Aj; end >> X=ones(2); C=companb(X,2*X,3*X) C = -1 -1 -2 -2 -3 -3 -1 -1 -2 -2 -3 -3 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0

Page 20: #Matlab Sve Pomalo

20 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

POLINOMI 6.18 Legeandre-ovi polinomi zadani su rekurzivnom jednadžbom: (n+1)P(n+1)(x)=(2n+1)xPn(x) – nPn-1(x), P0=0; Nacrtajte prva četiri Legeandrova polinoma. Legendre.m x=-1:.01:1; p1=x; p2=(3/2)*x.^2 - 1/2; p3=(5/2)*x.^3-(3/2)*x; p4=(35/8)*x.^4-(15/4)*x.^2+3/8; plot(x,p1,'r:',x,p2,'g--',x,p3,'b-.',x,p4,'m-') box off legend('\itn=1','n=2','n=3','n=4',4) xlabel('x','Fontsize',12,'FontAngle','italic') ylabel('P_n','Fontsize',12,'FontAngle','italic') title('Legendre Polynomials','FontSize',14) text(-.6,.7,'(n+1)P_{n+1}(x)=(2n+1)x P_n(x) - n P_{n-1}(x)',... 'FontSize',12,'FontAngle','Italic') Primjetite: legend-a se može pozicionirati uz pomoć zadnjeg argumenta: -1: nadesno od crteža, 0: automatski (na 'najboljoj' poziciji), 1: gore desno (pretpostavljena vrijednost), 2: gore lijevo; 3: dolje lijevo, 4: dolje desno. Polinom n-tog reda:

y=p(x)= a1xn + a2xn-1 + ... + anx1 + an+1 uz poznate koeficijente [a1 a2 ... an an1] za poznatu vrijednost x može se izračunati direktno po gornjoj formuli: poli.m

y=0; n=length(a)-1; for k = 1:n + 1 y = y + a(k)*x.^(n-k+1) end

>> a=[2 -7 -2]; x=3; dok za više vrijednosti, područje vrijednosti x-a, program se samo proširuje vektorom y vrijednosti: polinom.m

n = length(a)-1; nx = length(x); y = zeros(1,nx); for k = 1:n + 1 y = y + a(k)*x.^(n-k+1) end

>> a=[2 -7 -2]; x=[3:.2:10];

Page 21: #Matlab Sve Pomalo

M. Essert: Matlab programski 21

Računalna matematika, FSB Zagreb, 2008.

Isto se može načiniti i s pomoću funkcije polyval. >> help polyfun polyval - izračunava polinom polyfit - traži koeficijente polinoma koji predstavlja podatke polyder - derivira polinom polyint - integrira polinom analitički conv - množi polinome deconv - dijeli polinome spline - interpolira kubični spline % korijeni (nule) polinoma P = [1 -12 0 25 116]; %polinom roots(P) ans = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i r = ans; PP = poly(r) PP = 1.0000 -12.0000 -0.0000 25.0000 116.0000 % množenje polinoma a = [1 2 3 4]; b = [4 9 16]; c = conv(a,b) c = 4 17 46 75 84 64 % vrijednost polinoma u točki(-ama) polyval(a, 2) ans = 26 polyval(a, [2 13 -6 19]) Fitting Zadano je m-točaka: { Xi, Yi }mI=1 Treba naći polinom p stupnja n tako da je p(xi) priblžno jednako yi za sve i=1:m. To se postiže funkcijom polyfit koja za zadani red polinoma n daje koeficijente polinoma p tako da je suma od i=1:m za kvadrat razlike odsupanja (p(xi)-yi)2 minimalna. x = [1 3 7 21]; %fitting y = [2 9 20 55]; polyfit(x,y,2) ans = -0.0251 3.1860 -0.8502 Nađite polinom trećeg reda koji u 20 točaka u intervalu [-2,2] po metodi najmanjih kvadrata aproksimira funkciju f(x)=1/(x+(1-x)^2).

x=linspace(-2,2,20);

Page 22: #Matlab Sve Pomalo

22 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

y=1./(x+(1-x).^2); p=polyfit(x,y,3); plot(x,y,'*',x,polyval(p,x),'—');

Objasnite dobivene koeficijente polinoma p:

-0.1170 -0.2067 0.4599 0.9426 Nađite egzaktnu interpolacija zadanih podataka preko spline funkcije.

x=linspace(-2,2,20); y=1./(x+(1-x).^2); xx=linspace(-2,2,60); yy=spline(x,y,xx); plot(x,y,'*',xx,yy,'—')

6.19 polifit.m p=[1 –6 11 –6]; x=0:.25:4; y=polyval(p,x)+randn(1,length(x)); plot(x,y,’*’), Title(‘Ulazni podaci’), pause while 1 n=input(‘Red polinoma n= ‘); if n<=0, break, end c=polyfit(x,y,n) fit=polyval(c,x) plot(x,fit,x,y,’o’), pause end 6.20 inter.m xd = 1 : 4; yd = [0 1 0 2]; x = 1 : 0.1 : 4; y = polyval(polyfit(xd,yd,length(xd)-1),x); plot(x,y,xd,yd,'o')

Page 23: #Matlab Sve Pomalo

M. Essert: Matlab inženjerski 23

23

SIMBOLIČKA MATEMATIKA 7.1 syms x % x is a symbolic variable f = 3*x^2 - 5*x + 1 % sym expression g = x^2 + 2*x % so is g f + g ans = 4*x^2-3*x+1 7.2 x = 5 % x has a numeric value f = 3*x^2 - 5*x + 1 f = 51 ezplot(f, [- 3,2]) subs(f, x, - 2) ans = 23 7.3 syms q subs(f, x, q) ans = 3*q^2-5*q+1 DIFERENCIJALNE JEDNADŽBE (ODE) - simbolički 8.1 syms x g = x^2*cos(x) g = x^2*cos(x) 8.2 diff(g, x) ans = 2*x*cos(x)-x^2*sin(x) 8.3 diff(g, x, 2) ans = 2*cos(x)-4*x*sin(x)-x^2*cos(x) 8.4 diff(x^3-x^2+2, x) ans = 3*x^2-2*x 8.5 syms a diff(x^3 - a*x^2 + 2, x)

ans = 3*x^2-2*a*x diff(x^3 - a*x^2 + 2, a) ans = -x^2 8.6 gp=diff(g, x) % dg/dx (x=2.1) gp = 2*x*cos(x)-x^2*sin(x) subs(gp, x, 2.1) ans = -5.9271 subs(diff(g, x), x , 2.1 ) ans = -5.9271 8.7 syms t DE1 = ' Dy = y*(1 - y) '

Page 24: #Matlab Sve Pomalo

Računalna matematika, FSB Zagreb, 2008.

DE1 = Dy = y*(1 - y) ysol = dsolve(DE1) ysol = 1/(1+exp(-t)*C1)

pretty(ysol) % Gives nice format 1 -------------- 1 + exp(-t) C1

8.8 dysol = simple( diff(ysol) ) dysol = 1/(1+exp(-t)*C1)^2*exp(-t)*C1 pretty(dysol) % Gives nice format exp(-t) C1 ----------------- 2 (1 + exp(-t) C1) 8.9 h = dsolve( DE1, ' y(0) = 1/10 ' ) h = 1/(1+9*exp(-t)) pretty(h) % Gives nice format 1 ------------- 1 + 9 exp(-t) 8.10 subs(h, t, 0) %To substitute t = 0 into the solution f. ans = 0.1000 8.11 syms t DE1 = ' Dy = y*(1 - y) ' DE1 = Dy = y*(1 - y) ysol = dsolve(DE1)

ysol = 1/(1+exp(-t)*C1) pretty(ysol) % Gives nice format 1 -------------- 1 + exp(-t) C1 8.12 dysol = simple( diff(ysol) ) dysol = 1/(1+exp(-t)*C1)^2*exp(-t)*C1 pretty(dysol) % Gives nice format exp(-t) C1 ----------------- 2 (1 + exp(-t) C1) 8.13 h = dsolve( DE1, ' y(0) = 1/10 ' ) h = 1/(1+9*exp(-t)) pretty(h) % Gives nice format 1 ------------- 1 + 9 exp(-t) subs(h, t, 0) ans = 0.1000

DIFERENCIJALNE JEDNADŽBE (ODE) - numerički 9.1 lotka.m function yp = lotka(t,y) %LOTKA Lotka-Volterra predator-prey model. global ALPHA BETA yp = [y(1) - ALPHA*y(1)*y(2); -y(2) + BETA*y(1)*y(2)];

Page 25: #Matlab Sve Pomalo

M. Essert: Matlab inženjerski 25

25

------- main -------------- global ALPHA BETA ALPHA = 0.01 BETA = 0.02 [t,y] = ode23('lotka',0,10,[1; 1]); plot(t,y) = ======================================================

9.2 twotnk.m function hdot = twotnk(t,h) % To solve % dh1/dt = 1 - 0.5*sqrt(h1-h2) % dh2/dt = 0.25*sqrt(h1-h2) - 0.25*sqrt(h2) hdot = zeros(2,1); % a column vector hdot(1) = 1- 0.5*sqrt(h(1)-h(2)); hdot(2) = 0.25*sqrt(h(1) - h(2)) - ... 0.25*sqrt(h(2)); ------- main -------------- clear twotnk [t, h] = ode45('twotnk', [0 100], [12 7]'); plot(t, h) =============================================== 9.3 g1.m function dy = g1(x,y) dy = 3*x^2; [x,num_y]=ode23('g1',[2 4],0.5); an1_y=x.^3-7.5; subplot(221),plot(x,num_y,x,an1_y,'o'),... title('Solution to Equation 1'),... xlabel('x'), ylabel('y=f(x)'), grid g2.m function dy = g2(x,y) dy = -0.131*y; clear g2 [x,num_y]=ode23('g2',[0 5],4); an1_y=4*exp(-0.131*x); subplot(222),plot(x,num_y,x,an1_y,'o'),... title('Solution to Equation 2'),... xlabel('x'), ylabel('y=f(x)'), grid g3.m function dy = g3(x,y) dy = 3.4444e-05- 0.0015*y; clear g3 [x,num_y]=ode23('g3',[0 120],0.0022);

Page 26: #Matlab Sve Pomalo

Računalna matematika, FSB Zagreb, 2008.

an1_y=0.022963-0.020763*exp(-0.0015*x); subplot(223),plot(x,num_y,x,an1_y,'o'),... title('Solution to Equation 3'),... xlabel('x'), ylabel('y-f(x)'), grid g4.m function dy = g4(x,y) dy = 3*y+exp(2*x); clear g4 [x,num_y]=ode23('g4',[0 3],3); an1_y=4*exp(3*x)-exp(2*x); subplot(224),plot(x,num_y,x,an1_y,'o'),... title('Solution to Equation 4'),... xlabel('x'), ylabel('x=f(x)'), grid ======================================================= 9.4 spr_damp.m % Definition of Spring-Damper system % M*x'' + D*x' + K*x = f(t) or x'' + (D/M)*x' + (K/M)*x = f(t)/M % or expressed as a system of first-order ODEs: % x1' = x2 % x2' = (1/M)*f(t) - D*x2 - K*x1 % where f(t) is defined by a function named in a string variable, FORCEFUN

function xdot = spr_damp(t,x) global M D K FORCEFUN xdot(1,:) = x(2); xdot(2,:) = (1/M)*( feval(FORCEFUN,t) - D*x(2) - K*x(1) );

delaysin.m % Sinusoidal forcing function for spring-mass-damper problem, smd_prob.m

function f = delaysin(t) global FIRSTCALL AMPLITUDE DELAY if FIRSTCALL ~= 1,

AMPLITUDE = input('Amplitude of forcing sine wave: ') DELAY = input('Delay time: ') FIRSTCALL=1;

end; if t >= DELAY,

f = AMPLITUDE*sin(t-DELAY); else

f = 0; end;

smdprob.m

eps1 = 0.001; % example of first forward global M D K FORCEFUN FIRSTCALL AMPLITUDE DELAY

% initialize Mass (M), Damping Coeff. (D), and Spring Constant (K): M=2, D=1.656, K=40

% Set the flag which indicates where the forcing funtion has been called: FIRSTCALL=0;

% Define the forcing function by asking user for the name of an m-file

Page 27: #Matlab Sve Pomalo

M. Essert: Matlab inženjerski 27

27

% or built-in function such as "sin" (this use of "input" takes a string value):

FORCEFUN = input('Type the name of the forcing function: ','s') % Set starting time and finishing time:

t0=0, tf=10 % Specify initial conditions:

x0=[1;0] % note: x0(1)=x(t=0), x0(2)=dx/dt(t=0) % Solve the system of first-order ODEs

[t,x]=ode45('spr_damp',[t0,tf],x0) % Plot the results:

hold on % keep adding additional plots to plot window plot(t,x(:,1)); % where x(:,1) is the first column of x, x(t)

% plot zero displacement axis plot(t,zeros(size(x(:,1))),'w-');

% add titles title('Forced, Damped Oscillator'); xlabel('Time in seconds'); ylabel('Displacement'); hold off

clear smdprob smdprob M = 2 D = 1.6560 K = 40 FORCEFUN = delaysin t0 = 0 tf = 10 x0 = 1 0 Amplitude of forcing sine wave: 100 AMPLITUDE = 100 Delay time: 0 DELAY = 0 smdprob

M = 2 D = 1.6560 K = 40 Type the name of the forcing function: sin

Page 28: #Matlab Sve Pomalo

28 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

9.5 de_fn.m function z=de_fn(x,y) z=-x*y; run_de.m clear % this program calls the function file de_fn.m a=input('left end point a = '); b=input('right end point b = '); N=input(' number of sub-intervals, N = '); ya=input('initial value at x=a, ya= '); h=(b-a)/N; x=a+h*(1:(N+1)); lx=length(x); y(1)=ya; for j=1:N y(j+1)=y(j)+h*de_fn(x(j),y(j)); end plot(x,y) ------------------------------------------------- de2_fn.m function z=de2_fn(x,y,yp) z=-x*y/(yp^2+1); run_de2.m clear % this program calls the function file de2_fn.m a=input('left end point a = '); b=input('right end point b = '); N=input(' number of sub-intervals, N = '); ya=input('initial value at x=a, y(a)= '); yap=input('initial value at x=a, y''(a)= '); h=(b-a)/N; x=a+h*(1:(N+1)); lx=length(x); w(1)=ya; z(1)=yap; for j=1:N w(j+1)=w(j)+h*z(j); z(j+1)=z(j)+h*de2_fn(x(j),w(j),z(j)); end y=w; plot(x,y) ======================================================= 9.6 lorenzde.m function dy=lorenzde(t,y) dy=[10*(y(2)-y(1)); (28-y(3)).*y(1)-y(2); y(1).*y(2)-(8/3)*y(3)];

Page 29: #Matlab Sve Pomalo

M. Essert: Matlab primjene 29

Computer Mathematics, FSB Zagreb, 2003.

run lorenz.m clear t0=input(' initial time t0 = '); T=input(' final time T = '); % initial condition; e.g. [1 -1 2]' v=input(' vector of initial conditions v = [v1,v2,v3] '); [n,m]=size(v); if m>1 v=v'; end tvec=t0:.025:T; [t,y]=ode45('lorenzde',tvec,v); h1=figure plot(y(:,1),y(:,2)) h2=figure plot(y(:,1),y(:,3)) h3=figure plot(y(:,2),y(:,3)) ======================================================= 9.7 vdpde.m function yp = vdpde(t,y) global MU yp(1)=y(2); yp(2)=MU*y(2).*(1-y(1).^2)-y(1); run_vdpe.m clear clear global global MU t0=input(' initial time t0 = '); T=input(' final time T = '); MU=input(' parameter MU = '); v=input(' vector of initial conditions v = [v1,v2] '); [n,m]=size(v); if m>1 v=v'; end tvec=t0:.025:T; [t,y]=ode45('vdpde',tvec,v); plot(y(:,1),y(:,2)) =======================================================

Page 30: #Matlab Sve Pomalo

30 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

KVADRATURA (INTEGRACIJA) syms x int(x*sin(x), x) ans = sin(x)-x*cos(x) diff(ans, x) ans = x*sin(x) syms a int(a*sin(x), x) ans = -a*cos(x) int(a*sin(x), a) ans = 1/2*a^2*sin(x) int(sin(x^2), x) ans = 1/2*2^(1/2)*pi^(1/2)*FresnelS(2^(1/2)/pi^(1/2)*x)

int(x*sin(x), x, 0, pi/2) ans = 1 double( int(sin(x^5 + x^3), x, 0, pi/2) ) Warning: Explicit integral could not be found. > In C:\MATLAB6P5\toolbox\symbolic\@sym\int.m at line 58 ans = 0.2910 int(1/(1+x^2), x, 0, 1) ans = 1/4*pi int(1/(1+x^2), x, 0, Inf) ans = 1/2*pi int(1/(1+x^4), x, 0, Inf) ans = 1/4*pi*2^(1/2)

= ======================================================

10.1 fxlog.m function f=fxlog(x)=x .* log(x); quad(@fxlog,2,4) % quad(fun,a,b,tol) Simpson, Newton-Cotes, Gauss 10.2 fxy.m function out=fxy(x,y) out=y^2 * exp(x)+x*cos(y); dblquad(@fxy,0,1,4,6) % dvostruki integral %trapezno pravilo integracije x=linspace(0,2*pi,10); f=sin(x).^2 ./ sqrt(1+cos(x).^2); trapz(x,f)

Page 31: #Matlab Sve Pomalo

M. Essert: Matlab primjene 31

Računalna matematika, FSB Zagreb, 2008.

TVORBA TABLICA 11.1 % Script file SineTable.m % % Ispisuje kratku tablicu proračuna sinusa. % n = 21; x = linspace(0,1,n); y = sin(2*pi*x); disp(' ') disp(' k x(k) sin(x(k))') disp('------------------------') for k=1:21 degrees = (k-1)*360/(n-1); disp(sprintf(' %2.0f %3.0f %6.3f'... ,k,degrees,y(k))); end disp( ' '); disp('x(k) je dan u stupnjevima.') disp(sprintf('Jedan stupanj = %5.3e radijana',pi/180)) 11.2 % Script File Zoom % % Nacrtajte (x-1)^6 uz točku x=1 sa % slijedno povećanom skalom. % Izračunavanje (x-1)^6 preko % x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6x +1 % dovodi do ozbiljnih promišljanja. close all k=0; for delta = [.1 .01 .008 .007 .005 .003 ] x = linspace(1-delta,1+delta,100)'; y = x.^6 - 6*x.^5 + 15*x.^4 - 20*x.^3 ... + 15*x.^2 - 6*x + ones(100,1); k=k+1; subplot(2,3,k) plot(x,y,x,zeros(1,100)) axis([1-delta 1+delta -max(abs(y)) max(abs(y))]) end

Page 32: #Matlab Sve Pomalo

32 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

LINEARNE JEDNADŽBE 12.1 Rješavanje sustava jednadžbi preko 'backslash'-a. A=[3 1; 5 2] % definiraj A b=[2;-9] % definiraj b x=A\b % riješi Ax=b A*x-12.2

b % provjeri rezultat

A=[3 1; 5 2] % definiraj A b=[2; -9] % definiraj b C=[A b] % postavi augmentiranu matricu rref(C) % izračunaj reduciranu echleon formu % posljednji stupac je rješenje A=[3 1;5 2] % definiraj A c=[2 -9] % definiraj c x=inv(A)*c' A*x-c' % provjeri rezultat 12.3 a=rand(1000); b=rand(1000,1); tic, x=a\b; toc elapsed_time = 0.8130

Page 33: #Matlab Sve Pomalo

M. Essert: Matlab primjene 33

Računalna matematika, FSB Zagreb, 2008.

D O D A T A K NELINEARNE JEDNADŽBE syms a b c t % Create symbolics g = a*t^2 + b*t + c g = a*t^2+b*t+c solve(g, t) % Solve g = 0 for t ans = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] 13.1 fcn1.m function y = fcn1(x) % To solve f(x) = x^2 - 2x - 3 = 0 y = x^2 - 2*x - 3; y1 = fzero('fcn1', 0) y1 = -1 13.2 nle.m function f = nle(x) % To solve % f1(x1,x2) = x1^2 - 4x1^2 - x1x2 = 0 % f2(x1,x2) = 2x^2 - x2^2 + 3x1x2 = 0 f(1) = x(1) - 4*x(1)*x(1) - x(1)*x(2); f(2) = 2*x(2) - x(2)*x(2) + 3*x(1)*x(2); clear nle x0 = [1 1]'; x = fsolve(@nle, x0,optimset('fsolve')) Optimization terminated successfully: First-order optimality is less than options.TolFun. x = 0.2500 0.0000 13.3 newton.m function x = newton(fcn, xguess, xtol, ftol, maxiter) % ---------------------------------------------------------------------- % Usage: x = newton('fcn', xguess, xtol, ftol, maxiter) % Vanilla Newton-Raphson's method to solve an algebraic equation of the form: % f(x)=0 % Variables: % fcn ... Name M-file that specifies the function to be solved f(x) and % its Jacobian dfdx(x). It should be enclosed in a pair of single

Page 34: #Matlab Sve Pomalo

34 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

% quotes in the calling program. % This function should return the value of f as a column vector % and dfdx as a matrix: % function [f dfdx]=fcn(x) % xguess ... initial guess of x as a column vector % xtol ... normalized tolerance in the x-direction (stop criterion) % sqrt of sum of squared values of x-xold for each iteration % ftol ... sqrt of sum of squared values of f at x (stopping criterion) % maxiter ... maxmum number of iterations allowed % Algorithm: iterate on x = x-inv(dfdx)*f % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Start with the initial guess x = xguess; % Iterate for a maximum number of maxiter times for i=1 : maxiter % Evaluate the function and its derivative at the given x [f dfdx] = feval(fcn,x); % Newton's Method xold=x; x = x-inv(dfdx)*f; % Apply stop criterion if ( norm(x-xold) <= xtol | norm(f) <= ftol ) return end end myfxeq0.m function [f, dfdx] = myfxeq0(xvect) % ---------------------------------------------------------------------- % Specify 2-dimensional f(xvect)=0 % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Create a column vector f and a square Jacobian matrix dfdx f = zeros(2,1); dfdx = zeros(2,2); % Use my own variables x = xvect(1); y = xvect(2); % Specify two equations f f(1) = y^2 + x*y - 1; f(2) = 3*x + y + 1 - y^3; % Specify the Jacobian dfdx dfdx(1,1)= y;

Page 35: #Matlab Sve Pomalo

M. Essert: Matlab primjene 35

Računalna matematika, FSB Zagreb, 2008.

dfdx(1,2)= 2.*y + x; dfdx(2,1)= 3.; dfdx(2,2)= 1. - 3.*y*y; % ---------------------------------------------------------------------- % Solve the following set of nonlinear algebraic equations with the Newton's % method by calling "newton" function. % y^2 + x*y - 1 = 0 % 3*x + y + 1 - y^3 = 0 % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Start fresh ---------------------------------------------------------- clear all % Program header ------------------------------------------------------- disp('Solve the following set of nonlinear algebraic equations:') disp(' y^2 + x*y - 1 = 0') disp(' 3*x + y + 1 - y^3 = 0') disp(' ') % Provide an initial guess (work in column vectors) -------------------- xguess=[1 0]'; % Call a routine to solve for the root of f(x)=0 ----------------------- xvect = newton('myfxeq0', xguess, 1.e-6, 1.e-6, 100); % Print out the results in the original notation ----------------------- x = xvect(1); y = xvect(2); disp('The roots are: ') disp([' x = ', num2str(x) ]) disp([' y = ', num2str(y) ]) myfxeq04.m function [f, dfdx] = myfxeq04(xvect) % ---------------------------------------------------------------------- % Specify 3-dimensional f(xvect)=0 % sin(x) + y^2 + ln(z) - 7 = 0 % 3*x + 2^y - z^3 + 1 = 0 % x + y + z - 5 = 0 % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Create a column vector f and a square Jacobian matrix dfdx f = zeros(3,1); dfdx = zeros(3,3); % Use my own variables x = xvect(1); y = xvect(2); z = xvect(3); % Specify three equations f

Page 36: #Matlab Sve Pomalo

36 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

f(1) = sin(x) + y*y + log(z) - 7; f(2) = 3*x + 2^y - z*z*z + 1; f(3) = x + y + z - 5; % Specify the Jacobian dfdx dfdx(1,1) = cos(x); dfdx(1,2) = 2*y; dfdx(1,3) = 1/z; dfdx(2,1) = 3; dfdx(2,2) = log(2)*2^y; dfdx(2,3) = -3*z*z; dfdx(3,1) = 1; dfdx(3,2) = 1; dfdx(3,3) = 1; % ---------------------------------------------------------------------- % Solve the following set of nonlinear algebraic equations with the Newton's % method by calling "newton" function. % sin(x) + y^2 + ln(z) - 7 = 0 % 3*x + 2^y - z^3 + 1 = 0 % x + y + z - 5 = 0 % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Start fresh ---------------------------------------------------------- clear all % Program header ------------------------------------------------------- disp('Solve the following set of nonlinear algebraic equations:') disp(' sin(x) + y^2 + ln(z) - 7 = 0 ') disp(' 3*x + 2^y - z^3 + 1 = 0 ') disp(' x + y + z - 5 = 0 ') disp(' ') % Provide an initial guess (work in column vectors) -------------------- xguess=[1 1 1]'; % Call a routine to solve for the root of f(x)=0 ----------------------- xvect = newton('myfxeq04', xguess, 1.e-6, 1.e-6, 100); % Print out the results in the original notation ----------------------- x = xvect(1); y = xvect(2); z = xvect(3); disp('The roots are: ') disp([' x = ', num2str(x) ]) disp([' y = ', num2str(y) ]) disp([' z = ', num2str(z) ])

Page 37: #Matlab Sve Pomalo

M. Essert: Matlab primjene 37

Računalna matematika, FSB Zagreb, 2008.

myfxeq05.m function f = myfxeq05(xvect) % ---------------------------------------------------------------------- % Specify 3-dimensional f(xvect)=0 % sin(x) + y^2 + ln(z) - 7 = 0 % 3*x + 2^y - z^3 + 1 = 0 % x + y + z - 5 = 0 % This file is called by newton5.m % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Create a column vector f f = zeros(size(xvect)); % Use my own variables x = xvect(1); y = xvect(2); z = xvect(3); % Specify three equations f f(1) = sin(x) + y*y + log(z) - 7; f(2) = 3*x + 2^y - z*z*z + 1; f(3) = x + y + z - 5; % ---------------------------------------------------------------------- % Solve the following set of nonlinear algebraic equations with "fsolve" % sin(x) + y^2 + ln(z) - 7 = 0 % 3*x + 2^y - z^3 + 1 = 0 % x + y + z - 5 = 0 % Instructor: Nam Sun Wang % ---------------------------------------------------------------------- % Start fresh ---------------------------------------------------------- clear all % Program header ------------------------------------------------------- disp('Solve the following set of nonlinear algebraic equations:') disp(' sin(x) + y^2 + ln(z) - 7 = 0 ') disp(' 3*x + 2^y - z^3 + 1 = 0 ') disp(' x + y + z - 5 = 0 ') disp(' ') % Provide an initial guess (work in column vectors) -------------------- xguess=[1 1 1]'; % Call a routine to solve for the root of f(x)=0 ----------------------- xvect = fsolve(@myfxeq05, xguess, foptions); %old sintax % Print out the results in the original notation ----------------------- x = xvect(1); y = xvect(2); z = xvect(3);

Page 38: #Matlab Sve Pomalo

38 M. Essert: Matlab programski i grafički

Računalna matematika, FSB Zagreb, 2008.

disp('The roots from the default "fsolve" are: ') disp([' x = ', num2str(x) ]) disp([' y = ', num2str(y) ]) disp([' z = ', num2str(z) ]) % Repeat with a different set of options ------------------------------- options(2) = 1.e-6; %Tolerance for x options(3) = 1.e-6; %Tolerance for f options(5) = 1; %Levenberg-Marquardt Method xvect = fsolve('myfxeq05', xguess, options); % Print out the results in the original notation ----------------------- x = xvect(1); y = xvect(2); z = xvect(3); disp('The roots from "fsolve" with Levenberg-Marquardt are: ') disp([' x = ', num2str(x) ]) disp([' y = ', num2str(y) ]) disp([' z = ', num2str(z) ]) SLABO KONDICIONIRANE (SPARSE, RASPRŠENE) MATRICE A=[ -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 ]; S=sparse(A) i=[ 1 2 1 2 3 2 3 4 3 4 5 4 5]; j=[ 1 1 2 2 2 3 3 3 4 4 4 5 5]; s=[-2 1 1 -2 1 1 -2 1 1 -2 1 1 -2]; a=sparse(i,j,s,5,5) a = (1,1) -2 (2,1) 1 (1,2) 1 (2,2) -2 (3,2) 1 (2,3) 1 (3,3) -2 (4,3) 1 (3,4) 1 (4,4) -2

(5,4) 1 (4,5) 1 (5,5) -2 B=full(a) B = -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2

C=sparse(B) % pretvroba u sparse nnz(a) % broj elemenata različitih od nule

Page 39: #Matlab Sve Pomalo

M. Essert: Matlab primjene 39

Računalna matematika, FSB Zagreb, 2008.

K=eye(5) K = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 K2=speye(5) K2 = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 help sparse see also: SPALLOC, SPONES, SPEYE, SPCONVERT, FULL, FIND, SPARFUN. n=5; e=ones(n,1); A=spdiags([-e 4*e -e],[-1 0],n,n); full(A)

Page 40: #Matlab Sve Pomalo

40 M. Essert: Matlab programski

Računalna matematika, FSB Zagreb, 2008.

POSEBNE KRIVULJE bezier.m % Bezier cubic curve % This file will create a Bezier cubic curve and dispay the plot % There are two reasons for including comments in the front. % If you are working with a lot of programs then this will tell you what % the file is supposed to accomplish. % Second, if you type help filename ( without the .m extension) then these % comments are displayed in the workspace BCon3 = [-1 3 -3 1; 3 -6 3 0; -3 3 0 0 ; 1 0 0 0 ]; % our 4 X 4 constant Matrix BezVert3 = [ 0 0 ; 0.3 0.5 ; 0.5 0.7 ; 1.0 1.0]; % the vertices for i = 1:1:50 % for loop 1 - 50 in steps of 1 par = (i - 1)/49; XY(i,:) = [par^3 par^2 par 1]*BCon3*BezVert3; % we created our data end XY % we will display the vertices and the curve using % Matlabs built-in graphic functions clf % this will clear the figure plot(BezVert3(:,1),BezVert3(:,2),'ro',XY(:,1),XY(:,2),'b-') xlabel(' x value') ylabel ('y value') title('Cubic Bezier Curve') legend('Vertex','Curve') % you can move the legend coeff = polyfit(XY(:,1),XY(:,2),1) % a linear fit plot(XY(:,1),polyval(coeff,XY(:,1)),'--') hold on % allows multiple plots on the same figure plot(XY(:,1),XY(:,2),'r-') grid % draws the grid xlabel('x value') ylabel('y value') title(' curve fit example') area1 = trapz(XY(:,1),XY(:,2)) Polyerr.m function max_err=polyerr(n) % POLYERR Error in linear interpolation polynomial. % POLYERR(N) is an approximation based on N sample points % to the maximum difference between subfunction F and its % linear interpolating polynomial at 0 and 1. max_err=0; f0=f(0); f1=f(1); for x=linspace(0,1,n) p=x*f1 + (x-1)*f0;

Page 41: #Matlab Sve Pomalo

M. Essert: Matlab programski 41

Računalna matematika, FSB Zagreb, 2008.

err=abs(f(x)-p); max_err=max(max_err,err); end % Subfunction function y=f(x) %F Function to be interpolated, F(X). y=sin(x); >> help polyerr/f F Function to be interpolated, F(X). >> polyerr(5) ans = 0.0587 >> polyerr(50) ans = 0.0600

Page 42: #Matlab Sve Pomalo

42 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

GRAFIKA 2-D crteži Elementarni X-Y grafovi plot - linearni crtež loglog - logaritamsko-logaritamski crtež semilogx - linearno-logaritamski crtež semilogy - logaritamsko-linearni crtež polar - crtež u polarnim koordinatama plotyy - graf sa y oznakama na lijevo i na desno 15.1 x=0:pi/100:2*pi; y1=sin(x); y2=cos(x); plot(x,y1,'b-',x,y2,'r:'); 15.2 theta=0:pi/100:2*pi; rho=sin(theta*3); polar(theta,rho,'go');

15.3 x=1:0.1:7; y1=exp(x); y2=exp(-x.^2); plotyy(x,y1,x,y2,'semilogy'); grid on 15.4 h=input('korak h='); x=0:h:pi; y=cos(x).*(x<=pi/2)+(-x+pi/2).*(x>pi/2); plot(x,y)

Koordinate osi axis - kontrolira umjeravanje osi i njihovo pojavljivanje zoom - zoom-ira (uvećavanje i smanjivanje) 2-D crteža grid - linije mreže box - okvir na osima hold - drži (zamrzne/otpusti on/off) trenutačni graf axes - tvori osi u bilo kojim pozicijama subplot - tvori osi u (n x m) podgrafovima 15.5 x=0:pi/100:2*pi; y=sin(x); subplot(2,1,1); plot(x,y,'r'); axis([0 2*pi -0.7 0.7]) subplot(2,1,2) plot(x,y,'b'); axis off axes('Position',[0.6 0.2 0.3 0.2]) plot(x,y,'g') grid on

Page 43: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 43

Računalna matematika, FSB Zagreb, 2008.

Označivanje grafova legend - legenda grafa title - naslov grafa xlabel - oznaka (opis) X-osi ylabel - oznaka (opis) Y-axis text - oznaka teksta gtext - postavljanje teksta mišem 15.6 clf; x=0:pi/100:2*pi; y1=sin(x); y2=cos(x); plot(x,y1,'b',x,y2,'r'); legend('Sinus','Kosinus',0); xlabel('X-axis'); ylabel('Y-axis'); title('Trigonometrija je OK'); text(4, 0.5,'Tekst na (4,0.5)'); Ispis grafike. print - ispisuje graf ili sprema u m-datoteku. printopt - printer-ske opcije orient - postavljanje smjera papira print naredba može ispisivati grafiku u različitim Postscript formatima, uključujući EPS. Da bi se stvorila slika figure.eps, treba otipkati print -deps figure.

Rasterske slike (npr. za Web) se još djelotvornije spremaju koristeći imwrite naredbu.

3-D crteži Elementarni 3-D crteži plot3 - crta linije i točke u 3-D prostoru mesh - 3-D mesh (rešetkasta) površina surf - 3-D obojena površina fill3 - 3-D površina prekrivena poligonima 15.7 nice.m function z=nice(x,y) z=x .* exp(-x.^2 - y.^2); % --- poziv funkcije 'nice.m' x=[-2:0.5:2]; y=[-2:2]; [X,Y]=meshgrid(x,y) Z=nice(X,Y)

plot3(X,Y,Z,'*'), grid mesh(X,Y,Z) meshc(X,Y,Z) meshz(X,Y,Z) waterfall(X,Y,Z), view([10 35]) 15.8 t = 0:pi/50:5*pi; plot3(sin(t),cos(t),t); grid on

Page 44: #Matlab Sve Pomalo

44 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

15.9 [X,Y] = meshgrid(-2:.4:2, -2:.4:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); mesh(X,Y,Z)

15.10 [X,Y] = meshgrid(-2:.4:2, -2:.4:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surf(X,Y,Z)

Boje colormap - Tablica boja caxis - Pseudocolor umjeravanje (scaling) osi shading - mod osjenčavanja bojom hidden - brisanje skrivenih linija u rešetki brighten - osvjetljavanje ili zatamnjenje tablice boja Mape boja hsv - Hue-saturation-value color map. hot - Black-red-yellow-white color map. gray - Linear gray-scale color map. bone - Gray-scale with tinge of blue color map. copper - Linear copper-tone color map. pink - Pastel shades of pink color map. white - All white color map. flag - Alternating red, white, blue, and black color map. lines - Color map with the line colors. colorcube - Enhanced color-cube color map. jet - Variant of HSV. prism - Prism color map. cool - Shades of cyan and magenta color map. autumn - Shades of red and yellow color map. spring - Shades of magenta and yellow color map. winter - Shades of blue and green color map. summer - Shades of green and yellow color map. 15.11 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surf(X,Y,Z) colormap(hot(15)) shading interp

15.12 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surf(X,Y,Z) colormap(hot(15)) shading interp caxis([0.05 0.2])

Osvjetljenje surfl - 3-D osjenčana površina s osvjetljenjem lighting - modovi osvjetljavanja material - mod odbijajućih materijala specular - Specular odbijanje svjetla diffuse - difuzno odbijanje svjetla surfnorm - normale površine

Page 45: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 45

Računalna matematika, FSB Zagreb, 2008.

15.13 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surfl(X,Y,Z) colormap(jet) 15.14 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surf(X,Y,Z) colormap(jet) light

15.15 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); surf(X,Y,Z) colormap(jet) f = findobj('Type','surface'); set(f,'FaceLighting','phong'); material shiny shading interp light

Upravljanje pomaka točke gledišta view - 3-D specifikacija točke gledišta viewmtx - Transformacijska matrica točke gledišta rotate3d - Interaktivno rotiranje točke gledišta u 3-D crtežu 15.16 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.^2 - Y.^2); colormap(hsv) subplot(1,2,1)

surf(X,Y,Z) az=30;el=10; view([az,el]); subplot(1,2,2) surf(X,Y,Z) az=120;el=60; view([az,el]);

Page 46: #Matlab Sve Pomalo

46 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

15.17 Z=peaks(20); colormap(winter) surf(Z) colorbar

15.18 Z=peaks(20); colormap(winter) surf(Z); h=colorbar('horiz'); set(h, 'PlotBoxAspectRatio',[10 0.4 1.0]) set(h, 'FontSize', 15);

Specializirani grafovi Specijalizirani 2-D grafovi. area - crtež ispunjene površine bar - Bar graf barh - horizontalni bar graf bar3 - 3-D bar graf bar3h - horizontal 3-D bar graf comet - kometu slična trajektorija errorbar - 'error bar' crtež ezplot - jednostavno funkcijsko crtalo feather - feather crtež fill - ispunjeni 2-D poligoni fplot - function plot hist - histogram. pareto - pareto crtež pie - kriška (Pie) crtež pie3 - 3-D kriška crtež plotmatrix - Scatter plot matrix. ribbon - crta 2-D linije kao vrpce u 3-D. stem - disketni niz ili "stem" crtež stairs - stepeničasti crtež 15.19 X=93:1:98; Y=[1 2 3 4 5 4 2 3 4 3 6 5 1 2 4 2 3 2 ]; bar3(X,Y) 15.20 yn=randn(10000,1); x=min(yn):0.2:max(yn); hist(yn,x);

15.21 x = 1:10; y = 100*rand(10,1); e = sqrt(y); errorbar(x,y,e) 15.22 ezplot('besselj(0,x)') 15.23 fplot('erf(x)', [-pi pi])

Konturni i 2-1/2 D grafovi contour - konturni crtež contourf - ispunjeni konturni crtež contour3 - 3-D konturni crtež.

Page 47: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 47

Računalna matematika, FSB Zagreb, 2008.

clabel - konturni crtež s oznakama visina pcolor - Pseudocolor (šahovnica, checkerboard) crtež quiver - quiver crtež voronoi - Voronoi dijagrami 15.24 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.*X - Y.*Y); [fx,fy] = gradient(Z); contour(X,Y,Z,10) hold on quiver(X,Y,fx,fy); hold off

15.25 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.*X - Y.*Y); [fx,fy] = gradient(Z); [cs,h]=contourf(X,Y,Z,10); clabel(cs,h); 15.26 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.*X - Y.*Y); contour3(X,Y,Z,20);

Specializirani 3-D crteži comet3 - 3-D comet-like trajectories. meshc - Combination mesh/contour plot. meshz - 3-D mesh with curtain. stem3 - 3-D stem plot. quiver3 - 3-D quiver plot. slice - Volumetric slice plot. surfc - Combination surf/contour plot. trisurf - Triangular surface plot. trimesh - Triangular mesh plot. waterfall - Waterfall plot.

15.27 [x,y,z] = meshgrid(-2:.2:2, -2:.25:2, -2:.16:2); v = x .* exp(-x.^2 - y.^2 - z.^2); slice(x,y,z,v,1.5, 1, 0) 15.28 [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = sin(X).* sin(Y).* ... exp(-X.*X - Y.*Y); waterfall(X,Y,Z);

Page 48: #Matlab Sve Pomalo

48 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

HANDLE GRAPHICS (grafika najniže razine)

OBJEKTI = atributi + vrijednosti GET - dohvaća vrijednost(i) atributa SET - postavlja vrijednosti atributa plot(1:10,'o-') h=findobj h = 0 1.0000 100.0011 3.0012 get(h,'type') ans = 'root' 'figure' 'axes' 'line' set(h(3)) ALim ALimMode: [ {auto} | manual ] AmbientLightColor Box: [ on | {off} ] CameraPosition CameraPositionMode: [ {auto} | manual ] ...... UserData Visible: [ {on} | off ] set(h(4)) Color EraseMode: [ {normal} | background | xor | none ] LineStyle: [ {-} | -- | : | -. | none ] LineWidth

Page 49: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 49

Računalna matematika, FSB Zagreb, 2008.

Marker: [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none} ] MarkerSize .... UserData Visible: [ {on} | off ] set(h(4),'Marker') [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none} ] set(h(4),'Marker','s','MarkerSize',16) set(h(3),'XScale') [ {linear} | log ] set(h(3),'XScale','log') x=linspace(0,2*pi,35); a1=subplot(2,1,1); % Axes object l1=plot(x,sin(x),'x'); %Line object a2=subplot(2,1,2); % Axes object l2=plot(x,cos(x).*sin(x),'x'); %Line object tx2=xlabel('x');ty2=ylabel('y'); %Text objects set(a1,'Box','off') % box off set(a1,'XTick',[]) set(a1,'YAxisLocation','right') set(a1,'TickDir','out') set(l1,'Marker','<') set(a2,'Position',[0.2 0.15 0.65 0.35]) set(a2,'XLim',[0 2*pi]) set(a2,'FontSize',14) set(a2,'XTick',[0 pi/2 pi 2*pi]) set(a2,'XTickLabel','0 |pi/2| pi| 2*pi') set(a2,'XGrid','on') set(a2,'XScale','log') set(a2,'XScale','log') set(l2,'LineWidth',6) set(tx2,'FontAngle','italic','FontSize',20) set(ty2,'Rotation',0,'FontAngle','italic','FontSize',20) get(l1) Color = [0 0 1] EraseMode = normal LineStyle = none LineWidth = [0.5] Marker = < MarkerSize = [6] .... Type = line UIContextMenu = [] UserData = [] Visible = on

Page 50: #Matlab Sve Pomalo

50 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

get(a2,'XTick') ans = 0 1.5708 3.1416 6.2832 get(gca,'FontWeight') ans = normal set(gca,'FontWeight') [ light | {normal} | demi | bold ] set(gca,'FontWeight','bold') set(gco,'Marker','*') Animacija Ugrađena funkcija - comet() x=linspace(-2,2,500); y=exp(x) .* sin(1./x); comet(x,y) drugi način animacije – slikom na sliku clear % Remove existing variables Z=peaks; surf(Z) axis tight set(gca,'nextplot','replacechildren') disp('Creating the movie...') for j=1:11 surf(cos(2*pi*(j-1)/10) .* Z,Z) F(j)=getframe; end disp('Playing the movie...') movie(F) treći način - crtanje točke po točku x=linspace(-pi,pi,2000); y=cos(tan(x)) - tan(sin(x)); p=plot(x(1),y(1),'.','EraseMode','none','MarkerSize',5); axis([min(x) max(x) min(y) max(y)]) hold on for i=2:length(x) set(p,'Xdata',x(i),'Ydata',y(i)) drawnow end hold off

Page 51: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 51

Računalna matematika, FSB Zagreb, 2008.

GUI - Graphical User Interface (korisničko grafičko sučelje) >> h=waitbar(0,'Computing...') najčešće u programima: >> for j=1:n %Some computation ... waitbar(j/n) end >> close(h) Primjer: set(gcf,'DefaultUIcontrolUnits','Normalized') frame1_=uicontrol(gcf,'Style','Frame','Position',[0.1 0.1 0.8 0.3]); frame2_=uicontrol(gcf,'Style','Frame','Position',[0.1 0.6 0.8 0.3]); set(frame1_,'BackgroundColor',[0.5 0.5 0.5]); set(frame2_,'BackgroundColor',[0.5 0.5 0.5]); text_f_=uicontrol(gcf,'Style','Text','String', 'Farenheit:','Position',[0.3 0.7 0.2 0.05],... 'HorizontalAlignment','Left'); edit_f_=uicontrol(gcf,'Style','Edit','String', '68.0','Position',[0.6 0.7 0.1 0.05],... 'HorizontalAlignment','right','Callback','fc_calc'); text_c1_=uicontrol(gcf,'Style','Text','String', 'Celsius:','Position',[0.3 0.3 0.2 0.05],... 'HorizontalAlignment','Left'); text_c2_=uicontrol(gcf,'Style','Text','String', '20.0','Position',[0.6 0.3 0.1 0.05],... 'HorizontalAlignment','Right'); slider_f=uicontrol(gcf,'Style','Slider','Min',32.0,'Max',212.0,'Value',68.0,'Position',... [0.6 0.8 0.2 0.05], 'Callback','fc_slider; fc_calc'); >> guide % program za modeliranje grafičkog okruženja Matlab programa

Page 52: #Matlab Sve Pomalo

52 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

D O D A T A K ULAZ/IZLAZ

a) spremanje varijabli

SAVE - sprema varijable iz radnog prostora (workspace) na disk. SAVE IME sprema sve varijable u binarnu "MAT-datoteku" nazvanu IME.mat. Samo SAVE stvara datoteku 'matlab.mat'. SAVE IME X - sprema samo X. SAVE IME X Y Z - sprema X, Y, i Z. Oznaka za sve '*' može se koristiti za sva imena koja zadovoljavaju uvjet. LOAD – puni (load) varijable radnog prostora s podacima spremljenim naredbom SAVE. LOAD IME vraća sve varijablekoje su spremljene u datoteci IME.mat. U slučaju da IME nije specificrano otvara se datoteka s imenom 'matlab.mat'.

b) formatirano čitanje i spremanje podataka FSCANF – čita formatirane podatke iz datoteke. [A,COUNT] = FSCANF(FID,FORMAT,SIZE) čita podatke iz datoteke specificirane identifikatorom datoteke FID, pretvara te podatke s obzirom na specificirani string FORMAT, i vraća tako obrađene podatke u matricu A. COUNT jedozvoljeni (ali ne nužni) argument koji vraća broj elemenata koji su uspješno pročitani. FID je cijeli broj dobiven iz naredbe FOPEN koja otvara datoteku. SIZE je također dozvoljen, ali ne nužan argument, koji stavlja ograničenje na broj elemenata koji se čitaju iz datoteke. Ako nije specificiran onda se čita cijela datoteka, a ako se specificira, onda je moguće: N čita najviše N elementa u stupčasti vektor inf čita najviše do konca datoteke [M,N] čita najviše M * N elemenata koji popunjavaju MxN matricu u stupčastom redoslijedu (stupac po stupac). N može biti inf, ali ne može M. Primjeri: S = fscanf(fid,'%s') čita (i vraća) niz znakova (string) A = fscanf(fid,'%5d') čita 5-znamenkasti decimalni cijeli broj FPRINTF - upisuje formatirane podatke u datoteku. COUNT = FPRINTF(FID,FORMAT,A,...) formatira podatke u realnom dijelu matrice A (i bilo kojeg dodatnog matričnog argumenta), pod kontrolom zadanog Format stringa, i upisuje podatke u datoteku specificiranu idenfifikatorom FID. COUNT je broj okteta (byte-ova) koji su uspješno upisani u datoteku. FID je cijeli broj dobiven kao identifikator u FOPEN naredbi. Može također biti 1 za standarni izlaz (zaslon) ili 2 za standardnu pogrešku. Ako je FID izostavljen, onda izlaz ide na zaslon. FORMAT je niz znakova (string) koji sadrži konverzijske specifikacije iz C programskog jezika. One uključuju znak %, dozvoljene zastavice (flags), bilo kakvu širinu (width)i polja preciznosti, proizvoljni podtip i konverzijske znakove d, i, o, u, x, X, f, e, E, g, G, c, kao i znak s. Specijalni formati \n,\r,\t,\b,\f mogu se iskoristiti za tvorbu linefeed, carriage return, tab, backspace, i formfeed znakova. Koristite \\ za tvorbu znaka \ i %% za tvorbu znaka postotka %.

Page 53: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 53

Računalna matematika, FSB Zagreb, 2008.

Primjer: x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f %12.8f\n',y); fclose(fid); načinit će tekst datoteku koja će sadržavati skraćenu tablicu eksponencijalne funkcije: 0.00 1.00000000 0.10 1.10517092 ... 1.00 2.71828183 TEXTREAD – čita formatirane podatke iz tekst datoteke A = TEXTREAD('IME') A = TEXTREAD('IME','',N) A = TEXTREAD('IME','',param,value, ...) A = TEXTREAD('IME','',N,param,value, ...) čita numeričke podatke iz datoteke IME u jednu varijablu. [A,B,C, ...] = TEXTREAD('IME','FORMAT') [A,B,C, ...] = TEXTREAD('IME','FORMAT',N) [A,B,C, ...] = TEXTREAD('IME','FORMAT',param,value, ...) [A,B,C, ...] = TEXTREAD('IME','FORMAT',N,param,value, ...) čita podatke iz datoteke IME u varijable A,B,C, itd. Tip svakog argumenta je specificran FORMAT stringom. Broj ozlaznih argumenata mora odgovarati broju konverzijskih članova iz FORMAT stringa. Ako je N specificiran, onda se format string ponavlja N puta. Ako je N is -1 ili nije specificiran, onda TEXTREAD čita cijelu datoteku. Ako su specificrani (param,value) parovi, onda korisnik posebno ugađa ponašanje naredbe TEXTREAD. TEXTREAD traži podudarnost i čini konverziju (pretvorbu) u skupinama znakova works Postoje znakovi koji definiraju ograde ili međe (razdjelnike, engl. delimiters) među znakovima. Podržane su sljedeće specifikacije: %n - čita broj - float ili integer (vraća double array) %5n čita do 5 znamenki ili do idućeg razdjelnika %d - čita integer vrijednost s predznakom (vraća double array) %5d čita do 5 znamenki ili do idućeg razdjelnika %u - čita cjelobrojnu vrijednost (vraća double array) %5u čita do 5 znamenki ili do idućeg razdjelnika %f - čita realni broj (vraća double array) %5f čita do 5 znamenki ili do idućeg razdjelnika %s - čita string omeđen prazninom (vraća cellstr) %5s čita do 5 znakova ili do iduće praznine %q - čita (moguće s dvostrukim navodnicima omećeni) string (i vraća cellstr) %5q čita do 5 non-quote znakova ili do iduće praznine %c - ćita znak ili prazninu (vraća char array) %5c čita do 5 characters uključujući praznine %[...] - čita znakove koji se podudaraju sa znakovima unutar zagrada sve do prvog znaka koji se ne podudara ili praznine (vraća cellstr) koristite %[]...] da se uključi ] %5[...] čita do 5 znakova %[^...] - čita znakaove koji se ne podudaraju sa znakovima između zagrada sve do prvog znaka koji se podudara (vraća cellstr) koristite %[^]...] da se isključi ] %5[^...] čita do 5 characters

Page 54: #Matlab Sve Pomalo

54 M. Essert, T. Žilić: Matlab grafički

Računalna matematika, FSB Zagreb, 2008.

Primjedba: Formatirani stringovi se interpretiraju kao sa naredbom 'sprinf' prije parsiranja (prepoznavanja i izvođenja). Na primjer, textread('mydata.dat','%s\t') traćit će znak tab ('\t'), a ne znak '\' iza kojeg slijedi znak 't'. Upotreba %* umjesto % u pretvorbi uzrokuje TEXTREAD da preskoči podudarne znakove u ulazu (i pritom ne nastaje izlaz za tu konverziju). Primjeri: Pretpostavimo da datoteka 'mydata.dat' sadrži podatke u sljedećem obliku: Sally Type1 12.34 45 Yes Joe Type2 23.54 60 No Bill Type1 34.90 12 No Čita svaki stupac u pojedinu varijablu: [names,types,x,y,answer] = textread('mydata.dat','%s%s%f%d%s'); Čita prvi stupac u polje ćelija (preskačući ostatak linije) [names]=textread('mydata.dat','%s%*[^\n]') Čita prvi znak u polje znakova (preskačući ostatak linije) [initials]=textread('mydata.dat','%c%*[^\n]') Čita datoteku kao datoteku fiksnog formata prekačući uz to double podatke [names,types,y,answer] = textread('mydata.dat','%9c%5s%*f%2d%3s'); Čita datoteku i traži literal 'Type' [names,typenum,x,y,answer]=textread('mydata.dat','%sType%d%f%d%s'); Čita m-datoteku u ćeliju polja stringova file = textread('fft.m','%s','delimiter','\n','whitespace',''); Pročitati sve podatke iz tekst datoteke s razdjelnicima, koristite jedan izlazni argument, prazni format string i prikladni razdjelnik. Na primjer, pretpostavimo da 'data.csv' sadrži: 1,2,3,4 5,6,7,8 9,10,11,12 Pročitajte čitavu matricu u jednoj varijabli: [data] = textread('data.csv','','delimiter',','); Pročitajte prva dva stupca u dvije varijable: [col1, col2] = textread('data.csv','%n%n%*[^\n]','delimiter',','); Za datoteke s praznim mjestima koristite parametar 'emptyvalue' Pretpostavimo da datoteka 'data.csv' sadrži: 1,2,3,4,,6 7,8,9,,11,12 Pročitajte ovu datoteku kororisteći NaN na praznim mjestima: [data] = textread('data.csv','','delimiter',',','emptyvalue',NaN); STRREAD čita formatirane podatke iz stringa, na sličan način kao i s naredbom TEXTREAD. Primjer: s = sprintf('a,1,2\nb,3,4\n'); [a,b,c] = strread(s,'%s%d%d','delimiter',',') DLMREAD čita ASCII dataoteku s razdjelnicima.

Page 55: #Matlab Sve Pomalo

M. Essert, T. Žilić: Matlab grafički 55

Računalna matematika, FSB Zagreb, 2008.

RESULT= DLMREAD(IME,DELIMITER) čita numeričke podatke iz ASCII datoteke IME koristeći razdjelnik DELIMITER. Resultat se sprema u RESULT. DLMWRITE piše ASCII datotetu s razdjelnicima između podataka. DLMWRITE(IME,M,DLM) piše matricu M u datoteku IME koristeći znak DLM kao razdjelnik. Na sličan način WK1WRITE i WK1READ spremaju i čitaju podatke u tabličnom obliku u Lotus (ili Excell) formatu. Formati datoteka Formati podataka naredba vraća MAT - MATLAB workspace load Variables in file. CSV - Comma separated numbers csvread Double array. DAT - Formatted text importdata Double array. DLM - Delimited text dlmread Double array. TAB - Tab separated text dlmread Double array. Spreadsheet (tablični kalkulatori) formati XLS - Excel worksheet xlsread Double array and cell array. WK1 - Lotus 123 worksheet wk1read Double array and cell array. Znanstveni (Scientific data) podatčani formati CDF - Common Data Format cdfread Cell array of CDF records FITS, HDF - Hierarchical Data Filmski (movie) format AVI - Movie aviread MATLAB movie. Slikovni (image) formati TIFF - TIFF image imread Truecolor, grayscale or indexed PNG - PNG image imread Truecolor, grayscale or indexed HDF - HDF image imread Truecolor or indexed image(s). BMP - BMP image imread Truecolor or indexed image. JPEG - JPEG image imread Truecolor or grayscale image. GIF - GIF image imread Indexed image. PCX - PCX image imread Indexed image. XWD - XWD image imread Indexed image. CUR - Cursor image imread Indexed image. ICO - Icon image imread Indexed image. RAS - Sun raster image imread Truecolor or indexed. PBM - PBM image imread Grayscale image. PGM - PGM image imread Grayscale image. PPM - PPM image imread Truecolor image. Audio formati AU - NeXT/Sun sound auread Sound data and sample rate. SND - NeXT/Sun sound auread Sound data and sample rate. WAV - Microsoft Wave sound wavread Sound data and sample rate.

Page 56: #Matlab Sve Pomalo

Uvod u MATLAB1. dio

Milan VrdoljakZavod za zrakoplovstvo, FSB

[email protected]://www.fsb.hr/~mvrdolja/matlab/

Listopad 2007.

Milan Vrdoljak Uvod u MATLAB 1 / 25

Page 57: #Matlab Sve Pomalo

Pregled

1 Sto je MATLAB?

2 Jednostavni matematicki proracuniKompleksni brojeviOsnovne matematicke operacije

3 Radni prostor MATLABaSpremanje i ponovna uporaba podataka

4 Operacije s matricamaFormiranje matricaPristupanje dijelu matrice (indeksiranje)Osnovne matematicke operacije s matricamaDimenzije matrica i vektoraSustav linearnih jednadzbi

Milan Vrdoljak Uvod u MATLAB 2 / 25

Page 58: #Matlab Sve Pomalo

Sto je MATLAB?

Pregled

1 Sto je MATLAB?

2 Jednostavni matematicki proracuniKompleksni brojeviOsnovne matematicke operacije

3 Radni prostor MATLABaSpremanje i ponovna uporaba podataka

4 Operacije s matricamaFormiranje matricaPristupanje dijelu matrice (indeksiranje)Osnovne matematicke operacije s matricamaDimenzije matrica i vektoraSustav linearnih jednadzbi

Milan Vrdoljak Uvod u MATLAB 3 / 25

Page 59: #Matlab Sve Pomalo

Sto je MATLAB?

Sto je MATLAB?

okruzje s programskim jezikom namjenjeno tehnickim izracunima

obuhvaca izracune, vizualizaciju i programiranje u okolinijednostavne uporabe

osnovna namjena: izracuni u matricnoj i vektorskoj formulaciji

primjena:I napredan alat u visokoj izobrazbiI alat u industriji za visoko produktivno istrazivanje, razvoj i

analizu

osnovna odlika MATLAB-a: prosirenja — Toolboxes

Milan Vrdoljak Uvod u MATLAB 4 / 25

Page 60: #Matlab Sve Pomalo

Sto je MATLAB?

Sto je MATLAB?

okruzje s programskim jezikom namjenjeno tehnickim izracunima

obuhvaca izracune, vizualizaciju i programiranje u okolinijednostavne uporabe

osnovna namjena: izracuni u matricnoj i vektorskoj formulaciji

primjena:I napredan alat u visokoj izobrazbiI alat u industriji za visoko produktivno istrazivanje, razvoj i

analizu

osnovna odlika MATLAB-a: prosirenja — Toolboxes

Milan Vrdoljak Uvod u MATLAB 4 / 25

Page 61: #Matlab Sve Pomalo

Sto je MATLAB?

Sto je MATLAB?

okruzje s programskim jezikom namjenjeno tehnickim izracunima

obuhvaca izracune, vizualizaciju i programiranje u okolinijednostavne uporabe

osnovna namjena: izracuni u matricnoj i vektorskoj formulaciji

primjena:I napredan alat u visokoj izobrazbiI alat u industriji za visoko produktivno istrazivanje, razvoj i

analizu

osnovna odlika MATLAB-a: prosirenja — Toolboxes

Milan Vrdoljak Uvod u MATLAB 4 / 25

Page 62: #Matlab Sve Pomalo

Sto je MATLAB?

Sto je MATLAB?

okruzje s programskim jezikom namjenjeno tehnickim izracunima

obuhvaca izracune, vizualizaciju i programiranje u okolinijednostavne uporabe

osnovna namjena: izracuni u matricnoj i vektorskoj formulaciji

primjena:I napredan alat u visokoj izobrazbiI alat u industriji za visoko produktivno istrazivanje, razvoj i

analizu

osnovna odlika MATLAB-a: prosirenja — Toolboxes

Milan Vrdoljak Uvod u MATLAB 4 / 25

Page 63: #Matlab Sve Pomalo

Sto je MATLAB?

Sto je MATLAB?

okruzje s programskim jezikom namjenjeno tehnickim izracunima

obuhvaca izracune, vizualizaciju i programiranje u okolinijednostavne uporabe

osnovna namjena: izracuni u matricnoj i vektorskoj formulaciji

primjena:I napredan alat u visokoj izobrazbiI alat u industriji za visoko produktivno istrazivanje, razvoj i

analizu

osnovna odlika MATLAB-a: prosirenja — Toolboxes

Milan Vrdoljak Uvod u MATLAB 4 / 25

Page 64: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 65: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 66: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 67: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 68: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 69: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 70: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 71: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 72: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 73: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 74: #Matlab Sve Pomalo

Sto je MATLAB?

Elementi programskog paketa MATLAB

razvojna okolina:I komandni prozor (command window)I sadrzaj radnog prostora (workspace)I editor i debugerI povijest naredbi (command history)I HelpI preglednik datoteka i patha

programski jezik

biblioteka matematickih funkcija

graficki alat

sucelje programskih aplikacija (API)

Milan Vrdoljak Uvod u MATLAB 5 / 25

Page 75: #Matlab Sve Pomalo

Jednostavni matematicki proracuni

Pregled

1 Sto je MATLAB?

2 Jednostavni matematicki proracuniKompleksni brojeviOsnovne matematicke operacije

3 Radni prostor MATLABaSpremanje i ponovna uporaba podataka

4 Operacije s matricamaFormiranje matricaPristupanje dijelu matrice (indeksiranje)Osnovne matematicke operacije s matricamaDimenzije matrica i vektoraSustav linearnih jednadzbi

Milan Vrdoljak Uvod u MATLAB 6 / 25

Page 76: #Matlab Sve Pomalo

Jednostavni matematicki proracuni

MATLAB kao linijski kalkulator

>> 4*25+3ans =

103

>> a=4a =

4>> b=25;>> c=3;>> d=a*b+cd =

103

imena varijabliI razlikuje velika i mala slovaI maksimalno 63 znaka (verzija 6, 7)I prvi znak mora biti slovoI rezervirana imena varijabli: pi, ans, eps, inf, nan, . . .

Milan Vrdoljak Uvod u MATLAB 7 / 25

Page 77: #Matlab Sve Pomalo

Jednostavni matematicki proracuni Kompleksni brojevi

Kompleksni brojevi

deklaracija i operacije s kompleksnim brojevima

>> kmpl1=2-3ikmpl1 =

2.0000 - 3.0000i>> kmpl2=6+sin(pi/3)*ikmpl2 =

6.0000 + 0.8660i>> kmpl3=(kmpl1-kmpl2*2)*kmpl1kmpl3 =-34.1962 +20.5359i

Milan Vrdoljak Uvod u MATLAB 8 / 25

Page 78: #Matlab Sve Pomalo

Jednostavni matematicki proracuni Kompleksni brojevi

razliciti zapisi kompleksnih brojeva:

A · eθ·j polarne koordinate

a + b · i pravokutne koordinate

>> p_kmpl1=abs(kmpl1)*exp(angle(kmpl1)*j)p_kmpl1 =

2.0000 - 3.0000i>> real(p_kmpl1)ans =

2>> imag(p_kmpl1)ans =

-3

Milan Vrdoljak Uvod u MATLAB 9 / 25

Page 79: #Matlab Sve Pomalo

Jednostavni matematicki proracuni Osnovne matematicke operacije

podrzane su sve osnovne matematicke funkcije:abs(x) acos(x) sqrt(x), sin(x), tan(x), asin(x),

atan(x), ...

>> x=sqrt(2)/2x =

0.7071>> y=asin(x)y =

0.7854>> y_s=y*180/piy_s =

45.0000

Primjer: funkcija arkus tanges.

Milan Vrdoljak Uvod u MATLAB 10 / 25

Page 80: #Matlab Sve Pomalo

Radni prostor MATLABa

Pregled

1 Sto je MATLAB?

2 Jednostavni matematicki proracuniKompleksni brojeviOsnovne matematicke operacije

3 Radni prostor MATLABaSpremanje i ponovna uporaba podataka

4 Operacije s matricamaFormiranje matricaPristupanje dijelu matrice (indeksiranje)Osnovne matematicke operacije s matricamaDimenzije matrica i vektoraSustav linearnih jednadzbi

Milan Vrdoljak Uvod u MATLAB 11 / 25

Page 81: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 82: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 83: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 84: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 85: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 86: #Matlab Sve Pomalo

Radni prostor MATLABa

Sadrzaj radnog prostora — Workspace

prikaz sadrzaja radnog prostora (radne memorije, baseworkspace)

I prozor ’Workspace’I komandni prozor: who, whos

informacije o tipu varijable, velicini (bytes) i dimenziji

brisanje varijable

brisanje cijelog radnog prostora

Milan Vrdoljak Uvod u MATLAB 12 / 25

Page 87: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 88: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 89: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 90: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 91: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 92: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 93: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 94: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 95: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 96: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 97: #Matlab Sve Pomalo

Radni prostor MATLABa Spremanje i ponovna uporaba podataka

Manipulacija podacima iz radnog prostora

oblik zapisa podataka: binarna datoteka .mat

spremanje sadrzaja radnog prostoraI meni File|Save Workspace as...I komandni prozor: saveI prozor ’Workspace’ (ikonica ili desna tipka: Save Workspace

as...)

spremanje dijela radnog prostora

ucitavanja zeljene .mat datotekeI meni File|Open ... ili File|Import Data ...I komandni prozor: loadI prozor ’Workspace’ (ikonica ili desna tipka: Import Data)

ASCII format datoteka

Milan Vrdoljak Uvod u MATLAB 13 / 25

Page 98: #Matlab Sve Pomalo

Operacije s matricama

Pregled

1 Sto je MATLAB?

2 Jednostavni matematicki proracuniKompleksni brojeviOsnovne matematicke operacije

3 Radni prostor MATLABaSpremanje i ponovna uporaba podataka

4 Operacije s matricamaFormiranje matricaPristupanje dijelu matrice (indeksiranje)Osnovne matematicke operacije s matricamaDimenzije matrica i vektoraSustav linearnih jednadzbi

Milan Vrdoljak Uvod u MATLAB 14 / 25

Page 99: #Matlab Sve Pomalo

Operacije s matricama Formiranje matrica

Formiranje matrica

elemente matrice unosimo izmedu uglatih zagrada [ ]

elemente po stupcima razdvajamo razmakom ili zarezom

elemente po redovima razdvajamo sa ; ili prelaskom u novi red

>> x=[1 2 3]x =

1 2 3

>> A=[1,2,3;4,5,6;7,8,9]A =

1 2 34 5 67 8 9

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

1 2 34 5 67 8 9

Milan Vrdoljak Uvod u MATLAB 15 / 25

Page 100: #Matlab Sve Pomalo

Operacije s matricama Formiranje matrica

automatizirano formiranje vektora>> x=(0:0.1:1)>> y=linspace(0,1,11)

jedinicna matrica, nul matrica i matrica sa svim elementimajednakim jedinici

>> R=eye(3)P =

1 0 00 1 00 0 1

>> Q=zeros(3)Q =

0 0 00 0 00 0 0

>> P=ones(3)P =

1 1 11 1 11 1 1

Milan Vrdoljak Uvod u MATLAB 16 / 25

Page 101: #Matlab Sve Pomalo

Operacije s matricama Pristupanje dijelu matrice (indeksiranje)

Pristup dijelu matrice – indeksiranje

za pristupanje dijelu matrice koriste se zagrade ( )I prvi podatak je broj retkaI drugi podatak (za matrice) je broj stupca

npr.: element matrice A u prvom retku i drugom stupcu:>> A(1,2)ans =

2

npr.: prva dva retka matrice A

>> A(1:2,:)ans =

1 2 34 5 6

redefinicija elemenata matrice

prosirenja matrice

brisanje dijela matrice

Milan Vrdoljak Uvod u MATLAB 17 / 25

Page 102: #Matlab Sve Pomalo

Operacije s matricama Osnovne matematicke operacije s matricama

Osnovne operacije s matricama

operacije skalar–skalar>> A=[1,2,3;4,5,6;7,8,9];>> A-1>> 2*A-1

>> A.^2

Milan Vrdoljak Uvod u MATLAB 18 / 25

Page 103: #Matlab Sve Pomalo

Operacije s matricama Osnovne matematicke operacije s matricama

operacije matrica–matricaI transponirana matrica

>> A=[1,2,3;4,5,6;7,8,9]>> B=A’

I zbrajanje

>> A+B>> 2*A-B

I mnozenje

>> A*B>> C=[1 1;2 2;3 3]>> A*C>> D=[1 1 1; 2 2 2]>> D*A

I potenciranje

>> A^2>> A*A

Milan Vrdoljak Uvod u MATLAB 19 / 25

Page 104: #Matlab Sve Pomalo

Operacije s matricama Osnovne matematicke operacije s matricama

Operacije po elementima matrice

operacije po elementima matrice: .*, ./, .\, .^>> A=[1,2,3;4,5,6;7,8,9]>> D=[1,1,1;2,2,2;3,3,3]>> A.*Dans =

1 2 38 10 12

21 24 27

>> A./Dans =

1.0000 2.0000 3.00002.0000 2.5000 3.00002.3333 2.6667 3.0000

Milan Vrdoljak Uvod u MATLAB 20 / 25

Page 105: #Matlab Sve Pomalo

Operacije s matricama Osnovne matematicke operacije s matricama

>> D./Aans =

1.0000 0.5000 0.33330.5000 0.4000 0.33330.4286 0.3750 0.3333

>> A.\Dans =

1.0000 0.5000 0.33330.5000 0.4000 0.33330.4286 0.3750 0.3333

>> A.^Dans =

1 2 316 25 36343 512 729

Milan Vrdoljak Uvod u MATLAB 21 / 25

Page 106: #Matlab Sve Pomalo

Operacije s matricama Dimenzije matrica i vektora

Dimenzije matrica i vektora

dimenzije matrice: broj redaka × broj stupacaI prikaz u prozoru ’Workspace’I komandni prozor: whos

naredbe za odredivanje dimenzije varijable>> R=[1 2 3 4;5 6 7 8]>> [red,stup]=size(R)>> length(R)

Milan Vrdoljak Uvod u MATLAB 22 / 25

Page 107: #Matlab Sve Pomalo

Operacije s matricama Sustav linearnih jednadzbi

Sustav linearnih jednadzbi

imamo npr. sustav 1 2 34 5 67 8 0

·

x1

x2

x3

=

366804351

A · x = b

jedno od analitickih rjesenja (primjenom inverzne matrice)

x = A−1 · b

Milan Vrdoljak Uvod u MATLAB 23 / 25

Page 108: #Matlab Sve Pomalo

Operacije s matricama Sustav linearnih jednadzbi

rjesenje u MATLABu>> A=[1 2 3;4 5 6;7 8 0]A =

1 2 34 5 67 8 0

>> b=[366;804;351]b =

366804351

>> x=inv(A)*bx =

25.000022.000099.0000

Milan Vrdoljak Uvod u MATLAB 24 / 25

Page 109: #Matlab Sve Pomalo

Operacije s matricama Sustav linearnih jednadzbi

drugi pristup; izracun primjenom Gaussove eliminacije>> x=A\bx =

25.000022.000099.0000

neke funkcije s matricama:det(A), eig(A), norm(A), poly(A), rank(A),

trace(A), ...

Nastavak . . .

Primjer 1.1. Primjer 1.2. Primjer 1.3. Primjer 1.4.

Milan Vrdoljak Uvod u MATLAB 25 / 25

Page 110: #Matlab Sve Pomalo

Uvod u MATLAB2. dio

Milan VrdoljakZavod za zrakoplovstvo, FSB

[email protected]://www.fsb.hr/~mvrdolja/matlab/

Listopad 2007.

Milan Vrdoljak Uvod u MATLAB 1 / 33

Page 111: #Matlab Sve Pomalo

Pregled

1 Programi u MATLABu

2 Petlje i uvjetne strukture

3 Tipovi podataka

4 Tipovi funkcija

5 Savjeti za rad i programiranje u MATLABu

Milan Vrdoljak Uvod u MATLAB 2 / 33

Page 112: #Matlab Sve Pomalo

Programi u MATLABu

Pregled

1 Programi u MATLABuSkripteFunkcije

2 Petlje i uvjetne strukture

3 Tipovi podataka

4 Tipovi funkcija

5 Savjeti za rad i programiranje u MATLABu

Milan Vrdoljak Uvod u MATLAB 3 / 33

Page 113: #Matlab Sve Pomalo

Programi u MATLABu

Programi u MATLABu

programi programskog jezika MATLAB-a: .m datoteke

Skripte skup naredbi koje se prenose komandnom prozoru itamo se jedna za drugom izvrsavaju (ekvivalentglavnim programima).

Funkcije crne kutije kojima dajemo odredeni ulaz a dobivamotrazeni izlaz (ekvivalent podprogramima,funkcijama ili bibliotekama).

Milan Vrdoljak Uvod u MATLAB 4 / 33

Page 114: #Matlab Sve Pomalo

Programi u MATLABu

Programi u MATLABu

programi programskog jezika MATLAB-a: .m datoteke

Skripte skup naredbi koje se prenose komandnom prozoru itamo se jedna za drugom izvrsavaju (ekvivalentglavnim programima).

Funkcije crne kutije kojima dajemo odredeni ulaz a dobivamotrazeni izlaz (ekvivalent podprogramima,funkcijama ili bibliotekama).

Milan Vrdoljak Uvod u MATLAB 4 / 33

Page 115: #Matlab Sve Pomalo

Programi u MATLABu

Programi u MATLABu

programi programskog jezika MATLAB-a: .m datoteke

Skripte skup naredbi koje se prenose komandnom prozoru itamo se jedna za drugom izvrsavaju (ekvivalentglavnim programima).

Funkcije crne kutije kojima dajemo odredeni ulaz a dobivamotrazeni izlaz (ekvivalent podprogramima,funkcijama ili bibliotekama).

Milan Vrdoljak Uvod u MATLAB 4 / 33

Page 116: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Skripte

jednostavniji oblik .m datoteke

nema direktnih ulaznih ni izlaznih argumenata: rade s podacimaiz radnog prostora

sve varijable koje kreira skirpta ostaju u radnom prostoruMATLABa

pogodne su automatizirano izvodenje niza naredbi koje cestopozivamo iz komandnog prozora

Milan Vrdoljak Uvod u MATLAB 5 / 33

Page 117: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Skripte

jednostavniji oblik .m datoteke

nema direktnih ulaznih ni izlaznih argumenata: rade s podacimaiz radnog prostora

sve varijable koje kreira skirpta ostaju u radnom prostoruMATLABa

pogodne su automatizirano izvodenje niza naredbi koje cestopozivamo iz komandnog prozora

Milan Vrdoljak Uvod u MATLAB 5 / 33

Page 118: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Skripte

jednostavniji oblik .m datoteke

nema direktnih ulaznih ni izlaznih argumenata: rade s podacimaiz radnog prostora

sve varijable koje kreira skirpta ostaju u radnom prostoruMATLABa

pogodne su automatizirano izvodenje niza naredbi koje cestopozivamo iz komandnog prozora

Milan Vrdoljak Uvod u MATLAB 5 / 33

Page 119: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Skripte

jednostavniji oblik .m datoteke

nema direktnih ulaznih ni izlaznih argumenata: rade s podacimaiz radnog prostora

sve varijable koje kreira skirpta ostaju u radnom prostoruMATLABa

pogodne su automatizirano izvodenje niza naredbi koje cestopozivamo iz komandnog prozora

Milan Vrdoljak Uvod u MATLAB 5 / 33

Page 120: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Pisanje skripte

Primjer skripte datoteka test.m% ovo je skripta test.m% pomocu nje crtam 1/4 kruznice radijusa=1x=(0:0.001:pi/2);plot(sin(x),cos(x))xlabel(’sin(x)’);ylabel(’cos(x)’)title(’x=[0 pi/2]’)disp(’skripta test.m uspjesno izvrsena’)

sadrzaj skripte upisujemo u editoru File|New|M-File

pri tome se sve iza znaka % podrazumjeva kao komentar

spremamo u .m datoteku (npr. test.m) File|Save as ...

Milan Vrdoljak Uvod u MATLAB 6 / 33

Page 121: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Izvrsavanje skripte

pokretanje skripte:u komandnom prozoru naredbom po imenu datoteke, npr.>> test

??? Undefined function or variable test.

problem u izvrsavanju skripte: path

rjesenje:I nadopuna Patha sa zeljenim direktorijemI promjena direktorija (u direktoriji u kojem je spremljena

test.m)>> cd z:\matlab

pokretanje iz menija editora: Debug|Run ili F5

Milan Vrdoljak Uvod u MATLAB 7 / 33

Page 122: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Izvrsavanje skripte

pokretanje skripte:u komandnom prozoru naredbom po imenu datoteke, npr.>> test

??? Undefined function or variable test.

problem u izvrsavanju skripte: path

rjesenje:I nadopuna Patha sa zeljenim direktorijemI promjena direktorija (u direktoriji u kojem je spremljena

test.m)>> cd z:\matlab

pokretanje iz menija editora: Debug|Run ili F5

Milan Vrdoljak Uvod u MATLAB 7 / 33

Page 123: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Izvrsavanje skripte

pokretanje skripte:u komandnom prozoru naredbom po imenu datoteke, npr.>> test

??? Undefined function or variable test.

problem u izvrsavanju skripte: path

rjesenje:I nadopuna Patha sa zeljenim direktorijemI promjena direktorija (u direktoriji u kojem je spremljena

test.m)>> cd z:\matlab

pokretanje iz menija editora: Debug|Run ili F5

Milan Vrdoljak Uvod u MATLAB 7 / 33

Page 124: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Izvrsavanje skripte

pokretanje skripte:u komandnom prozoru naredbom po imenu datoteke, npr.>> test

??? Undefined function or variable test.

problem u izvrsavanju skripte: path

rjesenje:I nadopuna Patha sa zeljenim direktorijemI promjena direktorija (u direktoriji u kojem je spremljena

test.m)>> cd z:\matlab

pokretanje iz menija editora: Debug|Run ili F5

Milan Vrdoljak Uvod u MATLAB 7 / 33

Page 125: #Matlab Sve Pomalo

Programi u MATLABu Skripte

Izvrsavanje skripte

pokretanje skripte:u komandnom prozoru naredbom po imenu datoteke, npr.>> test

??? Undefined function or variable test.

problem u izvrsavanju skripte: path

rjesenje:I nadopuna Patha sa zeljenim direktorijemI promjena direktorija (u direktoriji u kojem je spremljena

test.m)>> cd z:\matlab

pokretanje iz menija editora: Debug|Run ili F5

Milan Vrdoljak Uvod u MATLAB 7 / 33

Page 126: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Funkcije

funkcijske .m datoteke: primaju ulazne argumente i vracajuizlazne

sve varijable definirane u funkciji su lokalnog karaktera i nisudostupne u radnom prostoru MATLABa

razmjena varijabli funkcije i varijabli iz radnog prostora: prekoulaznih i izlaznih varijablipostoje i drugi nacini

Milan Vrdoljak Uvod u MATLAB 8 / 33

Page 127: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Funkcije

funkcijske .m datoteke: primaju ulazne argumente i vracajuizlazne

sve varijable definirane u funkciji su lokalnog karaktera i nisudostupne u radnom prostoru MATLABa

razmjena varijabli funkcije i varijabli iz radnog prostora: prekoulaznih i izlaznih varijablipostoje i drugi nacini

Milan Vrdoljak Uvod u MATLAB 8 / 33

Page 128: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Funkcije

funkcijske .m datoteke: primaju ulazne argumente i vracajuizlazne

sve varijable definirane u funkciji su lokalnog karaktera i nisudostupne u radnom prostoru MATLABa

razmjena varijabli funkcije i varijabli iz radnog prostora: prekoulaznih i izlaznih varijablipostoje i drugi nacini

Milan Vrdoljak Uvod u MATLAB 8 / 33

Page 129: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Funkcije

funkcijske .m datoteke: primaju ulazne argumente i vracajuizlazne

sve varijable definirane u funkciji su lokalnog karaktera i nisudostupne u radnom prostoru MATLABa

razmjena varijabli funkcije i varijabli iz radnog prostora: prekoulaznih i izlaznih varijablipostoje i drugi nacini

Milan Vrdoljak Uvod u MATLAB 8 / 33

Page 130: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Pisanje funkcije

Propisana forma funkcijske .m datotekefunction [izl1,izl2,...] = imedatoteke (ul1,ul2,...)% ovo je kratki opis funkcijske m-datoteke% komentar za dokumentaciju...% ova funkcija je spremljena u datoteku:% imedatoteke.m%......

ime funkcije = ime .m datoteke !!!

ulazne varijable: ul1, ul2, . . .

izlazne varijable: izl1, izl2, . . .

Milan Vrdoljak Uvod u MATLAB 9 / 33

Page 131: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Primjer funkcije datoteka average.mfunction y = average(x)% AVERAGE Srednja vrijednost elemenata vektora.% AVERAGE(X), gdje je X vektor, predstavlja srednju% vrijednost elemenata vektora.% Za ne-vektorski ulaz funkcija dojavljuje gresku.[m,n] = size(x);if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))

error(’Ulaz mora biti vektor!’)endy = sum(x)/length(x); % izracun srednje vrijednosti

prvi red – definicija funkcije: ulazna i izlazna varijabla; imefunkcije

tekst help-a funkcije

H1 linija: prvi red iza definicije funkcije

tijelo funkcije

Milan Vrdoljak Uvod u MATLAB 10 / 33

Page 132: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Izvrsavanje funkcije

pozivom iz komandnog prozora ili skripte; drugog programa>> [izl1,izl2,...] = imedatoteke(ul1,ul2,...)

ne preporuca se izvrsavanje funkcije iz menija editora

Milan Vrdoljak Uvod u MATLAB 11 / 33

Page 133: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Izvrsavanje funkcije

pozivom iz komandnog prozora ili skripte; drugog programa>> [izl1,izl2,...] = imedatoteke(ul1,ul2,...)

ne preporuca se izvrsavanje funkcije iz menija editora

Milan Vrdoljak Uvod u MATLAB 11 / 33

Page 134: #Matlab Sve Pomalo

Programi u MATLABu Funkcije

Izvrsavanje funkcije

pozivom iz komandnog prozora ili skripte; drugog programa>> [izl1,izl2,...] = imedatoteke(ul1,ul2,...)

ne preporuca se izvrsavanje funkcije iz menija editora

Milan Vrdoljak Uvod u MATLAB 11 / 33

Page 135: #Matlab Sve Pomalo

Petlje i uvjetne strukture

Pregled

1 Programi u MATLABu

2 Petlje i uvjetne strukturefor petljawhile petljaif-else-elseif strukturaswitch-case strukturaPosebne naredbe za definiranje tijeka programa

3 Tipovi podataka

4 Tipovi funkcija

5 Savjeti za rad i programiranje u MATLABuMilan Vrdoljak Uvod u MATLAB 12 / 33

Page 136: #Matlab Sve Pomalo

Petlje i uvjetne strukture for petlja

for petljafor x = array

naredbe...end

Primjer for petlje>> for n=1:10

x(n)=sin(n*pi/10);end

>> xx =

Columns 1 through 70.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090

Columns 8 through 100.5878 0.3090 0.0000

Primjer

Milan Vrdoljak Uvod u MATLAB 13 / 33

Page 137: #Matlab Sve Pomalo

Petlje i uvjetne strukture while petlja

while petlja>> while izraz

naredbe...end

Primjer while petlje>> num=0;EPS=1;>> while (1+EPS)>1

EPS=EPS/2;num=num+1;

end>> numnum =

53>> EPS=2*EPSEPS =

2.2204e-016>> epseps =

2.2204e-016Milan Vrdoljak Uvod u MATLAB 14 / 33

Page 138: #Matlab Sve Pomalo

Petlje i uvjetne strukture if-else-elseif struktura

if-else-elseif strukturaif izraz1

naredbe1 ... izvrsene ako je izraz1 istinitelseif izraz2

naredbe2 ... izvrsene ako je izraz2 istinitelseif izraz3

naredbe3 ... izvrsene ako je izraz3 istinitelseif ...

naredbe4 ... izvrsene ako je izraz4 istinit...else

naredbe ... izvrsene ako nijedan izraz nije istinitend

Milan Vrdoljak Uvod u MATLAB 15 / 33

Page 139: #Matlab Sve Pomalo

Petlje i uvjetne strukture if-else-elseif struktura

Primjer if-else-elseif strukture>> EPS=1;>> for num=1:1000

EPS=EPS/2;if(1+EPS)<=1

EPS=EPS*2break

endend

EPS =2.2204e-016

>> numnum =

53

Primjer

Milan Vrdoljak Uvod u MATLAB 16 / 33

Page 140: #Matlab Sve Pomalo

Petlje i uvjetne strukture switch-case struktura

switch-case strukturaswitch izraz

case test_izraz1naredbe1...

case test_izraz2naredbe2...

otherwisenaredbe3

end

Milan Vrdoljak Uvod u MATLAB 17 / 33

Page 141: #Matlab Sve Pomalo

Petlje i uvjetne strukture switch-case struktura

Primjer switch-case strukture% primjer za ’switch-case’ strukturux=2.7;units=’m’switch units

case {’inch’,’in’}y=x*2.54;

case {’feet’,’ft’}y=x*2.54*12;

case {’meter’,’m’}y=x/100;

case {’milimeter’,’mm’}y=x*10;

case {’centimeter’,’cm’}y=x;

otherwisedisp([’Nepoznata jedinica:’, units])y=nan;

end

Milan Vrdoljak Uvod u MATLAB 18 / 33

Page 142: #Matlab Sve Pomalo

Petlje i uvjetne strukture Posebne naredbe za definiranje tijeka programa

Posebne naredbe za kontrolu tijeka programa

continue – prelazak na sljedecu iteraciju petlje (for ili while)

break – prekid i izlazak iz petlje (for ili while); prekid skripte

return – prekid izvrsavanja funkcije i vracanje kontrole pozivnojfunkciji/skripti

Milan Vrdoljak Uvod u MATLAB 19 / 33

Page 143: #Matlab Sve Pomalo

Petlje i uvjetne strukture Posebne naredbe za definiranje tijeka programa

Posebne naredbe za kontrolu tijeka programa

continue – prelazak na sljedecu iteraciju petlje (for ili while)

break – prekid i izlazak iz petlje (for ili while); prekid skripte

return – prekid izvrsavanja funkcije i vracanje kontrole pozivnojfunkciji/skripti

Milan Vrdoljak Uvod u MATLAB 19 / 33

Page 144: #Matlab Sve Pomalo

Petlje i uvjetne strukture Posebne naredbe za definiranje tijeka programa

Posebne naredbe za kontrolu tijeka programa

continue – prelazak na sljedecu iteraciju petlje (for ili while)

break – prekid i izlazak iz petlje (for ili while); prekid skripte

return – prekid izvrsavanja funkcije i vracanje kontrole pozivnojfunkciji/skripti

Milan Vrdoljak Uvod u MATLAB 19 / 33

Page 145: #Matlab Sve Pomalo

Petlje i uvjetne strukture Posebne naredbe za definiranje tijeka programa

Posebne naredbe za kontrolu tijeka programa

continue – prelazak na sljedecu iteraciju petlje (for ili while)

break – prekid i izlazak iz petlje (for ili while); prekid skripte

return – prekid izvrsavanja funkcije i vracanje kontrole pozivnojfunkciji/skripti

Milan Vrdoljak Uvod u MATLAB 19 / 33

Page 146: #Matlab Sve Pomalo

Tipovi podataka

Pregled

1 Programi u MATLABu

2 Petlje i uvjetne strukture

3 Tipovi podatakaKlasa polinoma

4 Tipovi funkcija

5 Savjeti za rad i programiranje u MATLABu

Milan Vrdoljak Uvod u MATLAB 20 / 33

Page 147: #Matlab Sve Pomalo

Tipovi podataka

Tipovi podataka

postoji 15 razlicitih tipova varijabli u MATLABuu osnovi svi tipovi varijabli imaju oblik polja i podrzavajuosnovne operacije na poljima (matricama)svi izracuni u MATLABu provode se u dvostrukoj preciznosti(double precision)

Milan Vrdoljak Uvod u MATLAB 21 / 33

Page 148: #Matlab Sve Pomalo

Tipovi podataka

Tipovi podataka

postoji 15 razlicitih tipova varijabli u MATLABuu osnovi svi tipovi varijabli imaju oblik polja i podrzavajuosnovne operacije na poljima (matricama)svi izracuni u MATLABu provode se u dvostrukoj preciznosti(double precision)

Milan Vrdoljak Uvod u MATLAB 21 / 33

Page 149: #Matlab Sve Pomalo

Tipovi podataka

Tipovi podataka

postoji 15 razlicitih tipova varijabli u MATLABuu osnovi svi tipovi varijabli imaju oblik polja i podrzavajuosnovne operacije na poljima (matricama)svi izracuni u MATLABu provode se u dvostrukoj preciznosti(double precision)

Milan Vrdoljak Uvod u MATLAB 21 / 33

Page 150: #Matlab Sve Pomalo

Tipovi podataka

Najcesci tipovi podataka

numericka polja: matrice (ukljucujuci i vektore i skalare)

polja karaktera char

varijable logickog tipa: true (=1); false (=0)

strukture

korisnicke klase user class

Milan Vrdoljak Uvod u MATLAB 22 / 33

Page 151: #Matlab Sve Pomalo

Tipovi podataka

Najcesci tipovi podataka

numericka polja: matrice (ukljucujuci i vektore i skalare)

polja karaktera char

varijable logickog tipa: true (=1); false (=0)

strukture

korisnicke klase user class

Milan Vrdoljak Uvod u MATLAB 22 / 33

Page 152: #Matlab Sve Pomalo

Tipovi podataka

Najcesci tipovi podataka

numericka polja: matrice (ukljucujuci i vektore i skalare)

polja karaktera char

varijable logickog tipa: true (=1); false (=0)

strukture

korisnicke klase user class

Milan Vrdoljak Uvod u MATLAB 22 / 33

Page 153: #Matlab Sve Pomalo

Tipovi podataka

Najcesci tipovi podataka

numericka polja: matrice (ukljucujuci i vektore i skalare)

polja karaktera char

varijable logickog tipa: true (=1); false (=0)

strukture

korisnicke klase user class

Milan Vrdoljak Uvod u MATLAB 22 / 33

Page 154: #Matlab Sve Pomalo

Tipovi podataka

Najcesci tipovi podataka

numericka polja: matrice (ukljucujuci i vektore i skalare)

polja karaktera char

varijable logickog tipa: true (=1); false (=0)

strukture

korisnicke klase user class

Milan Vrdoljak Uvod u MATLAB 22 / 33

Page 155: #Matlab Sve Pomalo

Tipovi podataka Klasa polinoma

Polinomi i operacije na polinomima

primjer korisnicke klase: polinomi

zapis polinoma kao vektora

p(x) = x3 − 4x + 2 p = [1 0 -4 2]

operacije definirane nad klasom polinoma:za mnozenje polinoma conv, dijeljenje deconv, derivacijupolinoma polyder, odredivanje korjena polinoma roots,formiranje polinoma za poznate korjene poly, . . .

pored toga postoje i funkcije za: fitovanje polinomima polyfit,odredivanja vrijednosti polinoma polyval

Primjer

Milan Vrdoljak Uvod u MATLAB 23 / 33

Page 156: #Matlab Sve Pomalo

Tipovi podataka Klasa polinoma

Polinomi i operacije na polinomima

primjer korisnicke klase: polinomi

zapis polinoma kao vektora

p(x) = x3 − 4x + 2 p = [1 0 -4 2]

operacije definirane nad klasom polinoma:za mnozenje polinoma conv, dijeljenje deconv, derivacijupolinoma polyder, odredivanje korjena polinoma roots,formiranje polinoma za poznate korjene poly, . . .

pored toga postoje i funkcije za: fitovanje polinomima polyfit,odredivanja vrijednosti polinoma polyval

Primjer

Milan Vrdoljak Uvod u MATLAB 23 / 33

Page 157: #Matlab Sve Pomalo

Tipovi podataka Klasa polinoma

Polinomi i operacije na polinomima

primjer korisnicke klase: polinomi

zapis polinoma kao vektora

p(x) = x3 − 4x + 2 p = [1 0 -4 2]

operacije definirane nad klasom polinoma:za mnozenje polinoma conv, dijeljenje deconv, derivacijupolinoma polyder, odredivanje korjena polinoma roots,formiranje polinoma za poznate korjene poly, . . .

pored toga postoje i funkcije za: fitovanje polinomima polyfit,odredivanja vrijednosti polinoma polyval

Primjer

Milan Vrdoljak Uvod u MATLAB 23 / 33

Page 158: #Matlab Sve Pomalo

Tipovi podataka Klasa polinoma

Polinomi i operacije na polinomima

primjer korisnicke klase: polinomi

zapis polinoma kao vektora

p(x) = x3 − 4x + 2 p = [1 0 -4 2]

operacije definirane nad klasom polinoma:za mnozenje polinoma conv, dijeljenje deconv, derivacijupolinoma polyder, odredivanje korjena polinoma roots,formiranje polinoma za poznate korjene poly, . . .

pored toga postoje i funkcije za: fitovanje polinomima polyfit,odredivanja vrijednosti polinoma polyval

Primjer

Milan Vrdoljak Uvod u MATLAB 23 / 33

Page 159: #Matlab Sve Pomalo

Tipovi funkcija

Pregled

1 Programi u MATLABu

2 Petlje i uvjetne strukture

3 Tipovi podataka

4 Tipovi funkcijaProsljedivanje varijabli

5 Savjeti za rad i programiranje u MATLABu

Milan Vrdoljak Uvod u MATLAB 24 / 33

Page 160: #Matlab Sve Pomalo

Tipovi funkcija

Osnovni tipovi funkcija

prema nacinu definicije:I kroz M–datotekuI funkcijske varijable (ver.6)

naredbom – anonimne funkcije (ver.7)

Milan Vrdoljak Uvod u MATLAB 25 / 33

Page 161: #Matlab Sve Pomalo

Tipovi funkcija

Osnovni tipovi funkcija

prema nacinu definicije:I kroz M–datotekuI funkcijske varijable (ver.6)

naredbom – anonimne funkcije (ver.7)

Milan Vrdoljak Uvod u MATLAB 25 / 33

Page 162: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 163: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 164: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 165: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 166: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 167: #Matlab Sve Pomalo

Tipovi funkcija

Funkcijske varijable – Anonimne funkcije

funkcijska varijabla – function handle (ver.6)>> fhandle = @average;

prednosti primjene funkcijske varijable

primjer primjene funkcijske varijable>> feval(fhandle,0:0.1:1);

>> average(0:0.1:1);

anonimne funkcije (ver.7) – definicija funkcije kroz jednu naredbu

funkcije s funkcijskom varijablom kao ulaznom varijablom; npr.funkcije za:

I odredivanje nultockeI optimizacijuI numericku integracijuI obicne diferencijalne jednadzbe

Primjer

Milan Vrdoljak Uvod u MATLAB 26 / 33

Page 168: #Matlab Sve Pomalo

Tipovi funkcija Prosljedivanje varijabli

Alternativni nacini prosljedivanja varijabli

razmjena varijabli izmedu funkcije i radnog prostora; ili dvijefunkcije

deklaracijom varijabli kao global

potrebno je u svakoj funkciji/skripti/komandnom prozorudeklarirati varijablu kao globalnu (prije njene uporabe)global Sref ca

primjenom evalin naredbe

deklariranjem varijabli kao persistent

Milan Vrdoljak Uvod u MATLAB 27 / 33

Page 169: #Matlab Sve Pomalo

Tipovi funkcija Prosljedivanje varijabli

Alternativni nacini prosljedivanja varijabli

razmjena varijabli izmedu funkcije i radnog prostora; ili dvijefunkcije

deklaracijom varijabli kao global

potrebno je u svakoj funkciji/skripti/komandnom prozorudeklarirati varijablu kao globalnu (prije njene uporabe)global Sref ca

primjenom evalin naredbe

deklariranjem varijabli kao persistent

Milan Vrdoljak Uvod u MATLAB 27 / 33

Page 170: #Matlab Sve Pomalo

Tipovi funkcija Prosljedivanje varijabli

Alternativni nacini prosljedivanja varijabli

razmjena varijabli izmedu funkcije i radnog prostora; ili dvijefunkcije

deklaracijom varijabli kao global

potrebno je u svakoj funkciji/skripti/komandnom prozorudeklarirati varijablu kao globalnu (prije njene uporabe)global Sref ca

primjenom evalin naredbe

deklariranjem varijabli kao persistent

Milan Vrdoljak Uvod u MATLAB 27 / 33

Page 171: #Matlab Sve Pomalo

Tipovi funkcija Prosljedivanje varijabli

Alternativni nacini prosljedivanja varijabli

razmjena varijabli izmedu funkcije i radnog prostora; ili dvijefunkcije

deklaracijom varijabli kao global

potrebno je u svakoj funkciji/skripti/komandnom prozorudeklarirati varijablu kao globalnu (prije njene uporabe)global Sref ca

primjenom evalin naredbe

deklariranjem varijabli kao persistent

Milan Vrdoljak Uvod u MATLAB 27 / 33

Page 172: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Pregled

1 Programi u MATLABu

2 Petlje i uvjetne strukture

3 Tipovi podataka

4 Tipovi funkcija

5 Savjeti za rad i programiranje u MATLABuGreske u programimaPreporuke za razvoj MATLAB programa

Milan Vrdoljak Uvod u MATLAB 28 / 33

Page 173: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 174: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 175: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 176: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 177: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 178: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 179: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu

Efikasniji rad u komandnom prozoru i programima

pregled ranije izvrsenih naredbi (command history)

kompletiranje naziva naredbi i naziva varijabli

brisanje sadrzaja u komandnom prozoru: clc

prelazak u novi red ...

primjena znaka ;

format ispisa rezultataformat long

Milan Vrdoljak Uvod u MATLAB 29 / 33

Page 180: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 181: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 182: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 183: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 184: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 185: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 186: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 187: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 188: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

kriticni, neocekivani uvjeti pri izvrsavanju programa: prekidizvrsavanja – greske (error)

neocekivani uvjeti, ne-kriticni: nastavak izvrsavanja – upozorenja(warrning)

najcesca greska: greska u pathu

>> y=average(x)

>> ??? Undefined function or variable ’average’.

pravila prioriteta:

1 provjera da li postoji varijabla imena average u radnomprostoru,

2 provjera da li postoji ugradena funkcija tog imena,3 pretrazivanje trenutnog direktorija s trazenom funkcijom,4 pretrazivanje direktorija u path-u s trazenom funkcijom.

Milan Vrdoljak Uvod u MATLAB 30 / 33

Page 189: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

primjer greske: nedefinirana varijabla u programu

izvrsavanje programa/funkcije naredbu po naredbu: debuger

robusni algoritmi/razvijanje algoritma: try-catch petlja

Milan Vrdoljak Uvod u MATLAB 31 / 33

Page 190: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

primjer greske: nedefinirana varijabla u programu

izvrsavanje programa/funkcije naredbu po naredbu: debuger

robusni algoritmi/razvijanje algoritma: try-catch petlja

Milan Vrdoljak Uvod u MATLAB 31 / 33

Page 191: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Greske u programima

Greske u programima i sto s njima

primjer greske: nedefinirana varijabla u programu

izvrsavanje programa/funkcije naredbu po naredbu: debuger

robusni algoritmi/razvijanje algoritma: try-catch petlja

Milan Vrdoljak Uvod u MATLAB 31 / 33

Page 192: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 193: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 194: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 195: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 196: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 197: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 198: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

korisiti help

komentirati programe

planiranje programa po dijelovama; neovisne zadace – funkcije

ispravan odabir tipa varijable

pisanje programa u manjim dijelovima (kao i modifikacija)

pisanje programa u prvih 80 znakova linije

Milan Vrdoljak Uvod u MATLAB 32 / 33

Page 199: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

vektorizacija (matricni zapis): preporuka za brze izvrsavanjeprograma (primjena operacija po elementima)

predalokacija: ukoliko ne provodite vektorizaciju preporuka jepredalocirati matrice koje su u uporabi (brze izvrsavanjeprograma), npr. zeros

oprez s globalnim varijablama, clear global

Nastavak . . .

Milan Vrdoljak Uvod u MATLAB 33 / 33

Page 200: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

vektorizacija (matricni zapis): preporuka za brze izvrsavanjeprograma (primjena operacija po elementima)

predalokacija: ukoliko ne provodite vektorizaciju preporuka jepredalocirati matrice koje su u uporabi (brze izvrsavanjeprograma), npr. zeros

oprez s globalnim varijablama, clear global

Nastavak . . .

Milan Vrdoljak Uvod u MATLAB 33 / 33

Page 201: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

vektorizacija (matricni zapis): preporuka za brze izvrsavanjeprograma (primjena operacija po elementima)

predalokacija: ukoliko ne provodite vektorizaciju preporuka jepredalocirati matrice koje su u uporabi (brze izvrsavanjeprograma), npr. zeros

oprez s globalnim varijablama, clear global

Nastavak . . .

Milan Vrdoljak Uvod u MATLAB 33 / 33

Page 202: #Matlab Sve Pomalo

Savjeti za rad i programiranje u MATLABu Preporuke za razvoj MATLAB programa

Preporuke za pisanje programa

vektorizacija (matricni zapis): preporuka za brze izvrsavanjeprograma (primjena operacija po elementima)

predalokacija: ukoliko ne provodite vektorizaciju preporuka jepredalocirati matrice koje su u uporabi (brze izvrsavanjeprograma), npr. zeros

oprez s globalnim varijablama, clear global

Nastavak . . .

Milan Vrdoljak Uvod u MATLAB 33 / 33

Page 203: #Matlab Sve Pomalo

Uvod u MATLAB3. dio

Milan VrdoljakZavod za zrakoplovstvo, FSB

[email protected]://www.fsb.hr/~mvrdolja/matlab/

Listopad 2007.

Milan Vrdoljak Uvod u MATLAB 1 / 27

Page 204: #Matlab Sve Pomalo

Pregled1 Tipicna graficka sesija u MATLABu2 Osnovna grafika u MATLABu

Osnovne graficke naredbeLinijski prikaz podatakaPrikaz podataka po tockamaKombinacija linijskog i prikaza po tockamaLinijski prikaz matricePrikaz kompleksnih brojevaLinijski prikaz s dvije y-osiPodesavanje osnovnih parametara osi dijagramaDijagramski prozor

3 3D vizualizacijaVolumenska vizualizacijaSpecijalna grafika

4 Ispis i eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 2 / 27

Page 205: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Pregled1 Tipicna graficka sesija u MATLABu2 Osnovna grafika u MATLABu

Osnovne graficke naredbeLinijski prikaz podatakaPrikaz podataka po tockamaKombinacija linijskog i prikaza po tockamaLinijski prikaz matricePrikaz kompleksnih brojevaLinijski prikaz s dvije y-osiPodesavanje osnovnih parametara osi dijagramaDijagramski prozor

3 3D vizualizacijaVolumenska vizualizacijaSpecijalna grafika

4 Ispis i eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 3 / 27

Page 206: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Tipicna graficka sesija u MATLABupriprema podataka

odabir prozora, pozicije za dijagram

iscrtavanje podataka

postavljanje karakteristika linija i markera

postavljanje karakteristika osi dijagrama i mreze

notacije na dijagramu

eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 4 / 27

Page 207: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Tipicna graficka sesija u MATLABupriprema podataka

odabir prozora, pozicije za dijagram

iscrtavanje podataka

postavljanje karakteristika linija i markera

postavljanje karakteristika osi dijagrama i mreze

notacije na dijagramu

eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 4 / 27

Page 208: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Tipicna graficka sesija u MATLABupriprema podataka

odabir prozora, pozicije za dijagram

iscrtavanje podataka

postavljanje karakteristika linija i markera

postavljanje karakteristika osi dijagrama i mreze

notacije na dijagramu

eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 4 / 27

Page 209: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Tipicna graficka sesija u MATLABupriprema podataka

odabir prozora, pozicije za dijagram

iscrtavanje podataka

postavljanje karakteristika linija i markera

postavljanje karakteristika osi dijagrama i mreze

notacije na dijagramu

eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 4 / 27

Page 210: #Matlab Sve Pomalo

Tipicna graficka sesija u MATLABu

Tipicna graficka sesija u MATLABupriprema podataka

odabir prozora, pozicije za dijagram

iscrtavanje podataka

postavljanje karakteristika linija i markera

postavljanje karakteristika osi dijagrama i mreze

notacije na dijagramu

eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 4 / 27

Page 211: #Matlab Sve Pomalo

Osnovna grafika u MATLABu

Pregled1 Tipicna graficka sesija u MATLABu2 Osnovna grafika u MATLABu

Osnovne graficke naredbeLinijski prikaz podatakaPrikaz podataka po tockamaKombinacija linijskog i prikaza po tockamaLinijski prikaz matricePrikaz kompleksnih brojevaLinijski prikaz s dvije y-osiPodesavanje osnovnih parametara osi dijagramaDijagramski prozor

3 3D vizualizacijaVolumenska vizualizacijaSpecijalna grafika

4 Ispis i eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 5 / 27

Page 212: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Osnovne graficke naredbe

Osnovne graficke naredbe

plot dijagram linearnog mjerila za obe osi

loglog dijagram logaritamskog mjerila za obe osi

semilogx dijagram logaritamskog mjerila za x-os i linearnogmjerila za y-os

semilogy dijagram logaritamskog mjerila za y-os i linearnogmjerila za x-os

plotyy dijagram s dvije y-osi (lijevo i desno)

Milan Vrdoljak Uvod u MATLAB 6 / 27

Page 213: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Linijski prikaz podataka

Linijski prikaz podataka

t=[0:2:360]*pi/180;y=sin(t);plot(t,y)

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

y1=sin(t-pi/6)y2=sin(t-pi*2/6)plot(t,y,t,y1,t,y2)

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

Milan Vrdoljak Uvod u MATLAB 7 / 27

Page 214: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Linijski prikaz podataka

plot(t,y,’-’,t,y1,’:’,t,y2,’--’)

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

figureplot(t,y)hold onplot(t,cos(t),’r:’)

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

Milan Vrdoljak Uvod u MATLAB 8 / 27

Page 215: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Prikaz podataka po tockama

Prikaz podataka po tockama

t=[0:10:360]*pi/180;y=exp(2*cos(t));plot(t,y,’r*’)

0 1 2 3 4 5 6 70

1

2

3

4

5

6

7

8

semilogx(y,t,’ko’)

100

0

1

2

3

4

5

6

7

Milan Vrdoljak Uvod u MATLAB 9 / 27

Page 216: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Kombinacija linijskog i prikaza po tockama

Kombinacija linijskog i prikaza po tockama

y=exp(2*cos(t));yy=exp(2.3*cos(t))+1;plot(t,y,’r:d’,t,yy,’g--v’)

0 1 2 3 4 5 6 70

2

4

6

8

10

12

plot(t,y,’r:d’,’LineWidth’,1.1,’MarkerSize’,10,...

’MarkerFaceColor’,’y’,’MarkerEdgeColor’,’k’)

hold on

plot(t,yy,’b--v’,’LineWidth’,2.2,’MarkerSize’,6,...

’MarkerFaceColor’,’g’,’MarkerEdgeColor’,’r’)

0 1 2 3 4 5 6 70

2

4

6

8

10

12

Milan Vrdoljak Uvod u MATLAB 10 / 27

Page 217: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Linijski prikaz matrice

Linijski prikaz matrice

t=[0:2:360]*pi/180;for i=1:12y(i,:)=cos(t-(i-1)*pi/12);

endplot(t,y) 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

Milan Vrdoljak Uvod u MATLAB 11 / 27

Page 218: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Prikaz kompleksnih brojeva

Prikaz kompleksnih brojeva

Zk=roots(randn(10,1));plot(Zk)hold onplot(real(Zk),imag(Zk),’b+’) −1 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

Milan Vrdoljak Uvod u MATLAB 12 / 27

Page 219: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Linijski prikaz s dvije y-osi

Linijski prikaz s dvije y-osi

xs=[0:2:360]; %kut u stup.x=xs*pi/180; %kut u rad.y=sin(t);plotyy(x,xs,x,y) 0 1 2 3 4 5 6 7

0

100

200

300

400

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1

Milan Vrdoljak Uvod u MATLAB 13 / 27

Page 220: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Podesavanje osnovnih parametara osi dijagrama

Podesavanje osnovnih parametara osi dijagrama

t=-pi:pi/20:pi;

y=exp(2*cos(t));

plot(t,y)

axis([-1.5 1.5 5 10])

−1.5 −1 −0.5 0 0.5 1 1.55

5.5

6

6.5

7

7.5

8

8.5

9

9.5

10

set(gca,’ytick’,[5 6 7 8 9 10])

set(gca,’xtick’,[-2/6*pi -1/6*pi 0 1/6*pi 2/6*pi],...

’xticklabel’,’-2*pi/6’ ’-pi/6’ ’0’ ’pi/6’ ’2*pi/6)’

−2*pi/6 −pi/6 0 pi/6 2*pi/65

6

7

8

9

10

Milan Vrdoljak Uvod u MATLAB 14 / 27

Page 221: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Podesavanje osnovnih parametara osi dijagrama

Podesavanje osnovnih parametara osi dijagrama

plot(t,y)

xlabel(’kut’);ylabel(’y=exp(2*cos(t))’)

title(’Uvod u Matlab’)

text(-3,2,’rezultat’)

gtext(’y=f(x)’)

grid on−4 −3 −2 −1 0 1 2 3 40

1

2

3

4

5

6

7

8

kut

y=ex

p(2*

cos(

t))

Uvod u Matlab

rezultat

y=f(x)

Milan Vrdoljak Uvod u MATLAB 15 / 27

Page 222: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Podesavanje osnovnih parametara osi dijagrama

[ha,h1,h2]=plotyy(t,ts,t,y);

axes(ha(1))

ylabel(’kut [deg]’)

set(h1,’linestyle’,’--’)

axes(ha(2))

ylabel(’sin(kut)’)

xlabel(’kut [rad]’)

0 1 2 3 4 5 6 70

100

200

300

400

kut [

deg]

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1

sin(

kut)

kut [rad]

Milan Vrdoljak Uvod u MATLAB 16 / 27

Page 223: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Podesavanje osnovnih parametara osi dijagrama

t=0:pi/20:pi;

plot(sin(t),2*cos(t))

−1 −0.5 0 0.5 1−2

−1.5

−1

−0.5

0

0.5

1

1.5

2axis normal

−2 −1 0 1 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2axis equal

−1 −0.5 0 0.5 1−2

−1.5

−1

−0.5

0

0.5

1

1.5

2axis square

−1 0 1−2

−1.5

−1

−0.5

0

0.5

1

1.5

2axis equal tight

Milan Vrdoljak Uvod u MATLAB 17 / 27

Page 224: #Matlab Sve Pomalo

Osnovna grafika u MATLABu Dijagramski prozor

Dijagramski prozor

t=0:pi/20:2*pi;figure subplot 311plot(t,sin(t))ylabel(’sin(kut)’)title(’Uvod u Matlab’)

subplot 312plot(t,cos(t))ylabel(’cos(kut)’)

subplot 313plot(t,cos(t-pi/6),’r’)xlabel(’kut’)

ylabel(’cos(kut-pi/6)’)

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1Uvod u Matlab

sin(

kut)

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1

cos(

kut)

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1

kut

cos(

kut−

pi/6

)

Milan Vrdoljak Uvod u MATLAB 18 / 27

Page 225: #Matlab Sve Pomalo

3D vizualizacija

Pregled1 Tipicna graficka sesija u MATLABu2 Osnovna grafika u MATLABu

Osnovne graficke naredbeLinijski prikaz podatakaPrikaz podataka po tockamaKombinacija linijskog i prikaza po tockamaLinijski prikaz matricePrikaz kompleksnih brojevaLinijski prikaz s dvije y-osiPodesavanje osnovnih parametara osi dijagramaDijagramski prozor

3 3D vizualizacijaVolumenska vizualizacijaSpecijalna grafika

4 Ispis i eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 19 / 27

Page 226: #Matlab Sve Pomalo

3D vizualizacija

3D vizualizacija

t=linspace(0,10*pi);

plot3(sin(t),cos(t),t)

xlabel(’sin(t)’), ylabel(’cos(t)’)

zlabel(’t’), title(’3D Helix’)

−1

−0.5

0

0.5

1

−1

−0.5

0

0.5

10

5

10

15

20

25

30

35

sin(t)

3D Helix

cos(t)

t

x=-7.5:.5:7.5;

y=x;

[X,Y]=meshgrid(x,y);

R=sqrt(X.^2+Y.^2)+eps;

Z=sin(R)./R;

mesh(X,Y,Z)

−10

−5

0

5

10

−10

−5

0

5

10−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Milan Vrdoljak Uvod u MATLAB 20 / 27

Page 227: #Matlab Sve Pomalo

3D vizualizacija

surf(X,Y,Z)

axis off

colormap cool

axis on

box on

grid off

view(30,70)

−8−6

−4−2

02

46

8 −8

−6

−4

−2

0

2

4

6

8

−0.5

0

0.5

1

Milan Vrdoljak Uvod u MATLAB 21 / 27

Page 228: #Matlab Sve Pomalo

3D vizualizacija Volumenska vizualizacija

vizualizacija podataka (skalarnih ivektorskih) na 3D mrezi

Milan Vrdoljak Uvod u MATLAB 22 / 27

Page 229: #Matlab Sve Pomalo

3D vizualizacija Specijalna grafika

Konturni dijagram[X,Y,Z] = peaks;

contour(X,Y,Z,20)

axis([-2 2 -2 2])

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

Prikaz vektora/brzine[U,V] = gradient(Z,.2);

hold on

quiver(X,Y,U,V)

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

Milan Vrdoljak Uvod u MATLAB 23 / 27

Page 230: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Pregled1 Tipicna graficka sesija u MATLABu2 Osnovna grafika u MATLABu

Osnovne graficke naredbeLinijski prikaz podatakaPrikaz podataka po tockamaKombinacija linijskog i prikaza po tockamaLinijski prikaz matricePrikaz kompleksnih brojevaLinijski prikaz s dvije y-osiPodesavanje osnovnih parametara osi dijagramaDijagramski prozor

3 3D vizualizacijaVolumenska vizualizacijaSpecijalna grafika

4 Ispis i eksportiranje grafike

Milan Vrdoljak Uvod u MATLAB 24 / 27

Page 231: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 232: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 233: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 234: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 235: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 236: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 237: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 238: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksportiranje grafike

Cetiri su osnovne opracije kojima je moguce transformiratigrafiku iz MATLABa

1 ispis2 ispis u datoteku3 eksportiranje u datoteku4 eksportiranje u Clipboard

Dva su nacina na koji se to moze provesti1 primjenom grafickog sucelja (intuitivno)2 primjenom MATLAB naredbi (iz komandnog prozora)

Milan Vrdoljak Uvod u MATLAB 25 / 27

Page 239: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksport: primjenom MATLAB naredbi

ispis na printerprint

print -dwin

ispis u PostScript datotekuprint filename

eksportiranje u datotekuprint -dfileformat filename

npr. eksport slike br.2 s rezolucijom 600dpi primjenom grafickogformata EPS color u datoteku spline2d.epsprint -f2 -r600 -depsc spline2d.eps ili

Milan Vrdoljak Uvod u MATLAB 26 / 27

Page 240: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksport: primjenom MATLAB naredbi

ispis na printerprint

print -dwin

ispis u PostScript datotekuprint filename

eksportiranje u datotekuprint -dfileformat filename

npr. eksport slike br.2 s rezolucijom 600dpi primjenom grafickogformata EPS color u datoteku spline2d.epsprint -f2 -r600 -depsc spline2d.eps ili

Milan Vrdoljak Uvod u MATLAB 26 / 27

Page 241: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

Ispis i eksport: primjenom MATLAB naredbi

ispis na printerprint

print -dwin

ispis u PostScript datotekuprint filename

eksportiranje u datotekuprint -dfileformat filename

npr. eksport slike br.2 s rezolucijom 600dpi primjenom grafickogformata EPS color u datoteku spline2d.epsprint -f2 -r600 -depsc spline2d.eps ili

Milan Vrdoljak Uvod u MATLAB 26 / 27

Page 242: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

eksportiranje u datotekunpr. eksport trenutne slike u JPEG format s postavkom(maksimalnom) kvalitete u datoteku myfile.jpgprint -djpeg100 myfile.jpg

eksportiranje u Clipboardprint -dmeta

Milan Vrdoljak Uvod u MATLAB 27 / 27

Page 243: #Matlab Sve Pomalo

Ispis i eksportiranje grafike

eksportiranje u datotekunpr. eksport trenutne slike u JPEG format s postavkom(maksimalnom) kvalitete u datoteku myfile.jpgprint -djpeg100 myfile.jpg

eksportiranje u Clipboardprint -dmeta

Milan Vrdoljak Uvod u MATLAB 27 / 27

Page 244: #Matlab Sve Pomalo

��������

������ �����������

Edward NeumanDepartment of Mathematics

Southern Illinois University at [email protected]

This tutorial is intended for those who want to learn basics of MATLAB programming language.Even with a limited knowledge of this language a beginning programmer can write his/her owncomputer code for solving problems that are complex enough to be solved by other means.Numerous examples included in this text should help a reader to learn quickly basic programmingtools of this language. Topics discussed include the m-files, inline functions, control flow,relational and logical operators, strings, cell arrays, rounding numbers to integers and MATLABgraphics.

�� ��� ������

Files that contain a computer code are called the m-files. There are two kinds of m-files: the scriptfiles and the function files. Script files do not take the input arguments or return the outputarguments. The function files may take input arguments or return output arguments.

To make the m-file click on File next select New and click on M-File from the pull-down menu.You will be presented with the MATLAB Editor/Debugger screen. Here you will type yourcode, can make changes, etc. Once you are done with typing, click on File, in the MATLABEditor/Debugger screen and select Save As… . Chose a name for your file, e.g., firstgraph.mand click on Save. Make sure that your file is saved in the directory that is in MATLAB's searchpath.

If you have at least two files with duplicated names, then the one that occurs first in MATLAB'ssearch path will be executed.

To open the m-file from within the Command Window type edit firstgraph and then pressEnter or Return key.

Here is an example of a small script file

% Script file firstgraph.

x = pi/100:pi/100:10*pi;y = sin(x)./x;plot(x,y)grid

Page 245: #Matlab Sve Pomalo

2

Let us analyze contents of this file. First line begins with the percentage sign % . This is acomment. All comments are ignored by MATLAB. They are added to improve readability of thecode. In the next two lines arrays x and y are created. Note that the semicolon follows bothcommands. This suppresses display of the content of both vectors to the screen (see Tutorial 1,page 5 for more details). Array x holds 1000 evenly spaced numbers in the interval [��/100 10��]while the array y holds the values of the sinc function y = sin(x)/x at these points. Note use of thedot operator . before the right division operator /. This tells MATLAB to perform thecomponentwise division of two arrays sin(x) and x. Special operators in MATLAB and operationson one- and two dimensional arrays are discussed in detail in Tutorial 3, Section 3.2. Thecommand plot creates the graph of the sinc function using the points generated in two previouslines. For more details about command plot see Section 2.8.1 of this tutorial. Finally, thecommand grid is executed. This adds a grid to the graph. We invoke this file by typing its namein the Command Window and next pressing the Enter or Return key

firstgraph

0 5 10 15 20 25 30 35-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Here is an example of the function file

function [b, j] = descsort(a)

% Function descsort sorts, in the descending order, a real array a.% Second output parameter j holds a permutation used to obtain% array b from the array a.

Page 246: #Matlab Sve Pomalo

3

[b ,j] = sort(-a);b = -b;

This function takes one input argument, the array of real numbers, and returns a sorted arraytogether with a permutation used to obtain array b from the array a. MATLAB built-in functionsort is used here. Recall that this function sort numbers in the ascending order. A simple trickused here allows us to sort an array of numbers in the descending order.

To demonstrate functionality of the function under discussion let

a = [pi –10 35 0.15];

[b, j] = descsort(a)

b = 35.0000 3.1416 0.1500 -10.0000j = 3 1 4 2

You can execute function descsort without output arguments. In this case an information about apermutation used will be lost

descsort(a)

ans = 35.0000 3.1416 0.1500 -10.0000

Since no output argument was used in the call to function descorder a sorted array a is assignedto the default variable ans.

� ���������������������������� ���

Sometimes it is handy to define a function that will be used during the current MATLAB sessiononly. MATLAB has a command inline used to define the so-called inline functions in theCommand Window.

Let

f = inline('sqrt(x.^2+y.^2)','x','y')

f = Inline function: f(x,y) = sqrt(x.^2+y.^2)

You can evaluate this function in a usual way

f(3,4)

ans = 5

Page 247: #Matlab Sve Pomalo

4

Note that this function also works with arrays. Let

A = [1 2;3 4]

A = 1 2 3 4

and

B = ones(2)

B = 1 1 1 1

Then

C = f(A, B)

C = 1.4142 2.2361 3.1623 4.1231

For the later use let us mention briefly a concept of the string in MATLAB. The character stringis a text surrounded by single quotes. For instance,

str = 'programming in MATLAB is fun'

str =programming in MATLAB is fun

is an example of the string. Strings are discussed in Section 2.5 of this tutorial.

In the previous section you have learned how to create the function files. Some functions take asthe input argument a name of another function, which is specified as a string. In order to executefunction specified by string you should use the command feval as shown below

feval('functname', input parameters of function functname)

Consider the problem of computing the least common multiple of two integers. MATLAB has abuilt-in function lcm that computes the number in question. Recall that the least commonmultiple and the greatest common divisor (gcd) satisfy the following equation

ab = lcm(a, b)gcd(a, b)

MATLAB has its own function, named gcd, for computing the greatest common divisor.

Page 248: #Matlab Sve Pomalo

5

To illustrate the use of the command feval let us take a closer look at the code in the m-filemylcm

function c = mylcm(a, b)

% The least common multiple c of two integers a and b.

if feval( 'isint' ,a) & feval( 'isint' ,b) c = a.*b./gcd(a,b);else error( 'Input arguments must be integral numbers' )end

Command feval is used twice in line two (I do do not count the comment lines and the blanklines). It checks whether or not both input arguments are integers. The logical and operator &used here is discussed in Section 2.4. If this condition is satisfied, then the least common multipleis computed using the formula mentioned earlier, otherwise the error message is generated. Noteuse of the command error, which takes as the argument a string. The conditional if - else - endused here is discussed in Section 2.4 of this tutorial. Function that is executed twice in the body ofthe function mylcm is named isint

function k = isint(x);

% Check whether or not x is an integer number.% If it is, function isint returns 1 otherwise it returns 0.

if abs(x - round(x)) < realmin k = 1;else k = 0;end

New functions used here are the absolute value function (abs) and the round function (round).The former is the classical math function while the latter takes a number and rounds it to theclosest integer. Other functions used to round real numbers to integers are discussed in Section2.7. Finally, realmin is the smallest positive real number on your computer

format long

realmin

ans = 2.225073858507201e-308

format short

The Trapezoidal Rule with the correction term is often used to numerical integration of functionsthat are differentiable on the interval of integration

Page 249: #Matlab Sve Pomalo

6

)](')('[12

)]()([2

)(2

bfafh

bfafh

dxxfb

a

�����

where h = b – a. This formula is easy to implement in MATLAB

function y = corrtrap(fname, fpname, a, b)

% Corrected trapezoidal rule y.% fname - the m-file used to evaluate the integrand,% fpname - the m-file used to evaluate the first derivative% of the integrand,% a,b - endpoinds of the interval of integration.

h = b - a;y = (h/2).*(feval(fname,a) + feval(fname,b))+ (h.^2)/12.*( ... feval(fpname,a) - feval(fpname,b));

The input parameters a and b can be arrays of the same dimension. This is possible because thedot operator proceeds certain arithmetic operations in the command that defines the variable y.

In this example we will integrate the sine function over two intervals whose end points are storedin the arrays a and b, where

a = [0 0.1];b = [pi/2 pi/2 + 0.1];

y = corrtrap('sin', 'cos', a, b)

y = 0.9910 1.0850

Since the integrand and its first order derivative are both the built-in functions, there is no need todefine these functions in the m-files.

�� ����������

To control the flow of commands, the makers of MATLAB supplied four devices a programmercan use while writing his/her computer code

� the for loops� the while loops� the if -else-end constructions� the switch-case constructions

Page 250: #Matlab Sve Pomalo

7

����� ������� �� ��� �����

Syntax of the for loop is shown below

for k = arraycommands

end

The commands between the for and end statements are executed for all values stored in thearray .

Suppose that one-need values of the sine function at eleven evenly spaced points ��n/10, for n = 0, 1, …, 10. To generate the numbers in question one can use the for loop

for n=0:10 x(n+1) = sin(pi*n/10);end

x

x = Columns 1 through 7 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns 8 through 11 0.8090 0.5878 0.3090 0.0000

The for loops can be nested

H = zeros(5); for k=1:5 for l=1:5 H(k,l) = 1/(k+l-1); endend

H

H = 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111

Matrix H created here is called the Hilbert matrix. First command assigns a space in computer'smemory for the matrix to be generated. This is added here to reduce the overhead that is requiredby loops in MATLAB.

The for loop should be used only when other methods cannot be applied. Consider the followingproblem. Generate a 10-by-10 matrix A = [akl], where akl = sin(k)cos(l). Using nested loops onecan compute entries of the matrix A using the following code

Page 251: #Matlab Sve Pomalo

8

A = zeros(10);for k=1:10 for l=1:10 A(k,l) = sin(k)*cos(l); endend

A loop free version might look like this

k = 1:10;A = sin(k)'*cos(k);

First command generates a row array k consisting of integers 1, 2, … , 10. The command sin(k)'creates a column vector while cos(k) is the row vector. Components of both vectors are the valuesof the two trig functions evaluated at k. Code presented above illustrates a powerful feature ofMATLAB called vectorization. This technique should be used whenever it is possible.

����� ������� �� ���� �����

Syntax of the while loop is

while expression statementsend

This loop is used when the programmer does not know the number of repetitions a priori.

Here is an almost trivial problem that requires a use of this loop. Suppose that the number �� isdivided by 2. The resulting quotient is divided by 2 again. This process is continued till thecurrent quotient is less than or equal to 0.01. What is the largest quotient that is greater than 0.01?To answer this question we write a few lines of code

q = pi;while q > 0.01 q = q/2;end

q

q = 0.0061

����� ��� ���������� ����������

Syntax of the simplest form of the construction under discussion is

if expression commandsend

Page 252: #Matlab Sve Pomalo

9

This construction is used if there is one alternative only. Two alternatives require the construction

if expression commands (evaluated if expression is true)else commands (evaluated if expression is false)end

Construction of this form is used in functions mylcm and isint (see Section 2.3).

If there are several alternatives one should use the following construction

if expression1 commands (evaluated if expression 1 is true)elseif expression 2 commands (evaluated if expression 2 is true)elseif …...else commands (executed if all previous expressions evaluate to false)end

Chebyshev polynomials Tn(x), n = 0, 1, … of the first kind are of great importance in numericalanalysis. They are defined recursively as follows

Tn(x) = 2xTn – 1(x) – Tn – 2(x), n = 2, 3, … , T0(x) = 1, T1(x) = x.

Implementation of this definition is easy

function T = ChebT(n)

% Coefficients T of the nth Chebyshev polynomial of the first kind.% They are stored in the descending order of powers.

t0 = 1;t1 = [1 0];if n == 0 T = t0;elseif n == 1; T = t1;else for k=2:n T = [2*t1 0] - [0 0 t0]; t0 = t1; t1 = T; endend

Page 253: #Matlab Sve Pomalo

10

Coefficients of the cubic Chebyshev polynomial of the first kind are

coeff = ChebT(3)

coeff = 4 0 -3 0

Thus T3(x) = 4x3 – 3x.

����� ��� ��������� ���������

Syntax of the switch-case construction is

switch expression (scalar or string) case value1 (executes if expression evaluates to value1) commands case value2 (executes if expression evaluates to value2) commands... otherwise statementsend

Switch compares the input expression to each case value. Once the match is found it executes theassociated commands.

In the following example a random integer number x from the set {1, 2, … , 10} is generated. Ifx = 1 or x = 2, then the message Probability = 20% is displayed to the screen. If x = 3 or 4 or 5,then the message Probability = 30% is displayed, otherwise the message Probability = 50% isgenerated. The script file fswitch utilizes a switch as a tool for handling all cases mentionedabove

% Script file fswitch.

x = ceil(10*rand); % Generate a random integer in {1, 2, ... , 10}switch x case {1,2} disp( 'Probability = 20%' ); case {3,4,5} disp( 'Probability = 30%' ); otherwise disp( 'Probability = 50%' );end

Note use of the curly braces after the word case. This creates the so-called cell array rather thanthe one-dimensional array, which requires use of the square brackets.

Page 254: #Matlab Sve Pomalo

11

Here are new MATLAB functions that are used in file fswitch

rand – uniformly distributed random numbers in the interval (0, 1)ceil – round towards plus infinity infinity (see Section 2.5 for more details)disp – display string/array to the screen

Let us test this code ten times

for k = 1:10 fswitchend

Probability = 50%Probability = 30%Probability = 50%Probability = 50%Probability = 50%Probability = 30%Probability = 20%Probability = 50%Probability = 30%Probability = 50%

�! "�������������������#�������

Comparisons in MATLAB are performed with the aid of the following operators

Operator Description< Less than

<= Less than or equal to> Greater

>= Greater or equal to== Equal to~= Not equal to

Operator == compares two variables and returns ones when they are equal and zeros otherwise.

Let

a = [1 1 3 4 1]

a = 1 1 3 4 1

Then

Page 255: #Matlab Sve Pomalo

12

ind = (a == 1)

ind = 1 1 0 0 1

You can extract all entries in the array a that are equal to 1 using

b = a(ind)

b = 1 1 1

This is an example of so-called logical addressing in MATLAB. You can obtain the same resultusing function find

ind = find(a == 1)

ind = 1 2 5

Variable ind now holds indices of those entries that satisfy the imposed condition. To extract allones from the array a use

b = a(ind)

b = 1 1 1

There are three logical operators available in MATLAB

Logical operator Description| And

& Or~ Not

Suppose that one wants to select all entries x that satisfy the inequalities x �� 1 or x < -0.2 where

x = randn(1,7)

x = -0.4326 -1.6656 0.1253 0.2877 -1.1465 1.1909 1.1892

is the array of normally distributed random numbers. We can solve easily this problem usingoperators discussed in this section

ind = (x >= 1) | (x < -0.2)

ind = 1 1 0 0 1 1 1

y = x(ind)

Page 256: #Matlab Sve Pomalo

13

y = -0.4326 -1.6656 -1.1465 1.1909 1.1892

Solve the last problem without using the logical addressing.

In addition to relational and logical operators MATLAB has several logical functions designedfor performing similar tasks. These functions return 1 (true) if a specific condition is satisfied and0 (false) otherwise. A list of these functions is too long to be included here. The interested readeris referred to [1], pp. 85-86 and [4], Chapter 10, pp. 26-27. Names of the most of these functionsbegin with the prefix is. For instance, the following command

isempty(y)

ans = 0

returns 0 because the array y of the last example is not empty. However, this command

isempty([ ])

ans = 1

returns 1 because the argument of the function used is the empty array [ ] .

Here is another example that requires use of the isempty command

function dp = derp(p)

% Derivative dp of an algebraic polynomial that is% represented by its coefficients p. They must be stored% in the descending order of powers.

n = length(p) - 1;p = p(:)'; % Make sure p is a row array.dp = p(1:n).*(n:-1:1); % Apply the Power Rule.k = find(dp ~= 0);if ~isempty(k) dp = dp(k(1):end); % Delete leading zeros if any.else dp = 0;end

In this example p(x) = x3 + 2x2 + 4. Using a convention for representing polynomials inMATLAB as the array of their coefficients that are stored in the descending order of powers, weobtain

dp = derp([1 2 0 4])

dp = 3 4 0

Page 257: #Matlab Sve Pomalo

14

�$ %������

String is an array of characters. Each character is represented internally by its ASCII value.

This is an example of a string

str = 'I am learning MATLAB this semester.'

str =I am learning MATLAB this semester.

To see its ASCII representation use function double

str1 = double(str)

str1 = Columns 1 through 12 73 32 97 109 32 108 101 97 114 110 105110 Columns 13 through 24 103 32 77 65 84 76 65 66 32 116 104105 Columns 25 through 35 115 32 115 101 109 101 115 116 101 114 46

You can convert array str1 to its character form using function char

str2 = char(str1)

str2 =I am learning MATLAB this semester.

Application of the string conversion is used in Tutorial 3, Section 3.11 to uncode and decodemessages.

To compare two strings for equality use function strcmp

iseq = strcmp(str, str2)

iseq = 1

Two strings can be concatenated using function ctrcat

strcat(str,str2)

ans =I am learning MATLAB this semester.I am learning MATLAB this semester.

Note that the concatenated strings are not separated by the blank space.

Page 258: #Matlab Sve Pomalo

15

You can create two-dimensional array of strings. To this aim the cell array rather than the two-dimensional array must be used. This is due to the fact that numeric array must have the samenumber of columns in each row.

This is an example of the cell array

carr = {'first name'; 'last name'; 'hometown'}

carr = 'first name' 'last name' 'hometown'

Note use of the curly braces instead of the square brackets. Cell arrays are discussed in detail inthe next section of this tutorial.

MATLAB has two functions to categorize characters: isletter and isspace. We will run bothfunctions on the string str

isletter(str)

ans = Columns 1 through 12 1 0 1 1 0 1 1 1 1 1 11 Columns 13 through 24 1 0 1 1 1 1 1 1 0 1 11 Columns 25 through 35 1 0 1 1 1 1 1 1 1 1 0

isspace(str)

ans = Columns 1 through 12 0 1 0 0 1 0 0 0 0 0 00 Columns 13 through 24 0 1 0 0 0 0 0 0 1 0 00 Columns 25 through 35 0 1 0 0 0 0 0 0 0 0 0

The former function returns 1 if a character is a letter and 0 otherwise while the latter returns 1 ifa character is whitespace (blank, tab, or new line) and 0 otherwise.

We close this section with two important functions that are intended for conversion of numbers tostrings. Functions in question are named int2str and num2str. Function int2str rounds itsargument (matrix) to integers and converts the result into a string matrix.

Page 259: #Matlab Sve Pomalo

16

Let

A = randn(3)

A = -0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273

Then

B = int2str(A)

B = 0 0 1-2 -1 0 0 1 0

Function num2str takes an array and converts it to the array string. Running this function on thematrix A defined earlier, we obtain

C = num2str(A)

C =-0.43256 0.28768 1.1892 -1.6656 -1.1465 -0.037633 0.12533 1.1909 0.32729

Function under discussion takes a second optional argument - a number of decimal digits. Thisfeature allows a user to display digits that are far to the right of the decimal point. Using matrix Aagain, we get

D = num2str(A, 18)

D =-0.43256481152822068 0.28767642035854885 1.1891642016521031 -1.665584378238097 -1.1464713506814637 -0.037633276593317645 0.12533230647483068 1.1909154656429988 0.32729236140865414

For comparison, changing format to long, we obtain

format long

A

A = -0.43256481152822 0.28767642035855 1.18916420165210 -1.66558437823810 -1.14647135068146 -0.03763327659332 0.12533230647483 1.19091546564300 0.32729236140865

format short

Page 260: #Matlab Sve Pomalo

17

Function num2str his is often used for labeling plots with the title , xlabel, ylabel, and textcommands.

�& ��������'�

Two data types the cell arrays and structures make MATLAB a powerful tool for applications.They hold other MATLAB arrays. In this section we discuss the cell arrays only. To learn aboutstructures the interested reader is referred to [4], Chapter 13 and [1], Chapter 12.

To create the cell array one can use one of the two techniques called the cell indexing and thecontent indexing. The following example reveals differences between these two techniques.Suppose one want to save the string 'John Brown' and his SSN 123-45-6789 (without dashes) inthe cell array.

1. Cell indexing

A(1,1) = {'John Brown'};

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

2. Content indexing

B{1,1} = 'John Brown';

B{1,2} = [1 2 3 4 5 6 7 8 9];

A condensed form of the cell array A is

A

A = 'John Brown' [1x9 double]

To display its full form use function celldisp

celldisp(A)

A{1} =John BrownA{2} = 1 2 3 4 5 6 7 8 9

To access data in a particular cell use content indexing on the right-hand side. For instance,

B{1,1}

ans =John Brown

To delete a cell use the empty matrix operator [ ] . For instance, this operation

Page 261: #Matlab Sve Pomalo

18

B(1) = []

B = [1x9 double]

deletes cell B(1, 1) of the cell array B.

This command

C = {A B}

C = {1x2 cell} {1x1 cell}

creates a new cell array

celldisp(C)

C{1}{1} =John BrownC{1}{2} = 1 2 3 4 5 6 7 8 9C{2}{1} = 1 2 3 4 5 6 7 8 9

How would you delete cell C(2,1)?

�( "������������������)������������*�����*��+��������

We have already used two MATLAB functions round and ceil to round real numbers to integers.They are briefly described in the previous sections of this tutorial. A full list of functionsdesigned for rounding numbers is provided below

Function Descriptionfloor Round towards minus infinityceil Round towards plus infinityfix Round towards zero

round Round towards nearest integer

To illustrate differences between these functions let us create first a two-dimensional array ofrandom numbers that are normally distributed (mean = 0, variance = 1) using another MATLABfunction randn

randn('seed', 0) % This sets the seed of the random numbers generator to zero

T = randn(5)

Page 262: #Matlab Sve Pomalo

19

T = 1.1650 1.6961 -1.4462 -0.3600 -0.0449 0.6268 0.0591 -0.7012 -0.1356 -0.7989 0.0751 1.7971 1.2460 -1.3493 -0.7652 0.3516 0.2641 -0.6390 -1.2704 0.8617 -0.6965 0.8717 0.5774 0.9846 -0.0562

A = floor(T)

A = 1 1 -2 -1 -1 0 0 -1 -1 -1 0 1 1 -2 -1 0 0 -1 -2 0 -1 0 0 0 -1

B = ceil(T)

B = 2 2 -1 0 0 1 1 0 0 0 1 2 2 -1 0 1 1 0 -1 1 0 1 1 1 0

C = fix(T)

C = 1 1 -1 0 0 0 0 0 0 0 0 1 1 -1 0 0 0 0 -1 0 0 0 0 0 0

D = round(T)

D = 1 2 -1 0 0 1 0 -1 0 -1 0 2 1 -1 -1 0 0 -1 -1 1 -1 1 1 1 0

It is worth mentioning that the following identities

floor(x) = fix(x) for x �� 0 and

ceil(x) = fix(x) for x �� 0

Page 263: #Matlab Sve Pomalo

20

hold true.

In the following m-file functions floor and ceil are used to obtain a certain representation of anonnegative real number

function [m, r] = rep4(x)

% Given a nonnegative number x, function rep4 computes an integer m% and a real number r, where 0.25 <= r < 1, such that x = (4^m)*r.

if x == 0 m = 0; r = 0; returnendu = log10(x)/log10(4);if u < 0 m = floor(u)else m = ceil(u);endr = x/4^m;

Command return causes a return to the invoking function or to the keyboard. Function log10 isthe decimal logarithm.

[m, r] = rep4(pi)

m = 1r = 0.7854

We check this result

format long

(4^m)*r

ans = 3.14159265358979

format short

�, ���������#����

MATLAB has several high-level graphical routines. They allow a user to create various graphicalobjects including two- and three-dimensional graphs, graphical user interfaces (GUIs), movies, tomention the most important ones. For the comprehensive presentation of the MATLAB graphicsthe interested reader is referred to [2].

Page 264: #Matlab Sve Pomalo

21

Before we begin discussion of graphical tools that are available in MATLAB I recommend thatyou will run a couple of demos that come with MATLAB. In the Command Window click onHelp and next select Examples and Demos. ChoseVisualization, and next select 2-D Plots. Youwill be presented with several buttons. Select Line and examine the m-file below the graph. Itshould give you some idea about computer code needed for creating a simple graph. It isrecommended that you examine carefully contents of all m-files that generate the graphs in thisdemo.

����� ��� �������

Basic function used to create 2-D graphs is the plot function. This function takes a variablenumber of input arguments. For the full definition of this function type help plot in theCommand Window.

In this example the graph of the rational function 21

)(x

xxf

�� , -2 � x � 2, will be plotted

using a variable number of points on the graph of f(x)

% Script file graph1.

% Graph of the rational function y = x/(1+x^2).

for n=1:2:5 n10 = 10*n; x = linspace(-2,2,n10); y = x./(1+x.^2); plot(x,y, 'r' ) title(sprintf( 'Graph %g. Plot based upon n = %g points.' ... , (n+1)/2, n10)) axis([-2,2,-.8,.8]) xlabel( 'x' ) ylabel( 'y' ) grid pause(3)end

Let us analyze contents of this file. The loop for is executed three times. Therefore, three graphsof the same function will be displayed in the Figure Window. A MATLAB functionlinspace(a, b, n) generates a one-dimensional array of n evenly spaced numbers in the interval [a b]. The y-ordinates of the points to be plotted are stored in the array y. Command plot iscalled with three arguments: two arrays holding the x- and the y-coordinates and the string 'r' ,which describes the color (red) to be used to paint a plotted curve. You should notice a differencebetween three graphs created by this file. There is a significant difference between smoothness ofgraphs 1 and 3. Based on your visual observation you should be able to reach the followingconclusion: "more points you supply the smoother graph is generated by the function plot".Function title adds a descriptive information to the graphs generated by this m-file and isfollowed by the command sprintf . Note that sprintf takes here three arguments: the string andnames of two variables printed in the title of each graph. To specify format of printed numbers weuse here the construction %g, which is recommended for printing integers. The command axistells MATLAB what the dimensions of the box holding the plot are. To add more information to

Page 265: #Matlab Sve Pomalo

22

the graphs created here, we label the x- and the y-axes using commands xlabel and the ylabel,respectively. Each of these commands takes a string as the input argument. Function grid addsthe grid lines to the graph. The last command used before the closing end is the pause command.The command pause(n) holds on the current graph for n seconds before continuing, where n canalso be a fraction. If pause is called without the input argument, then the computer waits to userresponse. For instance, pressing the Enter key will resume execution of a program.

Function subplot is used to plot of several graphs in the same Figure Window. Here is a slightmodification of the m-file graph1

% Script file graph2.

% Several plots of the rational function y = x/(1+x^2)% in the same window.

k = 0;for n=1:3:10 n10 = 10*n; x = linspace(-2,2,n10); y = x./(1+x.^2); k = k+1; subplot(2,2,k) plot(x,y, 'r' ) title(sprintf( 'Graph %g. Plot based upon n = %g points.' ... , k, n10)) xlabel( 'x' ) ylabel( 'y' ) axis([-2,2,-.8,.8]) grid pause(3);end

The command subplot is called here with three arguments. The first two tell MATLAB that a 2-by-2 array consisting of four plots will be created. The third parameter is the running indextelling MATLAB which subplot is currently generated.

graph2

Page 266: #Matlab Sve Pomalo

23

-2 -1 0 1 2

-0.5

0

0.5

Graph 1. Plot based upon n = 10 points.

x

y-2 -1 0 1 2

-0.5

0

0.5

Graph 2. Plot based upon n = 40 points.

x

y-2 -1 0 1 2

-0.5

0

0.5

Graph 3. Plot based upon n = 70 points.

x

y

-2 -1 0 1 2

-0.5

0

0.5

Graph 4. Plot based upon n = 100 points.

xy

Using command plot you can display several curves in the same Figure Window.

We will plot two ellipses

181

)2(

36

)3( 22

��

�� yx

and 136

)8(

4

)7( 22

��

�� yx

using command plot

% Script file graph3.

% Graphs of two ellipses

% x(t) = 3 + 6cos(t), y(t) = -2 + 9sin(t)

% and

% x(t) = 7 + 2cos(t), y(t) = 8 + 6sin(t).

t = 0:pi/100:2*pi;x1 = 3 + 6*cos(t);y1 = -2 + 9*sin(t);x2 = 7 + 2*cos(t);y2 = 8 + 6*sin(t);h1 = plot(x1,y1, 'r' ,x2,y2, 'b' );set(h1, 'LineWidth' ,1.25)axis( 'square' )xlabel( 'x' )

Page 267: #Matlab Sve Pomalo

24

h = get(gca, 'xlabel' );set(h, 'FontSize' ,12)set(gca, 'XTick' ,-4:10)ylabel( 'y' )h = get(gca, 'ylabel' );set(h, 'FontSize' ,12)set(gca, 'YTick' ,-12:2:14)title( 'Graphs of (x-3)^2/36+(y+2)^2/81 = 1 and (x-7)^2/4+(y-8)^2/36 =1.' )h = get(gca, 'Title' );set(h, 'FontSize' ,12)grid

In this file we use several new MATLAB commands. They are used here to enhance thereadability of the graph. Let us now analyze the computer code contained in the m-file graph3.First of all, the equations of ellipses in rectangular coordinates are transformed to parametricequations. This is a convenient way to plot graphs of equations in the implicit form. The points tobe plotted, and smoothed by function plot, are defined in the first five lines of the file. I do notcount here the comment lines and the blank lines. You can plot both curves using a single plotcommand. Moreover, you can select colors of the curves. They are specified as strings(see line 6). MATLAB has several colors you can use to plot graphs:

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

Note that the command in line 6 begins with h1 = plot… Variable h1 holds an information aboutthe graph you generate and is called the handle graphics. Command set used in the next lineallows a user to manipulate a plot. Note that this command takes as the input parameter thevariable h1. We change thickness of the plotted curves from the default value to a width of ourchoice, namely 1.25. In the next line we use command axis to customize plot. We chose option'square' to force axes to have square dimensions. Other available options are:'equal', 'normal' , 'ij' , 'xy' , and 'tight' . To learn more about these options use MATLAB's help.

If function axis is not used, then the circular curves are not necessarily circular. To justify this letus plot a graph of the unit circle of radius 1 with center at the origin

t = 0:pi/100:2*pi;x = cos(t);y = sin(t);plot(x,y)

Page 268: #Matlab Sve Pomalo

25

-1 -0.5 0 0.5 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Another important MATLAB function used in the file under discussion is named get(see line 10). It takes as the first input parameter a variable named gca = get current axis. Itshould be obvious to you, that the axis targeted by this function is the x-axis. Variableh = get(gca, … ) is the graphics handle of this axis. With the information stored in variable h,we change the font size associated with the x-axis using the 'FontSize' string followed by a sizeof the font we wish to use. Invoking function set in line 12, we will change the tick marks alongthe x-axis using the 'XTick' string followed by the array describing distribution of marks. Youcan comment out temporarily line 12 by adding the percent sign % before the word set to see thedifference between the default tick marks and the marks generated by the command in line 12.When you are done delete the percent sign you typed in line 12 and click on Save from the Filemenu in the MATLAB Editor/Debugger . Finally, you can also make changes in the title of yourplot. For instance, you can choose the font size used in the title. This is accomplished here byusing function set. It should be obvious from the short discussion presented here that twoMATLAB functions get and set are of great importance in manipulating graphs.

Graphs of the ellipses in question are shown on the next page

graph3

Page 269: #Matlab Sve Pomalo

26

-4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

-12

-10

-8

-6

-4

-2

0

2

4

6

8

10

12

14

x

y

Graphs of (x-3)2/36+(y+2)2/81 = 1 and (x-7)2/4+(y-8)2/36 = 1.

MATLAB has several functions designed for plotting specialized 2-D graphs. A partial list ofthese functions is included here fill , polar, bar, barh, pie, hist, compass, errorbar , stem, andfeather.

In this example function fill is used to create a well-known object

n = -6:6;x = sin(n*pi/6);y = cos(n*pi/6);fill(x, y, 'r')axis('square')title('Graph of the n-gone')text(-0.45,0,'What is a name of this object?')

Function in question takes three input parameters - two arrays, named here x and y. They hold thex- and y-coordinates of vertices of the polygon to be filled. Third parameter is the user-selectedcolor to be used to paint the object. A new command that appears in this short code is the textcommand. It is used to annotate a text. First two input parameters specify text location. Thirdinput parameter is a text, which will be added to the plot.

Graph of the filled object that is generated by this code is displayed below

Page 270: #Matlab Sve Pomalo

27

-1 -0.5 0 0.5 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1Graph of the n-gone

What is a name of this object?

����� ��� �������

MATLAB has several built-in functions for plotting three-dimensional objects. In this subsectionwe will deal mostly with functions used to plot curves in space (plot3), mesh surfaces (mesh),surfaces (surf) and contour plots (contour). Also, two functions for plotting special surfaces,sphere and cylinder will be discussed briefly. I recommend that any time you need help with the3-D graphics you should type help graph3d in the Command Window to learn more aboutvarious functions that are available for plotting three-dimensional objects.

Let r(t) = < t cos(t), t sin(t), t >, -10�� �� t �� 10��, be the space curve. We plot its graph over theindicated interval using function plot3

% Script file graph4.

% Curve r(t) = < t*cos(t), t*sin(t), t >.

t = -10*pi:pi/100:10*pi;x = t.*cos(t);y = t.*sin(t);h = plot3(x,y,t);set(h, 'LineWidth' ,1.25)title( 'Curve u(t) = < t*cos(t), t*sin(t), t >' )h = get(gca, 'Title' );set(h, 'FontSize' ,12)xlabel( 'x' )h = get(gca, 'xlabel' );set(h, 'FontSize' ,12)ylabel( 'y' )h = get(gca, 'ylabel' );

Page 271: #Matlab Sve Pomalo

28

set(h, 'FontSize' ,12)zlabel( 'z' )h = get(gca, 'zlabel' );set(h, 'FontSize' ,12)grid

Function plot3 is used in line 4. It takes three input parameters – arrays holding coordinates ofpoints on the curve to be plotted. Another new command in this code is the zlabel command(see line 4 from the bottom). Its meaning is self-explanatory.

graph4

-40-20

020

40

-40

-20

0

20

40-40

-20

0

20

40

x

Curve u(t) = < t*cos(t), t*sin(t), t >

y

z

Function mesh is intended for plotting graphs of the 3-D mesh surfaces. Before we begin to workwith this function, another function meshgrid should be introduced. This function generates twotwo-dimensional arrays for 3-D plots. Suppose that one wants to plot a mesh surface over the gridthat is defined as the Cartesian product of two sets

x = [0 1 2];y = [10 12 14];

The meshgrid command applied to the arrays x and y creates two matrices

[xi, yi] = meshgrid(x,y)

Page 272: #Matlab Sve Pomalo

29

xi = 0 1 2 0 1 2 0 1 2yi = 10 10 10 12 12 12 14 14 14

Note that the matrix xi contains replicated rows of the array x while yi contains replicatedcolumns of y. The z-values of a function to be plotted are computed from arrays xi and yi.

In this example we will plot the hyperbolic paraboloid z = y2 – x2 over the square –1 �� x �� 1, -1 �� y �� 1

x = -1:0.05:1;y = x;[xi, yi] = meshgrid(x,y);zi = yi.^2 – xi.^2;mesh(xi, yi, zi)axis off

To plot the graph of the mesh surface together with the contour plot beneath the plotted surfaceuse function meshc

meshc(xi, yi, zi)axis off

Page 273: #Matlab Sve Pomalo

30

Function surf is used to visualize data as a shaded surface.

Computer code in the m-file graph5 should help you to learn some finer points of the 3-Dgraphics in MATLAB

% Script file graph5.

% Surface plot of the hyperbolic paraboloid z = y^2 - x^2% and its level curves.

x = -1:.05:1;y = x;[xi,yi] = meshgrid(x,y);zi = yi.^2 - xi.^2;surfc(xi,yi,zi)colormap coppershading interpview([25,15,20])grid offtitle( 'Hyperbolic paraboloid z = y^2 – x^2' )h = get(gca, 'Title' );set(h, 'FontSize' ,12)xlabel( 'x' )h = get(gca, 'xlabel' );set(h, 'FontSize' ,12)ylabel( 'y' )h = get(gca, 'ylabel' );set(h, 'FontSize' ,12)zlabel( 'z' )h = get(gca, 'zlabel' );set(h, 'FontSize' ,12)pause(5)figurecontourf(zi), hold on, shading flat[c,h] = contour(zi, 'k-' ); clabel(c,h)title( 'The level curves of z = y^2 - x^2.' )h = get(gca, 'Title' );set(h, 'FontSize' ,12)

Page 274: #Matlab Sve Pomalo

31

xlabel( 'x' )h = get(gca, 'xlabel' );set(h, 'FontSize' ,12)ylabel( 'y' )h = get(gca, 'ylabel' );set(h, 'FontSize' ,12)

graph5

A second graph is shown on the next page.

Page 275: #Matlab Sve Pomalo

32

5 10 15 20 25 30 35 40

5

10

15

20

25

30

35

40

x

y

The level curves of z = y2 - x2.

-0.8

-0.8

-0.6

-0.6

-0.6

-0.6

-0.4

-0.4

-0.4

-0.4

-0.4

-0.4

-0.2

-0.2

-0.2

-0.2

-0.2

-0.2

0

0

0

0

0

0

0

0

0.2

0.2

0.2

0.2

0.2

0.2

0.4

0.4

0.4

0.4

0.4

0.4

0.6 0.6

0.60.6

0.8 0.8

0.8 0.8

There are several new commands used in this file. On line 5 (again, I do not count the blank linesand the comment lines) a command surfc is used. It plots a surface together with the level linesbeneath. Unlike the command surfc the command surf plots a surface only without the levelcurves. Command colormap is used in line 6 to paint the surface using a user-supplied colors. Ifthe command colormap is not added, MATLAB uses default colors. Here is a list of color mapsthat are available in MATLAB

hsv - hue-saturation-value color map hot - black-red-yellow-white color map gray - linear gray-scale color map bone - gray-scale with tinge of blue color map copper - linear copper-tone color map pink - pastel shades of pink color map white - all white color map flag - alternating red, white, blue, and black color map lines - color map with the line colors colorcube - enhanced color-cube color map vga - windows colormap for 16 colors jet - variant of HSV prism - prism color map cool - shades of cyan and magenta color map autumn - shades of red and yellow color map spring - shades of magenta and yellow color map winter - shades of blue and green color map summer - shades of green and yellow color map

Command shading (see line 7) controls the color shading used to paint the surface. Command inquestion takes one argument. The following

Page 276: #Matlab Sve Pomalo

33

shading flat sets the shading of the current graph to flatshading interp sets the shading to interpolatedshading faceted sets the shading to faceted, which is the default.

are the shading options that are available in MATLAB.

Command view (see line 8) is the 3-D graph viewpoint specification. It takes a three-dimensionalvector, which sets the view angle in Cartesian coordinates.

We will now focus attention on commands on lines 23 through 25. Command figure promptsMATLAB to create a new Figure Window in which the level lines will be plotted. In order toenhance the graph, we use command contourf instead of contour. The former plots filled contourlines while the latter doesn't. On the same line we use command hold on to hold the current plotand all axis properties so that subsequent graphing commands add to the existing graph. Firstcommand on line 25 returns matrix c and graphics handle h that are used as the input parametersfor the function clabel, which adds height labels to the current contour plot.

Due to the space limitation we cannot address here other issues that are of interest forprogrammers dealing with the 3-D graphics in MATLAB. To learn more on this subject theinterested reader is referred to [1-3] and [5].

����� ������

In addition to static graphs discussed so far one can put a sequence of graphs in motion. In otherwords, you can make a movie using MATLAB graphics tools. To learn how to create a movie, letus analyze the m-file firstmovie

% Script file firstmovie.

% Graphs of y = sin(kx) over the interval [0, pi],% where k = 1, 2, 3, 4, 5.

m = moviein(5);x = 0:pi/100:pi;for i=1:5 h1_line = plot(x,sin(i*x)); set(h1_line, 'LineWidth' ,1.5, 'Color' , 'm' ) grid title( 'Sine functions sin(kx), k = 1, 2, 3, 4, 5' ) h = get(gca, 'Title' ); set(h, 'FontSize' ,12) xlabel( 'x' ) k = num2str(i); if i > 1 s = strcat( 'sin(' ,k, 'x)' ); else s = 'sin(x)' ; end ylabel(s) h = get(gca, 'ylabel' ); set(h, 'FontSize' ,12) m(:,i) = getframe; pause(2)

Page 277: #Matlab Sve Pomalo

34

endmovie(m)

I suggest that you will play this movie first. To this aim type firstmovie in the CommandWindow and press the Enter or Return key. You should notice that five frames are displayedand at the end of the "show" frames are played again at a different speed.

There are very few new commands one has to learn in order to animate graphics in MATLAB.We will use the m-file firstmovie as a starting point to our discussion. Command moviein, online 1, with an integral parameter, tells MATLAB that a movie consisting of five frames iscreated in the body of this file. Consecutive frames are generated inside the loop for . Almost allof the commands used there should be familiar to you. The only new one inside the loop isgetframe command. Each frame of the movie is stored in the column of the matrix m. With thisremark a role of this command should be clear. The last command in this file is movie(m). Thistells MATLAB to play the movie just created and saved in columns of the matrix m.

Warning. File firstmovie cannot be used with the Student Edition of MATLAB, version 4.2.This is due to the matrix size limitation in this edition of MATLAB. Future release of the StudentEdition of MATLAB, version 5.3 will allow large size matrices. According to MathWorks, Inc.,the makers of MATLAB, this product will be released in September 1999.

����� �������� ������ ��� � �����

MATLAB has some functions for generating special surfaces. We will be concerned mostly withtwo functions- sphere and cylinder.

The command sphere(n) generates a unit sphere with center at the origin using (n+1)2 points. Iffunction sphere is called without the input parameter, MATLAB uses the default value n = 20.You can translate the center of the sphere easily. In the following example we will plot graph ofthe unit sphere with center at (2, -1, 1)

[x,y,z] = sphere(30);surf(x+2, y-1, z+1)

Function sphere together with function surf or mesh can be used to plot graphs of spheres ofarbitrary radii. Also, they can be used to plot graphs of ellipsoids. See Problems 25 and 26.

Page 278: #Matlab Sve Pomalo

35

Function cylinder is used for plotting a surface of revolution. It takes two (optional) inputparameters. In the following command cylinder(r, n) parameter r stands for the vector thatdefines the radius of cylinder along the z-axis and n specifies a number of points used to definecircumference of the cylinder. Default values of these parameters are r = [1 1] and n = 20. Agenerated cylinder has a unit height.

The following command

cylinder([1 0])title('Unit cone')

-1-0.5

00.5

1

-1

-0.5

0

0.5

10

0.2

0.4

0.6

0.8

1

Unit cone

plots a cone with the base radius equal to one and the unit height.

In this example we will plot a graph of the surface of revolution obtained by rotating the curver(t) = < sin(t), t >, 0 �� t �� �� about the y-axis. Graphs of the generating curve and the surface ofrevolution are created using a few lines of the computer code

t = 0:pi/100:pi;r = sin(t);plot(r,t)

Page 279: #Matlab Sve Pomalo

36

0 0.2 0.4 0.6 0.8 10

0.5

1

1.5

2

2.5

3

3.5

cylinder(r,15)shading interp

����! "���� #��$�% �������

In this section we deal with printing MATLAB graphics. To send a current graph to the printerclick on File and next select Print from the pull down menu. Once this menu is open you may

Page 280: #Matlab Sve Pomalo

37

wish to preview a graph to be printed be selecting the option PrintPreview… first. You can alsosend your graph to the printer using the print command as shown below

x = 0:0.01:1;plot(x, x.^2)print

You can print your graphics to an m- file using built-in device drivers. A fairly incomplete list ofthese drivers is included here:

-depsc Level 1 color Encapsulated PostScript-deps2 Level 2 black and white Encapsulated PostScript-depsc2 Level 2 color Encapsulated PostScript

For a complete list of available device drivers see [5], Chapter 7, pp. 8-9.

Suppose that one wants to print a current graph to the m-file Figure1 using level 2 colorEncapsulated PostScript. This can be accomplished by executing the following command

print –depsc2 Figure1

You can put this command either inside your m-file or execute it from within the CommandWindow.

Page 281: #Matlab Sve Pomalo

38

"���������

[1] D. Hanselman and B. Littlefield, Mastering MATLAB 5. A Comprehensive Tutorial and Reference, Prentice Hall, Upper Saddle River, NJ, 1998.

[2] P. Marchand, Graphics and GUIs with MATLAB, Second edition, CRC Press, Boca Raton, 1999.

[3] K. Sigmon, MATLAB Primer, Fifth edition, CRC Press, Boca Raton, 1998.

[4] Using MATLAB, Version 5, The MathWorks, Inc., 1996.

[5] Using MATLAB Graphics, Version 5, The MathWorks, Inc., 1996.

Page 282: #Matlab Sve Pomalo

39

���-�� �

In Problems 1- 4 you cannot use loops for or while.

1. Write MATLAB function sigma = ascsum(x) that takes a one-dimensional array x of realnumbers and computes their sum sigma in the ascending order of magnitudes.Hint: You may wish to use MATLAB functions sort, sum, and abs.

2. In this exercise you are to write MATLAB function d = dsc(c) that takes a one-dimensional array of numbers c and returns an array d consisting of all numbers in the array c with all neighboring duplicated numbers being removed. For instance, if c = [1 2 2 2 3 1], then d = [1 2 3 1].

3. Write MATLAB function p = fact(n) that takes a nonnegative integer n and returns value ofthe factorial function n! = 1*2* … *n. Add an error message to your code that will beexecuted when the input parameter is a negative number.

4. Write MATLAB function [in, fr] = infr(x) that takes an array x of real numbers and returnsarrays in and fr holding the integral and fractional parts, respectively, of all numbers in thearray x.

5. Given an array b and a positive integer m create an array d whose entries are those in the array b each replicated m-times. Write MATLAB function d = repel(b, m) that generates array d as described in this problem.

6. In this exercise you are to write MATLAB function d = rep(b, m) that has morefunctionality than the function repel of Problem 5. It takes an array of numbers b and thearray m of positive integers and returns an array d whose each entry is taken from the array band is duplicated according to the corresponding value in the array m. For instance, ifb = [ 1 2] and m = [2 3], then d = [1 1 2 2 2].

7. A checkerboard matrix is a square block diagonal matrix, i.e., the only nonzero entries are in the square blocks along the main diagonal. In this exercise you are to write MATLAB function A = mysparse(n) that takes an odd number n and returns a checkerboard matrix as shown below

A = mysparse(3)

A = 1 0 0 0 1 2 0 3 4

A = mysparse(5)

Page 283: #Matlab Sve Pomalo

40

A = 1 0 0 0 0 0 1 2 0 0 0 3 4 0 0 0 0 0 2 3 0 0 0 4 5

A = mysparse(7)

A = 1 0 0 0 0 0 0 0 1 2 0 0 0 0 0 3 4 0 0 0 0 0 0 0 2 3 0 0 0 0 0 4 5 0 0 0 0 0 0 0 3 4 0 0 0 0 0 5 6

First block in the upper-left corner is the 1-by-1 matrix while the remaining blocks are all 2-by-2.

8. The Legendre polynomials Pn(x), n = 0, 1, … are defined recursively as follows

nPn(x) = (2n-1)xPn -1 – (n-1)Pn-2(x), n = 2, 3, … , P0(x) = 1, P1(x) = x.

Write MATLAB function P = LegendP(n) that takes an integer n – the degree of Pn(x) and returns its coefficient stored in the descending order of powers.

9. In this exercise you are to implement Euclid's Algorithm for computing the greatest commondivisor (gcd) of two integer numbers a and b:

gcd(a, 0) = a, gcd(a, b) = gcd(b, rem(a, b)).

Here rem(a, b) stands for the remainder in dividing a by b. MATLAB has function rem. Write MATLAB function gcd = mygcd(a,b) that implements Euclid's Algorithm.

10. The Pascale triangle holds coefficients in the series exapansion of (1 + x)n, where n = 0, 1, 2, … . The top of this triangle, for n = 0, 1, 2, is shown here

11 1

1 2 1

Write MATLAB function t = pasctri(n) that generates the Pascal triangle t up to the level n. Remark. Two-dimensional arrays in MATLAB must have the same number of columns in each row. In order to aviod error messages you have to add a certain number of zero entries to the right of last nonzero entry in each row of t but one. This

t = pasctri(2)

Page 284: #Matlab Sve Pomalo

41

t = 1 0 0 1 1 0

1 2 1

is an example of the array t for n = 2.

11. This is a continuation of Problem 10. Write MATLAB function t = binexp(n) thatcomputes an array t with row k+1 holding coefficients in the series expansion of (1-x)^k ,k = 0, 1, ... , n, in the ascending order of powers. You may wish to make a call from withinyour function to the function pasctri of Problem 10. Your output sholud look like this (case n = 3)

t = binexp(3)

t = 1 0 0 0 1 -1 0 0 1 -2 1 0 1 -3 3 -1

12. MATLAB come with the built-in function mean for computing the unweighted arithmeticmean of real numbers. Let x = {x1, x2, … , xn} be an array of n real numbers. Then

��

�n

knx

nxmean

1

1)(

In some problems that arise in mathematical statistics one has to compute the weightedarithmetic mean of numbers in the array x. The latter, abbreviated here as wam, is defined asfollows

��n

kk

n

kkk

w

xw

wxwam

1

1),(

Here w = {w1, w2, … , wn} is the array of weights associated with variables x. The weightsare all nonnegative with w1 + w2 + … + wn > 0.

In this exercise you are to write MATLAB function y = wam(x, w) that takes the arrays of variables and weights and returns the weighted arithmetic mean as defined above. Add three error messages to terminate prematurely execution of this file in the case when:

� arrays x and w are of different lengths� at least one number in the array w is negative� sum of all weights is equal to zero.

Page 285: #Matlab Sve Pomalo

42

13. Let w = {w1, w2, … , wn} be an array of positive numbers. The weighted geometric mean,abbreviated as wgm, of the nonnegative variables x = {x1, x2, … , xn} is defined as follows

nwn

ww xxxwxwgm ...),( 21

21�

Here we assume that the weights w sum up to one. Write MATLAB function y = wgm(x, w) that takes arrays x and w and returns the weighted geometric mean y of x with weights stored in the array w. Add three error messages to terminate prematurely execution of this file in the case when:

� arrays x and w are of different lengths� at least one variable in the array x is negative� at least one weight in the array w is less than or equal to zero

Also, normalize the weights w, if necessary, so that they will sum up to one.

14. Write MATLAB function [nonz, mns] = matstat(A) that takes as the input argument a real matrix A and returns all nonzero entries of A in the column vector nonz. Second output parameter mns holds values of the unweighted arithmetic means of all columns of A.

15. Solving triangles requires a bit of knowledge of trigonometry. In this exercise you are to write MATLAB function [a, B, C] = sas(b, A, c) that is intended for solving triangles given two sides b and c and the angle A between these sides. Your function should determine remaining two angels and the third side of the triangle to be solved. All angles should be expressed in the degree measure.

16. Write MATLAB function [A, B, C] = sss(a, b, c) that takes three positive numbers a, b, and c. If they are sides of a triangle, then your function should return its angles A, B, and C, in the degree measure, otherwise an error message should be displayed to the screen.

17. In this exercise you are to write MATLAB function dms(x) that takes a nonnegative numberx that represents an angle in the degree measure and converts it to the formx deg. y min. z sec.. Display a result to the screen using commands disp and sprintf .Example:

dms(10.2345)

Angle = 10 deg. 14 min. 4 sec.

18. Complete elliptic integral of the first kind in the Legendre form K(k2), 0 < k2 < 1,

��

�2/

022

2

)(sin1)(

tk

dtkK

cannot be evaluated in terms of the elementary functions. The following algorithm, due to C. F. Gauss, generates a sequence of the arithmetic means {an} and a sequence of the geometric means {bn}, where

Page 286: #Matlab Sve Pomalo

43

a0 = 1, b0 = 21 k�

an = (an-1 + bn-1)/2, bn = 11 �� nn ba n = 1, 2, … .

It is known that both sequences have a common limit g and that an � bn, for all n. Moreover,

K(k2) = g2

Write MATLAB function K = compK(k2) which implements this algorithm. The input parameter k2 stands for k2. Use the loop while to generate consecutive members of both sequences, but do not save all numbers generated in the course of computations. Continue execution of the while loop as long as an – bn � eps, where eps is the machine epsilon

eps

ans = 2.2204e-016

Add more functionality to your code by allowing the input parameter k2 to be an array. Testyour m-file and compare your results with those included here

format long

compK([.1 .2 .3 .7 .8 .9])

ans = 1.61244134872022 1.65962359861053 1.71388944817879 2.07536313529247 2.25720532682085 2.57809211334794

format short

19. In this exercise you are to model one of the games in the Illinois State Lottery. Threenumbers, with duplicates allowed, are selected randomly from the set {0,1,2,3,4,5,6,7,8,9}in the game Pick3 and four numbers are selected in the Pick4 game. Write MATLAB

function winnumbs = lotto(n) that takes an integer n as its input parameter and returns an array winnumbs consisting of n numbers from the set of integers described in this problem. Use MATLAB function rand together with other functions to generate a set of winning numbers. Add an error message that is displayed to the screen when the input parameter is out of range.

Page 287: #Matlab Sve Pomalo

44

20. Write MATLAB function t = isodd(A) that takes an array A of nonzero integers and returns1 if all entries in the array A are odd numbers and 0 otherwise. You may wish to useMATLAB function rem in your file.

21. Given two one-dimensional arrays a and b, not necessarily of the same length. Write MATLAB function c = interleave(a, b) which takes arrays a and b and returns an array c obtained by interleaving entries in the input arrays. For instance, if a = [1, 3, 5, 7] and b = [-2, –4], then c = [1, –2, 3, –4, 5, 7]. Your program should work for empty arrays too. You cannot use loops for or while.

22. Write a script file Problem22 to plot, in the same window, graphs of two parabolas y = x2

and x = y2, where –1 �� x �� 1. Label the axes, add a title to your graph and use command grid . To improve readability of the graphs plotted add a legend. MATLAB has a command legend. To learn more about this command type help legend in the Command Window and press Enter or Return key.

23. Write MATLAB function eqtri(a, b) that plots the graph of the equilateral triangle with twovertices at (a,a) and (b,a). Third vertex lies above the line segment that connects points (a, a)and (b, a). Use function fill to paint the triangle using a color of your choice.

24. In this exercise you are to plot graphs of the Chebyshev polynomial Tn(x) and its first orderderivative over the interval [-1, 1]. Write MATLAB function plotChT(n) that takes as theinput parameter the degree n of the Chebyshev polynomial. Use functions ChebT and derp,included in Tutorial 2, to compute coefficients of Tn(x) and T' n(x), respectively. Evaluateboth, the polynomial and its first order derivative at x = linspace(-1, 1) using MATLABfunction polyval. Add a meaningful title to your graph. In order to improve readability ofyour graph you may wish to add a descriptive legend. Here is a sample output

plotChT(5)

-1 -0.5 0 0.5 1-10

-5

0

5

10

15

20

25

Chebyshev polynomial T5(x) and its first order derivative

x

y

polynomialderivative

Page 288: #Matlab Sve Pomalo

45

25. Use function sphere to plot the graph of a sphere of radius r with center at (a, b, c). Use MATLAB function axis with an option 'equal'. Add a title to your graph and save your computer code as the MATLAB function sph(r, a, b, c).

26. Write MATLAB function ellipsoid(x0, y0, z0, a, b, c) that takes coordinates (x0, y0, z0) of the center of the ellipsoid with semiaxes (a, b, c) and plots its graph. Use MATLAB functions sphere and surf. Add a meaningful title to your graph and use function axis('equal').

27. In this exercise you are to plot a graph of the two-sided cone, with vertex at the origin, andthe-axis as the axis of symmetry. Write MATLAB function cone(a, b), where the inputparameters a and b stand for the radius of the lower and upper base, respectively. UseMATLAB functions cylinder and surf to plot a cone in question. Add a title to your graphand use function shading with an argument of your choice. A sample output is shown below

cone(1, 2)

-2-1

01

2

-2

-1

0

1

2-0.5

0

0.5

x

Two-sided cone with the radii of the bases equal to1 and2

y

z

28. The space curve r(t) = < cos(t)sin(4t), sin(t)sin(4t), cos(4t) >, 0 �� t �� 2��, lies on the surfaceof the unit sphere x2 + y2 + z2 = 1. Write MATLAB script file curvsph that plots both thecurve and the sphere in the same window. Add a meaningful title to your graph. UseMATLAB functions colormap and shading with arguments of your choice. Add theview([150 125 50]) command.

29. This problem requires that the professional version 5.x of MATLAB is installed. In this exercise you are to write the m-file secondmovie that crates five frames of the surface z = sin(kx)cos(ky), where 0 �� x, y �� �� and k = 1, 2, 3, 4, 5. Make a movie consisting of the

Page 289: #Matlab Sve Pomalo

46

frames you generated in your file. Use MATLAB functions colormap and shading with arguments of your choice. Add a title, which might look like this Graphs of z = sin(kx)*cos(ky), 0 <= x, y <= ��, k =1, 2, 3, 4, 5. Greek letters can be printed in the title of a graph using TeX convention, i.e., the following \pi is used to print the Greek letter �. Similarly, the string \alpha will be printed as �.

Page 290: #Matlab Sve Pomalo

PROGRAM IZ RAČUNALNE MATEMATIKE MATLAB

PRIMJER: a_mat %PRIMJER 1 %Korijeni kvadratne jednadzbe a=2; b=10; c=12; disp('Korijeni kvadratne jednadzbe:') p = [c b a]; gfpretty(p) disp('iznose:') u =-b/(2*a); v =sqrt(b ^2-4*a*c)/(2*a); x1=u+v

x2=u-v U prvome primjeru ispisujemo ne ekran unaprijed zadanu kvadratnu jednadžbu i izračunavamo njene korijene. Skriptu započinjemo sa dva komentara koji se u Matlabu označavaju sa znakom %. Sve što se nalazi iza toga znaka u istom redu, Matlab smatra komentarom i ne obazire se na njega. Potom definiramo tri varijable a, b i c te njihove vrijednosti; one predstvljaju koeficijente kvadratne jednadžbe. Ako ne želimo da se u prozoru Matlaba ispisuje vrijednost definirane varijable, na kraju reda stavljamo oznaku točka-zarez. Potom slijedi funkcija disp pomoću koje ispisujemo tekst na ekran. Ispisuje se tekst koji je unutar jednostrukih navodnika unutar zagrade. Potom slijedi definiranje vektora p koji se sastoji od unaprijed definiranih varijabli a, b i c, ali napisanih obrnutim redom. To radimo zato što kasnije korištena funkcija gfpretty ispisuje taj vektor obrnuto. Kako ne želimo niti da se ispisuje vrijednost toga vektora na ekran, iza njegove definicije stavljamo točku-zarez. U sljedećem redu koristimo funkciju gfpretty kojom ispisujemo simbolički kvadratnu jednadžbu da bi ju lakše dočarali korisniku skripte. Na kraju pomoću još jedne naredbe disp ispisujemo dodatni tekst te potom sa dvije poznate formule računamo korijene x1 i x2 koje odmah ispisujemo na ekran. PRIMJER: b_mat %PRIMJER 2 %Korijeni kvadratne jednadze unesene sa strane korisnika a=input('Koeficijent a:'); b=input('Koeficijent b:'); c=input('Koeficijent c:');

Page 291: #Matlab Sve Pomalo

disp('Vas polinom ima koeficijenete:') p = [a b c] fprintf(' ') for i=2:-1:0 fprintf('X^%1.0f ',i) end disp(' ') disp(' ') disp('Korijeni vase kvadratne jednadzbe iznose:') roots(p)

U drugome primjeru ćemo također izračunavati vrijednosti kvadratne jednadžbe, ali ovaj puta će se unositi njeni koeficijenti sa strane korisnika. Na početku ponovo definiramo varijable a, b i c ali sada koristimo funkciju input koja postavlja upit za unos broja. Prije samog upita ispisuje tekst unutar navodnika da bi korisnik znao što treba unijeti. Na taj način korisnik sam određuje vrijednosti koeficijenata. Slijedi sastavljanje vektora p od koeficijenata i njegovo ispisivanje na ekran. Definirao se na način da su se koeficijenti nanizali, određenim redom unutar uglate zagrade ta se potom odmah spisao jer iza njegove definicije nismo stavili znak točka-zarez. Potom dolazi funkcija fprint koja vrši ispisivanje na ekran, ali za razliku od funkcije disp ima više mogućnosti. For petlja služi da bi ispisali na ekran dodatan red teksta koji bi dočarao izgled polinoma tj. postavio bi ispod svakog koeficijenta faktor x i odgovarajuću potenciju. Petlja broji od 2, najveće potencije, prema 0, zadnjem faktoru polinoma. Za ispis ponovo koristimo funkciju fprintf koja ispisuje zadane vrijednosti u svome redu tj. ne preskače u sljedeći kao što to čini funkcija disp. Ona ispisuje znak X^ i potom broj koji se nalazi u varijabli i izvan jednostrukih navodnika. Ispis tj. poziv za ispis toga broja je određen znakom %; iza toga znaka piše 1.0f kao format u kojemu će se broj ispisati. Format će biti float jer je to određeno znakom f i ispisati će se sa jednom znamenkom i sa nula decimalnih mjesta. Nadalje ima još par funkcija disp za ispis te funkcija roots kojom se računaju korijeni polinoma navedenog unutar zagrade, u našem slučaju vektor p. Iza funkcije roots nema točke-zarez te se rezultat ispisuje na ekran. PRIMJER: c_mat %PRIMJER 3 %Naprezanja i funkcija fprintf Fn=input('Sila koja djeluje okomito na element [N]:'); Ft=input('Sila koja djeluje tangencijalno na element [N]:'); M=input('Moment koji djeluje oko osi x [Nm]:'); a=input('Sirina elementa [m]:'); b=input('Visina elementa [m]:'); A=a*b; W=(a*(b^2))/6; Sn=Fn/A; Tt=Ft/A; Sm=M/W; Snu=Sn+Sm; Su=(Snu^2+3*(Tt^2))^(1/2);

Page 292: #Matlab Sve Pomalo

fprintf('\nNormalno naprezanje u elementu iznosi %7.0f N/m^2 ili %5.4e MPa \n', Sn , Sn*10^(-6)) fprintf('Tangencijalno naprezanje u elementu iznosi %7.0f N/m^2 ili %5.4e MPa \n', Tt, Tt*10^(-6)) fprintf('Naprezanje uslijed savijanja iznosi %7.0f N/m^2 ili %5.4e MPa \n', Sm , Sm*10^(-6)) fprintf('Ukupno naprezanje iznosi %7.0f N/m^2 ili %5.4e MPa \n', Su , Su*10^(-6))

U trećem primjeru koristimo novu funkciju fprintf za ispis na ekran koja omogućava nešto više slobode od prethodne disp. Na početku opet definiramo vrijednosti novih varijabli pomoću funkcije input. Poslije unašanja vrijednosti varijabli, Matlab preko postavljenih relacija izračunava potrebne vrijednosti. Potom slijedi funkcija fprintf za ispis. U našem slučaju ona ispisuje tekst unutar navodnika na ekran, pritom pazi da li je stavljen znak \n te u slučaju da je, prebacuje ispis u novi red (kao što se događa prilikom pritiska na tipku enter). Nadalje pazi kada dođe do znaka % je iza njega je definicija ispisa varijable. Tako prvo imamo oznaku %10.0f koja govori Matlabu da prvu varijablu koju nađe iza završetka navodnika ispiše kao float (decimalni broj) od ukupnu 10 znakova (uključujući decimalnu točku) sa 0 decimalnih mjesta. Poslije toga imamo malo teksta koji opisuje mjernu jedinicu tog broja koji će se ispisati pa onda opet znak %5.4e gdje e govori da drugi broj koji će naći nakon završetka navodnika ispiše u znanstvenoj notaciji tj. da koristi eksponente. Pritom će ispisati broj u obliku 7 znamenaka (uključujući decimalnu točku) te sa 4 decimalna mjesta. PRIMJER: d_mat %PRIMJER 4 %Kompleksni brojevi a=input('Unesite realan dio kompleksnog broja: '); b=input('Unesite kompleksan dio kompleksnog broja: '); disp('Vas broj ima oblik:') z=a+b*i disp('Evo sto ja znam o tome broju:') r=abs(z); thetarad=angle(z); theta=(180/pi)*thetarad; fprintf('\nApsolutna vrijednost toga broja je: %f\n', r) fprintf('Kut koji vektor z zatvara sa realnom osi: %f radijana, odnosno %f stupnjeva. \n', thetarad, theta) fprintf('I mozemo ga zapisati u Eulerovoj notaciji kao: %f*e^(j%f)', r, thetarad)

U četvrtom primjeru ćemo vidjeti kako možemo raditi sa imaginarnim brojevima. Na početku definiramo vrijednosti varijabli a i b pomoću funkcije input, zatim od tih dviju vrijednosti ''slažemo'' broj z te ga ispisujemo na ekran. Potom računamo nekoliko

Page 293: #Matlab Sve Pomalo

veličina koje obilježavaju taj broj kao što je njegova apsolutna vrijednost i kut koji zatvara s x osi te vrijednost kuta u stupnjevima. To radimo sa funkcijama abs i angle koje su sastavni dio Matlaba. Na kraju, sve izračunate vrijednosti ispisujemo na ekran pomoću funkcija fprintf i u zadnjem redu ''slažemo'' isti taj broj u Eulerovom načinu zapisivanja. PRIMJER: e_mat %PRIMJER 5 %Operacije s kompleksnim brojevima a=0; b=0; V=1; n=input('Koliko imaginarnih brojeva zelite unijeti? '); fprintf('\n') for i=1:n Z(i,1)=input('Realan dio: '); Z(i,2)=input('Imaginaran dio: '); fprintf('\n') end fprintf('\nVasi brojevi izgledaju:\n') for i=1:n U(i,1)=Z(i,1)+Z(i,2)*j; end U disp('Zbroj svih vasih kompleksnih brojeva iznosi:') for i=1:n a=Z(i,1)+a; b=Z(i,2)+b; end Zuk=a+b*j disp('Umnozak vasih brojeva iznosi:') for i=1:n V=U(i,1)*V; end V

U petom primjeru ćemo vidjeti kako radi for petlja i kako možemo raditi sa brojevima unutar matrice. Na početku skripte definiramo početne vrijednosti varijabli a, b i V. Potom pomoću funkcije input definiramo vrijednost varijable n koja označava broj kompleksnih brojeva koje korisnik želi unijeti. Potom dolazi naredba fprintf kojoj ima zadatak da preskoči s ispisom u sljedeći red, tek zbog estetike programa. Nastavljamo sa for petljom koja broji od 1 do broja n koji je korisnik unio. Kako nismo označili korak brojanja, on je po defaultu jednak 1. Nadalje se brojevi koje korisnik upisuje ''slažu'' u matricu Z koja ima dvije kolone i redova onoliko koliko će se unijeti brojeva. Unos tih brojeva se vrši naravno funkcijom input a njihov smještaj u matrici se određuje ''koordinate'' u zagradi. Na kraju petlje slijedi još jedna funkcija fprintf za estetiku. Dalje slijedi ispis svih kompleksnih brojeva koje je korisnik unio. To vršimo na taj način da elemente iz matrice

Page 294: #Matlab Sve Pomalo

Z slažemo u novu matricu U koja ima jednu kolonu i redova koliko i kompleksnih brojeva; zapravo na taj način predstavlja vektor. Prilikom ''slaganja'' matrice U tj. prilikom formiranja kompleksnih brojeva, svakom imaginarnom dijelu u broju se pridodaje imaginarna jedinica. Pritom je korištena for petlja. Na kraju se ispisuje vrijednost matrice U da bi korisnik mogao provjeriti da li je dobro upisao sve elemente. U sljedećoj for petlji se ti kompleksni brojevi zbrajaju i to na taj način da se iz matrice Z posebno zbroje svi (realni) brojevi u prvoj koloni i posebno (imaginarni) brojevi u drugoj koloni. Kada petlja završi, ispisuje se vrijednost toga zbroja. Na kraju imamo ponovo for petlju u kojoj se množi vrijednost varijable V sa svakim članom vektora U; tako dobivamo ukupni umnožak svih kompleksnih brojeva. Potom se krajnja vrijednost varijable V ispisuje. PRIMJER: f_mat %PRIMJER 6 %Rotacije, konjugiranje i crtanje vektora a=input('Unesite realan dio kompleksnog broja: '); b=input('Unesite imaginaran dio komplesnog broja: '); disp('Vas kompleksan broj izgleda:') z=a+b*i disp('Njegov konjugirano kompleksni broj je:') zconj=conj(z) fi=input('Unesite kut u stupnjevima za koji zelite zakrenuti vektor: '); firad=(pi/180)*fi r=abs(z); fi0=angle(z); fikon=fi0+firad; disp('Poslije rotacije broj izgleda:') zkon=r*cos(fikon)+j*r*sin(fikon) disp('Graficki prikazano, to izgleda:') hold on; axis on; grid on; plot(z,'b*'); plot(zconj,'g+'); plot(zkon,'r.'); compass(z); compass(zconj); compass(zkon); xlabel('Realna os '); ylabel('Imaginarna os '); title('Kompleksni broj ');

U šestome primjeru ćemo vidjeti još par funkcija koje se odnose na kompleksne brojeve i pritom ih nacrtati u grafu. Početni dio skripte je već poznat i njime definiramo kompleksni broj koji unosi korisnik. Potom ispisujemo na ekran konjugirano-kompleksni broj broja koji je korisnik unio.

Page 295: #Matlab Sve Pomalo

Njegovu vrijednost dobivamo funkcijom conj i spremamo u varijablu zconj. Potom opet otvaramo upit za korisnika kojim definira kut za koji želi zakrenuti vektor koji je definirao. Kut koji unosi je u stupnjevima te ga stoga pretvaramo u radijane jednostavnom transformacijom i taj podatak spremamo u varijablu firad. Dalje određujemo apsolutnu vrijednost kompleksnog broja r i kut koji zatvara sa realnom osi fi0. Dobiveni kut fi0 je u radijanima te ga ne trebamo pretvarati već ga jednostavno pribrojimo kutu koji je korisnik definirao. Na taj način smo dobili konačan kut fikon pod kojim leži zakrenuti vektor. Pomoću toga kuta i apsolutne vrijednosti unesenog kompleksnog broja izračunamo konačan izraz zakrenutog vektora, spremimo ga u varijablu zkon i ispišemo na ekran. Kada smo sve izračunali, pristupamo crtanju grafa. Prva naredba je hold on kojom određujemo da se prilikom iscrtavanja novih objekata ne brišu stari. Da nismo ''uključili'' tu opciju tj. podesili ju na on, ona bi po defaultu bila namještena na off i prilikom iscrtavanja novih objekata, stari bi se brisali. Dalje imamo funkciju axis on kojom uključujemo iscrtavanje osi i njihovih naziva. Funkcijom grid on uključujemo mrežu koja se iscrtava unutar grafa da bi olakšala određivanje vrijednosti. Potom slijede naredbe plot kojima se vrši iscrtavanje točke koja je određena koordinatama kompleksnog broja tj njegovim realnim i imaginarnim dijelom. Unutar naredbe plot se definira broj koji se iscrtava npr. z i potom, odvojeno zarezom, boja koja se označava prvim slovom njenog imena (b – blue, r – red, g – green …) i oznaka kojom će se označiti točka (*, +, . itd.). Dosadašnji dio iscrtava samo točku dok za cijelu strelicu tj. vektor trebamo dodati još jednu naredbu a to je compass i označiti za koji broj to vrijedi. Na samome kraju definiramo nazive za x i y os funkcijama xlabel i ylabel te naziv grafa funkcijom title. PRIMJER: g_mat %PRIMJER 7 %Malo sinusiode A=input('Unesite vrijednost amplitude: '); FI=input('Pocetni fazni kut s predznakom: '); FIrad=(pi/180)*FI; d=input('Prigusna konstanta: '); t=linspace(0,10,1000); x=A*cos(2*pi*t+FIrad); j=exp(-d*t); for u=1:1000 y(1,u)=(x(1,u))*(j(1,u)); end hold on; plot(t,y); hold on; axis on; grid on; title('Kosinusoida ') ylabel('Amplituda') xlabel('Vrijeme (s)')

Page 296: #Matlab Sve Pomalo

U sedmome primjeru ćemo crtati koosinusoidu prema unesenim parametrima amplitude, početnog faznog kuta i prigušenja. Odmah na početku korisnik unosi potrebne parametre koji se spremaju u varijbale A, FI, d; kutevi koji korisnik unosiu varijablu FI su u stupnjevima, tako da jednostavnom transformacijom ih prebacujemo u radijane kojima Matlab barata. Nadalje, kreiramo vektor t sa 1000 komponenata koji predstavlja diskretizirano vrijeme od 0-10s. Zatim pišemo funkciju kosinus čije će se vrijednosti za svaki vremenski trenutak t spremati u varijablu x. Iza nje definiramo varijablu j koja sadržava vrijednosti prigušenja. U for petlji, množimo vrijednost po vrijednost vektora x sa vrijednosti j da bi dobili ukupnu vrijednost prigušene funkcije kosinus i spremili ju potom u varijablu y. Na kraju slijede funkcije za iscrtavanje grafa. PRIMJER: h_mat %PRIMJER 8 %Malo o polinomima stanje=1; n=input('Koji red polinoma zelite? '); disp('Unesite koeficijene redom, pocevsi od najvece potencije.') fprintf('\n') for i=n+1:-1:1 A(1,i)=input('Koeficijent: '); B(1,n+2-i)=A(1,i); end fprintf('\n') for i=1:n+1 if A(1,i)<0 stanje = 0; end end if stanje == 0 fprintf('\n') else disp('Vas polinom izgleda:') gfpretty(A) end fprintf('\n') x=input('U kojoj tocci x zelite izracunati vrijednost polinoma Y? '); disp('Vrijednost u tj tocci iznosi:') y=polyval(A,(x)) s=linspace(-1.5*abs(x),1.5*abs(x),100); z=polyval(A,s); axis on; grid on; hold on; plot(s,z) plot(x,y,'r*') title ('Polinom') xlabel('x') ylabel('y')

Page 297: #Matlab Sve Pomalo

U osmome primjeru ćemo baratati s polinomom, izračunati mu vrijednost u odabranoj točci te ga potom iscrtati. Na početku definiramo vrijednost varijable stanje kao 1. To činimo zato što funkcija za lijep ispis polinoma gfpretty ne može baratati sa negativnim koeficijentima, pa ćemo na određenom mjestu provjeravati stanje varijable stanje kako bi vidjeli da li polinom koji je korisnik unio ima negativni koeficijent. Iza toga, određujemo vrijednost varijable n pomoću funkcije input u koju se zapisuje red polinoma. Funkcija fprintf služi samo za ubacivanje proreda i estetike programa. Dalje krećemo sa for petljom koja broji od 1 prema n+1; na taj način upisujemo u vektor A koeficijente polinoma od onoga s najvećom potencijom, prema onome sa najmanjom. Odmah uz definiciju vektora A, definiramo i vektor B, u koji upisujemo iste te elementa, ali od kraja prema početku. To radimo zato da bi kasnije sa funkcijom gpretty točno ispisali polinom. U sljedećoj for petlji brojimo od 1 pa do n+1 a kako korak nije naveden, od je po defaultu jednak 1. Potom pomoću if petlje za svaki broj unutar vektora A provjeravamo da li je manji od 0; u slučaju da je u varijablu stanje se zapisuje 0. Potom slijedi zadnja if petlja u kojoj se provjerava da li je vrijednost varijable stanje jednaka 0, ako je znači da postoji negativni koeficijent u polinomu, a kako funkcija gfpretty ne može raditi sa negativnim koeficijentima, ispisujemo samo prazan red. U slučaju da je vrijednost unutar varijable jednaka 1, znači svi su koeficijenti pozitivni i ispisuje se polinom ne ekran pomoću funkcije gfpretty. Slijedi unos vrijednosti u varijablu x funkcijom input. Broj koji se unosi predstavlja broj u kojemu želimo izračunati vrijednost polinoma. Računanje vrijednosti se lako izvrši funkcijom polyval. Kada smo to ispisali, slijedi crtanje polinoma i točke u kojoj se izračunala njegova vrijednost. Prvo definiramo vektor čije će se vrijednosti stavljati na x os tj. predstavljati će područje iscrtavanja polinoma. Područje iscrtavanja je unutar brojeva koji su 50% veći od tražene vrijednosti za izračunavanje polinoma na negativnoj i pozitivnoj strani osi x i podijeljeno je na 100 jednakih jedinica. Potom se u varijablu z spremaju izračunate vrijednosti polinoma za svaki broj iz područja iscrtavanja. Ostale funkcije su poznate, jedino što u funkciji plot za crtanje polinom moramo prvo navesti vrijednosti po x osi a to su brojevi iz varijable s i vrijednosti po y osi a to su brojevi iz varijable z. PRIMJER: i_mat %PRIMJER 9 %Polinomi, derivacija n=input('Koji stupanj polinoma zelite? '); fprintf('\n') disp('Upisite koeficijente polinoma, pocevsi od najveceg.') for i=1:n+1 p(1,i)=input('Unesite koeficijent: '); end fprintf('\n') disp('Vas polinom ima koeficijenete:') p fprintf(' ') for i=n:-1:0 fprintf('X^%1.0f ',i) end

Page 298: #Matlab Sve Pomalo

fprintf('\n') fprintf('\n') d=input('Koju derivaciju zelite? '); while d<1 d=input('Nemoguca derivacija! Unesite novu: '); end fprintf('\n') fprintf('%1.0f derivacija tog polinoma je:', d) pd=p; for i=1:d pd=polyder(pd); end pd fprintf(' ') for i=n-d:-1:0 fprintf('X^%1.0f ',i) end

U devetom primjeru ćemo pogledati kako možemo derivirati polinom. Skripta počinje definiranjem polinoma kao što je već obrađeno u prošlim primjerima. Potom slijedi for petlja koja služi za ukrašeni ispis polinoma, na poznati način se ispod ispisanog vektora p ispiše varijabla x i njena potencija. Petlja for broji od najveće potencije n pa sa korakom –1 do 0; za svaki ispisani znak X^ petlja ispiše i odgovarajući broj koji je zapisan u varijabli i smještenoj izvan navodnika. Broj se poziva znakom %1.0f što označava da se ispisuje sa jednom znamenkom, bez decimalnih mjesta kao float. Slijedi unos derivacije, naravno naredbom input i njeno spremanje u varijablu d. U petlji while se provjerava da li je slučajno upisani negativni broj ili 0, ako je traži se ponovni upis derivacije. Nadalje, treba izračunati zadanu derivaciju. To radimo na sljedeći način: u novu varijablu pd stavljamo vrijednost vektora p kao početnu vrijednost, potom krećemo sa for petljom koja broji od 1 do broja zadane i pritom za svaki taj broj se derivira vrijednost varijable pd funkcijom polyder. Ako je potrebno više derivacija, onda se derivira vrijednost prve derivacije, pa druge i tako redom do one tražene. Na kraju slijedi ispis derivacije i to naravno iz varijable pd. PRIMJER: j_mat %PRIMJER 10 %Put, brzina, ubrzanje, integracija v0=input('Unesite pocetnu brzinu [m/s]: '); a=input('Unesite ubrzanje [m/s^2]: '); disp('Funkcija brzine o vremenu:') V=polyint(A,v0) fprintf(' t^1 t^0\n') fprintf('\n') s0=input('Unesite pocetni polozaj [m]: '); disp('Funkcija puta o vremenu:') S=polyint(V,s0)

Page 299: #Matlab Sve Pomalo

fprintf(' ') for i=2:-1:0 fprintf('t^%1.0f ',i) end t2=input('\n\nDo kojeg vremena zelite da se dijagram iscrtava? '); while t2<0 t2=input('\nVrijeme mora biti pozitivno! Unesite ponovo: '); end t=linspace(0,t2,1000); put=polyval(S,t); axis on; hold on; grid on; plot(t,put) title('Dijagram položaj-vrijeme') xlabel('Vrijeme [s]') ylabel('Polozaj [m]')

U desetome primjeru ćemo vidjeti kako funkcionira integriranje polinoma, funkcijom polyint. Krećemo na početku skripte sa unašanjem osnovnih parametara kojima možemo vršiti integraciju; to su početna brzina i ubrzanje. Slijedi ispis funkcije brzina-vrijeme, a nju dobivamo integracijom unesenog ubrzanja sa početnom brzinom v0 kao integracijskom konstantom. Integracija se vrši funkcijom polyint te se pritom u zagradi navodi funkcija za integraciju i integracijska konstanta odvojena zarezom. Ispod toga ispisa, ispisuju se znakovi t^1 i t^0 da bi se dobio slikovitiji prikaz funkcije. Onda opet uvodimo novu varijablu i to s0 što označava početni položaj čestice; to se uvodi funkcijom input kao i prethodne vrijednosti ubrzanja i početne brzine. Slijedi integracija funkcije brzine ovisne o vremenu uz početni položaj kao parametar i njeno ispisivanje. U maloj petljici koja slijedi iza toga ispisuju se ispod svakog od koeficijenata odgovarajuća varijabla t i njena potencija. To je u funkciji kolike-tolike estetike. Dalje imamo unos vremena do kojeg želimo da se izračuna i iscrta položaj; ispod unosa vremena imamo odmah i while petlju u kojoj se provjerava da li je uneseno vrijeme pozitivno. Na kraju slijedi iscrtavanje dijagrama položaj-vrijeme. Funkcije su poznate, vrijeme se diskretizira od 0 pa do onog unesenog na 1000 dijelova, potom se izračunava funkcijom polyval položaj za svako to vrijeme i sprema se u varijablu put. Uključuju se osi, dodatno iscrtavanje sa (hold on), uključuje se mreža (grid on) ta se ispisuje ime grafa i nazivi osi. PRIMJER: k_mat %PRIMJER 11 %Nekoliko dijagrama disp('Unesite koeficijente linearne jednadzbe ubrzanja u ovisnosti o vremenu.') a0=input('a0: '); a1=input('a : '); disp('Vasa jednadzba izgleda:')

Page 300: #Matlab Sve Pomalo

a=[a1 a0] disp(' t^1 t^0') v0=input('\nUnesite pocetnu brzinu: '); fprintf('\nJednadzba brzine u ovisnosti o vremenu izgleda:') v=polyint(a,v0) disp(' t^2 t^1 t^0') s0=input('\nUnesite pocetni polozaj: '); fprintf('\nJednadzba polozaja u ovisnosti o vremenu izgleda:') s=polyint(v,s0) disp(' t^3 t^2 t^1 t^0') t =linspace(0,10,1000); subplot(5,1,1) A=polyval(a,t); plot(t,A) title('Dijagram ubrzanje-vrijeme') ylabel('Ubrzanje [m/s^2]') xlabel('Vrijeme [s]') grid subplot(5,1,3) V=polyval(v,t); plot(t,V) title('Dijagram brzina-vrijeme') ylabel('Brzina [m/s])') xlabel('Vrijeme [s]') grid subplot(5,1,5) S=polyval(s,t); plot(t,S) title('Dijagram polozaj-vrijeme') ylabel('Polozaj [m]') xlabel('Vrijeme [s]') grid

Jedanaesti primjer je ustvari prošireni deseti, te ćemo koristiti funkciju za crtanje više grafova na jednom prozoru. Početni dio skripte je isti i odnosi se na unošenje koeficijenata jednadžbe, njihovo slaganje u vektor, integracija, ponovno unošenje novih konstanti itd. Poslije svih unošenja podataka i integracija, dolazi na red iscrtavanje dijagrama. Diskretiziramo vrijeme od 0 do 10 sekundi na 1000 dijelova i krećemo sa iscrtavanjem dijagrama. Pomoća funkcije subplot dijelimo prozor za iscrtavanje u mrežu. I to mrežu sa 5 redova i jednom kolonom; to određuju prve dvije znamenke unutar zagrade dok zadnja brojka određuje unutar kojeg polja te mreže će se iscrtati dijagram koji slijedi. Tako prva naredba subplot određuje da će se dijagram iscrtati u prvom polju tj. na samome vrhu. Slijedi računanje vrijednosti funkcije tj. polinoma a za svaki dikretizirani dio vremena, te potom njihovo iscrtavanje. Na dijagram se dodaje još njegov naziv, nazivi osi i mreža (grid) koja olakšava očitavanje. Sljedećom naredbom subplot određuje se crtanje drugog dijagrama i to na mjestu 3 unutar mreže, a kako je mreža u jednoj koloni onda je to u trećem redu. Drugi red je ostavljen prazan kako se ne bi izmiješali nazivi osi i dijagrama, zbog estetike. Podaci su dalje slični onima kao i za prvi dijagram. Zadnji dijagram se crta u petome, najdonjem polju mrež. To je određeno zadnjim brojem 5 unutar zagrade funkcije subplot.

Page 301: #Matlab Sve Pomalo

PRIMJER: l_mat %PRIMJER 12 %Slucajni brojevi i potapanje brodova adresiranjem disp('Upisite polje na kojemu mislite da je brod.') pogodak=0; Situacija=zeros(10,5) x0=uint8(rand(1)*10); while x0>5 | x0<1 x0=uint8(rand(1)*10); end y0=uint8(rand(1)*10); while y0<1 y0=uint8(rand(1)*10); end while pogodak == 0 x=input('x koordinata (1-5): '); while x<1 x=input('x koordinata (1-5): '); end while x>5 x=input('x koordinata (1-5): '); end y=input('y koordinata (1-10): '); while y<1 y=input('y koordinata (1-10): '); end while y>10 y=input('y koordinata (1-10): '); end if x == x0 & y == y0 pogodak=1; fprintf('\nPogodak!') else fprintf('\nPromasaj!') end Situacija(y,x)=1 end

U dvanaestom primjeru ćemo vidjeti kako radi stvaranje slučajnog broja i indeksiranje matrice kroz igricu potapanje brodova. Skripta počinje ispisivanjem poruke na ekran, postavljanjem varijable pogodan na 0 i ispisivanjem nul matrice Situacija reda 10x5. Varijabla pogodak će imati vrijednost 0 sve dok se ne pogodi broj i tada će se znati da se program može terminirati. Ispis matrice situacija ima zadatak da lakše predoči ''situaciju na terenu''. Slijedi postavljanje broda pomoću funkcije rand. Toj funkciji se postavlja unutar zagrade red matrice koju funkcija rand popunjava slučajnim brojevima. Kako smo mi stavili 1 to će biti kvadratna matrica 1x1 onosno skalar. Broj koji generira je u intervalu od 0 do 1 te ga potom množimo sa 10 da bi dobili broj unutar intervala 0-10. Funkcija uint8 nam govori da taj broj (koji

Page 302: #Matlab Sve Pomalo

decimalan, sa tri decimalne znamenke) pretvori u integer tj. cijeli broj i potom ga spremi u varijablu x0. Slijedi petlja while koja će tražiti ponovni slučajan broj ako je onaj koji je spremljen u varijablu x0 veći od 5 ili manji od 1 što je određeno dimenzijom matrice. Odmah iza toga se stvara slučajan broj na isti gore opisani način i sprema se u varijablu y0. Petlja while u ovome slučaju provjerava samo da li je broj manji od jedinice te ako je traži ponovni upis. Stvoreni broj ne može biti veći od 10 pa se zato niti ne provjerava. Slijedi sljedeća while petlja koja se izvršava sve dok je vrijednost varijable pogodak jednaka 0, odnosno sve dok brod nije pogođen. Unutar petlje se traži upis koordinata x i y broda te se odmah provjeravaju da novim while petljama da li su uneseni brojevi unutar zadanog intervala matrice. Ako nisu, traži se ponovni upis. Na kraju imamo if petlju koja provjerava da li upisani brojevi (x i y) odgovaraju položaju broda (x0 i y0) te ako odgovaraju, postavljaju vrijednost varijable pogodak na 1 i ispisuju pogodak. Na taj način se zaustavlja program. Ako brojevi ne odgovaraju, vrijednost varijable pogodak ostaje 0 i ispisuje se promašaj. U oba slučaja se ispisuje matrica Situacija, jedino što na mjesto koje je uneseno sa strane korisnika se stavlja 1 kao oznaka da je već pucano na to mjesto. To se vrši navođenjem imena matrice i unutar zagrade mjesto na koje će se spremiti znak iza znaka jednakosti. PRIMJER: m_mat %PRIMJER 13 %Minimum, maximum n=input('Koji stupanj polinoma zelite? '); fprintf('\n') disp('Upisite koeficijente polinoma, pocevsi od najveceg.') for i=1:n+1 p(1,i)=input('Unesite koeficijent: '); end t1=input('Unesite tocku od koje zelite da se funkcija iscrtava: '); t2=input('Unesite tocku do koje zelite da se funkcija iscrtava: '); if t2<t1 tmp=t1; t1=t2; t2=tmp; end t=linspace(t1,t2,1000); y=polyval(p,t); plot(t,y); hold on; fprintf('\nNajmanja vrijednost u iscrtanome grafu: ') [min,kmin] = min(y); min fprintf('\nNajveca vrijednost u iscrtanome grafu: ') [max,kmax] = max(y); max plot(t(1,kmin),y(1,kmin), 'r*') plot(t(1,kmax),y(1,kmax), 'r*') axis on;

Page 303: #Matlab Sve Pomalo

grid on; title('Minimum/maksimum ') ylabel('y') xlabel('x')

U trinaestom primjeru ćemo iscrtati proizvoljni polinom te ćemo mu određivati minimum i maksimum u iscrtanome intervalu. Početak skripte nam je već poznat otprije, u njemu unosimo polinom. Poslije toga, unosimo vrijednosti varijabli t1 i t2 pomoću funkcije input. U slučaju da je t2 manji od te jedan, if petlja zamjenjuje njihove vrijednosti, koristeći pritom novu varijablu tmp u koju privremeno smješta vrijednost t1 varijable. Slijedi stvaranje vektora t koji sadrži 1000 vrijednosti od početne točke pa sve do završne; za svaku tu vrijednost izračunava se vrijednost polinoma i sprema se u varijablu y. Potom se iscrtava vrijednost toga polinoma u zadanome intervalu i počinje ispis najveće i najmanje vrijednosti polinoma u tome intervalu. Te vrijednosti se dobivaju funkcijom min odnosno funkcijom max. Te funkcije vraćaju najveću vrijednost koju nađu u tome zadanome vektoru i poziciju na kojoj se nalazi. Maksimalna i minimalna vrijednost se potom ispisuju na ekran. Pred sam kraju slijedi iscrtavanje tih točaka u grafu, naravno funkcijom plot. Kao argumente, funkcija plot uzima položaj koji je zapisan u vektoru t na mjestu kmin i vrijednost polinoma na tom mjestu, koji se nalazi na istome mjestu u vektoru y. Znak koji će se iscrtati biti će zvjezdica (zbog * unutar navodnika) i biti će crvene boje (zbog znaka r unutar navodnika). Na isti način se iscrtava i oznaka za maksimum. Ostale funkcije do kraja skripte su poznate i služe za dodatno iscrtavanje grafa. PRIMJER: n_mat %PRIMJER 14 %Lom svjetlosti alfa=input('Unesite kut pod kojim zraka svjetlosti pada na granicu medija: '); n1=input('Unesite index loma svjetlosti u mediju kroz koji zraka dolazi: '); n2=input('Unestie index loma svjetlosti medija na koji zraka pada: '); if n2<n1 tmp=n1; n1=n2 n2=tmp end alfarad=(pi/180)*alfa; singamarad=((n1*sin(alfarad))/n2); gamarad=asin(singamarad); fprintf('\nKut loma svjetlosti: ') gama=(180/pi)*gamarad x1=linspace(-100,0,1000); y1=-tan(pi/2-alfarad)*x1; x2=linspace(0,100,1000); y2=-tan(pi/2-gamarad)*x2; y3=tan(pi/2-alfarad)*x2;

Page 304: #Matlab Sve Pomalo

hold on; plot(x1,y1) text(-70,50,'Upadna zraka') plot(x2,y2,'red') text(25,-50,'Lomna zraka') plot(x2,y3,'green') text(30,50,'Refleksna zraka') plot(x1,0) plot(x2,0) plot(0,x1) plot(0,x2) text(-90,5,'n1') text(-90,-10,'n2>n1') axis([-100,100,-100,100]);

U četrnaestom primjeru ćemo računati kut loma zrake svjetlosti koja pada na površinu dijeljenja dvaju materijala različitih indexa loma, te ćemo potom iscrtati skicu u dijagramu. Na početku skripte unosimo podatke funkcijom input kojima ćemo izvršiti proračun. Potom se if petljom provjerava da je drugi uneseni indeks loma veći od prvoga te ako to nije slučaj, vrijednosti varijabli se zamjenjuju. Slijedi pretvaranje unesenog kuta u radijane i računanje kuta refleksije. Potom se izračunati kut pretvara u stupnjeve te se takav ispisuje na ekran. Slijedi iscrtavanje dijagrama. Prvo se definira vektor x1 koji ima vrijednosti od –100 do 0 i za svaku od tih vrijednosti se izračunava vrijednost funkcije y1 koja je padajuća funkcija do 0 i predstavlja slikovito upadnu zraku. Onda se definira vektor x2 kojemu vrijednosti idu od 0 do 100 i za svaku tu vrijednost se izračunava vrijednost funkcije y2 i y3 koje predstavljaju lomnu zraku i refleksnu zraku. Nastavlja se sa konkretnim iscrtavanjem funkcijama plot svake varijable y o određenoj varijabli x. Poslije svake iscrtane ''zrake'' ispisuje se tekst tj. naziv svake od njih koji olakšava snalaženje. Tekstovi se ispisuju na otprilike određenim mjestima gdje mogu prolaziti zrake unutar dijagrama. Svaka ''zraka'' je iscrtana svojom bojom koja je navedena poslije varijabli koje se iscrtavaju unutar jednostrukih navodnika. Ako boja nije navedena po defaultu je plava. Slijede još četiri funkcije plot kojima se iscrtavaju pomoćne crte na ekran a koje predstavljaju granicu na kojoj dolazi do loma i normalu na točku u kojoj se lomi zraka. Na kraju skripte dolazi nešto drukčija naredba kojom se ovaj puta definitivno određuju granice iscrtavanja po x od –100 do 100 i također po y od –100 do 100. PRIMJER: o_mat %PRIMJER 15 %3d Dijagram eliptickog polariziranog vala fprintf('Superpozicijom dvaju medjusobono okomitih polariziranih valova') fprintf('\nistih frkvencija nastaje elipticki polarizirani val.\n\n') Exx=input('Unesite amplitudu prvog polariziranog vala: '); Eyy=input('Unesite amplitudu drugog polariziranog vala: '); fix=input('Unesite fazni pomak prvog vala: '); fiy=input('Unesite fazni pomak drugog vala: '); tkonacno=input('Unesite vrijeme do kojega zelite da se iscrtava: '); fixrad=(pi/180)*fix;

Page 305: #Matlab Sve Pomalo

fiyrad=(pi/180)*fiy; t=linspace(0,tkonacno,100); nula=zeros(1,100); Ex=Exx*sin(20*t+fixrad); Ey=Eyy*sin(20*t+fiyrad); plot3(t,Ex,nula,t,nula,Ey,t,Ex,Ey,t,nula,nula) axis ([0,tkonacno,-Exx,Exx,-Eyy,Eyy]); grid on; xlabel('Vrijeme [s]') ylabel('Ey') zlabel('Ex') title('Elipticki polarizirani val')

U petnaestom primjeru ćemo vidjeti kako funkcioniranje dijagrama u 3D koordinatnome sustavu. Korisnik na početku unaša podatke za dvije periodičke funkcije koje opisuju ravninski polarizirane valove. Za svaki val unaša se njegova amplituda i fazni pomak. Zadnji unos predstavlja unašanje vremena do kojega želimo da se valovi iscrtavaju. Svaki unos se obavljao funkcijom input i unesena vrijednost se spremala u za nju predviđenu varijablu a naravnom prije unosa funkcija input je ispisala tekst koji je naveden pod navodnicima na ekran da bi korisniku objasnila koju vrijednost treba unijeti. Kutovi se potom pretvaraju u radijane i pomoću funkcije linspace se stvara vektor od 100 brojeva čija vrijednost ide redom od 0 pa do vrijednosti koju je korisnik unio. Također stvara se vektor nula koji se sastoji samo od nula. Slijede funkcije kojima se opisuju valovi; oni su međusobno okomiti (jedan ima vrijednosti na x a drugi na y osi) i iste frekvencije. Funkcije se iscrtavaju plot3 funkcijom. Njeno korištenje se razlikuje malo od obične plot funkcije. Ne možemo koristiti funkciju hold on, već da bi iscrtali više funkcija u istom dijagramu, navodimo ih jednu za drugom unutar zagrade. Tako na početku imamo funkciju Ex koja će se iscrtati za svaku vrijednost varijable t, dok će na trećoj osi za svaku njenu vrijednost dati 0; zato koristimo nul-matricu nula. Kod druge funkcije sve nule ćemo staviti na drugu os, dok će se na trećoj iscrtavati funkcija Ey; na taj način smo dobili da su funkcije u međusobno okomitim ravninama. Za treću funkciju koju treba iscrtati iscrtava se točka na koordinati Ex, Ey za svaku vrijednost varijable t. Tako iscrtana funkcija ima oblik eliptičkog vala koji nastaje zbrajanjem interferencijom valova Ex i Ey. Zadnja funkcija unutar zagrade iscrtava vrijednosti 0, 0 za svaku vrijednost varijable t čime nastaje prikaz osi t. Ostale funkcije za ime grafa i osi su iste kao i u 2D crtanju dijagrama izuzev novog naziva zlabel koji predstavlja treću os. PRIMJER: p_mat %PRIMJER 16 %Interpolacija izbor=input('Za linearnu interpolaciju unesite 1, za kubnu 2: '); if izbor == 1

Page 306: #Matlab Sve Pomalo

T1=input('\nUnesite donju x-koordinatu: '); Cp1=input('Unesite donju y-koordinatu: '); T2=input('Unesite gornju x-koordinatu: '); Cp2=input('Unesite gornju y-koordinatu: '); Tx=input('\nZa koju tocku zelite izracunati interpolirati vrijednost: '); Cpxlin=interp1([T1 T2],[Cp1 Cp2],Tx) x=linspace(T1,T2,100); y=interp1([T1 T2],[Cp1 Cp2],x); hold on; plot([T1 T2 Tx],[Cp1 Cp2 Cpxlin],'o') plot(x,y) axis on; grid on; else if izbor == 2 poztocke=input('\nKoliko poznatih tocaka zelite unijeti? '); for i=1:poztocke x(1,i)=input('\nUnesite ordinatu tocke: '); y(1,i)=input('Unesite apscisu tocke: '); end nepoztocke=input('\nKoliko tocka zelite odrediti: '); for i=1:nepoztocke xx(1,i)=input('Unesite nepoznatu tocku: '); end Cpxkub=spline(x,y,xx) xos=linspace(x(1,1),x(1,poztocke),100); yos=spline(x,y,xos); hold on; plot(xx,Cpxkub,'o') plot(x,y,'*') plot(xos,yos) axis on; grid on; else end end

U šesnaestom primjeru ćemo vidjeti kako možemo interpolirati točke između zadanih vrijednosti. Na početku u varijablu izbor korisnik unosi željeni izbor između 1 ili 2. Odmah potom if petlja gleda vrijednost varijable izbor, te ako je vrijednost 1 onda izvršava dio skripte namijenjene za linearnu interpolaciju a ako je broj 2 onda izvršava dio skripte za spline interpolaciju. Ako je upisan bilo koji drugi broj, izvođenje skripte završava. Ako se izvršava dio skripte za linearnu interpolaciju slijedi unošenje poznatih točaka i potom točku čiju y-koordinatu dobivamo interpolacijom. Funkcija za određivanje interpolacije je interpl a u zagradi se unose koordinate poznatih točaka te na kraju i x koordinate točaka za koje se traži interpolirana vrijednost. U našem slučaju interpolacija se vrši samo za jednu točku. Na kraju toga dijela slijedi iscrtavanje svih točaka i povlačenja linearne funkcije kroz njih tj. pravca.

Page 307: #Matlab Sve Pomalo

U slučaju da se izvršava dugi dio skripte tj. kubna interpolacija, prvo se pita korisnika koliko poznatih točaka želi unijeti. Za taj broj točaka for petlja ponavlja unos x i y koordinate svake poznate točke. Potom se pita korisnika koliko nepoznatih točaka želi odrediti te sljedeća for petlja ponavlja unos x-koordinata nepoznatih točaka. Funkcija spline vrši kubnu interpolaciju za nepoznate točke koje korisnik unio i sprema ih u varijablu Cpxkub. Slijedi također iscrtavanje poznatih i nepoznatih točaka te kubne funkcije koja ih povezuje.

Page 308: #Matlab Sve Pomalo

Sveuciliste u ZagrebuFakultet strojarstva i brodogradnje

Vjezbe iz kolegija Racunalna matematika: M A T L A Br

Mario Essert, Tihomir Zilic, Vladimir Milic

{messert, tzilic, vmilic}@fsb.hr

Sadrzaj

1 MATLAB kao kalkulator 2

2 Linearna algebra 2

3 Polinomi 5

4 Kontrola tijeka programa 6

5 Simbolicka matematika 8

6 Napredno crtanje 9

7 M-datoteke: skripte i korisnicke funkcije 11

8 Graphical User Interface – GUI 13

Page 309: #Matlab Sve Pomalo

1 MATLAB kao kalkulator

ZADATAK 1. Izracunajte:

a) y = 773

13·7 − 3 · 103 + e−35π

y =

2.0168e+003

b) y = (−3 + 7i) · (−8− 6i3)

y =

-18.0000 -74.0000i

c) y(x) = ex + lnx+ (sinx)−1 − cosx+ tanx+ cotx− log x · sinx+ (log2 x)3 za x = 0.4

y =

2.8553

d) y(x) = sinx · sinx+ cosx · cosx za x = 0 : 0.7 : π

y =

1.0000 1.0000 1.0000 1.0000 1.0000

2 Linearna algebra

ZADATAK 1. Zadani su vektori

v1 =[3 7 + 3i 10 45i 4i 29 + 15i 7i

]T, v2 =

[8 11− 4i 101 5i 89 11 1 + i

]T,

izracunajte:

a) v1 + v2

ans =

1.0e+002 *

0.1100

0.1800 - 0.0100i

1.1100

0 + 0.5000i

0.8900 + 0.0400i

0.4000 + 0.1500i

0.0100 + 0.0800i

b) skalarni produkt vektora v1 i v2

2

Page 310: #Matlab Sve Pomalo

ans =

1.6500e+003 -5.8900e+002i

c) vektor koji ce imati komponente jednake produktu komponenata vektora v1 i v2 na odgo-

varajucim mjestima

ans =

1.0e+003 *

0.0240

0.0890 + 0.0050i

1.0100

-0.2250

0 + 0.3560i

0.3190 + 0.1650i

-0.0070 + 0.0070i

d) matricu M = v2 vT1

M =

1.0e+003 *

Columns 1 through 4

0.0240 0.0560 + 0.0240i 0.0800 0 + 0.3600i

0.0330 - 0.0120i 0.0890 + 0.0050i 0.1100 - 0.0400i 0.1800 + 0.4950i

0.3030 0.7070 + 0.3030i 1.0100 0 + 4.5450i

0 + 0.0150i -0.0150 + 0.0350i 0 + 0.0500i -0.2250

0.2670 0.6230 + 0.2670i 0.8900 0 + 4.0050i

0.0330 0.0770 + 0.0330i 0.1100 0 + 0.4950i

0.0030 + 0.0030i 0.0040 + 0.0100i 0.0100 + 0.0100i -0.0450 + 0.0450i

Columns 5 through 7

0 + 0.0320i 0.2320 + 0.1200i 0 + 0.0560i

0.0160 + 0.0440i 0.3790 + 0.0490i 0.0280 + 0.0770i

0 + 0.4040i 2.9290 + 1.5150i 0 + 0.7070i

-0.0200 -0.0750 + 0.1450i -0.0350

0 + 0.3560i 2.5810 + 1.3350i 0 + 0.6230i

0 + 0.0440i 0.3190 + 0.1650i 0 + 0.0770i

-0.0040 + 0.0040i 0.0140 + 0.0440i -0.0070 + 0.0070i

e) iz matrice M izdvojite submatricu s komponentama na mjestima: (1,2), (1,3), (1,4), (1,5),

(2,2), (2,3), (2,4), (2,5).

3

Page 311: #Matlab Sve Pomalo

ans =

1.0e+002 *

0.5600 + 0.2400i 0.8000 0 + 3.6000i 0 + 0.3200i

0.8900 + 0.0500i 1.1000 - 0.4000i 1.8000 + 4.9500i 0.1600 + 0.4400i

ZADATAK 2. Zadane su matrice

A =

[25− 8i 10 45

11 + 2i 12 99

], B =

[−13 27 5

1 0 0

],

izracunajte:

a) A + B

ans =

12.0000 - 8.0000i 37.0000 50.0000

12.0000 + 2.0000i 12.0000 99.0000

b) AT

B

ans =

1.0e+003 *

-0.3140 - 0.1060i 0.6750 + 0.2160i 0.1250 + 0.0400i

-0.1180 0.2700 0.0500

-0.4860 1.2150 0.2250

c) AT B

ans =

1.0e+003 *

-0.3140 + 0.1060i 0.6750 - 0.2160i 0.1250 - 0.0400i

-0.1180 0.2700 0.0500

-0.4860 1.2150 0.2250

ZADATAK 3. Zadana je matrica

C =

25.3 100 45

11.9 12.8 99

7.1 4.2 5

,izracunajte:

a) determinantu matrice koristeci funkciju det()

4

Page 312: #Matlab Sve Pomalo

determinanta =

5.3599e+004

b) inverz matrice koristeci funkciju inv()

inverz =

-0.0066 -0.0058 0.1740

0.0120 -0.0036 -0.0367

-0.0008 0.0113 -0.0162

c) svojstvene vektore i svojstvene vrijednosti matrice koristeci funkciju eig()

vek =

0.9170 0.8916 0.8916

0.3804 -0.3215 + 0.2703i -0.3215 - 0.2703i

0.1198 -0.0798 - 0.1493i -0.0798 + 0.1493i

vr =

72.6671 0 0

0 -14.7836 +22.7825i 0

0 0 -14.7836 -22.7825i

d) rijesite linearni sustav Cx = b ako je b = [1.95 21 108]T

x =

18.6529

-4.0201

-1.5102

3 Polinomi

ZADATAK 1. Zadan je polinom p(x) = 4x5 − 3x4 + 2x2 + 71. Izracunajte:

a) korjene polinoma koristeci funkciju roots()

ans =

1.6022 + 1.0608i

1.6022 - 1.0608i

-1.6762

-0.3890 + 1.6482i

-0.3890 - 1.6482i

b) vrijednost polinoma u tocki x = 1 koristeci funkciju polyval()

ans =

74

5

Page 313: #Matlab Sve Pomalo

ZADATAK 2. Koristeci funkciju polyfit() nadite parametre plinoma p1(x) treceg reda koji

aproksimira skup izmjerenih podataka danih tablicom. Nacrtajte izmjerene vrijednosti kao i poli-

nom koji ih aproksimira na istom grafu. Koristite funkciju plot().

xk 1 2 3 4 5

fk 1 2 6 8 7

p1 =

-0.5000 4.0714 -7.4286 4.8000

1 1.5 2 2.5 3 3.5 4 4.5 50

1

2

3

4

5

6

7

8

9

4 Kontrola tijeka programa

ZADATAK 1. Definirajte varijablu x = 21. Napisite kontrolu tijeka programa za sljedeci problem

koristeci if-elseif-else-end petlju:

Ako je x veci ili jednak od tri i x je manji od petnaest i x je razlicit od sedam ili je x jednak 21,

onda ispisi tekst x je jedan od brojeva 3,4,5,6,8,9,10,11,12,13,14,21. U slucaju da je x jednak nuli

ispisi x je nula, a za bilo koji preostali slucaj ispisi x je onakav kakav ste definirali.

x =

21

x je jedan od brojeva 3,4,5,6,8,9,10,11,12,13,14,21

ZADATAK 2. Definirajte varijable z, brojac, m. Napisite kontrolu tijeka programa za sljedeci

problem koristeci while-end petlju:

Neka su z = 4, brojac = 0, m = sin(brojac). Izracunavajte varijablu m sve dok je varijabla

brojac manja ili jednaka varijabli z. Varijabla brojac se svakim prolaskom kroz petlju uveca za

1. Neka se svakim prolaskom kroz petlju ispisu na ekran vrijednosti za brojac i m.

z =

4

brojac =

6

Page 314: #Matlab Sve Pomalo

0

m =

0

brojac =

1

m =

0.8415

brojac =

2

m =

0.9093

brojac =

3

m =

0.1411

brojac =

4

m =

-0.7568

brojac =

5

ZADATAK 3. Definirajte varijablu n. Izracunajte n elemenata vektora v koristeci for-end

petlju. Neka se svakim prolaskom kroz petlju ispisu vrijednosti vektora v.

n = 5, v(k) = k2, k = 1, . . . , n

n =

5

v =

1

v =

1 4

v =

1 4 9

v =

1 4 9 16

v =

1 4 9 16 25

7

Page 315: #Matlab Sve Pomalo

5 Simbolicka matematika

ZADATAK 1. Definirajte simbolicku varijablu t i funkciju y(t) = t5 − t3 + sin(t) + cos(t)− e7t.

a) Koristeci funkciju diff() nadite prvu derivaciju funkcije y(t)

yder =

5*t^4-3*t^2+cos(t)-sin(t)-7*exp(7*t)

b) Koristeci funkciju int() nadite yint(t) =∫y(t)dt

yint =

1/6*t^6-1/4*t^4-cos(t)+sin(t)-1/7*exp(7*t)

ZADATAK 2. Koristeci funkciju solve() nadite rjesenja sustava sljedecih implicitno zadanih

linearnih algebarskih jednadzbi:

a+ 2b = 7,

−a+ 14b+ c = 5,

a+ b+ c = 2.

a =

5

b =

1

c =

-4

ZADATAK 3. Koristeci funkciju dsolve() nadite rjesenja sljedece diferencijalne jednadzbe:

d2z(t)

dt2+ 5

dz(t)

dt+ 6z(t) = 3 sin(t) + 7 cos(t),

dz(0)

dt= −1, z(0) = 4

z =

-26/5*exp(-3*t)+44/5*exp(-2*t)+2/5*cos(t)+sin(t).

8

Page 316: #Matlab Sve Pomalo

6 Napredno crtanje

ZADATAK 1. Koristeci funkciju subplot() kreirajte 5 podgrafova na mjestima kao na sljedecoj

slici:

ZADATAK 2. Nacrtajte funkciju y(v) = cos2(v) za v = −π : 0.3 : π koristeci funkciju plot(), te

oznacite graf kako je prikazano na sljedecoj slici:

−1 −0.5 0 0.5 1 1.5 2 2.5 3−0.2

−0.1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8Ovo je funkcija kvadrata kosinusa

v

y

cos2(v)

Koristite funkcije title(),xlabel(),ylabel(),legend(),axis().

ZADATAK 3. Nacrtajte funkciju y(x) = sin(x) cos(2x)− x3 + 2x koristeci funkciju ezplot().

9

Page 317: #Matlab Sve Pomalo

−6 −4 −2 0 2 4 6−250

−200

−150

−100

−50

0

50

100

150

200

250

x

sin(x) cos(x)−x3+2 x

ZADATAK 4. Nacrtajte funkciju z(x, y) = y sin(x) cos(2x)−y x3+2x koristeci funkciju ezsurf().

−5

0

5

−5

0

5

−1500

−1000

−500

0

500

1000

1500

x

y sin(x) cos(2 x)−y x3+2 x

y

ZADATAK 5. Za funkciju h(x, y) = y sin(x) cos(2x)−y x3 +2x, x = −6 : 1.9 : 6, y = −5 : 1.5 : 6

nacrtajte 3D graf kao na sljedecoj slici:

−10−5

05

10

−5

0

5

10−1500

−1000

−500

0

500

1000

1500

Koristite funkcije meshgrid() i surf()

10

Page 318: #Matlab Sve Pomalo

7 M-datoteke: skripte i korisnicke funkcije

ZADATAK 1. Skripta i funkcija imaju istu ekstenziju .m. Za razliku od skripte funkcija ima

ulazne i izlazne argumente.

a) Napisite kako izgleda prvi redak korisnicke funkcije, ako korisnik definira ulazne argumente

a,b,c, a izlazne f,g,h,z, dok ce ime funkcije biti MojaPrvaFunkcija.

b) Opis, tj. help funkcije MojaPrvaFunkcija se dobije pri pozivanju: help MojaPrvaFunkcija.

Napisite pomoc, tj. help za korisnicku funkciju MojaPrvaFunkcija koji ce glasiti: MojaPrvaFunkcija

je funkcija koja za izlazne argumente daje vrijednosti pohranjene u varijablama

f,g,h,z.

c) Nakon sto ste definirali funkciju i napisali njezin help, upisite kod koji ce MojaPrvaFunkcija

izvrsavati:

f=a;

g=c+b;

h=c-a

z=b+sin(g)

d) Otvorite Matlabov m-editor i sastavite iz prethodna 3 koraka funkciju MojaPrvaFunkcija.

e) Spremite programski kod iz d) kao datoteku MojaPrvaFunkcija.m. Pozovite funkciju MojaPrvaFunkcija

iz Command Window-a sa sljedecim ulaznim i izlaznim argumentima:

– prvi ulazni argument: 2

– drugi ulazni argument: -7

– treci ulazni argument: 4

– izlazni argumenti neka su redom: S,D,K,L

h =

2

z =

-7.1411

S =

2

D =

-3

K =

2

L =

-7.1411

11

Page 319: #Matlab Sve Pomalo

f) Napisite skriptu poziv.m cijim ce se pokretanjem pozivati funkcija MojaPrvaFunkcija sa

istim ulaznim i izlaznim argumentima kao pod e), a ujedno neka se poziva pomoc za funkciju

MojaPrvaFunkcija

h =

2

z =

-7.1411

S =

2

D =

-3

K =

2

L =

-7.1411

MojaPrvaFunkcija je funkcija koja za izlazne

argumente daje vrijednosti pohranjene u varijablama f,g,h,z.

ZADATAK 2. Napisite funkciju sustav() za numericko rjesavanje (koristite funkciju ode23())

difrencijalne jednadzbe

mx(t) + k x(t) + c x(t) = F0 sin(ωt)

svodenjem na sustav diferencijalnih jednadzbi prvog reda. Diferencijalna jednadzba drugog reda

se svodi na sustav diferencijalnih jednadzbi prvog reda tako da se uvede zamjena varijabli, recimo

x1 = x i x2 = x. Time dobivamo sljedeci sustav:

x1 = x2,

x2 = − c

mx1 −

k

mx2 +

1

mF0 sin(ωt).

Numericke vrijednosti parametara su: m = 5, k = 2, c = 10, F0 = 2, ω = 3. Pocetni uvjeti su

jednaki nuli. Graficki prikazite odziv sustava, u vremenu od 10 sekundi.

12

Page 320: #Matlab Sve Pomalo

0 2 4 6 8 10−0.1

−0.05

0

0.05

0.1

0.15

t, s

x(t)

8 Graphical User Interface – GUI

ZADATAK 1. Graficko sucelje radit ce se s Matlab 7 razvojim okruzenjem nazvanim GUIDE

(Graphical User Interface Development Enviroment). Upisivanjem naredbe >> guide otvara se

razvojno okruzenje.

Izradite graficko sucelje s GUIDE-om koje ce korisniku omoguciti zbrajanje dvaju brojeva kako je

prikazano na sljedecoj slici. Za izlaz iz grafickog sucelja koristite naredbu close.

13

Page 321: #Matlab Sve Pomalo

%Zad 1.1.

y=(77^3)/(13*7)-3*10^3+exp(-35*pi)

y=(-3+7i)*(-8-6*i^3)

x=0.4

y=exp(x)+log(x)+(sin(x))^(-1)-cos(x)+tan(x)+cot(x)-log10(x)*sin(x)+(log2(x))^3*x:0.7:pi

x=0:0.7:pi

y=sin(x)*sin(x)+cos(x)*cos(x)

%Zad 2.1.

v1=[3 7+3i 10 45i 4i 29+15i 7i].'

v2=[8 11-4i 101 5i 89 11 1+i].'

v1+v2

v1.'*v2

M=v1*v2.'

M(1:2, 2:5)

%Zad 2.2.

A=[25-8i 10 45; 11+2i 12 99]

B=[-13 27 5; 1 0 0]

A+B

A'*B

A.'*B

%Zad 2.3.

C=[25.3 100 45; 11.9 12.8 99; 7.1 4.2 5]

det(C)

inv(C)

[vr, vek]=eig(C)

b=[1.95 21 108]'

x=C\b

%Zad 3.1.

x=1

p=[4 -3 0 2 0 71]

roots(p)

polyval(p, 1)

%Zad 3.2.

xk=[1 2 3 4 5]

fk=[1 2 6 8 7]

p1=polyfit(xk, fk, 3)

Page 322: #Matlab Sve Pomalo

x1=[1:0.1:5]

f=polyval(p1, x1)

plot(xk, fk, 'rx', x1, f, 'g-')

%Zad 4.1.

x=21

if x>=3 & x<15 & x~=7 | x==21

disp('x je jedan od brojeva 3,4,5,6,8,9,10,11,12,13,14,21')

elseif x==0

disp('x je nula.')

else

disp('x je onakav kakav ste definirali')

end

%Zad 4.2.

z=4;

brojac=0;

while brojac<=z

brojac

m=sin(brojac)

brojac=brojac+1

end

%Zad 4.3.

n=5

for k=1:n

v(k)=k^2

end

%Zad 5.1.

syms t;

y=t^5-t^3+sin(t)+cos(t)-exp(7*t)

yder=diff(y, t)

yint=int(y)

%Zad 5.2.

syms a b c;

f1=a+2*b-7;

f2=-a+14*b+c-5;

f3=a+b+c-2;

[a, b, c]=solve(f1, f2, f3)

%Zad 5.3.

DJ1='D2z + 5*Dz + 6*z = 3*sin(t) + 7*cos(t)';

z=dsolve(DJ1, 'Dz(0)=-1', 'z(0)=4')

%Zad 5.4.

syms x1 x2 x3 x4 u m M l g;

f=[x3; x4; (u+m*l*x4^2*sin(x2)-m*g*cos(x2)*sin(x2))/(M+m*sin(x2)^2);

((M+m)*g*sin(x2)-u*cos(x2)-m*l*x4^2*sin(x2)*cos(x2))/(l*(M+m*sin(x2)^2))]

Page 323: #Matlab Sve Pomalo

x=[x1 x2 x3 x4].'

for i=1:4

for j=1:4

A(i,j)=diff(f(i),x(j));

end

end

Asym=jacobian(f,x);

Asym==A

%Zad 5.5.

%Zad 6.1.

subplot(4,2,[1;3])

subplot(4,2,[2;4])

subplot(4,2,5:6)

subplot(4,2,7)

subplot(4,2,8)

%Zad 6.2.

v=[-pi:0.3:pi];

y=cos(v).^2;

plot(v,y,'ro--');

title('Ovo je funkcija kvadrata kosinusa');

xlabel('v');

ylabel('y');

legend('cos^2(v)',1) ;

axis([-1 3 -0.2 0.8]);

%Zad 6.3.

ezplot('(sin(x))*(cos(2*x))-x^3+2*x');

%Zad 6.4.

ezsurf('y*sin(x)*cos(2*x)-y*x^3+2*x');

%Zad 6.5.

[x,y] = meshgrid(-6:1.9:6, -5:1.5:6);

h=y.*sin(x).*cos(2.*x)-y.*x.^3+x.*2;

mesh(x,y,h)

%surf(x,y,h)

Page 324: #Matlab Sve Pomalo

Sveuciliste u ZagrebuFakultet strojarstva i brodogradnje

Vjezbe iz kolegija Racunalna matematika: M A T L A Br

(Dodatak)

Mario Essert, Tihomir Zilic, Vladimir Milic

{messert, tzilic, vmilic}@fsb.hr

Page 325: #Matlab Sve Pomalo

5 Simbolicka matematika

ZADATAK 4. Koristeci for-end petlju odredite simbolicku matricu Jacobiana J ∈ Rn×n vektorske

funkcije f(x, u) ∈ Rn:

f(x, u) =

x3

x4u + ml x24 sin(x2)−mg cos(x2) sin(x2)

M + m sin2(x2)

(M + m) g sin(x2)− u cos(x2)−ml x24 sin(x2) cos(x2)

l(M + m sin2(x2)

)

, J =

∂f1∂x1

. . .∂f1∂xn

.... . .

...∂fn∂x1

. . .∂fn∂xn

.

Rezultat provjerite Matlab-ovom funkcijom jacobian().

ZADATAK 5. Napisite Matlab skriptu za rjesavanje diferencijalne jednadzbe primjenom Laplaceove

transformacije.

x(t) + 5x(t) + 6x(t) = sin2(t), x(0) = 1, x(0) = 0.

Potrebne funkcije: sym(), diff(), laplace(), subs(), solve(), ilaplace().

7 M-datoteke: skripte i korisnicke funkcije

ZADATAK 2. Graficki usporedite numericko i analiticko rjesenje.

2

Page 326: #Matlab Sve Pomalo

syms x1 x2 x3 x4 u m M l g;

f=[x3; x4; (u+m*l*x4^2*sin(x2)-m*g*cos(x2)*sin(x2))/(M+m*sin(x2)^2);

((M+m)*g*sin(x2)-u*cos(x2)-m*l*x4^2*sin(x2)*cos(x2))/(l*(M+m*sin(x2)^2))]

x=[x1 x2 x3 x4].'

for i=1:4

for j=1:4

A(i,j)=diff(f(i),x(j));

end

end

Asym=jacobian(f,x);

Asym==A

Page 327: #Matlab Sve Pomalo

t=sym('t');

x=sym('x(t)');

Xs=sym('Xs');

F=laplace(diff(diff(x)) + 5*diff(x) + 6*x - sin(t)^2)

Fs=subs(F,{'D(x)(0)','x(0)','laplace(x(t),t,s)'},{0,1,'Xs'})

x_s=solve(Fs,Xs)

ilaplace(x_s)

Page 328: #Matlab Sve Pomalo

function varargout = Guj(varargin)

% GUJ M-file for Guj.fig

% GUJ, by itself, creates a new GUJ or raises the existing

% singleton*.

%

% H = GUJ returns the handle to a new GUJ or the handle to

% the existing singleton*.

%

% GUJ('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in GUJ.M with the given input arguments.

%

% GUJ('Property','Value',...) creates a new GUJ or raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before Guj_OpeningFunction gets called. An

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to Guj_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

% instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Guj

% Last Modified by GUIDE v2.5 15-Apr-2011 12:35:40

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @Guj_OpeningFcn, ...

'gui_OutputFcn', @Guj_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin & isstr(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before Guj is made visible.

function Guj_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

Page 329: #Matlab Sve Pomalo

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to Guj (see VARARGIN)

% Choose default command line output for Guj

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes Guj wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = Guj_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes during object creation, after setting all properties.

function edit1_CreateFcn(hObject, eventdata, handles)

% hObject handle to edit1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function edit1_Callback(hObject, eventdata, handles)

% hObject handle to edit1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text

% str2double(get(hObject,'String')) returns contents of edit1 as a double

% --- Executes during object creation, after setting all properties.

function edit_B_CreateFcn(hObject, eventdata, handles)

Page 330: #Matlab Sve Pomalo

% hObject handle to edit_B (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function edit_B_Callback(hObject, eventdata, handles)

% hObject handle to edit_B (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit_B as text

% str2double(get(hObject,'String')) returns contents of edit_B as a double

% --- Executes during object creation, after setting all properties.

function edit_C_CreateFcn(hObject, eventdata, handles)

% hObject handle to edit_C (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function edit_C_Callback(hObject, eventdata, handles)

% hObject handle to edit_C (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit_C as text

% str2double(get(hObject,'String')) returns contents of edit_C as a double

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

Page 331: #Matlab Sve Pomalo

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

a=str2num(get(handles.edit_A,'String'));

b=str2num(get(handles.edit_B,'String'));

c=a+b;

set(handles.edit_C,'String',c);

% --- Executes on button press in dugme_izlaz.

function dugme_izlaz_Callback(hObject, eventdata, handles)

% hObject handle to dugme_izlaz (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

close all;