Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
23.01.2015
Размер:
375.81 Кб
Скачать

Моделирование схожих задач Задача 2.

Вычислим ответ с помощью небольшого скрипта.

% задаём N раз 2 даты, смотрим количество совпадений

n = 2;

N = 3000;

a = zeros(N,1);

M = 1000;

for j = 1:M % повторяем M раз, потом усредняем

for i = 1:N

x = randi(365, n, 1); % задание дат рождения в группе

a(i,1) = (x(1,1) == x(2,1));

end

s = sum(a);

p(j,1) = s / N;

end

pp = sum(p) / M

>> task2

pp= 0.0027

Эту же задачу можно решить и с помощью использованной в предыдущей задаче функции:

>>d = birthday_n_p(2)

d = 0.0027

Как и следовало ожидать, результат совпадает с теорией (Задача 2.).

Задача 3.

Построим график распределения вероятности успеха в зависимости от количества человек в группе.

function [p] = single_b()

M = 400; % n меняется от 1 до M

N = 4000; % число опытов в серии

for n = 1:M

for i = 1:N

x = randi(365,1,1); % c этим будем сравнивать

y = randi (365,n,1); % это группа

for k = 1:n ys(k,1) = (x == y(k,1)); end % собственно сравниваем

s(i,1) = sum(ys);

end

sb = (s ~= 0);

p(n,1) = sum(sb)/N;

end

p = p * 100;

end

>> p = single_b;

>> x = 1:400;

hPlot = plot(x,p);

grid on

hAxes = gca;

set(hAxes, 'xtick', [0:25:400])

set(hAxes, 'ytick', [0:5:70])

xlabel('Количество человек'),ylabel('Вероятность');

Таким образом, значения на графике соответствуют теоретическим расчётам (Задача 3.).

Более сложные варианты парадокса дней рождения.

(Задача 4.)

Вначале рассчитаем вероятность совпадения дней рождения у трёх людей в группе из nчеловек.

function [p] = diffic_b (n)

% совпадение др одновременно для 3х людей

%n = 100; % число участников в группе

N = 4000; % количество опытов в серии

z = zeros(N, 1);% сюда количество совпадений записывать будем

for i = 1:N

x = randi(365, n, 1);

xs = sort(x);

xd = diff(xs);

for j = 1:(n-2)

if (xd(j) == 0)

if (xd(j+1) == 0)

z(i,1) = z(i,1) + 1;

end

end

end

end

z1 = (z ~= 0);

p = sum(z1)/N;

end

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

>> c = diffic_b(50), c = 0.1245

>> c = diffic_b(70), c = 0.3055

>> c = diffic_b(100), c = 0.6375

>> c = diffic_b(150), c = 0.9692

>> c = diffic_b(200), c = 0.9998

>>c = diffic_b(250), c = 1

Как видно, вероятность успеха теперь намного ниже, чем в классическом случае.

Рассмотрим теперь случай совпадения дней рождения у случайного числа mв группе изnчеловек. Необходимая функция будет иметь следующий вид.

function [pm] = diffic_b_m (n, m)

% совпадение др одновременно для m людей

%n = 100; % число участников в группе

%m = 3;

N = 3000; % количество опытов в серии

M = 1000; % количество серий

for h = 1:M

z = zeros(N, 1);% сюда количество совпадений записывать будем

for i = 1:N

x = randi(365, n, 1);

xs = sort(x);

for j = 1:(n-1)

if xs(j) == xs(j+1)

k = j;

while (k <= n-1)&&(xs(k) == xs(k+1))

k = k + 1;

end

if k ~= n

if k - j == m - 1

z(i,1) = z(i,1) + 1;

end

end

end

end

end

z1 = (z ~= 0);

p(h,1) = sum(z1) / N;

end

pm = sum(p) / M;

end

Проверим корректность работы данной функции.

>> a = diffic_b_m(23, 2), a = 0.4902

>> a = diffic_b_m(50, 2), a = 0.9678

>> a = diffic_b_m(70, 2), a = 0.9991

>> b = diffic_b_m(50,3), b = 0.1240

>> b = diffic_b_m(100,3), b = 0.6414

Очевидно, что данные результаты сравнимы с полученными ранее.

Приведём для наглядности ещё несколько примеров для разных mиn.

p(m,n) =p(100, 4) = 0.0629

p(200, 4) = 0.5885

p(200, 5) = 0.0876

p(200, 7) = 0.0006

Построим графики зависимостей ипри некоторых фиксированных значениях второй переменной.

function [p] = diffic_m (n, M)

% совпадение др одновременно для m людей, m меняется от 1 до M

%n = 100; % число участников в группе

N = 3000; % количество опытов в серии

%M = 10;

for m = 1:M

z = zeros(N, 1);% сюда количество совпадений записывать будем

for i = 1:N

x = randi(365, n, 1);

xs = sort(x);

for j = 1:(n-1)

if xs(j) == xs(j+1)

k = j;

while (k <= n-1)&&(xs(k) == xs(k+1))

k = k + 1;

end

if k ~= n

if k - j == m - 1

z(i,1) = z(i,1) + 1;

end

end

end

end

end

z1 = (z ~= 0);

p(m,1) = sum(z1) / N;

end

end

function [p] = diffic_n (M, m)

% совпадение др одновременно для m людей в группе из n человек

%n = 100; % число участников в группе, n меняется от 1 до M

N = 3000; % количество опытов в серии

%M = 200;

for n = 1:M

z = zeros(N, 1);% сюда количество совпадений записывать будем

for i = 1:N

x = randi(365, n, 1);

xs = sort(x);

for j = 1:(n-1)

if xs(j) == xs(j+1)

k = j;

while (k <= n-1)&&(xs(k) == xs(k+1))

k = k + 1;

end

if k ~= n

if k - j == m - 1

z(i,1) = z(i,1) + 1;

end

end

end

end

end

z1 = (z ~= 0);

p(n,1) = sum(z1) / N;

end

end

На следующем графике изображены зависимости для.

Соседние файлы в папке МП-34