Построение модели
Случайная величина γ равномерно распределена на интервале [0,1], если определяются соотношениями:
Рγ(γ)=1, γ∊[0,1]; Fγ(γ)=
Математическое ожидание
и дисперсия (среднеквадратическое отклонение) для непрерывных и дискретных случайных величин:Теперь об упомянутом увеличении длины отрезка апериодичности. Есть вероятность, что числа, генерируемые при помощи алгоритма обнулятся, при условии х0 < 104. чтобы избежать этого нужно длину отрезка апериодичности L увеличить. Практические расчеты показали, что L (длина отрезка апериодичности) достаточно мала, и это может явиться причиной отказа от алгоритма середины квадрата. Длину отрезка апериодичности можно несколько увеличить, если при выполнении условия
в качестве следующего случайного числа взять
Теперь функция γnпримет следующий вид:
Φ(γn)=
if ,Для реализации алгоритма нужно определить наибольшее возможное значение k(чем больше это число, тем больше число значащих разрядов, а, следовательно, и длина отрезка апериодичности).
Таким образом, для обеспечения максимальной длины отрезка апериодичности нужно, используя простейшие типы данных, выбрать такие, которые обеспечивают наибольшее значение для k.
Например, можно принять, что γn есть величина типа Single, а
типа Double. При длине слова в 32 бита (1 разряд для знака; 7 бит для характеристики СС и 24 разряда под мантиссу ffffff ) мантисса может принимать 210 *2 10 *2 4=1024*1024*32 различных значения, что соответствует 7…8 значащим цифрам.При длине слова в 64 бита под мантиссу отводится 24+32 разряда. При помощи 56 разрядов можно закодировать 256=(1024)5*64, что соответствует 15..16 значащим цифрам. Таким образом, при величинах такого типа максимально возможное значение k равно 3 (т. к. 2k<7; 4k<15).
Разработка алгоритма
Приступим к разработке алгоритма.
Алгоритм seredina [середина квадрата]
Шаг0 [инициализация] х:=х0;
Шаг1 [цикл, вычисление последовательности M случайных чисел х [1..M].]
For j:=1 to M do [окончаниешаг2 и stop]
Шаг2 [генерация нового случайного числа]
Y:=X2 [Y имеет 4k разрядов]
Число Х получаем удалением по k разрядов с каждого конца Y
X[j]:=X;
При k=2 и х0=0.2134 в соответствии с первым оператором Шаг2 получим Y=
=0.04 5539 56. после применения второго оператора х1=0.5539. если х0<104, то все числа, генерируемые при помощи данного алгоритма, будут тождественно равны нулю. Здесь нужно осуществлять описанное выше увеличение отрезка апериодичности.Для реализации алгоритма потребуется написать процедуру, реализующую метод середины квадрата, которую назовем Rand, в которой при первом обращении задается целое число IX из [0.999999] и между вызовами оно не должно меняться. На выходе имеем числа: Rand числа типа Single из (0,1), IX числа типа LongInt из (0,999999), K числа типа LongInt из (0, К+1). Далее зададим переменные. Обнулим 7 и далее разряды числа Х, вычислим квадрат Х. Выберем 4…9 разряды числа Y. Определим новое целое случайное число IX из [0.999999] и случайную величину из [0.1]. Вычислим число К из [0.K+1].
Рисунок 1. блок-схем программы