Вычисляем число Пи
Создание: 18.03.2013
Эта статья покажем как можно вычислить число Пи с произвольной точностью методом Монте-Карло.

Метод вычисления основан на следующей идее:

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

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

program monte_karlo;
var n,np,i:integer;
    x,y,p:real;
begin
  write('Введите число точек: ');readln(n);
  randomize;       // запускаем генератор случайных чисел
  np := 0;
  for i:=1 to n do
    begin
    x:=random*2-1; // формируем точку с координатами (-1; 1)
    y:=random*2-1;
    if(x*x+y*y<=1) then np:= np + 1;
    end;
  p:=4*np/n;
  writeln('pi=',p);
end.

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

 
вычисление числа pi для разного числа попыток

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

Программа запущена.

Случайная точка с координатами x, y (вещественные числа в диапазоне (-1; 1) переводятся в экранные координаты:

xd:= round(x0 + x*r);
yd:= round(y0 + y*r);

где r - длина единичного отрезка в пикселях.

Закрашивание точки осуществляется с помощью метода: Form1.image1.Canvas.Pixels[xd,yd]:= clBlue;

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


10 000 случайных точек. Точность вычисления выше.

100 000 точек. Поле практически все закрашено.

P.S.

Как легко увидеть точность достигается только при достаточно большом количестве бросков. Также точность определяется качеством генератора случайных чисел.

Скачать материалы:

Рабочий проект
формат: zip, 0.46 МБ