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

       

Применение метода Монте-Карло для вычисления площадей фигур


Рассмотрим применение метода Монте-Карло для определения площадей фигур, ограниченных линиями.

Пример 7. Вычислить площадь фигуры, ограниченной линиями

 

Решение

Прежде необходимо установить ту фигуру, площадь которой требуется найти. Эта фигура заключена между осью OX, - уравнение y = 0; параболой с вершиной в точке (0; 0) и двумя прямыми, параллельными оси OY и проходящими через точки 1 и 2 на оси OX.

Установим, внутри какой простой фигуры (квадрата, прямоугольника и т.п.) может быть заключена заданная сложная фигура (см. рис. 39).

Рис. 39

По рисунку легко установить, что такой фигурой является прямоугольник с вершинами в точках (1; 0), (2; 0), (2; 4) и (1; 4). Площадь этого прямоугольника равна: Sпр = 4.

Значит площадь искомой фигуры будет равна:

 где 4 - площадь прямоугольника, M - число точек, попавших в фигуру, N - число всех "брошенных" точек.

Дальнейший ход решения такой же, как и в предыдущем примере.

"Бросаются" точки в прямоугольник. Их случайные координаты задаются так: x := random + 1, y := random*4.

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

 и
 Но условие для x выполняется заведомо, так как у любой случайно "брошенной" точки координата по x удовлетворяет неравенству
 (ибо уже задано, что x := random + 1, а для координаты по y выполнена лишь левая часть неравенства, значит чтобы точка попала в данную фигуру достаточно потребовать, чтобы



На основе этих соображений составляем программу

Program Problem7;

    uses WinCrt;

    var

       x, y, s, e, pp : real;

       i, n, m          : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

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; y := random*4;

          if y < x*x then m := m + 1

        end;

      s := 4*m/n;

      writeln('Площадь фигуры равна ', s:1:6);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

Пример 8. Вычислить площадь фигуры, ограниченной линиями
 и


Начертим заданную фигуру. Графиком функции y = 3 - 2x - x2 является парабола, ветви которой направлены вниз, а вершина находится в точке (-1; 4). В самом деле, выделим квадрат двучлена, получим:

y = -(x2 + 2x + 1 - 1 - 3) = -(x  + 1)2 + 4.

Графиком функции y = 1 - x является прямая, проходящая через точки (1; 0) и (0; 1).



Необходимо найти точки пересечения этих графиков. Для этого надо решить систему из уравнений, описывающих заданные функции:



Решая находим, 1 - x =3 - 2x - x2, отсюда получаем: x1 = -2, x2 = 1. Значит координаты точек пересечения будут: (-2; 3) и (1; 0).

Полученную фигуру можно заключить в прямоугольник с вершинами (-2; 0), (-2; 4), (1; 4) и (1; 0) (см. рис. 40).

 


Рис. 40

Площадь этого прямоугольника равна
 Тогда площадь искомой фигуры равна:


Чтобы "бросить" точку в этот прямоугольник, надо указать следующие случайные координаты этих точек: x := random*3 - 2 и y := random*4.

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


Программа

Program Problem8;

    uses WinCrt;

    var

       x, y, s, e, pp : real;

       i, n, m          : longint;

{----------------------------------------------------------------------------------------}

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

   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*3 - 2; y := random*4;

          if (y <= 3 - 2*x - x*x) and

(y >= 1 - x) then m := m + 1

        end;

      s := 12*m/n;

      writeln('Площадь фигуры равна ', s:1:6);

      writeln('С точностью до ', e:1:6);

      writeln('С гарантированной вероятностью ', PP:1:4);

      writeln('При числе испытаний ', n)

    end.

Задание 20

Вычислить площади фигур, ограниченных линиями:

1) y = 0, x = 0, x = 2, y = 1/(x + 1)2 +1;

2) y = cosx, y = 0, x = 0, x =
/2.

 

Библиотека часто встречающихся процедур и функций

31. Процедура вычисления вероятности биномиального закона распределения.

{ Рекуррентная процедура вычисления вероятности }

{биномиального закона распределения }

Procedure Recurro_binomial(n, m : integer; p : real; var pp : real);

     var

        i : integer;

     begin

        Extent(1 - p, n, pp);

        for

i := 1 to m do pp := (pp*(n - i + 1)*p)/(i*(1 - p))

     end;

32. Функция вычисления вероятностей по формуле Пуассона.

{ Функция вычисления вероятности распределения Пуассона }

Function PS(m : integer; a : real) : real;

      var

          i    : integer;

          pp : real;

      begin

        pp := exp(-a);

        if m = 0 then pp := exp(-a)

                      else for i := 1 to m do pp := pp*a/i;

        PS := pp

      end;





33. Функция вычисления значений функции Гаусса:

{ Функция Гаусса }

   Function G(x : real) : real;

      begin

        G := exp(-sqr(x)/2)/sqrt(2*Pi)



      end;

34. Процедура вычисления вероятности по локальной формуле Муавра-Лапласа.

