If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

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:
Standard haranggörbe grafikonja
A standard haranggörbe
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:
Nagyobb szórású haranggörbe grafikonja
Nagyobb szórású haranggörbe
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 = (85+82+88+86+85+93+98+40+73+83)/10=81,3
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ámEltérésNégyzetre emelt eltérés
858581,3=3,7(3,7)2=13,69
828281,3=0,7(0,7)2=0,49
888881,3=6,7(6,7)2=44,89
868681,3=4,7(4,7)2=22,09
858581,3=3,7(3,7)2=13,69
939381,3=11,7(11,7)2=136,89
989881,3=16,7(16,7)2=278,89
404081,3=41,3(41,3)2=1705,69
737381,3=8,3(8,3)2=68,89
838381,3=1,7(1,7)2=2,89
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 = 2288,1/10 = 228,81
Végül úgy számoljuk ki a szórást, hogy a variancia négyzetgyökét vesszük:
Szórás = 228,81 = 15,13.
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.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.