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

Двумерные случайные величины


Вначале введем понятие независимости случайных величин.

Дискретные случайные величины X и Y называются независимыми, если независимы при любых i и I события X = xi  и Y = yI (i = 1, 2, ..., n; I = 1, 2, ..., m).

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

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

Определение. Случайная величина называется двумерной, если все значения ее имеют вид (xi, yI), причем 1

 i
 n, 1
I
 m.

Событие, заключающееся в том, что двумерная величина примет значение (xi,yi), означает произведение двух событий:

1)  случайная величина X примет xi;

2) случайная величина Y примет значение yi. Вероятность этого события обозначим piI: piI = = P(X = xi; Y = yi). Совокупность всех пар значений (xi, yi) и соответствующих им вероятностей piI составляет закон распределения двумерной случайной величины.

Обозначим через P (Y=yi) условную вероятность того, что X=xi случайная величина Y примет значение yi относительно события, состоящего в том, что случайная величина X приняла значение xi. По определению эту вероятность считаем равной:

Пример 1. Известны результаты стрельб  для 2-х стрелков при 3-ч выстрелах: X - число попаданий первого стрелка, Y - число попаданий второго стрелка.



xi

1

2

3

yi

1

2

3

pi

0.3

0.2

0.5

pi

0.1

0.6

0.3

Найти среднее число попаданий каждого стрелка и среднее квадратическое отклонение этих случайных величин.

Решение

По формуле для вычисления математического ожидания

 определяем математическое ожидание каждого стрелка M(X) и M(Y). Математические ожидания показывают среднее число попаданий каждого стрелка и сравним их.

По формуле

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

Программа

 Program

Two_dimensional_aleatory_variables1;

      uses WinCrt;

      Const

              k = 10;

      Type

              t = array[1..k] of real;

      var

          Px , Py : t;

          MX, MY, DX, DY : real;

          n, m, i                     : integer;

       begin

           write('Введите число выстрелов первого стрелка '); readln(n);

           write('Введите число выстрелов второго стрелка '); readln(m);

           writeln; 

           writeln('Вводите вероятности попаданий первого стрелка');

           MX := 0;

           for i := 1 to n do

              begin

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

                  readln(px[i]);

                  MX := MX + i*px[i]             

              end;

           writeln('Среднее число попаданий первого стрелка ', MX:2:4);

           writeln;

           writeln('Вводите вероятности попаданий второго стрелка');

           MY := 0;

           for i := 1 to m do

              begin

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

                  readln(py[i]);

                  MY := MY + i*py[i]

              end

           writeln('Среднее число попаданий второго стрелка ', MY:2:4);

           writeln;

           DX := 0;

           for i := 1 to n do DX := DX + sqr(i - MX)*px[i];

           DY := 0;

           for i := 1 to m do DY := DY + sqr(i - MY)*py[i];

           if sqrt(DX) < sqrt(DY)

              then writeln('Первый стрелок стреляет лучше')

              else 

                 if  sqrt(DX) > sqrt(DY)

                    then writeln('Второй стрелок стреляет лучше')

                    else  writeln('Стрелки стреляют с одинаковой точностью')

      end

          

Пример 2. По данным задачи 1 найти ряд распределения случайной величины Z, равной а) X + Y; б) 5X + 3Y.



Определить в каждом случае математическое ожидание и дисперсию.

Решение

а) Для нахождения значений Z можно воспользоваться матрицей сумм значений X и Y.

X\Y

1

2

3

1

(1 + 1)

(1 + 2)

(1 + 3)

2

(2 + 1)

(2 + 2)

(2 + 3)

3

(3 + 1)

(3 + 2)

(3 + 3)

Выполнить такое сложение можно с помощью следующей процедуры:

Procedure Sum(n, m : integer; x, y : t; var zz : t);

      var

         i, I, k : integer;

      begin

          k := 0;

          for i := 1 to n do

             for I := 1 to m do

                  begin

                      k := k + 1;

                      zz[k] := x[i] + y[I]

                  end

      end;

В результате получаются значения Z, среди которых будут повторяющиеся (2, 3, 3, 3, 4, 5, 4, 5, 6).

Необходимо выбрать только различные значения суммы Z = X + Y.

