# UNIVERZITET U BIHAĆU TEHNIĈKI FAKULTET BIHAĆ ODSJEK: ELEKTROTEHNIKA SMJER: INFORMATIKA

Predmet: Napredno programiranje 1 Tema: Simulacija Matematičkog klatna primjenom Matlab-a i EJS-a

Viši asistent: Mr. Edin Mujĉić Bihać , maj 2012 god.

Student: Ammar Kevilj 520

1. UVOD ............................................................................................................................................... - 2 2. OPIS I MATEMATIČKI MODEL KLATNA ............................................................................................ - 3 2.1 STVARANJE SIMULINK MODELA .................................................................................................... - 4 3. OPĆENITO O MATLAB-u i EJS-u ....................................................................................................... - 6 3.1 MATLAB ......................................................................................................................................... - 6 3.2 EJS (Easy Java Simulation) ............................................................................................................. - 7 4. GRAFIČKI INTERFEJS MATEMATIČKOG KLATNA .............................................................................. - 8 4.1 MATLAB GUI .................................................................................................................................. - 8 4.2 EJS GUI ......................................................................................................................................... - 12 5. ZAKLJUČAK ..................................................................................................................................... - 17 6. LITERATURA ................................................................................................................................... - 18 -

-1-

1. UVOD
U ovom seminarskom radu odraĊena je simulacija matematiĉkog klatna primjenom programskog paketa Matlab-a i EJS-a (Easy java simulations). Simulacija je odraĊena u oba programska paketa, radi poreĊenja i efikasnoti samih alata za ureĊivanje simulacija. Jednostavnost realizacije projekta izgradnje simulacije matematiĉkog klatna biće prikazana detaljno u narednom dijelu rada, kao poreĊenje ova dva programska alata prikazat će mo prednosti i nedeostatke i jednog i drugog alata.

-2-

2. OPIS I MATEMATIČKI MODEL KLATNA
Klatno je mehaniĉki sistem koji se kreće na periodiĉan naĉin u polju Zemljine teže. U pogledu realizacije razlikujemo sledeće vrsta klatna: matematiĉko, fiziĉko, torziono,itd. Matematiĉko klatno se sastoji od tijela mase m (koje smatramo materijalnom taĉkom) okaĉenog o tanku i neistegljivu nit, dužine l, u polju Zemljine teže (slika 1.1). Kretanje ovog tijela, koje se odvija u vertikalnoj ravni, nakon izvoĊenja iz ravnotežnog položaja, se na dalje odvija pod dejstvom sile gravitacije. U sluĉaju da su uglovi otklona mali, ovakav sistem se kreće kao prost oscilator. Sile koje djeluju na tijelo u ovom sluĉaju su sila zatezanja, Fz, i gravitaciona sila mg. Tangencijalna komponenta sile zemljine teže mg sin µ, je uvijek usmjerena ka ravnotežnom položaju, µ = 0, odnosno uvijek je suprotno usmjerena od vektora pomjeraja. Iz tog razloga je tangencijalna komponenta gravitacione sile, ustvari restituciona sila, tako da drugi Njutnov zakon, za kretanje po tangenti glasi :

Slika 1.1 Prikaz matematiĉkog klatna otklonjenog iz ravnotežnog položaja. Na prvi pogled ova jednaĉina ne opisuje linearno harmonijsko oscilovanje jer na desnoj strani ne stoji veliĉina od koje se traži izvod na lijevoj strani jednaĉine. MeĊutim, kako smo pretpostavili da je ugao otklona mali, sin µ se može aproksimirati sa µ, tako da jednaĉina kretanja matematiĉkog klatna postaje :

-3-

Kako ova jednaĉina ima formu jednaĉine koja opisuje kretanje linearnog harmonijskog oscilatora, zakljuĉujemo da se, za male uglove otklona (amplitude), kretanje matematiĉkog klatna, svodi na linearno harmonijsko oscilovanje. U skladu sa tim, riješenje posljednje diferencijalne jednaĉine je :

