По долу рода деятельности нужно было решить несколько задач о марковских цепях.
Штука весьма интересная, да вот в 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 только положительные. Очень вкусная программулина!