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

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Нормално разпределение на случайни числа

Да кажем, че искаме да създадем програма, която генерира свят на маймуни. Твоята програма може да генерира хиляда обекта от тип Monkey (маймуна), всеки с ръст между 200 и 300 (тъй катов този свят маймуните са високи от 200 до 300 пиксела).
var randomHeight = random(200, 300);
Това точно ли описва височината на същества от реалния свят? Представи си един пренаселен тротоар в Ню Йорк. Избери който и да е човек от улицата и привидно неговият ръст ще бъде случаен. Но това не е от типа случайност, който методът random() генерира. Човешкият ръст не е равномерно разпределен; има много повече хора, които са средно високи, отколкото такива, които са твърде високи или твърде ниски. За да направим по-точна симулация на природата, може да пожелаем да бъде по-вероятно нашите маймуни да са от средна височина (250 пиксела), но и да им разрешим понякога да бъдат или много ниски, или много високи.
Разпределението на стойностите, които се струпват около средните (наричани средно аритметични) е известено като "нормално" разпределение. Наречено е още разпределение на Гаус (кръстено на математика Карл Фридрих Гаус), но ако си от Франция, тогава се нарича разпределение на Лаплас (кръстено на Пиер-Симон Лаплас). И двамата математици работят независимо един от друг в началото на деветнадесети век върху дефинирането на това разпределение.
Когато начертеш разпределението, ще получиш нещо, което изглежда по следния начин, наречен неофициално камбановидна крива:
Графика на крива на стандартен звънец
Стандартна камбановидна крива
Кривата се генерира от математическа функция, която определя вероятността за всяка дадена стойност като функция на средното аритметично (често се записва с гръцката буква μ (мю) ) и стандартното отклонение (гръцката буква σ (сигма) ).
Средното аритметично е доста лесно за разбиране. В случая на нашите стойности за ръст между 200 и 300, вероятно интуитивно се досещаш, че средното аритметично (средата) е 250. Обаче, представи си, че ти кажа, че стандартното отклонение е 3 или 15. Как се отнася това до тези числа? Ако разгледаме графиките, може да намерим подсказка. Графиката по-горе ни показва разпределението с много ниско стандартно отклонение, при което по-голямата част от стойностите са струпани около средната стойност. Графиката по-долу ни показва по-високо стандартно отклонение, при което стойностите са по-равномерно разпределени от средната стойност:
Графика на крива на звънец с по-високо стандартно отклонение
Камбановидна крива с по-високо стандартно отклонение
Не си много наясно с понятието за "стандартно отклонение"? Не се тревожи! Можеш да разгледаш Вариации и стандартно отклонение отделно в Кан Академия преди да продължиш.
Числата се получават както следва. При дадена една цяла популация, 68% от членовете ѝ ще имат стойности в интервала на едно стандартно отклонение от средното, 98% – в рамките на две стандартни отклонения и 99,7% – в рамките на три стандартни отклонения. При дадено стандартно отклонение от 5 пиксела, ръстът само на 0,3% от маймуните ще бъде по-малък от 235 пиксела (три стандартни отклонения под средната стойност 250) или по-голям от 265 пиксела (три стандартни отклонения над средната стойност 250).

Изчисляване на средна стойност и стандартно отклонение
Да вземем клас от десетима студенти, които получават следните оценки (максимална оценка 100) на теста:
85, 82, 88, 86, 85, 93, 98, 40, 73, 83
Изчисляваме средната стойност, като сумираме всички точки и след това делим на броя на точките.
Средна стойност = (85+82+88+86+85+93+98+40+73+83)/10=81,3
Стандартното отклонение се изчислява като корен квадратен от средната стойност на квадратите на отклоненията спрямо средната стойност.
Първата стъпка е да изчислим отклоненията на всеки резултат (разликата спрямо средната стойност) и да ги повдигнем на квадрат:
ОценкаОтклонениеОтклонение на квадрат
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
868881,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
След това пресмятаме средната стойност на квадратите на отклоненията, позната като дисперсия. Това е сумата в крайната колона, делена на броя на редовете:
Дисперсия = 2288,1/10 = 228,81
Накрая изчисляваме стандартното отклонение, като пресметнем квадратния корен на дисперсията:
Стандартно отклонение = 228,81 = 15,13.
Искаш ли да разбереш по-добре стандартното отклонение? Можеш да научиш повече от Вариации и Стандартно отклонение по-задълбочено тук в Кан Академия.

За наше щастие, за да използваме нормално разпределение на случайни числа в програмите тук, няма нужда да правим тези изчисления. Вместо това, можем да използваме Random обект, предоставен от ProcessingJS.
За да използваме Random, първо трябва да инстанциираме нов Random обект, на който трябва да подадем като параметър 1. Ние наричаме тази променлива "генератор", защото това, което създава, е най-общо казано генератор на случайни числа.
var generator = new Random(1);
Ако искаме да получаваме случайни числа с нормално (или Гаусово) разпределение всеки път, когато изпълняваме draw(), трябва само да извикаме функцията nextGaussian().
var num = generator.nextGaussian();
println(num);
И сега какво трябваше да направим с тази стойност? Ами ако искаме да я използваме, например, като стойност за x-позицията на някаква фигура, и да начертаем фигурата на екрана?
Функцията nextGaussian() връща нормалното разпределение на случайни числа със следните параметри: средна стойност нула и стандартно отклонение единица. Да речем, че искаме средна стойност 200 (централният хоризонтален пиксел в един прозорец с ширина 400) и стандартно отклонение 60 пиксела. Можем да коригираме стойността към нашите параметри, като я умножим по стандартното отклонение и добавим средната стойност.
var standardDeviation = 60;
var mean = 200;
var x = standardDeviation * num + mean;
Сега можем да създадем нашата програма, която рисува полупрозрачни кръгове според нормалното разпределение. Най-тъмното място ще бъде близо до центъра, където повечето от стойностите се струпват, но от време на време кръгове се рисуват надясно или наляво по-далеко от центъра.

Курсът "Компютърни симулации на физични явления" е производeн на "Природата на кода" от Даниел Шифман, използвана от Creative Commons Attribution-NonCommercial 3,0 Unported License.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.