gdje je µmax, maksimalna ugaona elongacija, a ugaona frekvencija je :

Na osnovu ovoga je period oscilovanja klatna :

Drugim rijeĉima, period i frekvencija matematiĉkog klatna zavise jedino od dužine klatna i od ubrzanja zemljine teže. Kako je period nezavisan od mase klatna, može da se zakljuĉi da sva klatna jednake dužine, koja osciluju na istom mjestu (isto g), osciluju sa istim periodom.

-4-

Sistem za upravljanje matematiĉkim klatnom dat je na sljedećoj slici :

Slika 2.1 Simulink model matematiĉkog klatna. Objašnjenje blokova iz simulinka koji su iskorišteni za simulacija sistema: Step blok - generira korak izmeĊu dva definisana nivoa za neko odreĊeno vrijeme.

Gain blok – vrši množenje neke ulazne vrijednosti sa nekom konstantnom vrijednošću

Integrator blok – vrši integriranje ulazne vrijednosti i korisiti se sa kontinuiranim sistemima

Sum block – provodi sabiranje ili oduzimanje sa ulaznim vrijednostima

To File blok – ispisuje izlazne vrijednosti u obliku matrice u MAT datoteku

To Workspace blok – ispisuje izlazne vrijednosti u workspace Matlaba u obliku niza ili strukture

-5-

3. OPĆENITO O MATLAB-u i EJS-u 3.1 MATLAB
Grafiĉko korisniĉko suĉelje (GUI) je grafiĉki prikaz u jednom ili više prozora koji sadrže kontrole, pod nazivom komponente, koje omogućuju korisniku obavljanje interaktivnih zadataka.Korisnik GUI-a ne mora stvoriti skriptu ili tip naredbe u komandnoj liniji kako bi ostvario zadatke.GUI komponente mogu ukljuĉiti izbornike, alatne trake, tipke, popis okvire, klizaĉe.GUI kreirani korištenjem alata MATLAB, mogu obavljati bilo koju vrstu raĉunanja, ĉitati i pisati datoteke sa podacima, komunicirati sa drugim GUI-ima, te prikazati podatke u tablicama. Grafiĉko korisniĉko suĉelje MATLAB razvojne okoline, pruža skup alata za stvaran ja korsiniĉkog grafiĉkog suĉelja(GUIs).Ovi alati pojednostavljuju proces postavljanja i programiranja GUI-a.Korištenjem uputstva za ureĊivanje izgleda, GUI možete popuniti povlaĉenjem ili klikanjem GUI komponenti kao što su – ose, paneli, tipke (gumbovi), tekstualna polja, klizaĉi, itd. u površinu za izgled.TakoĊer možete stvoriti izbornike i kontekst izbornike za GUI.Iz editora za izgled, možete mijenjati veliĉinu GUI-a, možete mijenjati izgled i dojam komponenti, zatim možete uskladiti komponente, napraviti hijerarhijski popis komponenata objekata, te postaviti GUI opcije. Prije poĉetka izgradnje GUI-a morate ga dizajnirati.Zatim morate postaviti par zahtijeva:     Tko će biti korisnici GUI-a Šta želite da GUI radi Kako će korisnici komunicirati sa GUI-em Koje komponente GUI-a treba proslijediti funkciji

Pri projektovanju bilo kojeg softwera, morate razumjeti svrhe koje novi GUI treba zadovoljiti.Vi ili potencijalni korisnici GUI-a trebaju dokumentirati zahtijeve korisnika, što prije, nego što se GUI poĉne izraĊivati. Postoji mnogo naĉina za pokretanje GUI-a.Možete pokrenuti GUI iz:     iz komandne linije tako da upišete GUIDE iz Start izbornika odabriom MATLAB>GUIDE (GUI Builder) iz MATLAB File (izbornika) odabirom New > GUI iz MATLAB alatne trake klikom na gump GUIDE

