Генераторы псевдослучайных чисел
Объявлены в: lem\include\lem_rand.h
Для удобства использования генераторы реализованы как C++ классы. Поэтому можно создавать несколько независимых генераторов, по разному их инициализировать и получать разные (в пределах свойств псевдослучайных последовательностей) выборки.
Реализованы несколько "классических" мультипликативных генераторов (их работа основана на переполнении разрядной сетки числа при перемножении) с равномерным законом распределением, а также некоторые менее известные генераторы.
![]() |
|
М. А. Иванов, И. В. Чугунков |
На основе генераторов равномерно распределенных чисел строятся генераторы с гауссовским распределением, а также произвольно задаваемым распределением. Следует заметить, что для генерации одного нормально распределенного числа используется несколько (обычно 6 или 12) равномерно распределенных чисел. Дело в том, что сумма множества (в идеале - бесконечного) произвольно распределенных случайных чисел дает в пределе нормальное распределение (именно поэтому нормальное распределение нормально - в реальном мире при измерении любой величины возникает множество случайных помех, что в итоге дает нормальное распределение ошибки измерения).
Значительно больший набор генераторов доступен в библиотеке Boost.Random
Генераторы библиотеки LEM реализованы так, что они почти полностью удовлетворяют требованиям к генераторам чисел, сформулированным в библиотеке Boost.Random. Исключение составляют методы записи и считывания из потока (operator>> и operator>>). Благодаря совместимости с концепцией генераторов Boost.Random, можно использовать шаблоны классов для моделирования различных распределений.
Тестовая программа
Примечание: чрезвычайно мощный набор тестов для генераторов случайных чисел DIEHARD можно найти на сайте http://www.cs.hku.hk/~diehard/
Находится в каталоге LEM\Demo\Math\Rnd (проект для VisualStudio 2003). С ее помощью можно проверять любой генератор на основе группы статистических критериев.
группа тестов на равномерность распределения ((test_rnd_uniformness.cpp). В данный тест входят: определение среднего и дисперсии (для равномерно распределенных в диапазоне (0,1) чисел это 1/2 и 1/12); тест на k-равномерность по критерию хи-квадрат при распределении чисел в единичном гиперкубе; поиск повтора последовательности; автокорреляция и взаимная корреляция генераторов; тест серий; интегральный тест серий; геометрический тест серий.
тест на нормальность распределения ( (tst_gaussian_rnd.cpp) - оценка некоторых статистических характеристик нормально распределенных чисел (среднее и дисперсия), а также взаимная корреляция двух разных генераторов.
тест генератора с произвольно задаваемой функцией закона распределения (tst_volatile_rnd.cpp)
© Mental Computing 2010