Информатика - Учебное пособие

Моделирование случайности

 

Из сказанного выше следует, что математическая модель, являющаяся объектом компьютерного  эксперимента,  должна  уметь  учитывать  случайный  характер  каких-то параметров изучаемого объекта.

Француз Пьер Лаплас (1747-1827) является автором труда "Аналитическая теория вероятностей". Однако он - и автор принципа классического детерминизма (determino - определяю). Согласно этому принципу весь мир от молекулы до планет и живой природы устроен как гигантский часовой механизм. Только в силу того, что не до конца известны все связи между причинами и следствиями, приходится иногда пользоваться теорией вероятностей. Как только эти причины будут установлены, движение и молекул, и планет, и жизнь человека можно будет описать детерминистически, т. е. вполне определенно, без уступок случаю, например, с помощью большой системы дифференциальных уравнений.

Однако мир оказался намного сложнее, чем представлял Лаплас. Действительно, некоторые явления позволяют описать их основные черты с помощью дифференциальных уравнений, связывающих скорости изменения изучаемых величин с самими величинами, построить, как говорят, их детерминистическую модель. Такие модели достаточно распространены в астрономии, физике, химии, биологии (движение крупных тел, химические реакции, развитие больших популяций и т. д.). Имеются также объекты, которые в равной степени проявляют и вероятностные, и детерминистические черты. В целом же для многих изучаемых явлений микропричин и следствий настолько много, что заранее выделить что-то главное и пренебречь чем-то второстепенным невозможно. Отдельные причинные проявления носят случайный, непредсказуемый характер. Нельзя предсказать, в какую минуту выйдет из строя эта деталь, что в этот день заболеет этот человек, что в этот момент произойдет распад данного атома. Здесь-то и используется теория вероятностей, которая на основе изучения всей массы отдельных проявлений позволяет находить закономерности там, где детерминистический подход бессилен.

Теорию  вероятностей  иногда  называют  "знаменем  математики  ХХ  века",  говорят  о

"стохастической революции" (Stochasticos в пер. с греч. - "умеющий угадывать").

Итак, можно сделать вывод, что параметры изучаемого физического объекта носят непредсказуемый характер, являются случайными величинами в силу своей природы. Дополнительные погрешности вносят ошибки измерений параметров объекта, обусловленные несовершенством  приборов  измерения,  а  также  сам  компьютер,  поскольку  под  хранение каждого числа отводится ограниченное количество ячеек памяти.

Случайная величина - величина, принимающая в зависимости от случайного исхода испытаний то или иное значение с определенной вероятностью. Случайная величина может

принимать  конечную  или  бесконечную  последовательность  различных  значений.  В  первом случае она называется дискретной, во втором - непрерывной.

Случайное событие - событие, которое может при осуществлении данных условий как произойти, так и не произойти, и для которого имеется определенная вероятность

наступления.

Случайный процесс - процесс изменения во времени состояния тех или иных характеристик системы под влиянием различных случайных факторов.

Отметим следующие свойства ряда случайных чисел, равномерно распределенных в интервале (0,1):

1) их среднее значение М стремится к значению 0,5;

2) дисперсия такого ряда D стремится к 1/12 = 0,083(3).

В настоящее время основным средством исследования многих сложных природных, технологических и экономических систем является имитационное моделирование. Одной из важных составляющих имитационных моделей, придающими им сходство с реальными явлениями, является моделирование случайности путем генерации последовательностей псевдослучайные числа. Такие последовательности находят широкое применение также в численном анализе, тестировании алгоритмов, играх, сетевых протоколах и криптографии.

Современные средства разработки программного обеспечения, как правило, содержат встроенный генератор случайных чисел (ГСЧ), формирующий псевдослучайные целые числа, равномерно распределѐнные в интервале от нуля до некоторого большого значения. В качестве метода получения случайной последовательности традиционно использовался линейный конгруэнтный метод либо его частный случай – мультипликативный метод [1]. Обращение к стандартному генератору в языке С/С++ может иметь вид  int rand(), в результате чего получаем число от нуля до предопределенного большого числа RAND_MAX, которое для двухбайтового представления типа int.имеет величину 32767. В ряде языков программирования (Турбо- Паскаль, C/C++) имеется функция random(N), которая позволяет генерировать псевдослучайные

