Этот пример показывает, как вывести символьное стационарное распределение тривиальной Цепи Маркова путем вычисления ее собственного разложения.
Стационарное распределение представляет ограничение, независимое от времени, распределение состояний для процесса Маркова как количество увеличения шагов или переходов.
Задайте (положительные) вероятности перехода между состояниями A
через F
как показано в вышеупомянутом изображении.
syms a b c d e f cCA cCB positive;
Добавьте дальнейшие предположения, ограничивающие вероятности перехода. Это будет полезно в выборе желательных стационарных дистрибутивов позже.
assumeAlso([a, b, c, e, f, cCA, cCB] < 1 & d == 1);
Задайте матрицу перехода. Состояния A
через F
сопоставлены со столбцами и строками 1
через 6
. Отметьте значения в каждой сумме строки до одной.
P = sym(zeros(6,6)); P(1,1:2) = [a 1-a]; P(2,1:2) = [1-b b]; P(3,1:4) = [cCA cCB c (1-cCA-cCB-c)]; P(4,4) = d; P(5,5:6) = [e 1-e]; P(6,5:6) = [1-f f]; P
P =
Вычислите все возможные аналитические стационарные дистрибутивы состояний Цепи Маркова. Это - проблема извлечения собственных векторов с соответствующими собственными значениями, которые могут быть равны 1 для некоторого значения вероятностей перехода.
[V,D] = eig(P');
Аналитические собственные вектора
V
V =
Аналитические собственные значения
diag(D)
ans =
Найдите собственные значения, которые точно равны 1. Если существует неоднозначность в определении этого условия для какого-либо собственного значения, остановитесь с ошибкой - этот способ, которым мы уверены, что ниже списка индексов надежно, когда этот шаг успешен.
ix = find(isAlways(diag(D) == 1,'Unknown','error')); diag(D(ix,ix))
ans =
Извлеките аналитические стационарные дистрибутивы. Собственные вектора нормированы с 1 нормой или sum(abs(X))
до display.
for k = ix' V(:,k) = simplify(V(:,k)/norm(V(:,k)),1); end Probability = V(:,ix)
Probability =
Вероятность устойчивого состояния, являющегося A
или B
в первом случае собственного вектора, является функцией вероятностей перехода a
и b
. Визуализируйте эту зависимость.
fsurf(Probability(1), [0 1 0 1]); xlabel a ylabel b title('Probability of A');
figure(2); fsurf(Probability(2), [0 1 0 1]); xlabel a ylabel b title('Probability of B');
Стационарные дистрибутивы подтверждают следующее (Вспомните, утверждает, что A
через F
соответствует индексам строки 1
через 6
):
C
состояния никогда не достигается и поэтому переходный, т.е. третья строка является полностью нулем.
Остальная часть состояний формирует три группы, {A
, B
}, {D
} и {E
, F
}, которые не связываются друг с другом и являются текущими.