-6-

3.2 EJS (Easy Java Simulation)
EJS (Easy Java Simulation) je alat za modeliranje koji omogućuje znanstvenicima (i to ne nužno raĉunalnim struĉnjacima) laku kreaciju simulacija. S tehniĉkog gledišta, EJS olakšava modeliranje te omogućuje jednostavnu, ali i moćnu konceptualnu strukturu za izradu simulacija. Alat pruža red radnih zaslona koji se koriste za implementaciju modela i stvaranje grafiĉkog suĉelja. EJS automatizira zadatke kao što su numeriĉko raĉunanje uobiĉajenih diferencijalnih jednadžbi i animacije. Komunikacija izmeĊu programa i krajnjeg korisnika je omogućena bez potrebe za low-level programiranjem. Oĉito, dio zadatka ovisi o krajnjem korisniku. Krajnji je korisnik odgovoran za nalaženje odreĊenog modela nekog fenomena te dizajniranje i odabir kranjeg izgleda modela. EJS pokazuje svoje dobro lice upravo kod zadataka visokog stupnja koji su više vezani uz samu znanost nego uz programiranje. Korisnik se potiĉe da svoje vrijeme i energiju posveti uĉenju znanosti, tj. na nešto što samo raĉunalo ne može. EJS je Java program koji se može koristiti na svim operativnim sustavima koji podržavaju Java Virtual Machine (VM). Pošto je Java dizajnirana da bude neovisna o platformama, EJS suĉelje na Mac OS X, Unix-u i Linux-u identiĉno je onom na Windows operativnom sustavu. Ovdje je dan opis za Windows Unutar novonapravljenog direktorija nalazi se file koji se zove EjsConsole.jar. Duplim klikom miša pokreće se EJS konzola (Slika 3.2.) i file chooser dijalog (Slika 3.2.) koji će biti opisan kasnije.

Slika 3.2 EJS konzola.

-7-

4. GRAFIČKI INTERFEJS MATEMATIČKOG KLATNA 4.1 MATLAB GUI
U sljedeće dijelu rada će mo se upoznati sa završnom aplikacijom koja je realizirana u Matlab okruženju. TakoĊer će mo posjasniti neke važnije dijelove same aplikacije kao logiku sistema i njen izvršni kod. Nakon pokretanja glavnog m-file-a otvorit će se prozor kao na sljedećoj slici :

Slika 4.1 Poĉetni prozor aplikacije matematiĉko klatno. Kao što vidimo na slici se nalaze tri panela, od kojih su dva panela za predstavljanje podataka, a jedan panel je u svhru odreĊivanja ulaznih varijabli sistema. Na prvom panelu koji se nalazi u gornjem lijevom uglu se nalazi slika za simulaciju rada samog klatna. U pocetnim uslovima ona miruje, ali ukoliko ugao otklona klatna bude veci simlacija će poceti sa radom. Na panelu ispod se nalazi skup „slider-a“ koji služe za postavljanje ulaznih varijabli. Osnovne promjenjive kod klatna su masa, gravitacija, duzina užeta i ugao otklona. Pošto je rijeĉ o lineranom matematiĉkom klatnu nismo uzeli u obzir trenje užeta pa tako ovakva simulacija je harmonijska. Kada postavimo parametre i obilježimo prikaz dijagrama potrebno je da kliknemo da gumb START. Nakon ovoga simlulacija klatna će poĉeti da se izvršava, a na desnom panelu će se pokazati dijagrami kretanja klatna i energije. Zbog problema procesnog programiranja kao što je i sam Matlab nije bilo u mogućnosti izvršiti dvije simulacije istovremeno pa je iz toga razloga simulacija kretanja dijagrama izostavljena.Ovo je bilo moguće uĉiniti samo zato što je klatno linerano pa je dijagram kretanja klatna i energije periodiĉan.
-8-

