Tieteellinen laskenta 2 Törmäykset



Samankaltaiset tiedostot
Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Zeon PDF Driver Trial

Matlabin perusteita Grafiikka

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Luvun 8 laskuesimerkit

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

Moottorin kierrosnopeus Tämän harjoituksen jälkeen:

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Fysiikan ja kemian perusteet ja pedagogiikka Kari Sormunen Kevät 2012

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Nspire CAS - koulutus Ohjelmiston käytön alkeet Pekka Vienonen

KERTAUS KERTAUSTEHTÄVIÄ K1. P( 1) = 3 ( 1) + 2 ( 1) ( 1) 3 = = 4

KJR-C1001 Statiikka ja dynamiikka. Luento Susanna Hurme

Ohjelmoinnin perusteet Y Python

Syötteen ainoalla rivillä on yksi positiivinen kokonaisluku, joka on alle = Luvussa ei esiinny missään kohtaa numeroa 0.

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Matlab- ja Maple- ohjelmointi

Ohjelmoinnin perusteet Y Python

Laskuharjoitus 9, tehtävä 6

Octave-opas. Mikä on Octave ja miksi? Asennus

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Ohjelmistoradio tehtävät 4. P1: Ekvalisointi ja demodulaatio. OFDM-symbolien generoiminen

L a = L l. rv a = Rv l v l = r R v a = v a 1, 5

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

Harjoitus 5 -- Ratkaisut

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin perusteet Y Python

Valitse ruudun yläosassa oleva painike Download Scilab.


Ohjelmoinnin peruskurssi Y1

8. Yhtälöiden ratkaisuja Newtonilla, animaatioita

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python


Numeerinen analyysi Harjoitus 3 / Kevät 2017

Matriisilaskenta Laskuharjoitus 5 - Ratkaisut / vko 41

Ohjelmoinnin perusteet Y Python

805324A (805679S) Aikasarja-analyysi Harjoitus 5 (2016)

Harjoitus 2: Ohjelmointi (Matlab)

Harjoitustyö 3. Heiluri-vaunusysteemin parametrien estimointi

Nopeus, kiihtyvyys ja liikemäärä Vektorit

IDL - datan sovitus. ATK tähtitieteessä. IDL - esimerkiksi linfit. IDL - esimerkiksi linfit

Ohjelmoinnin peruskurssi Y1

KJR-C1001 Statiikka ja dynamiikka. Luento Susanna Hurme

MATEMATIIKKA 5 VIIKKOTUNTIA. PÄIVÄMÄÄRÄ: 8. kesäkuuta 2009

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

Ohjelmoinnin perusteet Y Python

S Laskennallinen Neurotiede

Harjoitus 5 (viikko 41)

YKSIKÖT Tarkista, että sinulla on valittuna SI-järjestelmä. Math/Units Ohjelma tulostaa/käyttää laskennassaan valittua järjestelmää.

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3

TEHTÄVIEN RATKAISUT. b) 105-kiloisella puolustajalla on yhtä suuri liikemäärä, jos nopeus on kgm 712 p m 105 kg

Sukelluskeräily, Pelihahmon liikuttaminen. Tee uusi hahmo: Pelihahmo. Nimeä se. Testaa ikuisesti -silmukassa peräkkäisinä testeinä (jos) onko jokin

Kenguru 2017 Student lukio

Ohjelmoinnin perusteet Y Python

Integrointialgoritmit molekyylidynamiikassa

1. Lineaarialgebraa A := Matriisin osia voidaan muutella päivittämällä riviä, saraketta tai osamatriisia (Matlabmaisesti): B :=

VIS Online 2.0 version uudistukset

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kokeellista matematiikkaa SAGE:lla

Ohjeita LINDOn ja LINGOn käyttöön

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

Digitaalisen arkkitehtuurin alkeet

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

Ohjelmoinnin perusteet Y Python

