Мордовский государственный университет имени Н.П. Огарева
Опубликован: 30.11.2010 | Доступ: свободный | Студентов: 3283 / 1985 | Оценка: 4.12 / 4.13 | Длительность: 14:37:00
ISBN: 978-5-9963-0352-6
Лекция 5:

Исследование качества генераторов случайных чисел

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
1.4. Исследование качества ГСЧ, сформированного по линейному конгруэнтному методу

Формирование случайных (псевдослучайных) чисел по линейному конгруэнтному методу основывается на следующем рекуррентном соотношении:

R_{k+1}=(a R_k+c)(mod\mbox{  }M),\qqard k=0,1,... ( 5.1)

где:

R_{k+1} — вновь формируемое число;

a — множитель (мультипликативная константа);

R_{k} — предыдущее число ( R_{0} — назначаемое число);

c — приращение (инкремент);

mod — модуль, бинарная операция для обозначения остатка от деления двух чисел;

M — целочисленная константа [19]. Для n -разрядных целых чисел M=2^{n}. В самом простом случае принимается, что c=0 Массив случайных чисел {x_{i}} из интервала (0,1) будет формироваться следующим образом:

\{x_i\}=\{R_i\}/M, ( 5.2)

где R_{i} — числа, определяемые по формуле (5.1).

В стандартной процедуре реализации линейного конгруэнтного метода (5.1) принимается, что a,c,M — целые положительные числа. Приведем определение конгруэнтности двух чисел X и Y: два числа Y и Х конгруэнтны (сравнимы) по модулю числа M, если они дают одинаковые остатки при делении на этот модуль M. Таким образом, по формуле (5.1) число R_{k+1} будет конгруэнтно по модулю M числу (aR_{k}+c).

При выборе чисел a,c,M придерживаются следующих правил:

  1. c,M — должны быть взаимно простыми числами. Причем число M определяет собой период числовой псевдослучайной последовательности: чем больше M, тем длиннее последовательность псевдослучайных чисел;
  2. b=a-1 кратно p для любого простого p, являющегося делителем М.

В качестве множителя a рекомендуется принимать первообразный корень по модулю М. Приведем следующее классическое определение.

Первообразный корень по модулю М — натуральное число g, такое, что наименьшее положительное число k, для которого разность g^{k}-1 делится на М (без остатка), совпадает с \varphi(M), где \varphi(M) — число натуральных чисел, меньших М и взаимно простых с М.

Например, при М = 7 первообразным корнем по модулю 7 является число 3. Действительно, \varphi(M)=6, т. е. количеству чисел ряда 1, 2, 3, 4, 5, 6, каждое из которых взаимно просто с числом 7.

Два числа называются взаимно простыми, если в качестве общего делителя они имеют только единицу.

Числа 3^{1}  – 1 = 2,\mbox{  }3^{2} – 1 = 8,\mbox{  }3^{3} – 1 = 26,\mbox{  }3^{4} – 1 = 80,\mbox{  }3^{5} – 1 = 242 не делятся на 7 без остатка, и лишь 3^{6} – 1 = 728 делится на 7 (частное от деления равно 104).

В системе MATLAB формирование простых чисел производится с помощью функции primes (см. help\mbox{  }primes ). Для проверки, являются ли два числа взаимно простыми, можно применить функцию gcd, которая определяет наибольший общий делитель для двух чисел.

В самом простом случае принимается, что c=0 При этом можно использовать следующие рекомендации по выбору параметров генератора:

  1. Начальное значение R_{0} может быть произвольно.
  2. Выбор a должен удовлетворять трем требованиям: a(mod8)=5, M/100<a<M-\sqrt{M} двоичные знаки a не должны иметь очевидного шаблона.
  3. В качестве a следует выбирать нечетное число, такое, что
    a/M\approx 1/2 -\sqrt{3}/6=0.21132486540519

Пример формирования модуля M в командном окне MATLAB:

>> N = 7*10^6;
>> m = primes(N);
>> M = m(end)
M =
     6999997

