Введение
В практикемоделирования систем наиболее часто приходится иметь дело с объектами, которыев процессе своего функционирования содержат элементы случайности событийвнешней среды. К примерам систем, характеризующихся случайными параметрами,можно отнести системы связи, у которых характеристики канала связи меняютсяслучайным образом, а также локационные системы обнаружения отражений от целейна фоне случайных помех. Широкие возможности для моделирования с использованиемсовременных вычислительных систем открывают датчики случайных чисел.
Датчики случайных чиселприменяются для имитации реальных условий функционирования системавтоматического управления, для решения задач методом статистических испытаний,для моделирования случайных изменений параметров производства вавтоматизированных системах управления и т. д. Кроме непосредственногоиспользования в статистических моделях, равномерно распределённые случайныечисла, вырабатываемые датчикомслучайныхчисел,являются основой для формирования числовых последовательностей с заданнымзаконом распределения.
Цель работы — овладение навыками алгоритмизации и программирования задач с использованиемдатчиков случайных чисел, способами получения случайных чисел с различнымизаконами распределения, навыками оценки качества псевдослучайных чисел и ихсоответствия их выполняемым задачам.
Для чего нужныслучайные числа?
Для чего нужны «случайновыбранные» числа? Они, оказывается полезны для самых различных целей. Вотнекоторые примеры:
1. Моделирование.Когда с помощью вычислительной машины моделируются природные явления, случайныечисла позволяют приблизить модель к реальности.
2. Выборка.Часто бывает, что проверка всех возможных вариантов практически не осуществима,тогда на некоторые вопросы позволяет получить ответы случайная выборка.
3. Численныйанализ. Для решения сложных задач вычислительной математики была разработанаостроумная техника, использующая случайные числа.
4. Программированиедля вычислительных машин. Случайные значения служат хорошим источником данныхпри испытании эффективности различных алгоритмов для вычислительных машин.
5. Принятиерешений.
6. Развлечения.
И все-таки, что жетакое «случайность»? в некотором смысле такого объекта, как случайное число,просто нет. Скажем, двойка – это случайное число? Скорее это последовательностьнезависимых случайных чисел с определенным законом распределения, и этоозначает, грубо говоря, что каждое число было получено самым произвольнымобразом, без всякой связи с другими членами последовательности, и что у негоесть определенная вероятность оказаться в любом заданном интервале.
Равномерным называетсятакое распределение, при котором каждое возможное число равновероятно. Каждаяиз десяти цифр от 0 до 9 составляют примерно одну десятую часть всех цифр вовсякой случайной (равномерной) последовательности цифр. Любая заданная парадвух соседних цифр должна составлять примерно одну сотую часть всех пар,встречающихся в последовательности и т. д. Тем не менее, если мы рассмотримкакую-нибудь конкретную случайную последовательность из миллиона цифр, в нейсовсем не обязательно окажется ровно 100 000 нулей, 100 000 единиц ит. д. В действительности вероятность такого события очень мала. Закономерностьже выполняется в среднем для последовательности таких последовательностей.
Любая заданнаяпоследовательность столь же вероятна, как и последовательность, состоящая изодних нулей. Более того, допустим, что мы выбираем случайным образомпоследовательность из миллиона цифр. Пусть оказалось, что первые 999 999из них равны нулю. И в этом случае вероятность того, что последняя цифра будетнулем, все еще в точности равна одной десятой, если выборка действительнослучайная.
Немного истории
Раньше ученые,нуждавшиеся для своей работы в случайных числах, раскладывали карты, бросаликости или вытаскивали шары из урны, которую предварительно «как следуеттрясли». В 1927 году Л. Типпет опубликовал таблицы, содержащие свыше40 000 случайных цифр, «произвольно взятых из отчетов о переписи». Позжебыли сконструированы специальные машины, механически вырабатывающие случайныечисла. Первую такую машину в 1939 году использовали М. Дж. Кендалл и Б.Бэбингтон-Смит при создании таблиц, включающих 100 тысяч случайных цифр. В 1935году компания RAND Corporation опубликовала хорошо известные таблицы смиллионом случайных цифр, полученных другой такой машиной. Известная машинаERNIE, вырабатывающая случайные числа, определяет выигравшие номера вБританской лотерее. Вскоре после создания вычислительных машин начались поискиэффективных методов получения случайных чисел, пригодных для использования впрограммах. В принципе можно работать и с таблицами, однако этот метод имеетограничения, связанные с конечным объемом памяти машин и затратами времени дляввода чисел в машину в том случае, когда таблица оказывается слишком короткой.Кроме того, довольно неприятно готовить таблицы заранее, да и вообще иметь сними дело. Можно присоединить к ЭВМ машину типа ERNIE, но и этот путьоказывается неудовлетворительным, потому что при отладке программы невозможновоспроизвести вторично вычисления, сделанные ранее.
Несовершенство всехэтих методов пробудило интерес к получению случайных чисел с помощьюарифметических операций вычислительной машины. Первым такой подход в 1946 годупредложил Джон фон Нейман, использовавший метод «середины квадрата». Идеязаключается в том, что предыдущее число возводится в квадрат, а затем изрезультата извлекаются средние цифры. Пусть, например, мы вырабатываем десятизначныечисла и допустим, что предыдущее число было равно 5772156649; возведя его вквадрат, получим 33317792380594909201, и поэтому следующее число равно7923805949.
Метод вызывает довольноочевидное возражение. Как может быть случайной выработанная таким способомпоследовательность, если каждый ее член полностью определен своимпредшественником? Ответ заключается в том, что эта последовательность неслучайна, но выглядит как случайная. В типичных приложениях обычно не имеетзначения, как связаны друг с другом два последующих числа последовательности;таким образом, неслучайный характер последовательности не является нежелательным.Интуитивно метод середины квадрата должен довольно хорошо «перемешивать» предыдущеечисло.
Однако первоначальный«метод середины квадрата» фон Неймана оказался сравнительно скудным источникомслучайных чисел. Недостаток его заключается в том, что последовательности имеюттенденцию превращаться в короткие циклы повторяющихся элементов. Например, есликакой-нибудь член последовательности окажется равным нулю, все последующиечлены также будут нулями. В начале пятидесятых годов некоторые ученые проводилиэксперименты с методом середины квадрата. Дж. Э. Форсайт, работавший счетырехзначными (а не с десятичными) числами, проверил 16 чисел в качественачальных значений последовательностей. Оказалось, что 12 из них порождалипоследовательности, оканчивающиеся циклом 6100, 2100, 4100, 8100, 6100, …, адве последовательности выродились в нуль. Обширные эксперименты по исследованиюметода середины квадрата провел Н. Метрополис, оперировавший главным образомдвоичными числами. Работая с 20-разрядными числами, он показал, что существуеттринадцать различных циклов, в которые могут выродиться последовательности;длина периода самого большого из них равна 142. Как только последовательностьвырождается в нуль, довольно легко начать выработку случайных чисел заново.Гораздо трудней бороться с длинными циклами. Все же Р. Флойд предложилостроумный метод, позволяющий зарегистрировать возникновение цикла впоследовательности.
Метод Флойда требуетнебольшой памяти машины, увеличивает время выработки случайного числа всего втри раза и сразу же сигнализирует, как только в последовательности появляетсявстречавшееся ранее число.
С другой стороны,отметим, что, работая с 38-разрядными двоичными числами, Н. Метрополисобнаружил последовательность, состоящую из 750 000 членов, отличающихся друг отдруга. Статистические тесты подтвердили случайный характер полученнойпоследовательности из 750 000 × 38 битов. Это подтверждает, что, применяяметод середины квадрата, можно получить полезные результаты.
Тем не менее безпредварительных трудоемких вычислений ему не стоит излишне доверять.
Многие датчикислучайных чисел, популярные сейчас, недостаточно хороши. Среди пользователейнаметилась тенденция избегать их изучения. Довольно часто какой-нибудь старыйсравнительно неудовлетворительный метод передается от одного программиста кдругому в слепую, и сегодняшний пользователь уже ничего не знает об егонедостатках.
Полученияпоследовательности
Так как ввычислительной машине действительное число всегда представляется с ограниченнойточностью, фактически мы будем генерировать целые числа Xnв интервале от 0 до некоторого m. Тогда дробь Un=Xn/m,где Un случайныедействительные числа, попадает в интервал от 0 до 1. Обычно m на единицу большемаксимального числа, которое можно записать в машинном слове. Поэтому Xnможно интерпретировать как целое содержимое машинного слова с десятичнойзапятой, расположенной справа, а Unможно считать дробью, содержащейся в том же слове, с запятой в крайней левой позиции.
Наилучшие из известныхсегодня датчиков случайных чисел представляют собой частные случаи следующейсхемы, предложенной Д. Х. Лемером в 1948 году. Выбираем четыре «магическихчисла»:
x0-начальное значение; x0≥0;
a- множитель; a≥0;
c- приращение; c≥0;
m- модуль; m>x0,m>a,m>c.
Тогда искомаяпоследовательность случайных чисел получается из соотношения Xn+1=(aXn+c)mod m,n≥0. Она называется линейнойконгруэнтной последовательностью. Например, при Xn=a= c=7,m=10 последовательность выглядиттак: 7, 6, 9, 0, 7, 6, 9, 0, … .
Как видно изприведенного примера, последовательность не всегда оказывается «случайной»,если выбирать x0,a, c,m произвольно. Этот примериллюстрирует тот факт, что конгруэнтные последовательности всегда«зацикливаются», т.е. в конце концов числа образуют цикл, который повторяетсябесконечное число раз. Это свойство присуще всем последовательностям, имеющимобщий вид Xn+1=f(Xn).Повторяющийся цикл называется периодом. Длина периода у данного примера равна4.
Специальногорассмотрения требует частный случай с=0, когда процесс выработки случайныхчисел происходит несколько быстрее. Ограничение с=0 уменьшает длину периодапоследовательности, но при этом все еще можно получить относительно большойпериод. В первоначальном методе Лемера было принято с=0, хотя автор и упомянулвозможность использования с≠0. Идея получения более длинныхпоследовательностей за счет обобщения с≠0 принадлежит Томсону инезависимо Ротенбергу.
Чтобы хоть немногоупростить формулы, можно определить b=a-1. Можно сразу отбросить случай а=1, таккак при этом Xn=(X0+nc)mod m,и очевидно, что последовательность не случайная. Вариант а=0 еще хуже.Следовательно, для практических целей мы можем предположить, что а≥2, b≥1.
случайныйчисло моделирование программирование
Выбор модуля
Как правильно выбратьчисло m? Оно должно быть достаточно большим, так как длина периода не можетбыть больше m. Другой фактор влияющий на выбор m, — это скорость выработкичисел: мы должны выбрать такое значение m, чтобы быстро вычислять (aXn+c)mod m.
Выбор множителя и длины.
Как выбрать множительa, чтобы получился период максимальной длины? Для любой последовательности,предназначенной для использования в качестве источника случайных чисел, важенбольшой период. Действительно, хотелось бы, чтобы период содержал значительнобольше чисел, чем это необходимо для решения какой-либо одной задачи. Однако,большой период – это только один из необходимых признаков случайнойпоследовательности. Вполне возможны абсолютно неслучайные последовательности сочень большим периодом. Например, при a=c=1 последовательность сводится к Xn+1=(Xn+1)mod m.Очевидно, что ее период равен m, тем не менее ее никак нельзя назватьслучайной.
Так как возможны толькоm различных значений, длина периода не может превышать m. Исследуем всевозможные способы выбора a и c, которые дают период длины m.
Замечание! Когда периодимеет длину m, каждое число от 0 до (m-1)встречается за период ровно один раз. Поэтому в этом случае выбор X0не влияет на длину периода.
Теорема.
Длина периода линейнойконгруэнтной последовательности равна m тогда и только тогда, когда
1) c и mвзаимно простые числа;
2) b=a-1кратно p для любого простого p,являющегося делителем m;
3) b кратно 4, если mкратно 4.
Теорема.
Если m=10e,e≥5, c=0и X0не кратно 2 или 5, период линейной конгруэнтной последовательности равен 5×10e-2в том и только том случае, когда amod 200 принимает одно из следующих 32значений:
3, 11, 13, 19, 21, 27,29, 37, 53, 59, 61, 67, 69, 77, 83, 91, 109, 117, 123, 131, 133, 139, 141, 147,163, 171, 173, 179, 181, 187, 189, 197.
Другие методы
Конечно, линейныеконгруэнтные последовательности – не единственный из предложенных длявычислительных машин источников случайных чисел.
Одно из общепринятыхзаблуждений, когда речь идет о получении случайных чисел, заключается в том,что достаточно взять хороший датчик и слегка его изменить, чтобы выработать«еще более случайную» последовательность. Довольно часто это неверно. Например,мы знаем, что по формуле Xn+1=(aXn+c)mod mможно получить довольно хорошие случайные числа. Не будет ли последовательностьXn+1=((aXn+c)mod (m+1)+c)mod mеще более случайной? Ответ таков, что новая последовательность с большей вероятностьюменее случайна.
Например, простейшийпример зависимости Xn+1от более чем одного из предыдущих значений реализуется в последовательностьФибоначчи Xn+1=(Xn+Xn-1)mod m.Этот датчик рассматривали в начале пятидесятых годов. Он дает обычно длинупериода, большую, чем m.Однако тесты с определенностью показали, что числа, получаемые из соотношенияФибоначчи, являются недостаточно случайными. Поэтому в настоящее время эта формулаинтересна главным образом как прекрасный «плохой пример».
Можно также рассмотретьдатчики вида Xn+1=(Xn+Xn-k)mod m,где k – достаточно большоечисло, предложенные Грином, Смитом и Клемом. При соответствующем выборе X0,X1,…, Xkэта формула обещает стать источником хороших случайных чисел. Этот датчикработает обычно быстрее, чем датчики, реализующие предыдущие методы, так какздесь не требуется никакого умножения. В статье Грина, Смита и Клема говорится,что при k≤15последовательность не удовлетворяет тесту «проверка интервалов», хотя при k=16тест проходит нормально.
Статистические тесты
Основная задача состоитв получении последовательностей, которые похожи на случайные. Мы уже видели,как добиться большого периода последовательности. Хотя это и важно, но большойпериод еще вовсе не означает, что последовательность хороша для работы. Как жерешить, достаточно ли случайна последовательность?
Если дать любомучеловеку карандаш и бумагу и попросить его написать 100 случайных десятичныхцифр, очень мало шансов на то, что он достаточно хорошо сможет с этимсправиться. Люди стремятся избегать комбинаций, кажущихся им неслучайными,таких, как пары одинаковых соседних цифр (хотя примерно каждая из 10 цифрдолжна совпадать с предыдущей). Поэтому увидев таблицу действительно случайныхчисел, любой человек скорее всего скажет, что они совсем не случайные, его глазсразу же отметит некоторые видимые закономерности.
Все мы выделяемособенности телефонных номеров, номерных знаков машин и т.д., чтобы легче ихзапомнить. Главная мысль всего сказанного заключается в том, что мы не можемдоверять себе в оценке, случайна или нет данная последовательность чисел.Необходимо использовать какие-то непредвзятые механические тесты.
Статистическая теориядает нам некоторые количественные критерии случайности. Возможным же тестамбуквально нет конца.
Если последовательностьведет себя удовлетворительно относительно тестов Т1, Т2,…, Тn, мы не можембыть уверены в том, что она выдержит и следующее испытание Тn+1.Однако каждый тест дает нам все больше и больше уверенности в случайностипоследовательности. Обычно последовательность проверяется с помощью полудюжиныразных тестов. Если их результаты оказываются удовлетворительными, мы считаемее случайной.
Различают два сортатестов: эмпирические тесты, когда машина манипулирует с группами чиселпоследовательности и производит оценку с помощью определенных статистическихкритериев, и теоретические тесты.
Критерий χ2
Критерий χ2(«хи-квадрат»), вероятно, самый распространенный из всех статистическихкритериев. Он используется не только сам по себе, но и как составная частьмногих других тестов. Прежде чем приступить к общему описанию критерия χ2,рассмотрим сначала в качестве примера, как можно было бы применить этоткритерий для анализа игры в кости. Пусть каждый раз бросаются независимо две«правильные» кости, причем бросание каждой из них приводит с равнойвероятностью к выпадению одного из чисел 1, 2, 3, 4, 5 и 6. Вероятностивыпадения любой суммы sпри одном бросании представлены в таблице:
Сумма s=2 3 4 5 6 7 8 9 10 11 12
Вероятность ps= /> .
Если бросать кости nраз, можно ожидать, что сумма sпоявится в среднем npsраз. Например, при 144 бросаниях значение 4 должно появится около 12 раз.Следующая таблица показывает, какие результаты были в действительности полученыпри 144 бросаниях.
Сумма s=2 3 4 5 6 7 8 9 10 11 12
Фактическое числовыпадений Ys= 2 4 10 12 22 29 21 15 14 9 6
Среднее число выпаденийnps = 4 8 12 16 20 24 2016 12 8 4 .
Отметим, что фактическоечисло выпадений отличается от среднего во всех случаях. В этом нет ничегоудивительного. Дело в том, что всего имеется 36144 возможныхпоследовательностей исходов для 144 бросаний, и все они равновероятны. Каким жеобразом мы можем проверить, правильно ли изготовлена данная пара костей? Ответзаключается в том, что мы можем дать только вероятностный ответ, т.е. указать,насколько вероятно или невероятно данное событие.
Естественный путьрешения нашей задачи состоит в следующем. Вычислим сумму квадратов разностейфактического числа выпадений Ysи среднего числа выпадений nps:
V=(Y2 — np2)2+( Y3 — np3)2+…+(Y12 — np12)2.
Для плохого комплектакостей должны получаться относительно высокие значения V.
Предположим, что всевозможные результаты испытаний разделены на kкатегорий. Проводится nнезависимых испытаний: это означает, что исход каждого испытания абсолютно невлияет на исход остальных. Пусть ps– вероятность того, что результат испытания попадает в категорию s,и пусть Ys– число испытаний, которые действительно попали в категорию s.Сформируем статистику V=/>. Вернемся квопросу о том, какие значения Vможно считать разумными. Ответ на это дает табл. 1, в которой приведено«распределение χ2 с vстепенями свободы» при разных значениях v.Следует пользоваться строкой таблицы с v=k-1;число «степеней свободы» равно k-1,т.е. на единицу меньше числа категорий.
Большим преимуществомрассматриваемого метода является то, что одни и те же табличные значенияиспользуются при любых nи любых вероятностях ps.Единственной переменной является v=k-1.На самом деле приведенные в таблице значения не являются абсолютно точными вовсех случаях: это приближенные значения, справедливые лишь при достаточнобольших значениях n. Как великодолжно быть n? Достаточно большимиможно считать такие значения n,при которых любое из npsне меньше 5; однако лучше брать nзначительно большим, чтобы повысить надежность критерия.
На самом деле вопрос овыборе n не так прост. Прибольших значениях n могутсглаживаться локальные отклонения, такие, как следующие друг за другом блокичисел с сильным систематическим смещением в противоположные стороны. При действительномбросании костей этого можно не опасаться, так как все время используются одни ите же кости, но если речь идет о последовательности чисел, полученных на ЭВМ,то такой тип отклонения от случайного поведения вполне возможен. В связи с этимжелательно проводить проверку с помощью критерия χ2 при разныхзначениях n, но в любом случае этизначения должны быть довольно большими.
Итак, проверка спомощью критерия χ2 заключается в следующем. Проводится nнезависимых испытаний, где n– достаточно большое число. Подсчитывается число испытаний, результат которыхотносится к каждой из kкатегорий, и по формулам вычисляется значение V.Затем V сравнивается с числамииз табл. 1 при v=k-1.Если V меньше значения,соответствующего p=99%, или большезначения, соответствующего p=1%,то результаты бракуются как недостаточно случайные. Если pлежит между 99 и 95% или между 5 и 1%, то результаты считаются«подозрительными»; при значениях p,полученных интерполяцией по таблице, заключенных между 95 и 90% или 10 и 5%, результаты«слегка подозрительны».
Критерий Колмогорова-Смирнова(КС-критерий)
Как мы видели, критерийχ2 применяется в тех случаях, когда результаты испытанийраспадаются на конечное число kкатегорий. Однако нередко случайные величины могут принимать бесконечно многозначений. В частности, бесконечно много значений принимают вещественныеслучайные числа в интервале между 0 и 1. Хотя множество значений случайныхчисел, полученных в вычислительных машине, неизбежно ограничено, хотелось бы,чтобы это никак не сказывалось на результатах расчетов.
В теории вероятностей истатистике принято использовать одни и те же обозначения при описании дискретныхи непрерывных распределений. Пусть требуется описать распределение значенийслучайной величины ξ. Это делается с помощью функций распределения F(x),где F(x)= вероятность того, что (ξ≤x).
На рис. 1 представленытри примера. Первый, – функция распределения случайного бита, т. е. случайнойвеличины ξ, принимающей значения 0 или 1, каждое с вероятностью 12. На 1, b– функция распределения вещественной случайной величины, равномернораспределенной между нулем и единицей, так что вероятность того, что ξ≤x,просто равна x, если 0≤x≤1.Рисунок 1, c показывает предельноераспределение значений Vв критерии χ2. Заметим, что F(x)всегда возрастает от 0 до 1 при увеличении xот -∞ до +∞.
Используя значенияξ1, ξ2, …, ξnслучайной величины ξ, полученные в результате независимых испытаний, можнопостроить эмпирическую функцию распределения Fn(x):
Fn(x)=(числотаких, ξ1, ξ2,…, ξnкоторые≤x)/n.
/>
Рисунок 1 – Примерыфункций распределения
На рис. 2 показаны триэмпирические функции распределения. Там же и изображены и истинные функциираспределения F(x).При увеличении n функции Fn(x)должны все более точно аппроксимировать F(x).
КритерийКолмогорова-Смирнова можно использовать в тех случаях, когда F(x)не имеет скачков. Он основан на разности между F(x)и Fn(x).Плохой датчик случайных чисел будет давать эмпирические функции распределения,плохо F(x).На рис. 2, b приведен пример, когдазначения ξiслишком велики, так что кривая эмпирической функции распределения проходитслишком низко. На рис. 2, cпредставлен еще худший случай; ясно, что такие большие расхождения между Fn(x)и F(x)крайне маловероятны; КС-критерий должен указать, насколько они маловероятны.
/>
Рисунок 2 – примерыэмпирических распределений
Для этого формируютсяследующие статистики:
Kn+=nmax (Fn(x)- F(x));
Kn-=nmax (F(x)- Fn(x)), при-∞
Здесь Kn+показывает, каково максимальное отклонение для случая Fn>F,а Kn- — каково максимальное отклонение для случая Fn
Замечание. Наличиемножителя n в формуле можетпоказаться странным. Эти формулы не годятся для машинных расчетов, так кактребуется отыскать максимальное среди бесконечного множества чисел. однако тотфакт, что F(x)– неубывающая функция, а Fn(x)имеет конечное число скачков, позволяет определить статистики Kn+и Kn-с помощью следующего простого алгоритма:
Шаг 1. Определяютсявыборочные значения ξ1,ξ2,…, ξn.
Шаг 2. Значения ξiрасполагаются в порядке возрастания так, чтобы ξ1≤ξ2≤…≤ξn.
Шаг 3. Нужныестатистики вычисляются по формулам
Kn+=/> max(/> -F(xj));
Kn--=/> max(F(xj) — />),при1≤j≤n.
Заключение
В данной курсовойработе рассмотрены вопросы применения случайных чисел для прикладных задачматематики и информатики, рассмотрены методы получения случайных чисел, начинаяот самых ранних методов с использованием первых вычислительных машин понастоящее время.
После проведения обзораиспользуемых в настоящее время датчиков случайных чисел, можно сделать вывод,что многие из них, несмотря на свою популярность, недостаточно хороши. Довольночасто какой-нибудь старый сравнительно неудовлетворительный метод передается отодного программиста к другому в слепую, и сегодняшний пользователь уже ничегоне знает об его недостатках. Поэтому, при моделировании процессов и систем, в которыхнужно учитывать случайные параметры, необходимо оценочно подходить к выборуподходящего датчика случайных чисел.
Один из акцентовкурсовой работы был сделан на способы получения последовательностей какисточника случайных чисел для ЭФМ. Рассмотрен вариант построения линейнойконгруэнтные последовательности случайных чисел. Вообще, получениепоследовательностей псевдослучайных чисел сводится к задаче полученияпоследовательностей, которые похожи на случайные, и определения, достаточно лихороша генерируемая последовательность случайных чисел для выполняемой задачи.В работе рассмотрен вопрос использования критерия χ2 и КС-критерия дляопределения «случайности» чисел генерируемых числовых последовательностей, ипоказано, как могут соотноситься истинные и эмпирические функции распределения.
В качестве практическойчасти приводится пример создания датчика случайных чисел, с последующейразработкой программы на языке Pascal.
Список литературы
1. Д.Кнут Искусство программирования для ЭВМ. т. 2, Получисленные алгоритмы. – М.:Издательство «Мир», 1977 – с. 5-98
2. ПоллякЮ.Г. Вероятностное моделирование на электронных вычислительных машинах. — М.:Сов. Радио, 1971 — 386 с.
3. ВентцельЕ.С., Овчаров Л.А. Теория вероятностей и её инженерные приложения, М: Наука,1988 — 301 с.
4. СоветовБ.Я. Моделирование систем: Курсовое проектирование: Учеб. пособие для вузов поспец. АСУ.- М: Высш. шк., 1988. – 135с.: ил
Приложение
1. program g1;
constn=100;
varx0, a, c, m, i: byte; x: array[0..n] of integer;
begin
writeln('vvedite x0>=0:');
readln(x0);
writeln('vvedite a>=2:');
readln(a);
writeln('vvedite c>=0:');
readln(c);
writeln('vvedite m>(x0 and a and c):');
readln(m);
if(x0>=0) and (a>=0) and (c>=0) then
if(m>x0) and (m>a) and (m>c) then
fori:=0 to n do x[i+1]:=(a*x[i]+c) mod m;
writeln('chisla: ');
fori:=1 to n do write(x[i], ' ');
writeln;
end.
2. Programg2;
varI, l: integer;
begin
forI:=l to 10 do
write(random(200):4)
end.
3. programnumber(input, output);
vara, b, n, s, i: integer;
begin
writeln('poluchenie sluchainih chisel iz intervala [a,b]');
write('vvedite a');
readln(a);
write('vvedite b');
readln(b);
writeln('vvedite n');
readln(n);
fori:=1 to n do
begin
s:=trunc(random(b-a)+a);
writeln(i:2,'-e sluchainoe chislo:',s:4);
end;
readln;
end.