Вероятностные модели. Метод Монте-Карло.
Качественная модель метода Монте-Карло: -поместим геометрическую фигуру полностью внутрь квадрата; - будем случайным образом «бросать» точки в этот квадрат, то есть с помощью генератора случайных чисел задавать точкам координаты внутри квадрата; - будем считать, что отношение числа точек, попавших внутрь фигуры, к общему числу точек в квадрате приблизительно равно отношению площади фигуры к площади квадрата, причём это отношение тем точнее, чем больше количество точек.
R Y X -R Формальная модель: М – количество точек попавших внутрь квадрата; N – количество точек, которые случайно генерируются внутри квадрата. S кр =S кв *M/N
Круг вписан в квадрат со стороной 2R, площадь которого вычисляется по формуле: S кв =4R 2 Случайный выбор координат точек, которые попадают внутрь квадрата (N точек), должен производиться так, чтобы координаты точек x и y удовлетворяли условиям: -R
Компьютерная модель «Проект «Метод Монте-Карло» Option Strict Off Option Explicit On Friend Class frm1 Inherits System.Windows.Forms.Form Dim N, dblX, I, M As Object Dim dblY, S As Double Dim R As Integer Private Sub cmd1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmd1.Click
M = 0 R = Val(txtR.Text) N = Val(txtN.Text) 'Генерация точек For I = 1 To N dblX = 2 * R * Rnd() – R dblY = 2 * R * Rnd() - R If dblX ^ 2 + dblY ^ 2
Исследование модели: Ввести радиус окружности и количество генерируемых точек. После выполнения проета в текстовое поле будет выведено значение площади круга.
Задание: Определить методом Монте-Карло площадь треугольника, вершины которого имеют координаты (-1,0); (0, 1) и (1,0) x y Замечание: 1.Функция генерации случайных чисел работает так: если дать команду f= rnd(), то в переменную f будут попадать числа из интервала [0, 1]. 2.Условие попадания точек внутрь треугольника : dblY>=0 и ABS(dblX) + ABS(dblY)
For I = 1 To N dblX = 2 * Rnd() - 1 dblY = Rnd() If dblY >= 0 And System.Math.Abs(dblX) + System.Math.Abs(dblY)
Private Sub cmd1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmd1.Click M = 0 N = Val(txtN.Text) For I = 1 To N dblX = 2 * Rnd() - 1 dblY = Rnd() If dblY >= 0 And System.Math.Abs(dblX) + System.Math.Abs(dblY)