целые числа в диапазоне от 0 до N-1. Если требуется получить такие числа в диапазоне от M до

 

 
N, используется формула

 

 

 

 

 
M         random(M

N         1) .

 

Для генерации псевдослучайных вещественных чисел в диапазоне от 0 до 1 в языке

С/С++ рекомендуется использовать выражение

 

float(rand ())

RAND _ MAX .

 

 

 
Если в задаче моделирования требуется генерировать вещественные числа в другом диапазоне, для формирования псевдослучайных чисел в интервале (А, В): можно использовать формулу

 

 

 

 

 
A         (B

A)        float (rand ())

RAND _ MAX .

 

Инициализация ГСЧ предполагает определение начального значения псевдослучайной последовательности, от которого посредством рекуррентных вычислений строятся следующие значения. Это начальное значение обычно фиксировано при каждом обращении к генератору, поэтому сгенерированная последовательность при каждом запуске программы будет повторяться. Это хорошо, например, при отладке программы. Однако часто каждое новое выполнение программы необходимо начинать с новым начальным значением. В языке С/С++

для этого можно использовать функцию randomize(), вызываемую перед циклом генерации псевдослучайной последовательности. Обычно для задания начального значения компилятор использует значение счѐтчика реального времени.

 

 
Если встроенный генератор Вас почему-либо не удовлетворяет, для генерации последовательности псевдослучайных вещественных чисел в диапазоне (0, 1) можно использовать рекуррентную формулу

 

 

 

 

 
Rn  1

M * Rn

int( M * Rn ) .

 

Качество получаемого ряда в значительной мере зависит от выбора    коэффициента M

(обычно достаточно большое целое число, например, 32767) и начального значения ряда R0.

 

Метод Монте-Карло (М-К)

 

Применяется для решения систем алгебраических уравнений высокого порядка, многомерных интегралов и т. п. Суть метода: пусть требуется найти значение a некоторой изучаемой величины. Для этого выбирается такая случайная величина X, математическое ожидание которой M(X) = a. На практике производят n испытаний, в результате чего получают n

X i

значений величины X, далее вычисляют их среднее  X  i

n

и принимают это значение в

качестве  оценки  искомой  величины,  т.  е.   a

X .  Теория  метода  указывает,  как  наиболее

целесообразно выбрать случайную величину X, как находить еѐ возможные значения.

Рассмотрим применение метода Монте-Карло к вычислению определенного интеграла.

b

Итак, пусть требуется вычислить  S

f ( x)dx

a

sin( x)dx . Мы знаем, что такой определѐнный

0

интеграл численно равен площади фигуры, образованной подынтегральной функцией f(x), участком оси абсцисс между пределами интегрирования a, b и вертикалями, восстановленными в точках a и b (рис. 2.3). Нахождение такой площади методом М-К производится следующим способом. Помещаем фигуру с искомой площадью внутрь фигуры, площадь которой S~ определяется заведомо просто, например, в прямоугольник. Далее генерируем случайным образом координаты достаточно большого количества N~ точек таким образом, чтобы эти точки попадали внутрь фигуры с площадью S~. В процессе генерации подсчитываем   отдельно количество N точек, попадающих в искомую площадь (в данном случае – ниже функции f(x)).

Теперь величину интеграла можно приближѐнно определить по формуле I

S          S~

N / N~ .

 

 

 

 

 

 
Необходимые  геометрические  построения  для  решения  нашей  задачи  методом  М-К

приведены на рис.2.3. При выборе внешней фигуры мы исходили из того, что максимальное значение функции sin(x) на интервале(0,    ) равно единице. Площадь прямоугольника ABCD легко определяется и равна S~ = (1 - 0)     =   . Алгоритм решения приведѐн на рис. 2.4.

ввод числа испытаний N~

 

N= 0

 

повторить N~ раз

 

x =       random y = random

 

y < sin(x)

 

Да        Нет

 

N = N + 1

 

“Величина интеграла равна”

N / N~

 

Рис. 2.4. Алгоритм вычисления определенного интеграла методом Монте-Карло (здесь random –

функция генерации псевдослучайной последовательности в диапазоне от 0 до 1)