Паскаль. Основы программирования


Задача Бюффона


Пример 5. На большой лист клетчатой бумаги со стороной клетки 1 случайно бросают точку. Какова вероятность, что она будет находиться на расстоянии меньше 1/2 от центра некоторой клетки?

Математическая схема решения

Достаточно рассмотреть одну клетку. Точки, находящиеся на расстоянии не более 1/2 от ее центра, заполняют круг площади

Задача Бюффона
/4. Это и есть ответ: искомая вероятность (отношение площади круга к площади клетки) равна
Задача Бюффона
/4.

Эту задачу можно использовать для вычисления числа

Задача Бюффона
.

Для этого задачу можно перефразировать так:

"На большой лист клетчатой бумаги со стороной клетки 1 случайно бросают точки. Вычислить значение числа

Задача Бюффона
".

Для решения и этой задачи достаточно рассмотреть одну клетку.

Впишем в эту клетку окружность, радиус которой будет равен 1/2. Построим систему координат с началом в центре, вписанной в клетку окружности (см. рис. 35). Тогда площадь круга равна

Задача Бюффона
 

Площадь квадрата равна S2 = 1.

Задача Бюффона

Рис. 35

Как мы уже выяснили из предыдущей задачи вероятность того, что точка попадет в круг равна отношению площади круга к площади квадрата:

Задача Бюффона
 С помощью компьютера эту вероятность можно определить следующим способом.

Мы можем "заставить" компьютер "бросать" в квадрат точки и подсчитать число всех точек и тех, которые попадут в круг.

Тогда вероятность определить просто, - надо будет найти отношение числа точек, попавших в круг к общему числу "брошенных" точек. Это значение и даст нам искомую вероятность.

Будем "бросать" в этот квадрат точки. Их координаты должны быть заключены в промежутке от -1/2 до 1/2 и могут задаваться функциями случайных чисел:

x := random - 1/2 и y := random - 1/2.

Координаты точек, которые попадают в круг должны удовлетворять неравенству:

Задача Бюффона

Пусть общее число "брошенных" точек - n, а число точек попавших в круг - m, тогда, вероятность попадания точек в круг будет равна отношению числа точек, попавших в него, к общему числу брошенных точек: p :=  m/n.

Отсюда получаем, что S1/S2= m/n или

Задача Бюффона


Таким образом, мы получаем способ для вычисления числа
Задача Бюффона
.
Программа
Program Problem5;
    uses WinCrt;
    var
       x, y, p, e, pp : real;
       i, n, m          : longint;
{----------------------------------------------------------------------------------------}
{ Интегральная функция Муавра-Лапласа }
   Function FF(x : real) : real;
      var
         n     : integer;
         u, I : real;
      begin
        if x >= 5
          then FF := 1
          else if x <= -5
                   then FF := -1
                   else
                     begin
                       u := x; n := 0; I := 0;
                       repeat
                           I := I + u;
                           n := n + 1;
                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))
                       until abs(u) < 0.00001;
                       FF := 2*I/sqrt(2*Pi)
                     end
      end;
{----------------------------------------------------------------------------------------}
{ Процедура вычисления числа испытаний при заданной гарантиро- }
{ ванной вероятности и заданной точности частости              }
   Procedure
NumberExperiment(e, PP : real; var n : longint);
      var
        x : real;
      begin
        n := 0;
        repeat
          n := n + 1;
          x := 2*e*sqrt(n)
        until FF(x) >= PP
      end;
{----------------------------------------------------------------------------------------}
    begin
      randomize;
      write('Введите гарантированную вероятность '); readln(PP);
      write('Введите точность вычисления '); readln(e);
      NumberExperiment(e, PP, n);
      m := 0;
      for i := 1 to n do
        begin
          x := random - 1/2; y := random - 1/2;
          if x*x + y*y <= 1/4 then m := m + 1
        end;
      p := 4*m/n;
      writeln('Значение числа Pi равно ', p:8:6);
      writeln('С точностью до ', e:1:6);
      writeln('С гарантированной вероятностью ', PP:1:4);


      writeln('При числе испытаний ', n)
    end.
Пример 6. (задача Бюффона об игле). Плоскость разлинована на полосы шириной 1. На нее бросают иглу (отрезок) длиной 1. Какова вероятность, что игла пересечет одну из линий? (См. рисунки 36, 37 и 38).
 