Na sljedećoj slici će mo prikazati kako izgleda naša aplikacija kada joj se zadaju parametri :

Slika 4.2 Prikaz aplikacije sa zadanim parametrima. TakoĊer je važno napomenuti da sama aplikacija je uzroĉno posljediĉna tj. Kada pmjerimo samo jedan parametar na prozoru se pokazuju automatske promjene simulacije. Ovo je bitno iz toga razloga da za svake podešene parametre nemoramo stisnuti gumb Start. Pritiskom na Gumb Stop simulacija se zaustavlja a dijagrami kretanja i energije se poništavaju. A sada da pogledamo šta se krije u pozadini ove simulacije.Sama aplikacija je saĉinjena od glavnog m file-a i tri pomoĉna funkcijska fajla. Prvi funkcijski i najbitniji file-j je onaj za simulaciju kretanja klatna. Sada pogledajmo sami kod tog file-a :
function [ ] = simKlatno(g,endTime,mass,radius,theta,rodLength,slika) deltaTime = 1/50; %Vrijeme promjene slike na dijagramu %Postavke promjenjivih rodPivotPoint = [2 2]; %koordinate klatna velocity = [0 0]; %% Simulacija assert(radius < rodLength); position = rodPivotPoint - (rodLength*[-sind(theta) cosd(theta)]); %pozicija klatna %Postavljanje grafa axes(slika); xlim(slika, [(rodPivotPoint(1) - rodLength - radius) (rodPivotPoint(1) + rodLength + radius)] ); ylim(slika, [(rodPivotPoint(2) - rodLength - radius) (rodPivotPoint(2) + rodLength + radius)] );

-9-

rectHandle = rectangle('Position',[(position - radius/2) radius radius],... 'Curvature',[1,1],'FaceColor','g'); %kugla klatna hold on plot(rodPivotPoint(1),rodPivotPoint(2),'^'); %pivot lineHandle = line([rodPivotPoint(1) position(1)],... [rodPivotPoint(2) position(2)]); % hold off grid on %Kreiranje same simulacije for time = (deltaTime:deltaTime:endTime) drawnow; %Ukupna gravitaciona sila gravitationalForceCylindrical = [mass*g*cosd(theta) mass*g*sind(theta)]; %u slučaju da postoji trenje uežeta totalForce = gravitationalForceCylindrical; rodForce = [-totalForce(1) 0]; %cylindrical coordinates totalForce = totalForce + rodForce; acceleration = totalForce / mass; %F = ma velocity = velocity + acceleration * deltaTime; rodLength = rodLength + velocity(1) * deltaTime; theta = theta + velocity(2) * deltaTime; position = rodPivotPoint - (rodLength*[-sind(theta) cosd(theta)]); %Update grafa sa novom pozicijom set(rectHandle,'Position',[(position - radius/2) radius radius]); set(lineHandle,'XData',[rodPivotPoint(1) position(1)],'YData',... [rodPivotPoint(2) position(2)]); End %Kraj for petlje za simulaciju end %kraj funkcijskog fajla.

Pored ovog funkcijkog fajla takoĊer se nalaze još dva, ato su funkcija za dijagram kretanja i dijagram energije. Oni su po dosta sliĉni zato će mo prikazati samo dijagram simulacije energije i objasniti logiku samog koda :
function [ ] = energija(teta,m,G,d,obj_graf) axes(obj_graf); ugao=0:0.025:teta; y=m*G*d*sin(ugao); plot(ugao,y,'r.'); xlabel('X-osa'); ylabel('Y-osa'); hold on grid on y1=m*G*d*sin(ugao+(pi/2)); plot(ugao,y1,'g.'); legend('Potencijalna','Kineticka'); hold on grid on end

Sama funkcija ima svoje ulazne varijable koje su joj potrebne za rad.Prvo i najvažnije je postavljanje objekta upravljanja grafa na sami plot. Zatim smo odredili kretanje ugla i prikazali izlaznu formulu za uparvljanje energije. Vidimo da je ovaj dijagram sastavljen od dvije slike koje su postavljene na zajedniĉki plot. TakoĊer smo malo ukrasili sami dijagram postavljajući oznake promjenjivih i mreže.
- 10 -