Sisäänkirjaus Uloskirjaus. Yritystieto

Johdatus L A TEXiin. 7. Taulukot ja kuvat. Dept. of Mathematical Sciences

Harjoitus 2: Ohjelmointi (Matlab)

Pedanet oppilaan ohje Aleksanteri Kenan koulu Eija Arvola

MATLAB 7.1 Ohjelmointiharjoitus. Matti Lähteenmäki

Nexetic Shield Unlimited

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin perusteet Y Python

Esimerkki: Tietoliikennekytkin

Ohjeita kirjan tekemiseen

Tilastolliset toiminnot

PIKAOHJE USEIDEN VASTAANOTTAJIEN LISÄÄMISEEN YHTIÖN JAKELULISTOILLE

Ensimmäisen kertaluvun yhtälön numeerinen ratkaiseminen

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Transkriptio:

Tieteellinen laskenta 2 Törmäykset Aki Kutvonen Op.nmr 013185860

Sisällysluettelo Ohjelman tekninen dokumentti...3 Yleiskuvaus...3 Kääntöohje...3 Ohjelman yleinen rakenne...4 Esimerkkiajo ja käyttöohje...5 Tulosten analysointi...6 Animointi...6 Nopeuden itseisarvojen summa...8 Nopeusjakauma...10 2

Ohjelman tekninen dokumentti Yleiskuvaus Simuloidaan pallojen kimmoisia törmäyksiä laatikoissa toisiinsa ja laatikon reunoihin ja tulostetaan pallojen nopeusjakaumaa ajan funktiona. Käyttäjä valitsee simulaation aika-askeleen, simulaation ajan, laatikon koon, nopeusjakauman energiaresoluution ja skaalan, pallojen lukumäärän, alkupaikat ja nopeudet, sekä pallojen massat ja säteet. Alkutilanne syötetään ohjelmaan antamalla tiedoston nimi, jonne ominaisuudet ovat merkittynä sarakkeittain, jokainen pallo omalla rivillään. Ohjelma suorittaa simulaation ja tallentaa ajanhetken, jokaisen pallon koordinaatin ja säteen tiedostoon tulokset.txt, josta esim matlabilla voidaan simuloida graafisesti pallojen liikettä. Ohjelma myös tulostaa tiedostoon nopeusjakauma.txt ajanhetken, nopeuden ja pallojen lukumäärän, jotka ovat resoluution sisällä energiasta. Tästä voidaan havainnoida erilaisille systeemeille nopeusjakauman muutosta ajan funktiona. Ohjelma koostuu kolmesta tiedostosta, pallo.hh:sta, pallo.cc:stä sekä törmäykset.cc:stä. Pallo.cc sisältää luokan pallo ominaisuuksineen, sekä tietueen vektori, joka koostuu kahdesta doubleliukuluvusta. Tiedosto pallo.hh sisältää luokan pallo funktiot. Muut funktiot sekä varsinainen pääohjelma on tiedostossa törmäykset.cc. Kääntöohje Ohjelmien tormaykset.cc ja pallo.cc tarvitsemat pallo-luokan funktiot ovat tiedostossa pallo.hh, tämä on otettu ohjelmiin mukaan komennolla #include pallo.hh. Ohjelman saa käännettyä esim. komennolla c++ -lm -o tormaykset.exe tormaykset.cc pallo.cc, kun kaikki 3 tiedostoa ovat samassa kansiossa jossa komento suoritetaan. Edellämainittu komento luo exe-tiedoston tormaykset.exe, josta ohjelma käynnistyy. 3

