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

Интегральная формула Муавра-Лапласа


Если вероятность p наступления события в каждом испытании постоянна и отлична от нуля и единицы, а число испытаний достаточно велико, то вероятность того, в n независимых испытаниях событие состоится число раз, заключенное в границах от [m1; m2] (m1 < m2), приближенно равна:

где

а

 -  функция Лапласа.

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

Для его вычисления воспользуемся способом разложения подынтегральной функции в ряд с последующим интегрированием членов полученного степенного ряда с заданной степенью точности. (Подробнее об этом см. в главе "Числовые и функциональные ряды", "Приближенное вычисление интегралов с помощью рядов").

При составлении функции учтем то обстоятельство, что при

 значение функции равно 1, а при
 значение функции равно -1.

В результате получим следующую функцию для вычисления интегральной функции Муавра-Лаплапса:

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

{ Пределы интегрирования от 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;

Используя эту функцию, составим процедуру для вычисления вероятности появления события из заданного интервала [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;

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

Пример 1. Вероятность некоторого события равна 0.4 в каждом из n испытаний. Найти вероятность того, что число появления события при n = 1500 будет заключено между 1) 570 и 630; 2) 600 и 660; 3) 620 и 680; 4) 580 и 640.

Программа

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem1;

   uses WinCrt;

   var

     n, m1, m2     : longint;

     p, PP             : real;

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

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

{ Пределы интегрирования от 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;

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

{ Процедура вычисл. вероятн. наст. событ. из промеж. [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;

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



{ Основная программа. Число бракованных изделий из промежутка }

   begin

     write('Введите общее число изделий '); readln(n);

     write('Введите вероятность наступление одного события '); readln(p);

     write('Введите левую границу промежутка '); readln(m1);

     write('Введите правую границу промежутка '); readln(m2);

     Interval(n, m1, m2, p, PP);

     writeln('Вероятность того, что число бракованных изделий');

     write('находится в промежутке [',m1, '; ', m2, '] равна ');

     writeln(PP:1:8)

   end.

Пример 2. Число отклонений от установленного стандарта при обточке металлических болванок составляет, по данным длительной проверки ОТК, 0.12 от взятого количества продукции. Определить вероятность того, что из взятых наудачу 25 образцов не менее 21 будет соответствовать стандарту.

Программа

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem2;

   uses WinCrt;

   var

      n           : longint;

      e, p, PP : real;

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

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

{ Пределы интегрирования от 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;

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

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

{ при заданной точности e }



   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;

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

{ Основная программа }

   begin

     write(' Введите вероятность приема одного сообщения ');

     write('без ошибок '); readln(p);

     write('Введите общее число сообщений '); readln(n);

     writeln('На сколько число принятых сообщений должно быть');

     write('безошибочным, (точность) прин. сообщ. '); readln(e);

     Probability(n, p, e, PP);

     writeln('Искомая вероятность равна ', PP:1:8)

   end.

Пример 3. На склад поступает продукция трех фабрик, причем изделия первой фабрики на складе составляют 30%, второй - 32% и третьей - 38%. В продукции первой фабрики 60% изделий высшего сорта, второй - 25%, третьей - 50%. Найти вероятность того, что среди 300 наудачу взятых со склада изделий число изделий высшего сорта заключено между 130 и 170.

В этой задаче прежде надо определить вероятность получения числа изделий высшего сорта со всех трех фабрик, т.е. их наличие на складе.

Пусть H1 - изделие сделано на 1-ой фабрике, P(H1) = 0.3; H2

- изделие сделано на 2-ой фабрике, P(H2) = 0.32; H3 - изделие сделано на 3-ей фабрике, P(H3) = 0.38.

A - изделие высшего сорта. В задаче даны PHi(A), i = 1, 2, 3;

 

{ Применение интегральной формулы Муавра-Лапласа }

Program Problem3;

     uses WinCrt;

     var

        n, m1, m2 : longint;

        p, PP        : real;

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

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

{ Пределы интегрирования от 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;

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

{ Процедура вычисл. вероятн. наст. событ. из промеж. [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;

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

    begin

        write('Введите общее число изделий '); readln(n);

        p := 0.6*0.3 + 0.25*0.32 + 0.5*0.38;

        write('Введите левую границу промежутка '); readln(m1);

        write('Введите правую границу промежутка '); readln(m2);

        Interval(n, m1, m2, p, PP);

        writeln('Вероятность того, что число изделий высшего');

        write('сорта находится в [',m1, '; ', m2, '] равна '); writeln(PP:1:8)

     end.


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