programiranje u matlabu-2

22
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

Upload: ratomir-tesic

Post on 25-Sep-2015

45 views

Category:

Documents


7 download

DESCRIPTION

.

TRANSCRIPT

  • M. Essert: Matlab interaktivno 1

    Raunalna matematika, FSB Zagreb, 2008.

    MATLAB matrini laboratorij Interaktivni alat (kalkulator), programski jezik, grafiki 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 razliitih tipova struktura - struct, polje razliitih tipova funkcijski tip - function handle @ (funkcija kao argument) objekti - Java i INLINE object.

    KONSTANTE I VARIJABLE pi - 3.141592... i,j - kompleksne veliine, sqrt(-1) eps - relativna tonost, najmanji iznos izmeu dva

    realna broja inf, NaN - beskonano (infinitum) i nije broj (not a

    number) realmax, realmin - najvei i najmanji realni broj bitmax - najvei cijeli broj (floating point) integer. ans - varijabla odgovora (ansver) ime_varijable - alfanumeriki niz znakova, poetni znak slovo,

    bez posebnih znakova, osjetljivost na velika i mala slova.

    Jednom definirana varijabla x moe 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 rjeenja funkcije (potprograma) ugraene (bilt-in function) abs(), sin(), sqrt(), exp(), ...

    ZAGRADE ( ) - grupiranje izraza,

    grupiranje funkcijskih argumenata, indeksiranje vektora (matrica)

    [ ] - grupiranje vektorskih (matrinih) elemenata { } - elije = polja razliitih tipova podataka

    s klasinim indeksiranjem

  • 2 M. Essert: Matlab interaktivno

    Raunalna matematika, FSB Zagreb, 2008.

    RADNO OKRUENJE Command window radni prozor Workspace memorijski radni prostor (who varijable) Current directory trenutani 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 ; - sprjeavanje ispisa rezultata ... - nastavak naredbe u iduoj liniji % - komentar (od znaka udesno)

    POETAK 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 - pretraivanje pojmova CTRL+C - prekid izvoenja diary - voenje dnevnika rada quit - zavretak rada

    OPERATORI Arithmetiki operatori = - pridruba, assignment plus, uplus - plus, unarni plus + minus, uminus - minus, unarni minus - mtimes - matrino mnoenje * mldivide - matrino dijeljenje s lijeva \ mrdivide - matrino dijeljenje s desna / mpower - matrino potenciranje ^

    Toka . - decimalna toka

    pristup polju strukture, npr. A(i).field Operatori nad elementima - upotreba Hadamard-ovog ('toka', engl. 'dot') operatora. power - potenciranje nad poljem .^ times - mnoenje elemenata u polju .* ldivide - lijevo dijeljenje u polju .\ rdivide - desno dijeljenje u polju ./

  • M. Essert: Matlab interaktivno 3

    Raunalna matematika, FSB Zagreb, 2008.

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

    Relacijski operatori eq - jednako == ne - nejednako ~= lt - manje nego < gt - vee nego > le - manje ili jednako =

    Logiki operatori

    logiki I (AND) meu izrazima && logiki ILI (OR) meu izrazima ||

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

    vektora razliit od nule all - Istina (True, 1) ako su svi elementi vektora

    razliit 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

  • 4 M. Essert: Matlab interaktivno

    Raunalna matematika, FSB Zagreb, 2008.

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

    vrijednosti argumenata SLOENI 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 MATEMATIKE FUNKCIJE Trigonometrijske sin, sinh - sinus, hiperbolini sinus asin, asinh - inverzni sinus, inverzni hiperbolini sinus cos, cosh - kosinus, hiperbolini kosinus acos, acosh - inverzni kosinus, inverzni hiperb. kosinus tan, tanh - tangens, hiperbolini tangens atan, atanh - inverzni tangens, inverzni hiperb. tangens atan2 - inverzni tangens u etvrtom kvadrantu sec, sech - sekans, hiperbolini sekans asec, asech - inverzni sekans, inverzni hiperbolini sekans

  • M. Essert: Matlab interaktivno 5

    Raunalna matematika, FSB Zagreb, 2008.

    csc, csch - sekans, hiperbolini sekans acsc, acsch - inverzni kosekans, inverzni hiperb. kosekans cot, coth - kotangens, hiperbolini kotangens acot, acoth - inverzni kotangens,inverzni hiperb. kotangens Eksponencijalne exp - eksponencijalna log - prirodni logaritam. log10 - obini (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 Zaokruivanje i ostatak fix - zaokruivanje prema nuli floor - zaokruivanje prema minus beskonanom ceil - zaokruivanje prema plus beskonanom round - zaokruivanje na najblii 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 pomou petlje (engl. loop). b) Tvorba s rubovima i razmakom

    {poetak} : {korak} : {doetak} ako je korak=1 moe se pisati samo

    {poetak} : {doetak} Korak moe biti i negativan, a ako je pritom 'poetak' manji od 'doetka' onda e generirani vektor biti prazan ([]). c) preko funkcija 'linspace()' i 'logspace()' U oba sluaja prva dva argumenta su poetak i doetak vektora (u drugom kao potencije broja 10), a trei je broj elemenata izmeu njih. Razlika je to su prvi linearno, a drugi logaritamski udaljeni jedni od drugih.

  • 6 M. Essert: Matlab interaktivno

    Raunalna matematika, FSB Zagreb, 2008.

    CRTANJE help plot PLOT Linear plot. PLOT(X,Y) crta vektor Y prema vektoru X. Razliite tipovi linija, simbola i boja mogu se postii s naredbom PLOT(X,Y,S) gdje je S niz znakova (string) dobiven iz bilo kojeg od tri(ili svih) stupaca ispod: b plava . toka - vrsto g zelena o krui : tokasto r crvena x x-znak -. crt_toka 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 tokastu liniju s + znakom na svakoj toki; PLOT(X,Y,'bd') crta rombove na svakoj toki 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 interpolirajui zelenim kruiima toke podataka. Uz Plot() obino 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,'*')

  • M. Essert: Matlab interaktivno 7

    Raunalna 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 raunanja preko odsjeaka: 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) Kljuno 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 tokom-zarez (;) deklarira se poetak novog retka. S naredbom rand(n) ili rand(n,m) generira se matrica reda (n x n) odnosno (n x m) sa sluajnim elementima koji su raspreni preko normalne razdiobe izmeu 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 sljedee matrine aritmetike 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 veliinama dobivenim matrinim mnoenjem. 3. Openito za (n x m) matricu A vrijedi: (a) veliina (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)

  • 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 T4= A

  • M. Essert: Matlab interaktivno 9

    Raunalna 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 izvoenju 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 inae: if {relacija} {naredbe} end ili jo openitije:

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

  • 10 M. Essert: Matlab interaktivno

    Raunalna matematika, FSB Zagreb, 2008.

    SWITCH struktura izabire vrijednost izmeu vie ponuenih izraza. switch {izraz} case {sluaj_1}, naredba, ..., naredba case {sluaj2, sluaj3, ...} naredba, ..., naredba ... otherwise, naredba, ..., naredba end Izraz moe 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 - zavrava izvoenje for ili while petlje continue - prebacuje kontrolu na iduu iteraciju petlje try - poetak TRY bloka catch - poetak CATCH bloka eval - izvrava string s MATLAB izrazom. feval - izraunava funkciju specificiranu stringom run - izvrava script-a function - dodaje novu (korisniku) 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 (obino stringa) fprintf - ispis formatirane poruke sprintf - ispis formatirane poruke u string pause - ekanje na korisnikov odziv (pauza) error - ispis pogreke poruke ili prekidne funkcije warning - prikaz poruke upozorenjawarning message

  • M. Essert: Matlab interaktivno 11

    Raunalna 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 0 x=x/2; q=q+1; end q 5.8 % Nai najmanji cijeli broj p % tako daje 1 + 2-p = 1 % u aritmetici s pominim % 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 razliit 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

  • 12 M. Essert: Matlab programski

    Raunalna 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 prorauna 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 toku x=1 sa % slijedno poveanom skalom. % Izraunavanje (x-1)^6 preko % x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6x +1 % dovodi do ozbiljnih promiljanja. 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

  • M. Essert: Matlab programski 13

    Raunalna 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:

  • 14 M. Essert: Matlab programski

    Raunalna 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 sadravaju stare, a spremaju se u datoteku s imenom istim kao ime funkcije, uz ekstenziju '.m'. Poetak datoteke je sintaktiki vrsto odreen. 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.

  • M. Essert: Matlab programski 15

    Raunalna 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) %Izraunava povrinu trokuta koji ima stranice % duine a, b i c % Inputs: % a, b,c duljine stranica % Output: % A povrina 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 logistia 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 ????

  • 16 M. Essert: Matlab programski

    Raunalna matematika, FSB Zagreb, 2008.

    6.11 marks.m function [x_sort, x_mean, x_med, x_std]=marks(x) % MARKS statistika 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 toka a = '); b=input('desna krajnja toka b = '); N=input(' broj podintervala, N = '); ya=input('poetna 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 - traenje kvadratnog korijena Newtonovom metodom % X=SQRT_NEWTON(A,TOL) vraa X kao rjeenje korijena koji je >= 0 % TOL je tolerancija konvergencije (pretpostavljena je EPS) % [X, ITER]=SQRT_NEWTON(A,TOL) vraa takoer 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;

  • M. Essert: Matlab programski 17

    Raunalna 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')

  • 18 M. Essert: Matlab programski

    Raunalna 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);

  • M. Essert: Matlab programski 19

    Raunalna 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

  • 20 M. Essert: Matlab programski

    Raunalna matematika, FSB Zagreb, 2008.

    POLINOMI 6.18 Legeandre-ovi polinomi zadani su rekurzivnom jednadbom: (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 moe pozicionirati uz pomo zadnjeg argumenta: -1: nadesno od crtea, 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 moe se izraunati 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 vie vrijednosti, podruje vrijednosti x-a, program se samo proiruje 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];

  • M. Essert: Matlab programski 21

    Raunalna matematika, FSB Zagreb, 2008.

    Isto se moe nainiti i s pomou funkcije polyval. >> help polyfun polyval - izraunava polinom polyfit - trai koeficijente polinoma koji predstavlja podatke polyder - derivira polinom polyint - integrira polinom analitiki conv - mnoi polinome deconv - dijeli polinome spline - interpolira kubini 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 % mnoenje polinoma a = [1 2 3 4]; b = [4 9 16]; c = conv(a,b) c = 4 17 46 75 84 64 % vrijednost polinoma u toki(-ama) polyval(a, 2) ans = 26 polyval(a, [2 13 -6 19]) Fitting Zadano je m-toaka: { Xi, Yi }mI=1 Treba nai polinom p stupnja n tako da je p(xi) priblno jednako yi za sve i=1:m. To se postie 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 Naite polinom treeg reda koji u 20 toaka u intervalu [-2,2] po metodi najmanjih kvadrata aproksimira funkciju f(x)=1/(x+(1-x)^2).

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

  • 22 M. Essert: Matlab programski

    Raunalna 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 Naite 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 n1, 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])