Jedna od najvažnijih metoda kod objektnog upravljanja u Matlabu je metoda Callback preko koje se stvara akcija na samoj aplikaciji. Ova metoda je sliĉna kod gotvo sve jednog parametra a sastoji se od toga da se uzmu vrijednosti parametara, ispitaju uslovi a zatim se proslijede samim funkcijama za cratanje grfova i klatna. Najjednostavnije za prikazati je callback metoda za gumb start.Ona će biti prikaza u narednom dijelu koda :
function start_Callback(hObject, eventdata, handles) % hObject handle to start (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) teta=get(handles.ugao,'Value'); uslov=get(handles.c1,'Value'); uslov1=get(handles.c2,'Value'); if (teta > 0) cla(handles.kretanje_klatna,'reset'); cla(handles.axes8,'reset'); cla(handles.axes5,'reset'); G=get(handles.gravitacija,'Value'); m=get(handles.masa,'Value'); d=get(handles.duzina,'Value'); T =1000; r = m * 0.1; if (uslov) brzina(teta,d,G,handles.axes5); else cla(handles.axes5,'reset'); end if (uslov1) energija(teta,m,G,d,handles.axes8); else cla(handles.axes8,'reset'); end simKlatno(-G,T,m,r,teta,d,(handles.kretanje_klatna)); guidata(hObject, handles); else msgbox('Postavite ugao veci od nule','Obavjestenje','warn'); end

Ovdje je važno napomenuti da nije moguće zapoĉeti simulaciju ukoliko ugao otklona nije veći od nule. TakoĊer potrebno je resetovati prethodne dijagrame da bi na njih postavili nove. Potrebno je uzeti vrijednosti parametara pomoću metode : get (handles.objekat_upravljanja,'Value').TakoĊer je važno napomenuti da u ovoj funkciji za start simulacije se nalaze dva uslova u kojima se ispituje da li su chekirani boxovi za simulaciju dijagrama kretanje i energije. U koliko je odovor taĉan oni će biti prikaza pomoću svojih funkcija koje smo pojasnili u prethodnom koraku.Svaki od parametara imaju svoje poĉetne uvijete bez kojih simulacija ne bih bila moguća a ni samo pokretanje aplikacije nebih bilo izvodljivo.

- 11 -

4.2 EJS GUI
Prije nego pokažemo kako ovu aplikaciju realizovati pmoću EJS-a potrebno je da malo bolje se upoznamo sa ovim okruženjem. Na samom startu ĉeka nas konzola koju smo prethodno pokazali, azatim poslije nam se otvara glavni prozor ovog okruženja.

Slika 4.3 Radni prozor EJS okruženja.

- 12 -

Slika 4.4 Prikaz varijabli za simulaciju

- 13 -

Slika 4.5 Definisanje diferencijalnih jednadžbi prvog reda.

- 14 -

