пятница, 3 мая 2013 г.

Вычисляем число ПИ

В этом материале представлю, как можно вычислить площадь единичной окружности с помощью метода Монте-Карло.




Метод вычисления основан на следующей идее:
  1. Круг с единичным радиусом вписан в квадрат со стороной два.
  2. Формируем координаты случайной точки (бросаем в заданный квадрат песчинку, камешек...). Этот случайный «бросок» и роднит метод со столицей азартных игр, где все также построено на случайности.  
  3. Точка может попасть в окружность или нет (условие попадания: x2 + y2<= 1)
  4. Подсчитываем количество попаданий Np при достаточно большом числе бросков N.
  5. Если точки случайны, то отношение попавших точек к общему числу попыток равно отношению площадей круга и квадрата. Np/N = Sкр / S кв = πR2 / (2R)2
  6. Число π = 4 · Np/N


Программа на «чистом» Pascal выглядит следующим образом:


Точность вычисления зависит от количества попыток (числа n)

Для наглядного представления решения задачи предлагаю воспользоваться свободно распространяемым аналогом ООП Delphi 7 lazarus

Чтобы реализовать визуальную часть в Lazarus необходимо случайные декартовы координаты преобразовывать в экранные. Приложение включает в себя компонент TImage для построения  изображения, поле ввода, кнопку, и несколько надписей:


Случайная точка с координатами x, y (вещественные числа в диапазоне (-1; 1) переводятся в экранные координаты:
xd:= round(x0 + x*r);
yd:= round(y0 + y*r);
где r - длина единичного отрезка в пикселях.
Закрашивание точки осуществляется с помощью метода: Form1.image1.Canvas.Pixels[xd,yd]:= clBlue;

1000 случайных точек

10000 точек

100000 точек. Поле почти закрашено. Точность вычисления выше






Комментариев нет:

Отправить комментарий