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

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

Метод Монте-Карло — это численный метод решения математических задач, который основан на использовании генератора случайных чисел.

Пример. Пусть имеется плоская фигура, которая находится внутри пря­моугольника с известной площадью S0.

Засыплем мысленно прямоугольник тончайшим слоем песка. Если посчитать общее число n песчинок и число k тех песчинок, которые попали на фигуру, то приближенно площадь фигуры можно считать по формуле S=k/n*S0

Метод Монте-Карло состоит в воспроизведении на компьютере опыта случайного разбрасывания n песчинок с использованием генератора случайных чисел и с подсчетом числа k песчинок, которые попали на фигуру.

Вычисление значения числа 𝞹 методом Монте-Карло

Постановка задачи (этап 1)

Задача. Методом Монте-Карло вычислить значение числа 𝞹.

Выбор плана создания модели (этап 2)

Геометрический метод Монте-Карло позволяет вычислять площади плоских фигур. Если этим методом найти площадь S круга заданного радиуса r, то, пользуясь известной формулой S=𝞹r2, можно найти значение 𝞹=S/r2

Изберем следующий план создания модели:

3а) создание документальной математической модели;

3б) создание документальной расчетной модели;

3в) создание компьютерной расчетной модели.

Создание документальной математической модели (этап 3а)

Так как значение радиуса круга ограничений не имеет, возьмем круг единичного радиуса (r = 1). Тогда минимальный базовый прямоугольник можно построить в форме квадрата со стороной 2 (пример 1).

Площадь базового квадрата S0 = 4.

Пусть S — искомая площадь круга.

Пример 1. Построим базовый квадрат и круг в прямоугольной системе координат следующим образом.

Методом Монте-Карло необходимо имитировать процесс посыпания базового квадрата точками-песчинками, подсчитывая общее число n точек и число k точек, попавших в круг (пример 2).

Для создания компьютерной расчетной модели можно использовать электронные таблицы и язык программирования. Но в электронных таблицах общее число n точек будет определяться числом строк в расчетной таблице, а в программе на языке Pascal — только числом повторений цикла. Поэтому выбираем систему PascalABC.NET.

Пример 2. Для вычисления площади круга будем использовать основную формулу метода Монте-Карло S=k/n∙S0. В нашем случае S=k/n∙4.

Для вычисления значения числа воспользуемся выведенной ранее формулой 𝞹=S/r2, которая для единичного круга получит вид 𝞹=S. Оказалось, что для вычисления значения числа достаточно вычислить площадь единичного круга.

Создание документальной расчетной модели (этап 3б)

В программе на языке Pascal следует организовать цикл for с числом повторений n и в нем генерировать случайные координаты x и y точек на базовом квадрате (пример 3).

Пример 3. Для генерации координат точек воспользуемся функцией random(). Функция генерирует случайные действительные числа от 0 до 1, а координаты точек-песчинок на базовом квадрате должны принимать значения от 0 до 2. Тогда координаты точек нужно вычислять, используя выражение 2*random().

Для подсчета числа точек, попавших на единичный круг, в цикле следует использовать оператор if с условием попадания точки в круг (x – 1)2 + (y – 1)2 ≤ 1 и при выполнении этого условия оператором k:=k+1 организовать накопление значений переменной k, как счетчика. После цикла необходимо организовать вывод результата на экран (пример 4).

Пример 4. Для сравнения выведем на экран рассчитанное значение числа и фактическое значение, которое хра­нится в системе PascalABC.NET как значение переменной с именем pi.

Создание компьютерной расчетной модели (этап 3в)

В системе PascalABC.NET создадим программу montekarlo. В ней объявим переменные n и k типа integer для хранения числа точек-песчинок на базовом квадрате и на круге соответственно, а также переменные s, x и y типа real для хранения значений площади круга и координат точек-песчинок соответственно.

В основном разделе программы, задаем начальные значения и организуем цикл (пример 5). Далее подсчитываем результат, выводим на экран результат и точное значение числа :

s := 4 * k / n;

writeln('Результат pi = ',s);

writeln('Точно pi = ',pi);

Пример 5. Задаем начальные значения:

k := 0;

n := 1000;

В цикле for с начальным значением переменной цикла 1 и конечным значением n присваиваем случайные значения координатам очередной точки:

x := 2 * random();

y := 2 * random();

С помощью условного оператора if организуем подсчет числа k точек, которые попали в круг:

if sqr(x-1)+sqr(y-1)<=1 then k:=k+1;

Осталось подсчитать площадь круга по основной формуле метода.

Проверка адекватности модели (этап 4)

Адекватность модели проверяется сравнением полученного значения числа с точным. При числе повторений 1000 рассчитанное значение должно находиться в пределах от 3,0 до 3,3 (пример 6).

Пример 6. Каждый новый запуск программы меняет рассчитанное значение, так как каждый раз используется новый набор из 1000 точек-песчинок с другими случайными координатами.

Получение решения задачи с помощью модели (этап 5)

В результате нескольких запусков программы можно заметить, что для числа точно определяется только целая часть значения — число 3.

Уточнить результат позволяет увеличение числа n точек-песчинок. Теоретически, если увеличить число n точек-песчинок в 100 раз, точность результата увеличится на 1 десятичный разряд вправо (пример 7).

Пример 7. Увеличим число n в 100 раз, дописывая в программе нули в его значении справа. В результате нескольких запусков программы можно убедиться, что в значении числа p определяются уже два разряда — 3,1.

Увеличим число n еще в 100 раз. Точность вычислений увеличивается до трех разрядов — 3,14. Но при этом растет и время исполнения программы.

Упражнения

1. Перечислите этапы моделирования в задаче вычисления значения числа методом Монте-Карло.

2. Введите текст программы в систему PascalABC.NET в соответствии с указаниями, приведенными выше.

3. Проведите этапы 4 и 5 моделирования в соответствии с указаниями.

4. *Создайте модель для вычисления значения числа методом Монте-Карло в электронных таблицах, построив рабочую таблицу размером в 1000 строк для подсчета числа k. Сравните результат с полученным ранее.

5. Методом Монте-Карло вычислите площадь заштрихованной фигуры:

а)

б)

в)