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

       

Распределение Пуассона


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

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

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

Простейший поток событий характеризуется следующими свойствами:

а) вероятность наступления того или иного числа событий за любой промежуток времени зависит только от длительности этого промежутка (а не от начала отсчета);

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

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

В качестве случайной величины X мы рассмотрим число событий простейшего потока, наступающих за фиксированный промежуток времени t.

Значениями этой случайной величины могут быть любые целые числа

m = 0, 1, 2, 3, ...

Соответствующие вероятности обозначим через

 

pm(t) есть вероятность того, что за фиксированный промежуток m времени t наступит ровно m событий простейшего потока.



Пусть

 - малая величина, сравним вероятности
 

В результате несложных математических рассуждений приходим, что в пределе при

 мы получаем для искомой вероятности p0(t) линейное дифференциальное уравнение первого порядка

Решая это уравнение при начальном условии p0(0) = 1, находим искомую вероятность отсутствия событий за промежуток времени t;

Нетрудно получить и общую формулу для расчета вероятностей

 при
 

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

Статистический смысл параметра

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


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

Обычно произведение
t обозначают a и записывают закон распределения в виде



Этот закон распределения и называют законом распределения Пуассона или законом редких явлений.

Замечание. При малых значениях p и больших значениях n распределение Пуассона может быть применено в качестве приближенного значения для биномиального распределения.

Обозначим np = a, тогда p = a/n, q = 1 - p = 1 - a/n. Разложим вероятность
 в степенной ряд по степеням 1/n; ограничиваясь членами порядка 1/n, получим







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



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



Составим процедуру для вычисления вероятности по формуле Пуассона.

Для этого выведем рекуррентную формулу для вычисления вероятности:



отсюда получаем соотношение:



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


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

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

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;

 

Составим программы решения следующих задач, используя эту процедуру.

Пример 1. Вероятность изделию быть бракованным равна 0.05. Найти вероятность того, что среди 1000 изделий 40 бракованных.

{ Распределение Пуассона }

Program Problem1;

   uses WinCrt;

   var

       n, m : longint;

       p, a  : real;

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



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

   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;

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

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

   begin

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

     write('Введите вероятность изделия быть бракованным '); readln(p);

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

     write('появления которых Вы находите '); readln(m);

     a := n*p;

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

     writeln('партии из ',n, ' изделий равна ', PS(m, a):1:6)

   end.

Пример 2. Вероятность сбить самолет одним выстрелом из винтовки в определенных условиях равна 0.003. Определить вероятность поражения самолета, если сделано по одному выстрелу из 300 винтовок.

{ Распределение Пуассона }

Program Problem2;

   uses WinCrt;

   var

      n     : longint;

      p, a : real;

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

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

   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;

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

  begin

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

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

     readln(p);

     a := n*p;

     write('Вероятность поражения самолета при ');

     writeln(n, ' выстрелах равна ', (1 - PS(0, a)):1:6)

   end.

Пример 3.


Прибор состоит из 200 деталей, каждая из которых за время t может выйти из строя с вероятностью p = 0.01.

Найти вероятность того, что за время t выйдут из строя: а) 3 детали; б) не более трех деталей; в) не менее двух деталей; г) от двух до четырех деталей включительно.

{ Распределение Пуассона }

Program Problem3;

   uses WinCrt;

   var

      n, m, i      : longint;

      p, a, Sum : real;

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

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

   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;

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

   begin

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

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

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

     write('строя которых Вы находите '); readln(m); writeln;

     a := n*p;

     Sum := 0;

     for i := 0 to 3 do Sum := Sum + PS(i, a);

     writeln('Вероятность того, что за указанное время ');

     write('выйдет из строя ',m, ' изделия равна ');

     writeln(PS(m, a):1:6);

     writeln('не более ',m, ' изделий ', Sum:1:6);

     Sum := 0;

     for i := 0 to 1 do Sum := Sum + PS(i, a);

     Sum := 1 - Sum;

     writeln('выйдет из строя не менее 2 деталей ', Sum:1:6);

     Sum := 0;

     for i := 2 to 4 do Sum := Sum + PS(i, a);

     writeln('выйдет из строя от 2 до 4 деталей ', Sum:1:6)

   end.

Пример 4. При контролируемом производственном процессе доля брака равна 0.02. При обнаружении в партии из 150 изделий более 5 бракованных изделий вся партия задерживается. Определить вероятность того, что партия будет принята.

{ Распределение Пуассона }



Program Problem4;

   uses WinCrt;

   var

      n, m,  i  : longint;

      p, a, PP : real;

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

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

   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;

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

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

   begin

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

     write('Введите вероятность изделия быть бракованным ');

     readln(p);

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

     write('появления которых Вы находите '); readln(m);

     a := n*p;

     PP := 0;

     for i := 0 to m do PP := PP + PS(i, a);

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

     writeln('партии из ',n, ' изделий равна ', PP:1:6)

   end.


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