稳态概率(Markov链)Python实现

2024-06-01 09:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

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


Tags: stepnpones矩阵概率arrayonematrix
1条回答
网友
1楼 · 发布于 2024-06-01 09:01:16

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

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()

输出是

^{pr2}$

所以你的函数看起来是正确的,你期望的结果不是。在

相关问题 更多 >