使用Jupyter Notebook实验一个简单的马尔可夫链模型,一是学习一下概率论,二是熟悉一下python语法
import numpy as np
import matplotlib.pyplot as plt
#模拟一维随机游动
#假设一醉汉在横坐标{1,2,3,4,5}上做随机游动,且仅在整数秒等时刻发生游动
#如果醉汉在i点,则下一秒又1/3概率在原点,1/3概率向左,1/3向右移动一位
#左右边上为墙壁,如果在最边上,则有100%的概率向中间移动一为
#一下模拟醉汉在不同位置的概率
def mekf(x):
rand = np.random.rand(1) #生成0-1的随机数
if x == 1:
y = 2
elif x == 5:
y = 4
else:
if rand < 1/3:
y = x - 1
elif rand > 2/3:
y = x + 1
else:
y = x
return y
pos = 1
index = np.array([0,0,0,0,0])
maxnum = 10000
x = list(range(1,6))
for n in range(1,maxnum):
pos = mekf(pos)
index[pos-1] += 1
index = index * 100 / maxnum
plt.figure()
plt.xlabel("step")
plt.ylabel("%")
plt.plot(x,index,"o")
plt.grid(True)
plt.axis([1,5,0,50])
上图为实验10000次的概率分布