Ohjelman yleinen rakenne Ohjelman yleinen rakenne, tarkempaa kuvausta varten katso kooditiedostot, joissa esim. funktiot ovat runsaasti kommentoidut. Kysytään käyttäjältä tarvittavat tiedot -> ->Tallennetaan tiedot varatuihin muuttujiin ja taulukoihin, luetaan pallojen lukumäärä tiedostosta ->Muodostetaan vector pallot, jonka muodostin täyttää pallo-olioilla for-silmukassa annetuista tiedoista, sekä luodaan apumuuttujat varsinaista simulaatiolooppia varten ->i-silmukka ->j-silmukka ->otetaan pallot-vectorista pallo j kun i=0 tarkistetaan alkuehdot ja poistetaan virhepallot ->katsotaan osuisiko pallo seinään seuraavalla i-kierroksella, jos osuisi, niin muutetaan paikka ja nopeus sellaisiksi, että seuraavalla kierroksella pallon ominaisuudet ovat oikein ->k-silmukka. Kun i=0, tarkistetaan ettei pallo ole päällekkäin j-pallon kanssa. Jos k- silmukan pallo on sama kuin j ->hyppy kierroksen yli ->jos pallo osuisi palloon j ensi kierroksella->funktio törmäys->laskee pallojen törmäyksien jälkeiset nopeudet. Käytetään tehtyjä vektori-tietueen funktioita. ->korjataan pallojen paikka siten, että seuraavalla ajanhetkellä pallot ovat oikeassa paikassa (korjaus on eksakti, virhettä voi kuitenkin tulla, jos k-silmukan korjattu pallo olisikin ollut törmäämässä samalla aika-askeleella vielä palloon joka on vectorissa isommalla indeksillä kuin j) ->k-looppi päättyy ->j-pallolle aika kuluu eteenpäin ja muutetaan paikkaa pallo-luokan koordmuutos-funktiolla ->tulostetaan j-pallon aika, paikka ja säde tiedostoon ->j-looppi päättyy ->nopeusjakaumasilmukka käy läpi mahdolliset energiavälit annetuilla arvoilla ->laskee kuinka monta palloa oli milläkin välillä ja tulostaa ajan, välin ja pallojen lukumäärän tiedostoon ->i-silmukka päättyy kun simulaatiokierroksia tehty käyttäjän haluama määrä ->suljetaan tiedostot, ilmoitukset tallennetuista tuloksista ja ohjelma sammuu 4

Esimerkkiajo ja käyttöohje Ohjelman käyttöohje näkyy ohjelman käynnistyksessä. Jos kirjoitat alkuarvotiedoston esim. Notepadilla, pidä huoli, että ylimääräisiä välilyöntejä ei jää tiedostoon, koska ne voivat sotkea tulokset. Ohjelma ilmoittaa mahdollisista virhe-alkuarvoista, sekä poistaa virhepallot simulaatiosta. Tulokset ovat täysin eksakteja lukutarkkuuden rajoissa (törmäys ei virity pelkästään pallojen pienestä etäisyydestä, vaan siitä törmäisivätkö pallot seuraavalla aika-askeleella), sillä oletuksella että aika-askel on tarpeeksi pieni. Tuloksiin voi tulla virhettä, jos annetut alkunopeudet ja massaerot ovat suuria, palloja on paljon lähekkäin ja aika-askel iso, jolloin voi tapahtua niin, että pallo törmäisi kahteen eri palloon aika-askeleen aikana. Ohjelmaa ei ole koodattu käsittelemään tätä tilannetta eksaktisti. Esimerkkiajo: Kuva 1: esimerkkikäyttö 5

