Вероятностные модели. Метод Монте-Карло.
Качественная модель метода Монте-Карло: поместим геометрическую фигуру полностью внутрь квадрата; будем случайным образом «бросать» точки в этот квадрат, то есть с помощью генератора случайных чисел задавать точкам координаты внутри квадрата; будем считать, что отношение числа точек, попавших внутрь фигуры, к общему числу точек в квадрате приблизительно равно отношению площади фигуры к площади квадрата, причём это отношение тем точнее, чем больше количество точек.
Формальная модель: М – количество точек попавших внутрь квадрата; N – количество точек, которые случайно генерируются внутри квадрата.
Круг вписан в квадрат со стороной 2R, площадь которого вычисляется по формуле: Sкв=4R2 Случайный выбор координат точек, которые попадают внутрь квадрата (N точек), должен производиться так, чтобы координаты точек x и y удовлетворяли условиям: -R<=x<=R и -R<=y<=R Координаты точек, попавших внутрь круга (М), удовлетворяют условию: x2 + y2 <= R2 Тогда площадь круга можно вычислить по формуле: S=4R2* M / N
Компьютерная модель «Проект «Метод Монте-Карло» 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 <= R Then M = M + 1 Next I txtS.Text = CStr(4 * R ^ 2 * (M / N)) End Sub End Class
Исследование модели: Ввести радиус окружности и количество генерируемых точек. После выполнения проета в текстовое поле будет выведено значение площади круга.
Задание: Определить методом Монте-Карло площадь треугольника, вершины которого имеют координаты (-1,0); (0, 1) и (1,0). Замечание: Функция генерации случайных чисел работает так: если дать команду f= rnd(), то в переменную f будут попадать числа из интервала [0, 1]. Условие попадания точек внутрь треугольника : dblY>=0 и ABS(dblX) + ABS(dblY)<=1
For I = 1 To N dblX = 2 * Rnd() - 1 dblY = Rnd() If dblY >= 0 And System.Math.Abs(dblX) + System.Math.Abs(dblY) <= 1 Then M = M + 1
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) <= 1 Then M = M + 1 Next I txtS.Text = CStr(2 * (M / N)) End Sub End Class