Мой вопрос:
Как создать список случайных чисел с заданным средним и стандартным отклонением (sd) в Javascript?
Пример:
Я хочу создать список из 5 случайных чисел в диапазоне от 1 до 10. Результирующее среднее значение должно быть 5, а стандартное отклонение должно быть 2.
Что я сделал до сих пор:
Моя идея была (http://jsfiddle.net/QASDG/3/):
- Сделайте функцию (с именем "createData" ), которая создает 5 случайных чисел от 1 до 10 и вставляет их в "массив"
- Эта функция также должна вычислять среднее (и sd) этих 5 чисел.
- С "do-while" -loop: выполните вышеуказанную функцию, пока "среднее значение станет равным 5" (и "sd станет 2" ). Но когда я звоню в Loop, браузер, конечно, падает, потому что есть много случаев, когда среднее значение равно = 5 (и sd!= 2).
Примечание. Я еще не добавил SD, так как код не очень элегантный.
Я нашел еще один script с этого сайта, который заявил: "Цель этого кода - создать коллекцию, заполненную 5 нормально распределенными случайными числами со средним значением 1.0 и стандартным отклонением 0,5". http://rosettacode.org/wiki/Random_numbers#JavaScript. Я попытался настроить его в соответствии с моими потребностями, добавив "Math.floor" и изменив условие в "for" -loop (i < 5).
function randomNormal() {
return Math.floor(Math.cos(2 * Math.PI * Math.random()) * Math.sqrt(-2 * Math.log(Math.random())))
}
var a = []
for (var i=0; i < 5; i++){
a[i] = randomNormal() / 2 + 1
}
Как я хочу изменить свой код:
Я не совсем уверен, понял ли я математическую часть этого кода. Согласно веб-странице, это создаст нормальное распределение (что здорово, но не обязательно). Так что мне нужно дополнительно:
- Где я могу изменить заданное значение и sd (например, mean = 5, sd = 2), чтобы создать случайные числа (которые выполняют эти свойства).
- Как реализовать диапазон от 1 до 10? (Возможно, я мог бы использовать что-то вроде: Math.floor(Math.random() * 10) +1)
Спасибо большое!