Fő tartalom
Tantárgy/kurzus: Programozás > 5. témakör
2. lecke: Véletlenszerűség- Véletlen bolyongások
- Feladat: Véletlen futó
- Valószínűség & nem-egyenletes eloszlások
- Feladat: Felfelé bolyongó
- Véletlenszámok normális eloszlása
- Feladat: Gauss-bolyongás
- Egyedi eloszlású véletlenszámok
- Feladat: Lévy-bolyongás
- Feladat: Ráfröccsent festék
© 2024 Khan AcademyFelhasználási feltételekAdatkezelési tájékoztatóSüti figyelmeztetés
Véletlenszámok normális eloszlása
Mondjuk, hogy szeretnénk egy olyan programot készíteni, ami egy majomvilágot generál le. A program generálhatna ezernyi Majom objektumot úgy, hogy mindegyik magassága 200 és 300 között lenne (ez egy olyan majomvilág lenne, ahol a majmok magassága 200 és 300 pixel közötti).
var randomHeight = random(200, 300);
Vajon ezzel valós világbeli magasságokat kapnánk? Gondolj csak egy forgalmas budapesti sétálóutcára. Ha kiválasztasz egy tetszőleges embert az utcán, a magassága véletlenszerűnek tűnhet. Mindemellett ez a fajta véletlen nem olyan, mint amilyet a
random()
ad. Az emberek magassága nem egyenletes eloszlású; az emberek jóval nagyobb része átlagos magasságú, mint ahányan nagyon alacsonyak vagy nagyon magasak. A természetet szimulálásához azt szeretnénk, hogy a majmaink magassága nagyobb valószínűséggel az átlag körül (250 pixel) legyen, de szeretnénk, hogy legyenek páran nagyon alacsonyak vagy nagyon magasak.A „normális” eloszlás egy olyan eloszlás, amelyben az értékek az átlag körül csoportosulnak. Ezt Gauss eloszlásnak is hívjuk (a matematikus Carl Friedrich Gauss után), illetve Franciaországban Laplace eloszlásnak hívják Pierre-Simon Laplace után. A tizenkilencedik század elején mindkét matematikus versengve dolgozott azon, hogy meghatározzon egy ilyen eloszlást.
Az eloszlás ábrája hétköznapi nyelven haranggörbeként ismert:
A görbe egy olyan matematikai függvénnyel adható meg, amely bármely érték valószínűségét úgy definiálja, mint az átlag (amit gyakran μ-vel jelölünk, ami a görög mu betű) és a szórás (σ, a görög sigma betű) függvénye.
Az átlag könnyen érthető. A mi esetünkben a magasságok 200 és 300 közöttiek, és valószínűleg tudod is, hogy ennek átlaga 250. Viszont mi a helyzet akkor, ha azt mondjuk, hogy a szórás 3 vagy 15? Mit jelent ez a számokra nézve? Nézzük meg a grafikont, az segíthet! A fenti grafikon egy olyan eloszlást mutat, amelynek nagyon alacsony a szórása, az értékek nagyon közel csoportosulnak az átlag körül. Az alábbi grafikon nagyobb szórású eloszlást mutat, ahol az értékek jobban szóródnak az átlag körül:
Nem ismerős a „szórás” fogalma? Ne aggódj! A Variancia és szórás témakörről külön is tanulhatsz a Khan Academyn, mielőtt folytatnád.
A számok a következőképpen működnek: adott egy populáció. A populáció 68%-ának értékei az átlagtól egyszeres szórásnyi távolságon belül vannak, 95% kétszeres szóráson belül, 99,7% háromszoros szóráson belül. Ha a szórás 5 pixel, akkor a majmok 0,3%-ának lesz csak a magassága 235 pixelnél kisebb (három szórásnyival 250 alatt vannak) vagy 265-nél nagyobb (három szórásnyival 250 felett vannak).
Átlag és szórás számítása
Vegyünk egy tíz fős osztályt, ahol a tanulók egy 100 pontos teszten a következő pontokat kapták:
85, 82, 88, 86, 85, 93, 98, 40, 73, 83
Úgy számoljuk ki az átlagot, hogy összeadjuk a pontszámokat, és elosztjuk azzal, hogy összesen hány teszt van.
Átlag =
A szórást úgy számoljuk, hogy négyzetgyököt vonunk az átlag körüli eltérések négyzetének átlagából.
Az első lépés, hogy kiszámoljuk minden pontszámra az átlagtól való eltéréseket, és négyzetre emeljük ezeket:
Pontszám | Eltérés | Négyzetre emelt eltérés | ||
---|---|---|---|---|
Ezután kiszámoljuk a négyzetes eltérések átlagát, ami varianciaként ismert. Ez az utolsó oszlop összege, a sorok számával elosztva:
Variancia = =
Végül úgy számoljuk ki a szórást, hogy a variancia négyzetgyökét vesszük:
Szórás = = .
Szeretnéd jobban megérteni a szórást? A Variancia és szórás témakörről részletesebben is tanulhatsz a Khan Academyn.
Szerencsénkre, ahhoz, hogy normális eloszlású véletlenszámokat használjunk itt egy programban, nem kell külön számításokat végeznünk. Ehelyett használhatjuk a ProcessingJS-ben elérhető
Random
objektumot.A
Random
használatához először példányosítani kell egy új Random
objektumot, átadva neki az 1-et, mint paramétert. Ezt a változót „generátornak” hívjuk, mert alapvetően úgy gondolhatunk rá, mint egy véletlenszám generátorra.var generator = new Random(1);
Ha minden alkalommal, amikor a
draw()
-t végrehajtjuk, normális (vagy Gauss) eloszlású véletlenszámot szeretnénk létrehozni, egyszerűen csak meghívjuk a nextGaussian()
függvényt.var num = generator.nextGaussian();
println(num);
Nos mit csináljuk ezzel az értékkel? Mi lenne, ha mondjuk egy olyan alakzat x helyzetéhez rendelnénk, amit kirajzolunk a képernyőn?
A
nextGaussian()
függvény egy olyan normális eloszlású véletlenszámmal tér vissza, aminek paraméterei: nulla az átlag és egy a szórás. Tegyük fel, hogy egy 200 átlagú (ez a közepső pixele egy 400 szélességű ablaknak) és 60 pixel szórású eloszlást szeretnénk. Úgy alakíthatjuk át az értéket, hogy megszorozzuk a kapott véletlenszámot az általunk megadott szórással, és hozzáadjuk az átlagot.var standardDeviation = 60;
var mean = 200;
var x = standardDeviation * num + mean;
Most már el tudjuk készíteni a programunkat, ami félig-átlátszó köröket rajzol normális eloszlás szerint. A legsötétebb hely középtájt lesz, mivel a legtöbb érték itt csoportosul, de néha-néha lesznek rajzolt körök a középtől távolabb jobbra és balra is. (A programban található megjegyzések: 1. sor: Dan Shiffman, natureofcode.com példája alapján; 6. sor: A nextGaussian() függvény a 0 átlagú és 1 szórású normális eloszlás alapján ad vissza véletlen számokat; 11. sor: Megszorozzuk a szórással és hozzáadjuk az átlagot.)
Ez a „Természetes által inspirált szimulációk” kurzus a Daniel Shiffman által készített „The Nature of Code” alapján készült, a Creative Commons Attribution-NonCommercial 3.0 Unported License szerint.
Szeretnél részt venni a beszélgetésben?
Még nincs hozzászólás.