Моделирование случайных событий
Метод Монте-Карло
Метод Монте-Карло — это численный метод решения математических задач, который основан на использовании генератора случайных чисел.
Пример. Пусть имеется плоская фигура, которая находится внутри прямоугольника с известной площадью 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. Методом Монте-Карло вычислите площадь заштрихованной фигуры:
а)
б)
в)