В этом материале представлю, как можно вычислить площадь единичной окружности с помощью метода Монте-Карло.
Метод вычисления основан на следующей идее:
- Круг с единичным радиусом вписан в квадрат со стороной два.
- Формируем координаты случайной точки (бросаем в заданный квадрат песчинку, камешек...). Этот случайный «бросок» и роднит метод со столицей азартных игр, где все также построено на случайности.
- Точка может попасть в окружность или нет (условие попадания: x2 + y2<= 1)
- Подсчитываем количество попаданий Np при достаточно большом числе бросков N.
- Если точки случайны, то отношение попавших точек к общему числу попыток равно отношению площадей круга и квадрата. Np/N = Sкр / S кв = πR2 / (2R)2
- Число π = 4 · Np/N
Программа на «чистом» Pascal выглядит следующим образом:
Точность вычисления зависит от количества попыток (числа n)
Для наглядного представления решения задачи предлагаю воспользоваться свободно распространяемым аналогом ООП Delphi 7 lazarus
Чтобы реализовать визуальную часть в Lazarus необходимо случайные декартовы координаты преобразовывать в экранные. Приложение включает в себя компонент TImage для построения изображения, поле ввода, кнопку, и несколько надписей:
Случайная точка с координатами x, y (вещественные числа в диапазоне (-1; 1) переводятся в экранные координаты:
xd:= round(x0 + x*r);
yd:= round(y0 + y*r);
yd:= round(y0 + y*r);
где r - длина единичного отрезка в пикселях.
Закрашивание точки осуществляется с помощью метода: Form1.image1.Canvas.Pixels[xd,yd]:= clBlue;
1000 случайных точек
10000 точек
100000 точек. Поле почти закрашено. Точность вычисления выше
Комментариев нет:
Отправить комментарий