Задание 4

  1. Полагая в формуле (5.1) c=0, напишите в MATLAB программу формирования случайных чисел, приняв следующие числа N для расчета модуля в зависимости от номера варианта:
    № 1 № 1: N  =  7*106; № 2: N  = 7.5*106 ; № 3: N = 8*106 ; № 4: N = 8.5*106 ; № 5: N = 9*106 ; № 6: N = 9.5*106 ; № 7: N = 10*106 ; № 8: N = 10.5*106 ; № 9: N = 10.6*106
    № 2 № 1: N = 7.2*106 ; № 2: N = 7.52*106 ; № 3: N = 8.3*106 ; № 4: N = 8.54*106 ; № 5: N = 9.55*106 ; № 6: N = 9.66*106 ; № 7: N = 10.7*106 ; № 8: N = 10.8*106 ; № 9: N = 10.9*106
    № 3 № 1: N = 7.11*106 ; № 2: N = 7.22*106 ; № 3: N = 8.33*106 ; № 4: N = 8.44*106 ; № 5: N = 9.55*106 ; № 6: N = 9.66*106 ; № 7: N = 10.77*106 ; № 8: N = 10.88*106 ; № 9: N = 10.99*106
    № 4 >№ 1: N = 5.11*106 ; № 2: N = 5.22*106 ; № 3: N = 6.33*106 ; № 4: N = 5.44*106 ; № 5: N = 6.55*106 ; № 6: N = 6.66*106 ; № 7: N = 6.77*106 ; № 8: N = 6.88*106 ; № 9: N = 6.99*106
  2. В качестве первого назначаемого случайного числа R_{0} (в зависимости от номера варианта) примите следующие значения:
    № 1 № 1: m(11), № 2: m(12), № 3: m(13), № 4: m(14), № 5: m(15), № 6: m(16), № 7: m(17), № 8: m(18), № 9: m(18), где m — массив простых чисел, сформированный с помощью выражения M = primes(N)
    № 2 № 1: m(21), № 2: m(22), № 3: m(23), № 4: m(24), № 5: m(25), № 6: m(26), № 7: m(27), № 8: m(28), № 9: m(29), где m — массив простых чисел, сформированный с помощью выражения M = primes(N)
    № 3 № 1: m(31), № 2: m(32), № 3: m(33), № 4: m(34), № 5: m(35), № 6: m(36), № 7: m(37), № 8: m(38), № 9: m(38), где m — массив простых чисел, сформированный с помощью выражения M = primes(N)
    № 4 № 1: m(41), № 2: m(42), № 3: m(43), № 4: m(44), № 5: m(45), № 6: m(46), № 7: m(47), № 8: m(48), № 9: m(49), где m — массив простых чисел, сформированный с помощью выражения m = primes(N)
  3. Вычислите период формируемой случайной последовательности (с помощью функции unique ).
  4. Произведите статистический анализ созданного ГСЧ по линейному конгруэнтному методу.
  5. Постройте гистограммы полученных распределений случайных чисел с помощью функции hist.
  6. Постройте функции плотности и распределения для сформированных выборок случайных чисел. Совместите диаграммы с теоретическими функциями.

2. Статистическое тестирование выборки псевдослучайных чисел по критерию Колмогорова–Смирнова

По критерию Колмогорова–Смирнова (КС-критерию) осуществляется проверка простой статистической гипотезы Н_{0} (нулевой гипотезы) о том, что функция распределения F(x) случайной величины Х совпадает с некоторой известной функцией F_{0}(x) при некотором уровне значимости \alpha. КС-критерием можно пользоваться уже при объеме выборки n \ge 20.

В системе MATLAB КС-критерий реализован функцией kstest.

Рассмотрим пример использования функции kstest для проверки гипотезы о том, что функция распределения (F) выборки, сформированной с помощью функции rand, соответствует функции распределения (F0) экспоненциального закона с параметром 1 той же самой выборки.

Программное решение примера в командном окне MATLAB:

>> x = rand(25,1); F0 = expcdf(x,1);
>> H = kstest(x,[x,F0])
H =
     1

Полученный результат Н = 1 означает, что нулевая гипотеза отвергается, т. е. выборочная функция равномерного распределения (F) в интервале [0; 1] имеет значительные расхождения с предполагаемой функцией экспоненциального распределения (F0) с уровнем значимости \alpha = 0.05 (по умолчанию). Если закладывается другой уровень значимости, отличный от 0.05, то тогда он должен быть введен в функцию kstest. На том же примере это будет выглядеть так (с уровнем значимости 0.012):

>> x = rand(25,1); F0 = expcdf(x,1);
>> H = kstest(x,[x,F0],0.012)
H =
     1

По-прежнему нулевая гипотеза отвергается.

Рассмотрим пример использования функции kstest для проверки гипотезы о том, что функция распределения выборки, сформированной с помощью rand, соответствует функции распределения равномерного закона из интервала [0; 1] той же самой выборки.

Решение примера в командном окне MATLAB:

>> x = rand(25,1); F0 = unifcdf(x,0,1);
>> H = kstest(x,[x,F0])
H =
     0

Нулевая гипотеза о равномерном распределении выборки принимается.

Задание 5

  1. По критерию Колмогорова–Смирнова протестируйте выборки случайных чисел, сформированных по методу срединных квадратов.
  2. По критерию Колмогорова–Смирнова протестируйте выборки случайных чисел объема 100, 500, 1000, сформированных по линейному конгруэнтному методу.
< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Мария Ястребинская
Мария Ястребинская

Добрый день. Я приступила сегодня к самостоятельному изучению курса "Моделирование систем". Хочу понять - необходимо ли отсылать мои решения практических заданий на сайт, (и если да - то где найти волшебную кнопку "Загрузить...") или практические задания остаются полностью на моей совести? (никто не проверяет, и отчётности по ним я предоставлять не обязана?)

P.S.: тьютора я не брала

алена зянтерекова
алена зянтерекова