python - 稳态概率(马尔可夫链)Python 实现

标签 python numpy scipy markov

嗨,我正在尝试为转移概率矩阵生成稳态概率。这是我正在使用的代码:

import numpy as np

one_step_transition = array([[0.125     , 0.42857143, 0.75      ],
       [0.75      , 0.14285714, 0.25      ],
       [0.125     , 0.42857143, 0.        ]])


def steady_state_prop(p):
    dim = p.shape[0]
    q = (p-np.eye(dim))
    ones = np.ones(dim)
    q = np.c_[q,ones]
    QTQ = np.dot(q, q.T)
    bQT = np.ones(dim)
    return np.linalg.solve(QTQ,bQT)

steady_state_matrix = steady_state_prop(one_step_transition.transpose())

print (steady_state_matrix)

#result is :
#array([0.38268793, 0.39863326, 0.21867882])

#Expected Result = (0.4,0.4,0.2)

我的问题是为什么结果与确切答案略有不同?

最佳答案

预期的结果是错误的。对于稳态,转移矩阵与稳态的乘积必须再次为稳态。

tobe = np.array(((0.4, 0.4, 0.2)))
print(tobe)
print(np.dot(one_step_transition.T, tobe))
print()

result = steady_state_prop(one_step_transition)
print(result)
print(np.dot(one_step_transition.T, result))
print()

输出是
[0.4 0.4 0.2]
[0.37142857 0.40714286 0.22142857]

[0.38268793 0.39863326 0.21867882]
[0.38268793 0.39863326 0.21867882]

所以你的功能似乎是正确的,你期望的结果不是。

关于python - 稳态概率(马尔可夫链)Python 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52137856/

相关文章:

python - 多边形相交与匀称的更快方法

numpy - scipy.optimize.leastsq 无法拟合简单模型

python - 基于网格的多元三次插值

python - 安装 askbot 后 Django 应用程序未运行

python - 为什么决定系数 R² 的实现会产生不同的结果?

python - 在 PDB 交互式 shell 中打印当前异常

python - 使用 numpy 处理 exp 中的溢出

python - python/numpy 中的 float 学不能跨机器重现

scipy - 区分 OpenMDAO SciPy SLSQP 中的迭代和函数评估

python - 在我的项目中 OpenCV 无法工作,给出 :- cannot find module cv2 in Linux