Это можно выполнить с помощью процедуры, которая детально рассматривается в главе "Задачи с массивами чисел".

    { Процедура отбора различных элементов в массиве Z }

     Procedure Different(n, m : integer; var z : t; var k : integer);

           label 1;

           var

                   i, I : integer;

           begin

               k := 0;

               for i := 1 to n*m do

                  begin

                      for I := 1 to k do

                         if z[i] = z[I] then goto 1;

                     k := k + 1;

                     z[k] := z[i];

              1: end

           end;

Получим, для нашего примера, что Z может принимать значения 2, 3, 4, 5, 6. Определим вероятности, учитывая, что X и Y независимы.

P(Z = 2) = P(X = 1)P(Y = 1);

P(Z = 3) = P(X = 1)P(Y = 2) + P(X = 2)P(Y = 1);

P(Z = 4) = P(X = 1)P(Y = 3) + P(X = 2)P(Y = 2) + P(X = 3)P(Y = 1);

P(Z = 5) = P(X = 2)P(Y = 3) + P(X = 3)P(Y = 2);

P(Z = 6) = P(X = 3)P(Y = 3);

В результате получаем ряд распределения вероятностей.

Используя свойства математического ожидания и дисперсии и результаты примера 1, находим M(Z) = M(X) + M(Y); D(Z) = D(X) + D(Y).



Программа

Program Problem2;

     uses WinCrt;

     const                                                     

           p = 20;

     type

           t = array[1..p] of integer;

          tt = array[1..p] of real;

      var

          x, y, z                                        : t;

          px, py, pz                                  : tt;

          n, m, k, n1, i                             : integer;

          MX, MY, MZ, DX, DY, DZ : real;

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

{ Процедура суммирования значений X и Y  и получение Z }

     Procedure Sum(n, m : integer; x, y : t; var z : t);

           var

              i, I, k : integer;

           begin

              k := 0;

              for i := 1 to n do

                 for I := 1 to m do

                    begin

                        k := k + 1;

                        z[k] := x[i] + y[I]

                    end

           end;

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

     { Процедура отбора различных элементов в массиве Z }

     Procedure Different(n, m : integer; var z : t; var k : integer);

           label 1;

           var

                   i, I : integer;

           begin

               k := 0;

               for i := 1 to n*m do

                   begin

                      for I := 1 to k do

                         if z[i] = z[I] then goto 1;

                     k := k + 1;

                     z[k] := z[i];

              1:  end

           end;

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

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

  begin

    write('Введите число стрелков '); readln(n1);

    write(' Введите число выстрелов, сделанных первым стрелком '); readln(n);

    write('Введите число выстрелов, сделанных вторым стрелком '); readln(m);

    writeln('Вводите вероятности попаданий первого стрелка');



           MX := 0;

           for i := 1 to n do

              begin

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

                  readln(px[i]);

                  MX := MX + i*px[i]              

              end;

           writeln(' Среднее число попаданий первого стрелка ', MX:2:4);

           writeln;

           writeln('Вводите вероятности попаданий второго стрелка');

           MY := 0;

           for i := 1 to m do

              begin

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

                  readln(py[i]);

                  MY := MY + i*py[i]

              end

           writeln('Среднее число попаданий второго стрелка ', MY:2:4);

           writeln;

           DX := 0;

           for i := 1 to n do DX := DX + sqr(i - MX)*px[i];

           DY := 0;

           for i := 1 to m do DY := DY + sqr(i - MY)*py[i];

           MZ := MX + MY; DZ := DX + DY;

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

           for i := 1 to

n do

              begin

                 x[i] := i;

                 y[i] := i

              end;

           Sum(n, m , x, y, z);

           Different(n, m, z, k);

           for i := 1 to k do write(z[i]:4, ' '); writeln;

           pz[1] := px[1]*py[1];

           pz[2] := px[1]*py[2] + px[2]*py[1];

           pz[3] := px[1]*py[3] + px[2]*py[2] + px[3]*py[1];

           pz[4] := px[2]*py[3] + px[3]*py[2];

           pz[5] := px[3]*py[3];

           for i := 1 to k do write(pz[i]:2:2, ' '); writeln;

           writeln('Математическое ожидание равно ', MZ:2:4);

           writeln('Дисперсия равна ', DZ:2:4)

end.


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