Modeliranje i simuliarnje u ivujovic/stare_stranice/pdf_zip_word/ ¢  Modeliranje i simuliarnje

  • View
    3

  • Download
    0

Embed Size (px)

Text of Modeliranje i simuliarnje u ivujovic/stare_stranice/pdf_zip_word/ ¢  Modeliranje i...

  • 1

    Modeliranje i simuliarnje u elektrotehnici

    (Matlab/Simulink)

    Predavanje i vježbe Napredni postupci

    Ovaj materijal se ne smije citirati, kopirati ili distribuirati bez dozvole izvornih autora. Vlasnik stranice samo je urednik materijala za obrazovne svrhe.

    Statistika • Kada se analiziraju podaci, potrebno je izračunati

    statistiku. »scores = 100*rand(1,100); • Za to služe “built-in functions” mean, median, mode • Podaci se mogu grupirati u histogram naredbom: »hist(scores,5:10:95); • koja iscrtava histogram s točkama centriranim u 5, 15,

    25…95 »N=histc(scores,0:10:100); • Ovaj primjer daje broj pojavljivanja između određenih

    vrijednosti (u intervalima) 0 > y = floor(rand(1,100)*10+6); daje 100 ravnomjerno distribuiranih cijelih brojeva između 10 i 15. U ovom slučaju je bolje koristiti naredbu floor ili ceil (pod – donja vrijendost ili krov – gornja vrijednost) nego round (zaokruži). >> y = randn (1,1000); >> y2 = y*5+8; povećava std na 5 i srednju vrijednost na 8.

    Administrator Text Box Zacrnjeni slide-ovi su namjerno takvi radi zaštite autorskih prava!!!

  • 2

    Vježba: Vjerojatnost • Izvšit ćemo simulaciju Brownian-ove kretnje u 1

    dimenziji. Pozvat ćemo skriptu ‘brown’

    • Napravit ćemo vektor od 10,000 elemenata gdje su svi članovi 0.

    • Napisat ćemo petlju da bi pratili položaj čestice u svakom trenutku

    • Start je u 0. Da bi dobili novi položaj, odabrat ćemo slučajan broj i ako je < 0.5, kretnja je ulijevo, a za > 0.5 udesno. Pohranjuju se novi položaji na njihovim mjestima u vektoru.

    • Potom se iscrtava histogram s 50 intervala u kojima su položaji čestice.

    Vježba: Vjerojatnost • Skripta brown.m

    x=zeros(10000,1); for n=2:10000 if rand

  • 3

    Cells: inicijalizacija Da bi se inicijalizirala čelija potrebno je odrediti njenu

    veličinu, npr: »a=cell(3,10); Ovo znači: a je čelija s 3 reda i 10 stupaca. Ili se čelija može ručno upisati u zagradama {}, npr: »c={'hello world',[1 5 6 2],rand(3,2)}; c je čelija s 1 redom i 3 stupca. Svaki element čelije može

    biti bilošto. Da bi se pročitao neki element koriste se zagrade {}: »a{1,1}=[1 3 4 -10]; »a{2,1}='hello world 2'; »a{1,2}=c{3};

    Strukture (Structs) • Strukture dopuštaju da se relevantne varijable nazovu

    svojim imenom iako su unutar strukture. Poput su C-struktura, koje su objekti s poljima (fields). • Da bi se inicijalizirale prazne strukture koristi se naredba: »s=struct([]); - size(s) bi u ovom slučaju bio 1x1 - incijalizacija je opcijska, ali je preporučljiva kada su u

    pitanju velike strukture • Dodavanje polja vrši se: »s.name= 'Jack Bauer'; »s.scores= [95 98 67]; »s.year= 'G3'; - Polja mogu biti svašta, kao: matrice, čelije, pa čak i druge

    strukture - Korisni su za držanje varijabli zajedno • Za više infromacija pogledati doc struct

    Strukture Da bi se inicijalizirala struktura, potrebno je zadati polje

    i vrijednosti parova: >> ppl=struct(‘ime’,{‘Ivan’,’Igor’,’Ana’},..., ‘starost’, {33,

    25, 18},’starost djece’,{[2;4],1,[]}); - veličina(s2)=1x3 - svaka čelija mora imati istu veličinu

    >> osoba=ppl(2); - osoba je struktura s poljima ime, starost, djeca - vrijednosti polja su drugi indeks u svakoj čeliji

    >> osoba.ime Rezultat je: Igor

    Pristup strukturama • Da bi se pristupilo polju u strukturi, potrebno je dati ime

    polju. »stu=s.name; »scor=s.scores; - Strukture 1x1 su korisne kada se koristi puno varijabli u

    funkciji. Sve se stave u strukturu. Za pristup nx1 strukturnim poljima, koriste se njihova

    mjesta: »person=ppl(2); - person je struct s imenom, starošću i/ili drugim podacima »personName=ppl(2).name; - Ime osobe je ‘Igor' »a=[ppl.starost]; - a je 1x3 vektor starosti (godina)

  • 4

    Vježba: čelije

    • Napišite skriptu sentGen • Neka je čelija veličine 3x2, a u njoj su

    imena ljudi u prvom stupcu, a napomene u drugom.

    • Izaberite 2 slučajna cijela broja (1-3) • Ispišite rečenicu u obliku ‘[ime] je

    [napomena].’ • Startajte skriptu nekoliko puta

    Vježba: Čelije Skripta sentGen

    c=cell(3,2); c{1,1}=‘John’;c{2,1}=‘Mary Sue’; c{3,1}=‘Gomer’; c{1,2}=‘smart’;c{2,2}=‘blonde’;c{3,2}=‘hot’ r1=ceil(rand*3);r2=ceil(rand*3); disp([ c{r1,1}, ’is ‘, c{r2,2}, ’.’]);

    Unošenje/iznošenje (Import/Export) slika

    Slike se mogu unijeti u matlab npr. s: im=imread('myPic.jpg'); MATLAB podržava razne formate slike: -jpeg, tiff, gif, bmp, png, hdf, pcx, xwd, ico, cur, ras, pbm,

    pgm, ppm . U help imread može se vidjeti puna lista i detalji Da bi se upisala slika (tj. podaci iz matrice u slikovnu

    datoteku, write) potrebno je definirati matricu RGB formate i tzv. colormap (mapu boja, definicija boja – help colormap za više podataka):

    »imwrite(mat,jet(256),'test.jpg','jpg'); Pogledajte i help imwrite za opcije.

    Animacije U MATLAB se može lako uloviti slike iz filma i ponovo ih

    priazivati. Najuobičajeniji formati filmova su: - avi - animated gif • Avi - Dobar je kao se ima prirodne scene s mnogo boja i jasno

    definiranim rubovima • Animated gif - Dobar za iscrtavanje filmova iz crteža ili teksta kada ima

    samo nekoliko boja (max 256) i kada su dobro definirane linije

  • 5

    Pravljenje animacija

    Animacija se pravi tako da se iscrtava slika za slikom uz pauzom između prikazivanja slika. Primjer:

    »close all

    »for t=1:30

    »imagesc(rand(200));

    »colormap(gray);

    »pause(.5);

    »end

    Snimanje animacija kao filmova Film je niz slika koje treba uhvatiti i snimiti. Primjer: »close all »for n=1:30 »imagesc(rand(200)); »colormap(gray); »M(n)=getframe; »end Da bi se prikazao film koristi se naredba: »movie(M,2,30); Ovo znači da se film prikazuje 2 puta s brzinom 30 slika u

    sekundi (30 frames per second, fps). Da bi se ovaj film spremio na HDD koristi se npr.: »movie2avi(M,'testMovie.avi','FPS',30);

    Upravljači (Handles) Upravljači grafike (Handle Graphics) su sustav grafičkih objakata koje

    Matlab koristi da bi implementirao graf ili vizualizacijsku funkciju. Svaki objekt se može okarakterizirati s nekoliko osobina. One se mogu koristiti za upravljanje ponašanjem i izgledom grafa. Kada se pozove funkcija za crtanje, Matlab generira graf uporabom različitih grafičkih objekata, npr. figure window, axes, lines, text, ... Kada MATLAB kreira objekt, daje mu identifikator (handle). Ti identifikatori koriste se kao upravljači za svojstva objekata.

    Svaki grafički objekt ima upravljače, npr.: »h=plot(1:10,rand(1,10)); % Daje upravljač za iscrtanu liniju. »h2=gca; % daje upravljač za trenutne (koordinatne) osi »h3=gcf; % daje upravljač za trenutnu sliku Da bi se vidjele trenutne vrijednosti značajke koristi se get: »get(h); ILI »yVals=get(h,'YData'); Za promjenu značajki se koristi set: »set(h2,'FontName','Arial','XScale','log'); »set(h,'LineWidth',1.5,'Marker','*'); Sve što se vidi na slici opisano je preko upravljača.

    “display” Kada funkcije koriste disp da bi ispisivale (print) poruke,

    npr.: »disp('startingloop') »disp('loopis over') disp ispisuje zadani string u komandnom prozoru.

    Također je korisno prikazati vrijednost varijable: »disp(strcat(['loopiteration ',num2str(n)]));

    - strcat povezuje (concatenates) dane stringove.

  • 6

    Otkrivanje greški (debugging) U Matlabovom editoru postoji mogućnost otkrivanja

    grešaka u programu. Da bi se ta mogućnost koristila, potrebno je označiti kontrolne točke u programu (set breakpoints). - točke se označuju klikom na broj retka programa kada je aktivirana ikonica za označavanje točki - uspješno označena točka prepoznaje se crvenom točkom na početku retka - starta se program - program pauzira na mjestu označene točke - varijable se mogu ispitati u komandnom prozoru - s “step to next ” se prelazi na sljedeću točku - upravljanje s otkrivanjem greški je jednostavno s ikonicama na traci alata u vrhu editora. Ne zaboravite isključiti ovaj način rada kada završite kontrolu.

    Otkrivanje greški (debugging)

    Vježba: Otkrivanje greški Koristite degugger za otkrivanje i ispravljanje greške u

    kodu: x = 1:10; Mat = rand (3,10); vekt=rand(3,1); odg1=x*(Mat^2)’; odg2 =odg1 + (vekt./rand(1,3)’); odg3 = odg2*(Mat*x); Odg4 = Odg3;

    Mjere učinkovitosti Ponekad može biti korisno znati koliko se dugo određeni

    kod izvršava. - Da bi se predvidjelo koliko dugo petlja traje - Da se izdvoji neučinkoviti programski kod • Vrijeme izvođenja operacija može se mjeriti operacijama

    tic/toc. Npr. »tic »CommandBlock1 »a=toc; »CommandBlock2 »b=toc; - tic resetira timer - Svaki toc daje trenutnu vrijednost u sekundama od tic. - Može se nakon jednog tic imati više toc.

    Administrator Rectangle

  • 7

    Mjere učinkovitosti Kod složenijih programa može se koristiti funkcija profile,

    koja u GUI ispisuje vrijeme izvođenja svake naredbe.

    >> profile on

    Nakon ovoga se poziva program koji se ispituje, a nakon toga se rezultat može lako pregledati s:

    >> profile viewer

    koji grafički prikazuje razultat.

    Što su alatke (Toolboxes)? Alatke sarže funkcije specifične za neko određeno

    područje, npr.: obrada signala, statistika, optimizacija...

Related documents