Другие языки программирования и технологии
Генератор случайных чисел с равномерным распределением
Собственно столкнулся с такой проблемой-нужно получить случайные величины,распределенные по равномерному закону с математическим ожиданием 1.5 часа и среднеквадратическим отклонением 0.5 часа.С теорвером не очень дружу,поэтому был бы очень благодарен если бы подсказали на доступном языке как это реализовать,или материальчиком каким-нибудь поделились)).На всякий случай--пишу на VC++.Заранее спасибо
Матожидание и среднеквадратическое отклонение присуще и равномерному распределению в том числе.
Матожидание Ех=М=(a+b)/2=((M-h)+(M+h))/2
Дисперсия Dx=(b-a)²/12=((M+h)-(M-h))²/12=h²/3
Ср. квадратическое отклонение σ = √Dx = h / √3
Отсюда h = σ * √3
У вас ср. кв. отклонение 0,5, отсюда h = 0,5 * 1,732 = 0,866
Мат. ожидание 1,5, значит
а = 1,5 - h = 1,5 - 0,866 = 0,634
b = 1,5 + h = 1,5 + 0,866 = 2,366
Ну, и смотрите - вам нужно генерировать случайные числа равномерно распределённые от 0,634 до 2,366.
Генерируете случайные числа функцией rand и приводите их к получившемуся диапазону.
x = a + (float)(rand()/RAND_MAX*(b-a)); как-то так.
Для инициализации генератора используйте функцию srand.
P.S. Посчитаете h, а и b точнее, я считала приближённо.
Матожидание Ех=М=(a+b)/2=((M-h)+(M+h))/2
Дисперсия Dx=(b-a)²/12=((M+h)-(M-h))²/12=h²/3
Ср. квадратическое отклонение σ = √Dx = h / √3
Отсюда h = σ * √3
У вас ср. кв. отклонение 0,5, отсюда h = 0,5 * 1,732 = 0,866
Мат. ожидание 1,5, значит
а = 1,5 - h = 1,5 - 0,866 = 0,634
b = 1,5 + h = 1,5 + 0,866 = 2,366
Ну, и смотрите - вам нужно генерировать случайные числа равномерно распределённые от 0,634 до 2,366.
Генерируете случайные числа функцией rand и приводите их к получившемуся диапазону.
x = a + (float)(rand()/RAND_MAX*(b-a)); как-то так.
Для инициализации генератора используйте функцию srand.
P.S. Посчитаете h, а и b точнее, я считала приближённо.
Не понял вопроса. На моем любимом Visual Basic есть ГСЧ под названием RND, она дает случайную величину с равномерным распределением в диапазоне от 0 до 1. Если хочешь получить, например, от 10 до 20, то так
R = (RND*10) + 10
А вот как задать случайное время - не знаю, может быть можно, а может быть и нет.
R = (RND*10) + 10
А вот как задать случайное время - не знаю, может быть можно, а может быть и нет.
Если матожидание и среднеквадратичное отклонение - то это как-то больше напоминает нормальное, а не равномерное.
Нормальное можно так:
Можно так:
или
где гаммы - равномерно распределены на промежутке [0;1]
Потом надо умножить на отклонение и прибавить матожидание.
Нормальное можно так:

Можно так:

или

где гаммы - равномерно распределены на промежутке [0;1]
Потом надо умножить на отклонение и прибавить матожидание.
Похожие вопросы
- Генератор Случайных Чисел
- Генератор случайных чисел на VS C++
- Можно ли в пк использовать как генератор случайных чисел число пи? Оно же полностью случайно? Согласись?
- Генератор случайных чисел в Basic или C++
- Про генератор случайных чисел в Паскале!
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- Генератор случайных слов (строк) из файла на C++.
- MASM32 случайные числа, , массив
- Есть ли программа способная подогнать случайные числа под нужную сумму
- C++ случайные числа