Определите асимптотику марковской цепи
Рассмотрим эту теоретическую, правостохастическую переходную матрицу стохастического процесса.
Создайте марковскую цепь, которая характеризуется переходной матрицей P.
P = [ 0 0 1/2 1/4 1/4 0 0 ; 0 0 1/3 0 2/3 0 0 ; 0 0 0 0 0 1/3 2/3; 0 0 0 0 0 1/2 1/2; 0 0 0 0 0 3/4 1/4; 1/2 1/2 0 0 0 0 0 ; 1/4 3/4 0 0 0 0 0 ]; mc = dtmc(P);
Постройте ориентированный график марковской цепи. Укажите вероятность перехода при помощи краевых цветов.
figure;
graphplot(mc,'ColorEdges',true);
Определите стационарное распределение цепи Маркова.
xFix = asymptotics(mc)
xFix = 1×7
0.1300 0.2034 0.1328 0.0325 0.1681 0.1866 0.1468
Потому что xFix
является вектор-строка, это уникальное стационарное распределение mc
.
Создайте пятигосударственную переходную матрицу эмпирических отсчётов путем генерации блочной диагональной матрицы, составленной из дискретных равномерных рисок.
m = 100; % Maximal count rng(1); % For reproducibility P = blkdiag(randi(100,2) + 1,randi(100,3) + 1)
P = 5×5
43 2 0 0 0
74 32 0 0 0
0 0 16 36 43
0 0 11 41 70
0 0 20 55 22
Создайте и постройте график марковской цепи, который характеризуется переходной матрицей P.
mc = dtmc(P); figure; graphplot(mc)
Определите стационарное распределение и время смешения марковской цепи.
[xFix,tMix] = asymptotics(mc)
xFix = 2×5
0.9401 0.0599 0 0 0
0 0 0.1497 0.4378 0.4125
tMix = 0.8558
Строки xFix
соответствуют стационарным распределениям двух независимых рекуррентных классов mc
.
Создайте отдельные марковские цепи, представляющие рекуррентные подцепи mc
.
mc1 = subchain(mc,1); mc2 = subchain(mc,3);
mc1
и mc2
являются dtmc
объекты. mc1
- повторяющийся класс, содержащий состояние 1
, и mc2
- повторяющийся класс, содержащий состояние 3
.
Сравните время смешения подцепей.
[x1,t1] = asymptotics(mc1)
x1 = 1×2
0.9401 0.0599
t1 = 0.7369
[x2,t2] = asymptotics(mc2)
x2 = 1×3
0.1497 0.4378 0.4125
t2 = 0.8558
mc1
приближается к своему стационарному распределению быстрее, чем mc2
.
Создать «гантель» марковской цепи, содержащей по 10 состояний в каждом «весе» и три состояния в «планке».
Задайте случайные вероятности перехода между состояниями в каждом весе.
Если марковская цепь достигает состояния в весе, ближайшем к планке, задайте высокую вероятность перехода к планке.
Задайте равномерные переходы между состояниями на панели.
rng(1); % For reproducibility w = 10; % Dumbbell weights DBar = [0 1 0; 1 0 1; 0 1 0]; % Dumbbell bar DB = blkdiag(rand(w),DBar,rand(w)); % Transition matrix % Connect dumbbell weights and bar DB(w,w+1) = 1; DB(w+1,w) = 1; DB(w+3,w+4) = 1; DB(w+4,w+3) = 1; mc = dtmc(DB);
Визуализируйте матрицу переходов с помощью тепловой карты.
figure;
imagesc(mc.P);
colormap(jet);
axis square;
colorbar;
Постройте ориентированный график марковской цепи. Подавление меток узлов.
figure; h = graphplot(mc); h.NodeLabel = {};
Постройте графики собственных значений цепи гантелей.
figure; eigplot(mc);
Тонкий, красный диск на графике показывает спектральную погрешность (различие между двумя самыми большими модулями собственных значений). Спектральная погрешность определяет время смешения марковской цепи. Большие погрешности указывают на более быстрое смешивание, в то время как тонкие погрешности указывают на более медленное смешивание. В этом случае спектральная погрешность является тонкой, что указывает на длительное время смешивания.
Оцените время смешения цепи гантели и определите, является ли цепь эргодичной.
[~,tMix] = asymptotics(mc)
tMix = 85.3258
tf = isergodic(mc)
tf = logical
1
В среднем, время, которое требуется для общего расстояния изменения между любым начальным распределением и стационарным распределением, чтобы распадаться в множителе составляет около 85 шагов.
mc
- Цепь Маркова в дискретном времениdtmc
объектДискретная цепь Маркова с NumStates
состояния и матрица переходов P
, заданный как dtmc
объект. P
должен быть полностью задан (нет NaN
записи).
xFix
- Стационарное распределениеСтационарное распределение, с xFix*P
= xFix
, возвращенный как неотрицательная числовая матрица с NumStates
столбцы. Количество строк xFix
количество независимых повторяющихся классов в mc
.
Для unichains распределение уникально, и xFix
является 1
-by- NumStates
вектор.
В противном случае каждая строка xFix
представляет отдельное стационарное распределение в mc
.
tMix
- Время смешенияВремя смешения, возвращаемое как положительный числовой скаляр.
Если μ, второй по величине модуль собственного значения (SLEM) P
, существует и не является нулем, тогда предполагаемое время смешивания является .
Примечание
Если P
является неотрицательной стохастической матрицей, затем марковской цепью mc
он характеризует имеет левый собственный вектор xFix
с собственным значением 1
. Теорема Перрона-Фробениуса [2] подразумевает, что если mc
является unichain (цепь с одним повторяющимся классом связи), затем xFix
уникальна. Для сокращаемых цепей с несколькими рекуррентными классами, собственное значение 1
имеет более высокую кратность, и xFix
является неоднородным. Если цепь периодическая, xFix
является стационарным, но не ограничивающим, потому что произвольные начальные распределения не сходятся к нему. xFix
является уникальным и ограничивающим только для эргодических цепей. Посмотрите classify
.
Для эргодических цепей, tMix
является характерным временем для сходимости любого начального распределения к xFix
. В частности, это время для общего расстояния изменения между начальным распределением и xFix
распадаться в множителе e
= exp(1)
. Время смешения является мерой относительной связности переходных структур в различных цепях.
[1] Gallager, R.G. Stochastic Processes: Theory for Applications. Кембридж, Великобритания: Cambridge University Press, 2013.
[2] Хорн, Р. и К. Р. Джонсон. Матричный анализ. Кембридж, Великобритания: Cambridge University Press, 1985.
[3] Seneta, E. Неотрицательные матрицы и марковские цепи. Нью-Йорк, Нью-Йорк: Springer-Verlag, 1981.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.