Tulosten analysointi Animointi Tutkittiin pallojen törmäyksiä erilaisilla alkuarvoilla ja muodostelmilla, esimerkiksi yhden raskaamman pallon törmäystä monen kevyemmän pallon rintamaan. Huomattiin törmäävän pallon nopeutta kasvatettaessa rintaman lävistysajan pienenevän huomattavasti verrattuna massan kasvatukseen. Animoitiin simulaatio käytämällä matlab-ohjelmaa. Lähetettiin tulokset.txt import datalla matlabiin, jossa movie-toiminnolla simuloitiin pallot piirtämällä pallon säteen mukainen ympyrä jokaisen koordinaattipisteen ympärille seuraavasti: i = 2; n = 1; m = 1; while (tulokset(i,1) == tulokset(i-1,1)) n = n + 1; i = i + 1; end for j = 0:length(tulokset)/n - 1 for l = 1:n hold on; h=tulokset(j*n+l,2); k=tulokset(j*n+l,3); r=tulokset(j*n+l,4); N=50; t=(0:n)*2*pi/n; plot( r*cos(t)+h, r*sin(t)+k); axis('equal') axis([0,10,0,10]) (tässä simulaatiossa laatikon koko oli 10x10) end F(m) = getframe; m = m +1; clf; end movie(f,1,10) 6

Kuva 2: kuva systeemin alkutilasta, vasemmalla olevat pallot ovat törmäämässä oikeanpuoleisten pallojen rintamaan. Kuva 3: kuvan 2 systeemi myöhemmällä ajanhetkellä 7

Nopeuden itseisarvojen summa Ohjelman aikasemmalla versiolla tutkittiin myös pallojen nopeuksien itseisarvojen summaa ajan funktiona. x = nopeusjakauma(:,1); y = nopeusjakauma(:,2); plot(x,y) Kuva 4: nopeussumma kun kuvan 2 esittämän tilanteen liikkuvat pallot Kuva 5: nopeussumma kun kuvan 2 esittämän tilanteen liikkuvat pallot liikkuivat 0.5m/s oikealle 8

Kuva 6: nopeussumma kun kuvan 2 esittämän tilanteen liikkuvat pallot liikkuivat 0.5m/s oikealle 9

Nopeusjakauma Tutkittiin pallojen nopeusjakaumaa ajan funktiona. Kaikissa tutkittavissa systeemeissä alkutila oli 500-700 palloa paikoillaan ja 5-10 palloa lähestymässä paikallaan olevia palloja. Pallojen lukumäärä 2D-kuvissa on 555. Kuva 7: nopeusjakauma ajanhetkellä 10s Kuva 8: pallojen nopeusjakauma ajanhetkellä 120s 10

Tiedostotilan säästämiseksi nopeussumma.txt oli muotoa simulaation aika, energia-arvo ja pallojen lukumäärä. Jos pallojen lukumäärä oli 0, ei kyseistä riviä tulostettu. Tulostiedoston koko kasvaa helposti yli sataan megabittiin, jolloin sen järkevä käsittely kotikoneella muuttuu mahdottomaksi. Lähetettiin data jälleen Matlabiin, jossa piirrettiin tuloksista 3-D kuva. Jotta kuva voitaisiin piirtää matlabissa surf tai mesh-komennolla, pitää tulostettavat arvot muuttaa matriisimuotoon. Tähän voitaisiin käyttää matlabin omaa griddata-komentoa, mutta hieman paremman tuloksen saa gridfitkomennolla. Komento muodostaa matriisin approksimoimalla luettavaa dataa matriisimuotoon annettujen vektorien pohjalta. Esimerkki gridfit-sovituksesta ja 3D-lukemisesta: aika=nopeusjakauma(:,1); energia=nopeusjakauma(:,2); pallojenlkm=nopeusjakauma(:,3); gx=0:4:264; gy=0:4:400; g=gridfit(aika,energia,pallojenlkm,gx,gy); figure colormap(hot(256)); surf(gx,gy,g); camlight right; lighting phong; shading interp line(x,y,z,'marker','.','markersize',4,'linestyle','none'); Viimeinen rivi tulostaa myös varsinaisen datan mukaan scatted 3d-datan, tämä näkyy sinisinä pisteinä kuvassa, siitä voi verrata sovituksen ja todellisten arvojen erotusta. Jos mittauspisteitä on kuitenkin paljon niin kuvaajassa näkyy vain sininen pilvi. Seuraavista kuviin ei ole merkitty alkuperäisiä pisteitä: 11

12