1D satunnaiskävely Pythonilla & histogrammeja – osa 2

Edellisessä tarinassani käsittelin yksiulotteista satunnaiskävelyä sellaisessa tapauksessa, että lähdetään origosta ja arvotaan mennäänkö askel oikealle vai vasemmalle, askeleen pituus on vakio. Tutkitaan nyt tilannetta, jossa askeleen pituus on satunnainen.

Katso edellisestä tarinasta koodin kommentit, käytän tässä edellisen tarinan koodeja ja muokkaan niitä.

Tavoitteena on selvittää, millainen jakauma syntyy kulkijan kävelyn päätepisteistä, kun kävelyä toistetaan vaikkapa 200 kertaa.

loppupaikan tutkiminen

Piirretään Matplotlibin avulla satunnaista liikettä kuvaava kuvaaja muokkamalla edellisen tarinani Pythonkoodia. Rivillä 1 ladataan randomfunktio kirjastostaan. Rivillä 7 arvotaan satunnaisluku, ja tuotetaan arpa-niminen satunnaisluku, joka on välillä -1 < x < 1.

Viidenkymmenen askeleen jälkeen päädyttiin noin neljän yksikön päähän lähtöpisteestä.

histogrammit

Muokkaan edellisen tarinan vastaavaa koodia ja tuotan histogrammin lopullisen paikan jakaumasta.

Kuvassa 1000 satunnaiskävelyn loppupaikan jakaumahistogrammina. Jakauma näyttää samanlaiselta kuin edellisessäkin tarinassa, mutta varmaankin se on ”kapeampi” ainakin terveellä järjellä ajateltuna.

molemman tyyppiset satunnaiskävelyt

Tehdään koodinpätkä, jossa tuotetaan kahden tyyppistä satunaiskävelyä. Tyypissä 1 askeleen pituus on vakio -1 tai +1. Tyypissä 2 askeleen pituus on satunnaisluku eli askel on muotoa 2*random() – 1.

Kuvaaja näyttää päällisin puolin oikealta, mustat tolpat muodostavat kapemman jakauman. Silti kuvaaja on virheellinen, sillä tolppien pituuksien summa pitäisi olla yhtä suuri. Mustien tolppien pituus on viallinen. Tämä johtuu siitä, että hist-komento skaalaa vaaka-suunnassa arvot-listojen (loppulista1 ja loppulista2) suurmimman ja pienimmän arvon mukaan luokkiin (bins). Niinpä kuvassa mustien palkkien leveys on kapeampi kuin sinisten.

Eron saa näkymään selkeämmin, kun vähentää palkkien määrää. Seuraavan kuvaajan koodi on muuten sama, mutta riveillä 19 ja 20 on:

Kymmenellä palkilla näkee selvästi, että mustat palkit ovat kapeampia.

Mikäli skaalauksen haluaa toimivan oikein, niin pitää määrittää molemmille jakaumille samat reunat histogrammiin. 

Seuraavassa koodissa riveillä 21-22 määritetään leveämmän jakauman loppulista1:n suurin ja pienin arvo. Rivillä 21 valitaan reunoista itseisarvoltaan suurempi, näin saadaan reunat määriteltyä symmetrisesti origon ympärille. Rivien 24 ja 26 range määrittää histogrammin tolppien vasemman ja oikean reunan. Lisäsin vielä mukaan selitteen (legend) riveillä 22 ja 33.

Jätän lukijan pohdiskelemaan millainen funktio kuvaa oheisia jakaumia, kun annetaan n:n kasvaa oikein suureksi.

Palaan aiheeseen lähiaikoina, silloin tutkin 2D ja 3D satunnaiskävelyä.


Esimerkkikoodit löytyvät sivulta https://colab.research.google.com/drive/1mgy8Cca3wWDR2F_KnR-vY1gwCXHVVdCd?usp=sharing

Kevään 21 pitkän matikan tehtävän 8 ratkaisu GeoGebralla

[edit. 25.3. Lisäsin toisen version listan tuottamiseen. Korjasin pari kirjootusvihrettä]]

Tehtävässä piti arpoa pisteitä suorakaiteen muotoiselle tasoalueelle ja laskea kuinka suuri osa kuuluu suorakaiteen sisällä olevalle alueelle. GeoGebran Jono-komennolla ratkaisu on suhteellisen yksinkertainen, jos hallitsee pari komentoa.

https://yle.fi/plus/abitreenit/2021/Kevät/2021-03-24_M_fi/index.html#11

Luodaan tasoalue epäyhtälöiden avulla. Loogisen tai-operaattorin saa helpoimmin kirjoitettua kahdella & merkillä. Kirjoitetaan syöttökenttään

alue=0 ≤ x ≤ 2 && 0 ≤ y ≤ 4 && y ≥ x²

Satunnaisluku väliltä 0…1 saadaan funktiolla rand(). Niinpä 2*rand() tuottaa satunnaisluvun välillä  0≤x≤2. Sama olisi onnistunut myös komennolla SatunnainenTasajakaumanarvo(0, 2). Tässä olisi voinut valita pisteitä monikulmion sisältä myös käyttäen komentoa SatunnainenPisteAlueessa( <Monikulmio> ).

Komento OnkoAlueessa(piste, alue) palauttaa arvon true, jos piste kuuluu alueeseen ja false muutoin.

Luodaan jono-komennolla lista, jossa on ykkösiä, mikäli tuotettu piste on kyseisellä alueella ja muutoin 0.

l1 = Jono(Jos(OnkoAlueessa((2random(), 4random()), alue), 1, 0), mm, 1, 1000)

