Добавил:
Если вдруг захотите отблагодарить: 5536 9140 5139 8893 :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТСП_3ЛР_В5.docx
Скачиваний:
11
Добавлен:
02.02.2022
Размер:
720.55 Кб
Скачать
  1. Цепи Маркова.

Текст программы:

%матрица переходов

P = [15 1 1 1; 1 15 1 1; 1 1 15 1; 1 1 1 15]; States = ["Healthy" "Unwell" "Sick" "Very Sick"]; MC = dtmc(P,'StateNames',States);

MCP = MC.P

s = sum(MCP,2);

%граф матрицы

figure('Name','Граф матрицы переходов','NumberTitle','off') graphplot(mc,'ColorNodes',true,'ColorEdges',true);

%кумулятивная матрица переходов

P_cum = cumsum(mcp,2);

%моделирование поведения марковской цепи (200, 1000 и 10000 итераций)

N=[200 1000 10000]; for j=1:3 z=zeros(N(j),1); z(1,1)=1; r=rand(N(j),1);

for i=2:1:N(j) k=1;

while r(i-1,1)>P_cum(z(i-1,1),k) k=k+1;

end

z(i,1)=k;

end

figure(2)

subplot(3,1,j)

plot(z)

if j == 1

title('Поведение цепи Маркова в течение 200 итераций') elseif j == 2

title('Поведение цепи Маркова в течение 1000 итераций') else

title('Поведение цепи Маркова в течение 10000 итераций') end

end

%расчет оценки цепи Маркова P_obs=zeros(4,4,3);

for k=1:3

for n=2:N(k)

for i=1:4

if z(n-1,1)==i for j=1:4

if z(n,1)==j

P_obs(i,j,k)=P_obs(i,j,k)+1; end

end

end

end

end

end

P_Obs_1=normalize(P_obs(:,:,1),'norm',1)

P_Obs_2=normalize(P_obs(:,:,2),'norm',1)

P_Obs_3=normalize(P_obs(:,:,3),'norm',1)

%построение графов для полученных оценок

MC_Obs1=dtmc(P_Obs_1,'StateNames',States);

MC_Obs2=dtmc(P_Obs_2,'StateNames',States);

MC_Obs3=dtmc(P_Obs_3,'StateNames',States);

figure('Name','Моделирование поведения цепи Маркова 200… итераций','NumberTitle','off')

graphplot(MC_Obs1,'ColorNodes',true,'ColorEdges',true); figure('Name','Моделирование поведения цепи Маркова 1000… итераций','NumberTitle','off')

graphplot(MC_Obs2,'ColorNodes',true,'ColorEdges',true); figure('Name','Моделирование поведения цепи Маркова 10000… итераций','NumberTitle','off')

graphplot(MC_Obs3,'ColorNodes',true,'ColorEdges',true);

Сгенерируем матрицу переходов P, после чего создадим цепь Маркова функцией dtmc() и выведем в консоль нормированную матрицу переходов полученной цепи:

Сумма по строкам этой матрицы, как и ожидалось, дает 1.

Построим граф матрицы переходов при помощи функции graphplot():

Рис. 1 – Граф матрицы переходов.

Построим кумулятивную матрицу переходов при помощи функции cumsum(). После этого промоделируем поведение цепи Маркова в течение 200 итераций, пользуясь выражением:

где r – случайное число, распределенное равномерно на интервале [0,1]; P_cum – кумулятивная матрица переходов, zt – состояние цепи в момент времени t.

П овторим то же самое для 1000 и 10000 итераций и построим итоговую совокупность графиков поведения цепи Маркова:

Рис. 2 – Моделирование поведения цепи Маркова.

Рассчитаем оценку цепи Маркова по полученным наблюдениям для 200, 1000 и 10000 итераций, используя выражение:

Нормализуем полученные матрицы переходов и построим для них цепи Маркова и графы матрицы. Для удобства сравнения, представим полученные результаты в виде таблицы:

Цепи

Маркова

Матрица переходов

Граф цепи

mc

MC_Obs1

MC_Obs2

MC_Obs3

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

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