{ Процедура нахожд. вероятн. по локальной форм. Муавра-Лапласа }

   Procedure Local_Laplace(n, m : longint; p : real; var pp : real);

      var

        x : real;

      begin

        x  := (m - n*p)/sqrt(n*p*(1 - p));

        pp := G(x)/sqrt(n*p*(1 - p))

      end;

35. Функция вычисления интегральной функции Муавра-Лаплапса.

{    Рекуррентная функция вычисления интеграла вероятностей   }

{ Пределы интегрирования от 0 до x. Функция Муавра-Лапласа }

 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;

36. Процедура вычисления вероятности появления события из заданного интервала [m1; m2].

{ Процедура вычисл. вероятн. наст. событ. из промеж. [m1; m2] }

Procedure Interval(n, m1, m2 : longint; p : real; var PP : real);

     var

        x1, x2 : real;

     begin

        x1 := (m1 - n*p)/sqrt(n*p*(1 - p));

        x2 := (m2 - n*p)/sqrt(n*p*(1 - p));

        PP := (FF(x2) - FF(x1))/2

     end;

37. Процедура вычисления вероятности отклонения частоты m от заданного произведения np.

{ Процедура вычисления вероятности частоты наступления событий }

{ при заданной точности e - отклонении частоты от np }

Procedure

Probability(n : longint; p, e : real; var PP : real);

     var

        x : real;

     begin

        x := e/sqrt(n*p*(1 - p));



        PP := FF(x)

     end;

38. Процедура вычисления вероятности отклонения частости от  вероятности в одном испытании (по абсолютной величине).

Procedure

ProbabilityLap(n : longint; p, e : real; var PP : real);

     var

        x : real;

     begin

        x := e*sqrt(n/(p*(1 - p)));

        PP := FF(x)

     end;

39. Процедура вычисления числа испытаний при заданной гарантированной вероятности и заданной точности частости.

 

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;

Второй способ

нахождения значения n. Он основывается на следующей процедуре:

{ Процедура вычисления числа испытаний при заданной гарантиро- }

{ ванной вероятности и заданной точности частости }

Procedure Number2(e, PP : real; var n : longint);

     var

         x : real;

     begin

         x := 0;

         repeat

              x := x + 0.0001

         until

FF(x) >= PP;

         n := trunc(sqr(x/(2*e)))

     end;

40. Процедура нахождения аргумента функции Муавра-Лапласа

      Procedure

Argument(PP : real; var x : real);

           begin

              x := 0;

              repeat

                 x := x + 0.0001

              until FF(x) >= PP

           end;

Второй способ

{ Процедура нахождения аргумента функции Муавра-Лапласа }

      Procedure

Argument(PP, eps : real; var x : real);

           begin

              x := 0;

              repeat

                 x := x + eps

              until FF(x) >= PP

           end;

Упражнения

 

144. Вероятность солнечной погоды в некоторой местности для каждого дня равна 0,4. Какова вероятность того, что в течение трех дней хотя бы один день будет солнечным?

145. Минное заграждение поставлено в одну линию с интервалами между минами в 100 м. Какова вероятность того, что корабль шириной 20 м, пересекая это заграждение под прямым углом, подорвется на мине? (Размерами мины можно пренебречь.)



146. На окружности радиуса R наудачу выбирается точка. Найти вероятность того, что выбранная точка будет находиться от точки A, фиксированной на данной окружности, на расстоянии, не превышающем R.

147. Из фиксированной вершины квадрата произвольным радиусом, меньшим его диагонали, проведена окружность. Какова вероятность того, что дуга пересечет стороны квадрата, имеющие эту вершину одним из своих концов?

148. В круг радиуса R вписан правильный шестиугольник. Какова вероятность того, что наудачу выбранная точка внутри круга окажется внутри шестиугольника?

149. Шар радиуса r = 2 см наудачу бросают в круг радиуса R=25 см, в котором вырезано квадратное отверстие со стороной a = 14 см. Какова вероятность того, что шар пройдет через это отверстие, не задев его края, если он непременно попадет в круг?

150. В 25 см от центра шара, радиус которого равен 15 см, находится точечный источник света. Какова вероятность того, что наудачу взятая точка на поверхности шара окажется освещенной?

151. На отрезке AB длины a наудачу выбирается точка M, а на отрезке CD длины b

- точка N. Какова вероятность того, что точки M и N делят отрезки AB и CD так, что отношение 
, а отношение 
, если точки M и N выбираются независимо друг от друга?

152. Точка A наудачу выбирается на окружности, радиус которой равен R, а точка B - на отрезке CD длины a. Найти вероятность того, что точка A окажется на дуге, длина которой равна R, а точка B окажется расположенной от конца C отрезка CD не далее чем на 0,4а.

153. Какова вероятность того, что две наудачу выбранные точки внутри круга радиуса R окажутся внутри вписанного в этот круг квадрата, если они выбираются независимо друг от друга?

154. Два действительных числа x и y выбираются наугад независимо друг от друга так, что сумма их квадратов меньше 64. Какова вероятность того, что сумма положительных x и y окажется меньше восьми?

 

 


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