Доп. условие: Путешественник не возвращается в тот город, в котором чаще всего бывал за последние 10 дней. В остальные города - равновероятно.
Рассчитать стационарное распределение методом моделирования.
Описание использованных переменных
P – Исходная матрица
days – Количество дней
starCity – Начальный город
nowCity – Город в котором находится путешественник в текущий день
сount – Счётчик посещения городов
P1 – Вероятность путешественника оказаться в первом городе
P2 - Вероятность путешественника оказаться во втором городе
P3 - Вероятность путешественника оказаться в третьем городе
P4 - Вероятность путешественника оказаться в четвертом городе
sum – Сумма элементов матрицы
i - Счётчик
j – Счётчик
k - Счётчик
Листинг программы:
clear all
clc
days = 30; %количество дней
start = 2; %начальный город
Exp = 30; %количество экспериментов
P=[
0.1967 0.0750 0.2239 0.5044;
0.4561 0.0553 0.4863 0.0023;
0.3321 0.1986 0.0291 0.4402;
0.2982 0.0325 0.3382 0.3311;
]; %исходная матрица
count = [0 0 0 0]; %счётчик посещения городов
VerNow = zeros(1,4); %вероятн. нахожд. для всех городов в данный день
City = zeros(days,1); %города в которых побывал путешественник
VerNow(start) = 1;
City(1) = start;
MatRez = zeros(days,4); %матрица вероятностей
MatRez(1,:) = VerNow; %добавление текущего дня к последующему
for j = 2:1:days
VerNow = VerNow * P;
MatRez(j,:) = VerNow;
end;
disp(MatRez) %вывод матрицы вероятности
[p1,p2,p3,p4] = solve(...
'p1 = p1*0.1967 + p2*0.4561 + p3*0.3321 + p4*0.2982',...
'p2 = p1*0.0750 + p2*0.0553 + p3*0.1986 + p4*0.0325',...
'p3 = p1*0.2239 + p2*0.4863 + p3*0.0291 + p4*0.3382',...
'p4 = p1*0.5044 + p2*0.0023 + p3*0.4402 + p4*0.3311',...
'p1 + p2 + p3 + p4 = 1');
p1 = double(p1);
p2 = double(p2);
p3 = double(p3);
p4 = double(p4);
gran = zeros(4); %матрица сложения вероятностей
for i = 1:1:4
s = 0;
for j = 1:1:4
s = s+P(i,j);
gran(i,j) = s; %матрица по допустимым границам
end;
end;
for k = 1:1:Exp
%получение пути исходя из табл. вероятности
for i = 2:1:days
perehod = rand(); %вероятность перейти в другой город
NowCity = City(i-1);
if(perehod <= gran(NowCity,1))
City(i) = 1;
end;
if(perehod > gran(NowCity,1) && perehod <= gran(NowCity,2))
City(i) = 2;
end;
if(perehod > gran(NowCity,2) && perehod <= gran(NowCity,3))
City(i) = 3;
end;
if(perehod > gran(NowCity,3) && perehod <= gran(NowCity,4))
City(i) = 4;
end;
end;
if((k == 10) || (k == 50) || (k == 100))
figure
stairs (City);
axis([0 10 0 5])
end;
%считаем количество городов, в которых останавливался путешественник
%на последний день с учетом количества проведенных экспериментов
count(City(days)) = count(City(days)) + 1;
end;
figure
bar(count/Exp,0.1); %вычисление стационарного состояния