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

       

Биномиальное распределение


Пример 1. В урне находятся белые и черные шары. Доля белых шаров в урне равна p. Случайное событие А заключается в том, что вынутый наугад шар будет белого цвета; вероятность этого случайного события равна p - доле белых шаров в урне. Вынув из урны шар, отмечают, белый он или нет, затем вынутый шар возвращают в урну и шары тщательно перемешивают. После этого снова вынимают наугад один шар и так повторяют n раз.

Случайная величина X - это число появлений события А, т.е. белого шара, при n-кратном повторении испытания. Возможными значениями величины X являются числа 0, 1, 2, ..., n (0 - белый шар не появляется ни разу при всех n испытаниях, 1 - белый шар появляется один раз, 2 - два раза, ..., n - раз, т.е. во все испытаниях).

Найдем закон распределения вероятностей случайной величины X.

Событие X = n означает появление события А во всех испытаниях; по правилу умножения вероятностей (с учетом условия независимости испытаний) получим

Аналогично находим

 где
 

Событие X = m (m = 1, 2, ..., n-1) означает, что за n испытаний случайное событие А наступит точно m раз, а значит противоположное событие наступит n - m раз.

Вероятность того, что событие А наступит в первых m испытаниях и не наступит в остальных n - m испытаниях, подсчитаем по правилу умножения вероятностей:

Эта вероятность не зависит от того, в каких именно испытаниях наступит событие А. Поэтому по правилу сложения вероятностей искомая вероятность

 равна вероятности
 умноженной на число
 способов выбора m испытаний, в которых наступит событие A, из общего числа n испытаний:

                            

                       (1)

Здесь

 есть число сочетаний из n элементов по m. Таким образом, мы получим следующую таблицу распределения вероятностей:



X

0

1

...

m

...

n-1

n

P(X=m)

...

...

Этот закон распределения называется биномиальным законом распределения вероятностей. Название связано с тем, что вероятности совпадают с членами разложения бинома (q + p)n по степеням p:




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

Вероятность P(X = m) равна

 

а вероятность P(X = m - 1) вычисляется по формуле

 .

Разделим левые и правые части этих равенств, получим:





Таким образом, начиная с P(X = 0), вероятности P(X = m) могут быть вычислены по следующей рекуррентной формуле:

 или


Теперь, для вычисления вероятностей достаточно вычислить вероятность при m = 0, а затем воспользоваться приведенным соотношением.

При m = 0 получаем
  

Для возведения в натуральную степень вещественного числа составим процедуру:

{ Процедура возведения в степень }

Procedure Extent(a : real; n : integer; var e : real);

     var

         i : integer;

     begin

         e := 1;

         if

n = 0 then e := 1

                      else

for i := 1 to n do e := e*a

     end;

Используя эту процедуру нетрудно составить процедуру вычисления вероятностей, используя рекуррентное соотношение. Она может быть построена как итеративно, так и рекурсивно. Итеративная процедура приводится ниже, а рекурсивную составьте самостоятельно.

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

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

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;

Используем эти процедуры для решения следующей задачи.

Пример 2. Из большой партии изделий берут на пробу 10 штук. Известно, что доля нестандартных изделий во всей партии составляет 25 %.


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

Математическое решение задачи

Отбор каждого изделия будем считать испытанием, а обнаружение нестандартности у отобранного изделия - событием А. Вероятность p события А равна доле нестандартных изделий во всей партии, т. е. p = 0.25.

Количество X нестандартных изделий среди отобранных будет случайной величиной с биномиальным распределением вероятностей, если только изделия для пробы отбираются по схеме случайной повторной выборки (изделие после проверки возвращается обратно в общую партию). При этом вероятности подсчитываются по формуле (1) при n = 10, p = 0.25, q = 1 - 0.25 = 0.75.

По правилу сложения вероятностей складываем вероятности при m = 6, 7, 8, 9, 10 и находим искомую вероятность P(X > 5).

Программа

{ Биномиальный закон распределения вероятностей }

Program Problem2;

     uses WinCrt;

     var

        p, pp, sum : real;

        n, i             : longint;

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

{ Процедура возведения в степень }

    Procedure Extent(a : real; n : integer; var e : real);

          var

             i : integer;

          begin

             e := 1;

             if n = 0 then e := 1 else for i := 1 to n do

e := e*a

         end;

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

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

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

   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;

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

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

begin

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

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

   writeln('Биномиальный закон распределения вероятностей'); writeln;

   for i := 0 to n do write(i:6, ' '); writeln;

   writeln;

   sum := 0;

   for i := 0 to n do

      begin

         Recurro_binomial(n, i, p, pp);

         write(pp:1:4, ' ');

         if i >= 6 then sum := sum + pp;

     end;

   writeln; writeln;

   writeln('Вероятность того, что более пяти отобранных');

   writeln('изделий окажутся нестандартными равна ', sum:1:6)

end.


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