Itse asiassa tuossa ei olisi tarvinnut edes käyttää tuota aluetta, vaan käyttää sen sijaan epäyhtälöä.

Jono(Jos(OnkoAlueessa((2random(), 4random()), y ≥ x²), 1, 0), mm, 1, 1000)

Osumien määrä saadaan laskemalla ykkösten lukumäärä eli

a = Summa(l1)

Pekka Vienonen julkaisi oman versionsa GeoGebra-materiaaleissa. https://www.geogebra.org/m/czfvx8pg

Jakaumakomentoja GeoGebralla 2

Edellisessä artikkelissani Jakaumakomentoja GeoGebralla 1 käsittelin GeoGebran diskreetteihin jakaumiin liittyviä komentoja: Binomijakauma ja Poisson. Tutkitaanpa tällä kertaa normaalijakaumaa muutamien esimerkkien avustuksella.

Normaalijakauma

Esimerkki 1.  20 vuotiaiden poikien pituuden keskiarvo on 180,5 cm ja keskihajonta 6,3 cm. a) Kuinka suuri osa pojista on  alle 175 cm. b) välillä 170, … 190 cm.

GeoGebran Normaalijakauma(µ, σ, x ) laskee normaalijakauman N(µ, σ) kertymäfunktion arvon muuttujan arvolla x.

Ratkaisu:

Kuva, joka sisältää kohteen pöytä

Kuvaus luotu automaattisesti

Tehtävän b-kohta Todennäköisyyslaskurilla.

Normaalijakauma-komento on siinä mielessä mukava, että mikä tahansa syötteistä voi olla tuntematon yhtälöissä.

Esimerkki 2. Normaalijakautuneessa pituusjakaumassa keskiarvo oli 165 ja 75 % oli alle 182 cm. Määritä jakauman keskihajonta.

Ratkaisu:

Kuva, joka sisältää kohteen teksti

Kuvaus luotu automaattisesti

Tätä ei voi ratkaista Todennäköisyyslaskurissa muutoin kuin kokeilemalla.

Esimerkki 3. Kuinka monen keskihajonnan päässä keskiarvosta on 97.5% jakauman arvoista?

Ratkaisu:

Kuva, joka sisältää kohteen teksti

Kuvaus luotu automaattisesti

Saman olisi voinut tehdä myös normaalijakauman käänteisfunktiolla KäänteisNormaalijakauma. 

Tämän voi ratkaista myös Todennäköisyyslaskurilla jättämällä X:n arvon tyhjäksi ja painamalla Enteriä Kertymäfunktion arvon kohdalla.

Esimerkki 4. Millä a:n arvolla jakaumassa N(0, 1) on 99% jakaumasta välillä -a ≤ x ≤ a?

Ratkaisu:

Kuva, joka sisältää kohteen teksti

Kuvaus luotu automaattisesti

Todennäköisyyslaskurilla tämä onnistuu vain kokeilemalla.

Jos Normaalijakauma-komentoon laittaa loppuun false, niin komento antaa tulokseksi normaalijakaumafunktion arvon.

Edellisen perusteella tiedän, että kun vapaalla kädellä piirrän normaalijakauman, niin keskihajonta löytyy 60%:n korkeudelta verrattuna jakauman korkeimpaan kohtaan.

Syöttökenttään kirjoitettuna Normaalijakauma(0, 1, x, true) tuottaa normaalijakauman  kertymäfunktion kuvaajan ja Normaalijakauma(0, 1, x, false) normaalijakauman kuvaajan.

Esimerkki 5. Resonanssi 7 fysiikan oppikirjassa tehtävässä 461 annettu mittaustuloksia sekunnin välein tunnin ajalta säteilymittarin tuottamista arvoista, kun tutkittiin Amerikum-241 isotoopin lähettämää säteilyä. Tehtävän c-kohdassa pitää muodostaa mittaustuloksista histogrammi ja pohtia mitä histogrammin muodon perusteella voi päätellä. 

Ratkaisu: Todennäköisyyslaskurin avulla nähdään, että jakauma noudattaa hyvin normaalijakaumaa N(1199, 31.76)

Saman olisi saanut aikaiseksi luomalla mittaustuloksista listan l1, ja laskemalla sen avulla keskiarvon ja keskihajonnan sekä tuottamalla tarvittavat kuvaajat. Koska lista on noin suuri ja tarvitsen vain likiarvoja, niin kirjoitan komennot syöttökenttään.

karvo = keskar(l1)
khajonta=stdevp(l1)
pienin = Min(l1)
suurin = Max(l1)
reunat = Jono(pienin - 0.5, suurin + 0.5, 1)
histo = Histogrammi(reunat, l1)
f(x) = 3600*Normaalijakauma(karvo, khajonta, x, false)

Pylväskaavion olisi saanut hieman helpomminkin komennolla

pylvas = Pylväskaavio(l1, 1)

Vaikuttanee siltä, että mittarin tuottamat tulokset jakautuvat likimain normaalijakauman muotoon. Näin tuleekin käydä, jos ja kun kyseessä on satunnaisilmiö.


Lähipäivinä palaan aiheeseen, tutkimalla miten satunnaislukukomennot toimivat GeoGebrassa.

Komentoihin liittyvät ohjesivut

Normaalijakauma https://wiki.geogebra.org/en/Normal_Command

KäänteisNormaalijakauma https://wiki.geogebra.org/en/InverseNormal_Command

Histogrammi https://wiki.geogebra.org/en/Histogram_Command

Pylväsdiagrammi https://wiki.geogebra.org/en/BarChart_Command