Генерирование случайных величин

В большинстве случаев при имитационном моделировании ис­пользуют программные методы получения случайных чисел. Такие числа уже нельзя назвать «случайными», но они обладают многими статистическими свойствами строго случайных чисел. В литературе они получили название «псевдослучайных» чисел. В настоящее вре­мя большинство программ, генерирующих псевдослучайные числа, используют конгруэнтную процедуру, при которой каждое после­дующее число хм получается из предыдущего xi. В основе конгру­энтных процедур генерирования псевдослучайных чисел лежит ма­тематическое понятие сравнения (congruence). Целые числа а и b считаются сравнимыми по модулю т, если эти числа дают одинако­вые остатки при делении на m (или, что то же самое, разность этих чисел делится на m без остатка). Математически процедуру сравне­ния записывают следующим образом: а = b (mod m) и читают «а, сравнимое с b по модулю m».

Искомая последовательность псевдослучайных чисел получается из соотношения: xi+1 (a xi+ b)(mod m).

Из этого выражения следует, что количество различных псевдо­случайных чисел не может быть больше т. После генерации т чисел последующие числа начинают повторяться. При неудачном выборе величин а и b период может быть меньше т. Существуют теоретиче­ские предпосылки, позволяющие осуществить выбор чисел a, b и т. В частном случае b = 0, т.е.

Xi+1 = ахi (mod m). Такой генератор назы­вают мультипликативным, и он дает достаточно хорошие результаты (полученные числа имеют хорошие статистические характеристики).

Количество различных псевдослучайных чисел зависит от разрядно­сти процессора, так как обычно модуль т принимают равным 2k-1, где k - разрядность процессора.

Для удобства пользования псевдослучайными числами во всех ЭВМ имеется программа, дающая равномерное распределение в пре­делах 1 < х < 0. В языках программирования обращение к генератору случайных чисел осуществляется специализированными оператора­ми, например RND [(*)]. В языке Turbo-Basic, если х = 0, to повторя­ется последнее генерированное число, если х < 0, то генерируется новая последовательность случайных чисел, если х > 0 или х отсутст­вует, то генерируется очередное случайное число, но при повторном запуске последовательность повторяется.

В других языках программирования существуют аналогичные правила и операторы.

Если необходимы случайные числа с другими распределениями вероятностей, то после обращения к генератору, дающему случайные числа R в интервале (0,1), используют простые преобразования [3].

Из теории вероятностей известно, что равномерное распределение в интервале (А, В) получается преобразованием X=A+(B-A)*R. Математическое ожидание в этом случае будет

ЕХ =(B+A)/2, а дисперсия VX=(B-A)2/2.

 

Для получения нормального распределения с нулевым средним производится суммирование 12 случайных чисел R. Из суммы вычи­тается 6, а результат умножается на величину заданного среднеквадратического значения, так как дисперсия суммы равна единице,


т.е.

Если среднее значение отличается от нуля, то к этому выражению добавляется величина, равная среднему значению.

Для получения экспоненциального распределения Р(х)=α e x , α > 0, х ≥ 0, производится операция х = -(l/α)log(R). При этом мате­матическое ожидание ЕХ=1/α и дисперсия VX = 1/α2 = ЕХ2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: