一个马氏链模拟的遇到的小问题
程序员文章站
2022-07-10 23:26:44
...
一个马氏链模拟遇到的小问题
原本问题很简单,我们有转移矩阵为如下矩阵的马氏链:
根据理论我们可以算出状态1最终被状态3吸收的概率是。我顺便做了一个模拟:
M = 10000
np.random.seed(1234)
final_state = np.zeros(M)
for i in range(M):
x = 1 # start from 1
while(True):
r =st.uniform.rvs()
if(x==1):
if(r<0.2):
x = 1
elif(r<0.9):
x = 2
else:
x = 3
break
if(x==2):
if(r<0.05):
x = 1
elif(r<0.15):
x = 2
elif(r<0.2):
x = 3
break
else:
x = 4
break
final_state[i] = x
p1 = np.sum(final_state==3)/M
print(p1)
但是这样得出的结论和理论不一致,重新看了一遍代码,发现我使用了同一个随机数来决定两种不同状态下一步的变化。我觉得可能是这里出了问题,所以更改如下
M = 10000
np.random.seed(1234)
final_state = np.zeros(M)
for i in range(M):
x = 2# start from 1
while(True):
if(x==1):
r =st.uniform.rvs()
if(r<0.2):
x = 1
elif(r<0.9):
x = 2
else:
x = 3
break
if(x==2):
r =st.uniform.rvs()
if(r<0.05):
x = 1
elif(r<0.15):
x = 2
elif(r<0.2):
x = 3
break
else:
x = 4
break
final_state[i] = x
p1 = np.sum(final_state==3)/M
print(p1)
这时我得到了正确的答案。
然而我现在的问题是,第一个版本的代码,**定义了怎样一个随机过程呢?**这种随机过程是否存在实际例子?