Iako bismo Evolution panel mogli nazvati srcem programa, ne raĉunaju se sve varijable modela ovdje. Varijable se mogu raĉunati i poslije evolucije. Koristeći varijable koje su izraĉunate evolution algoritmom, moguće je odrediti tzv. vanjske varijable. Treći radni panel u EJS-u je panel naziva View (izgled). Ovaj panel omogućava stvaranje grafiĉkog suĉelja koje sadrži vizualizaciju same simulacije, interakciju korisnika i kontrolu programa s minimalnim programiranjem. Slika 4.6. prikazuje izgled modela klatna. Desni okvir panela prikazan na slici 4.6. sadrži kolekciju elemenata koji nam služe za stvaranje grafiĉkog suĉelja. Svaki od tih elemenata je specijalizirani objekt s on-screen prezentacijom. Da bi dobili informacije o pojedinom elementu, potrebno je kliknuti na ikonu i stisnuti F1 ili desnim klikom odabrati Help meni. Pri izradi korisniĉkog suĉelja, radi se okvir i dodaju se elementi (npr. gumbi i grafovi) na „drag and drop“ naĉin. Lijevi okvir Tree of elements (stablo elemenata), takoĊer prikazan na slici 4.6., prikazuje strukturu suĉelja ovog modela. U ovom primjeru stablo elemenata sadrži prozor, glavni okvir, koji sadrži sve elemente od kojih je napravljeno suĉelje. Stablo prikazuje njihova imena koja opisuju njihovu namjenu. Desnim klikom na pojedini element otvara se Meni u kojem postoji mogućnost mijenjanja strukture pojedinog elementa. Svaki element ima set vlastitih parametara naziva properties koji nam omogućuju ureĊivanje prikazivanja i ponašanja elementa. Dvostrukim klikom na element u stablu, otvara se tzv. properties inspector. Tu su karakteristike, kao npr. boja, obiĉno namještene na konstantnu vrijednost (npr. RED (crvena)). Varijable iz modela se takoĊer mogu koristiti za postavljanje osobina elemenata. Mogućnost spajanja varijable i osobina, bez potrebe za programiranjem, kljuĉ je za pretvaranje

Slika 4.6 View panel.

- 15 -

Potrebno je sada povezati varijable i incijalizacije sa varijablama koje se nalaze na panelu, a to će mo uĉiniti tako što će za svaki element pronaći odgovarajuću varijablu iz incijalizacije i uvrstiti ti je u njegov property. Iz ovog primjera vidi se kako je Easy Java Simulation doista moćan alat koji nam dopušta da iskoristimo znanje o nekom modelu. Postoji već mnogo napravljenih modela koji su kompleksniji - kako fizikalno tako i vizualno. Da bismo mogli pokrenuti simulaciju moramo kliknuti zelenu ikonu Run. Kada kliknemo ikonu, varijable se iniciraju i u mogućnosti smo pokrenuti simulaciju. Kada kliknemo na ikonu, ikona mijenja boju u crvenu i to oznaĉava da je simulacija spremna za pokretanje. Sve dok ikona svijetli nismo u mogućnosti mijenjati varijable i ostale opcije u EJS-u. Za zaustavljanje simulaciju kliknite desnim gumbom miša na ikonu i stisnite Kill current simulation.

Slika 4.7 Pokretanje simulacije.

- 16 -

5. ZAKLJUČAK
Kroz ovaj seminarski rad smo vidjeli da je Matlab jako moćan programski paket, koji sadrži mnogo funkcija i dodataka koji omogućuju simulaciju bilo kojeg sistema koji se može matematiĉki opisati, kao i kreiranje korisniĉkog interfejsa, tj. GUI-a za korisnike koji ne moraju ni da poznaju ovaj programski paket. TakoĊer smo se upoznali sa novim okruženjem za kreiranje simulacije koje nam dosta povoljnije i brže služi za izradu naših aplikacija, a bazirano je na Javi. Rad u EJS-u ne zahtjeva programerske vještine te omogućava studentima da većinu vremena posvete znanosti i problemima vezanim uz modele. Problem kod ovog programa je to što je za neke kompliciranije simulacije nužno poznavati skriptu, tj. napisati dobre naredbe, jer u protivnom nije moguće napraviti dobre modele.

- 17 -

6. LITERATURA
[1] Introduction to Simulink with Engineering Applications, Steven T. Karris [2] Graphics and GUIs with MATLAB - Patrick Marchand and O. Thomas Holland [3] www.mathworks.com [4] http://www.modelbenders.com/encyclopedia/encyclopedia.html [5] http://www.um.es/fem/EjsWiki/ [6] http://en.wikipedia.org/wiki/Simulation [7] Rudolf Krsnik, Fizika 1

- 18 -