моделировать

Моделируйте обходы состояния Цепи Маркова

Синтаксис

X = simulate(mc,numSteps)
X = simulate(mc,numSteps,'X0',x0)

Описание

пример

X = simulate(mc,numSteps) возвращает данные X на случайных обходах длины numSteps через последовательности состояний в дискретной цепи Маркова mc.

пример

X = simulate(mc,numSteps,'X0',x0) опционально задает начальное состояние симуляций x0.

Примеры

свернуть все

Рассмотрите эту теоретическую, правильно-стохастическую матрицу перехода стохастического процесса.

P=[001/21/41/400001/302/300000001/32/3000001/21/2000003/41/41/21/2000001/43/400000].

Создайте Цепь Маркова, которая характеризуется матрицей 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);

Моделируйте случайный обход с 20 шагами, который начинает со случайного состояния.

rng(1); % For reproducibility
numSteps = 20;
X = simulate(mc,numSteps)
X = 21×1

     3
     7
     1
     3
     6
     1
     3
     7
     2
     5
      ⋮

X 21 1 матрица. Строки соответствуют шагам в случайном обходе. Поскольку X(1) является 3, случайный обход начинается в состоянии 3.

Визуализируйте случайный обход.

figure;
simplot(mc,X);

Создайте Цепь Маркова с четырьмя состояниями из случайным образом сгенерированной матрицы перехода, содержащей восемь неосуществимых переходов.

rng('default'); % For reproducibility 
mc = mcmix(4,'Zeros',8);

mc является объектом dtmc.

Постройте диграф Цепи Маркова.

figure;
graphplot(mc);

4 состояния является абсорбирующим состоянием.

Запустите три симуляции с 10 шагами для каждого состояния.

x0 = 3*ones(1,mc.NumStates);
numSteps = 10;
X = simulate(mc,numSteps,'X0',x0);

X 11 12 матрица. Строки соответствуют шагам в случайном обходе. Столбцы 1-3 являются симуляциями, которые запускаются в состоянии 1; столбец 4-6 является симуляциями, которые запускаются в состоянии 2; столбцы 7-9 являются симуляциями, которые запускаются в состоянии 3; и столбцы 10-12 являются симуляциями, которые запускаются в состоянии 4.

В течение каждого раза постройте состояния пропорций, которые посещают по всем симуляциям.

figure;
simplot(mc,X)

Входные параметры

свернуть все

Дискретная цепь Маркова с состояниями NumStates и матрицей перехода P, заданный как объект dtmc.

Номер дискретного времени продвигается в каждую симуляцию, заданную как положительное целое число.

Типы данных: double

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'X0',[1 0 2] задает симуляцию три раза, первая симуляция запускается в состоянии 1, и итоговые два запускаются в состоянии 3.

Начальные состояния симуляций, заданных как пара, разделенная запятой, состоящая из 'X0' и вектор неотрицательных целых чисел длины NumStates. X0 обеспечивает счета для количества симуляций, чтобы начаться в каждом состоянии. Общим количеством симуляций (numSims) является sum(X0).

Значением по умолчанию является одна симуляция, начинающаяся со случайного начального состояния.

Пример: 'X0',[10 10 0 5]

Типы данных: double

Выходные аргументы

свернуть все

Индексы состояний посещают во время симуляций, возвращенных как (1 + numSteps)-by-numSims числовая матрица положительных целых чисел. Первая строка содержит начальные состояния. Столбцы, по порядку, являются всеми симуляциями, начинающимися в первом состоянии, затем все симуляции, начинающиеся во втором состоянии, и так далее.

Советы

  • Чтобы запустить симуляции n с k состояния, используйте:

    X0 = zeros(1,NumStates);
    X0(k) = n;

  • Чтобы визуализировать данные, созданные simulate, используйте simplot.

Смотрите также

|

Введенный в R2017b