Решение
У этой задачи удивительный ответ:
Задача Бюффона
. Откуда же берется
Задача Бюффона
, если в условии нет речи ни об окружностях, ни о расстояниях?
Наметим коротко одно из решений. Положение иглы (если не говорить о смещении ее вдоль линий, очевидно, не играющем роли) определяется двумя параметрами: расстояние y конца иглы от верхнего края полосы, в которую он попал
Задача Бюффона
 и углом
Задача Бюффона
 иглы с прямой, перпендикулярной линиям.
Задача Бюффона

Рис. 36
Можно считать, по соображениям симметрии, что
Задача Бюффона
<
Задача Бюффона
/2. Условие, при котором игла пересекает край полосы: y < cos
Задача Бюффона
. Итак, среди точек (
Задача Бюффона
, y) в прямоугольнике
Задача Бюффона
,
Задача Бюффона
 мы должны выбрать лежащие ниже линии y = cos
Задача Бюффона
и найти отношение площади S1
полученной фигуры к площади S2 прямоугольника
Задача Бюффона
 Для тех, кто знаком с понятием интеграла, найти площадь фигуры под кривой нетрудно: S1=1.
Задача Бюффона

Рис. 37
И тогда, вероятность того, что игла пересечет одну из линий будет равна:
Задача Бюффона

С другой стороны, вероятность пересечения иглой одной из линий будет равна отношению числа пересечений к общему числу "бросаний" иглы: p = m/n. Приравнивая значения вычисленных вероятностей по первому и по второму способам, получим:
Задача Бюффона
 отсюда
Задача Бюффона
 
Выясним случайные координаты иглы, - угла
Задача Бюффона
 и ординаты y. Для ординаты случайные значения уже известны: 0 < y < 1.
Как определить величину угла
Задача Бюффона
?
Для этого расположим систему координат так, чтобы ее начало совпадало с концом иглы, ось OX была параллельна, проведенным прямым. Возьмем на игле две произвольные точки A и B, их координаты соответственно равны (x1, y1) и
Задача Бюффона
 ясно, они являются случайными числами из промежутка (0, 1), т.е.
Задача Бюффона
Задача Бюффона
 
Задача Бюффона
 
Задача Бюффона
 тогда легко найти, что
Задача Бюффона

Отсюда, значение угла
Задача Бюффона
Задача Бюффона

Чтобы игла пересекала хотя бы одну линию надо, чтобы y удовлетворял условию:
Задача Бюффона
 или
Задача Бюффона

Задача Бюффона

Рис. 38
Программа
Program Problem6;


    uses WinCrt;
    var
       x1, x2, y1, y2, y, p, e, pp : real;
       i, n, m                              : longint;
{----------------------------------------------------------------------------------------}
{ Интегральная функция Муавра-Лапласа }
   Function FF(x : real) : real;
      var
         n      : integer;
         u, I  : real;
      begin
        if x >= 5
          then FF := 1
          else if x <= -5
                   then FF := -1
                   else
                     begin
                       u := x; n := 0; I := 0;
                       repeat
                           I := I + u;
                           n := n + 1;
                           u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))
                       until abs(u) < 0.00001;
                       FF := 2*I/sqrt(2*Pi)
                     end
      end;
{----------------------------------------------------------------------------------------}
{ Процедура вычисления числа испытаний при заданной гарантиро- }
{ ванной вероятности и заданной точности частости              }
   Procedure
NumberExperiment(e, PP : real; var n : longint);
      var
        x : real;
      begin
        n := 0;
        repeat
          n := n + 1;
          x := 2*e*sqrt(n)
        until FF(x) >= PP
      end;
{----------------------------------------------------------------------------------------}
    begin
      randomize;
      write('Введите гарантированную вероятность '); readln(PP);
      write('Введите точность вычисления '); readln(e);
      NumberExperiment(e, PP, n);
      m := 0;
      for i := 1 to n do
        begin
          x1 := random; x2 := random;
          y1 := random; y2 := random; y := random;
          if y < cos(arctan((x1 - x2)/(y1 - y2))) then m := m + 1
        end;
      p := 2*n/m;
      writeln('Значение числа Pi равно ', p:8:6);
      writeln('С точностью до ', e:1:6);
      writeln('С гарантированной вероятностью ', PP:1:4);
      writeln('При числе испытаний ', n)
    end.
Задание 19
Отрезок разделён на три равные части. Какова вероятность, что три точки, случайно брошенные на отрезок, попадут в три разные кусочка? Составьте программу.

Содержание раздела