Марковские цепи в Wolfram Mathematica

По долу рода деятельности нужно было решить несколько задач о марковских цепях.
Штука весьма интересная, да вот в Matlab (который де факто является стандартом) решить я их не смог. Толи вообще этих функций нет, толи я не сообразил.
Давно хотелось пощупать Wolfram Mathematica. Вот и повод.

Первое что смутило, что нужно жать Shift + Enter после каждого выражения.
Посчитать мне нужно было вероятность нахождения в каждом состоянии для цепи с дискретным временем.
Сама марковская цепь задается при помощи матрицы (думаю это не в новость).
Для того, чтобы задать параметры марковской цепи с дискретным временем нужно воспользоваться такой функцией:

proc = DiscreteMarkovProcess[
   1, {{0.4, 0.3, 0, 0.2, 0.1}, {0.1, 0.2, 0.3, 0, 0.4}, {0, 0.4, 0.4,
      0, 0.2}, {0.6, 0, 0, 0.3, 0.1}, {0, 0, 0.3, 0.5, 0.2}}];

Задаем ей исходное состояние (можно матрицей) и матрице переходов.
Теперь можно построить граф:

gr = Graph[proc, GraphLayout -> "LayeredDrawing"]

Отлично, теперь перейдем собственно к задаче.
Найдем вероятность нахождения в каждом состоянии для 1 шага.

PDF[proc[1], k]
0. + 0.4 Boole[1 == k] + 0.3 Boole[2 == k] + 0.2 Boole[4 == k] + 0.1 Boole[5 == k]

Для второго:

PDF[proc[2], k]
0.31 Boole[1 == k] + 0.18 Boole[2 == k] + 0.12 Boole[3 == k] + 0.19 Boole[4 == k] + 0.2 Boole[5 == k]

Ну и так далее.
Для задания марковской цепи с непрерывным временем нужно воспользоваться функцией ContinuousMarkovProcess. В остальном все также.

ps не забываем про Shift + Enter
pps ощущения от Mathematica только положительные. Очень вкусная программулина!

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий