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