在高中阶段,矩阵和矩阵乘法的教学往往不被重视. 在绝大多数高中生眼里,把一些数字排列成行列然后用圆括号括起来就是矩阵,把矩阵静态的理解为一种存储数字的方式,而把矩阵的运算看作是一种数字运算的批处理,对矩阵乘法仅仅停留在规则记忆的层面上,其应用情境也大多局限在表示线性方程组或诸如小明、小红、小王买铅笔、钢笔、圆珠笔的问题上. 那么今天橘子老君将从一道老鼠版Maze Runer的趣味问题入手,带你看一看矩阵的真正实力.
问题
如下图所示的迷宫共有9个格子,相邻格子有门相通,9号格子就是迷宫出口. 整个迷宫将会在5分钟后坍塌. 1号格子有一只老鼠,这只老鼠以每分钟一格的速度在迷宫里乱窜(它通过各扇门的机会均等)。求此老鼠在迷宫坍塌之前逃生的概率。如果这只老鼠速度提高一倍,则老鼠在迷宫坍塌之前逃生的概率能增加多少?
以上是2018年上海应用数学知识竞赛的一道初赛试题,橘子老君将会讲解如何用矩阵乘法来解决这个问题.
简化版问题
首先,我们不妨先把问题简化为一个4个格子的迷宫,老鼠仍以每分钟一格的速度在迷宫里乱窜,4号格子是迷宫的出口.
由通过各扇门的机会均等,可得格子之间转移的概率如图(由于4号格子是出口,所以老鼠到达四号格子后不会向其他格子转移),
那么,老鼠经过一次移动,1分钟后在1-4号的格子的概率分别为
我们不妨用向量
如上图,通过列举每一条路径,当老鼠经过两次移动,我们发现老鼠可能落在1号或4号格子.
考虑落在1号格子的情况,其对应有两条路径,
那么根据老鼠每次的移动相互独立和加法原理,我们得到老鼠落在1号格子的概率为
同理可得落在4号格子的概率也为
如上图,进一步列举3分钟后的每一条路径,考虑落在3号的格子的情况,对应的路径有两条
一般地,不妨用
由以上递推关系,我们可以通过编程由计算机来完成计算:
#!/usr/bin/env python3
n = 5 # 计算到n分钟后的情况
v = (1, 0, 0, 0) # 0分钟后的情况
i = 0 # 当前计算到i分钟后
while i < n:
v = (
0.5 * v[1] + 0.5 * v[2],
0.5 * v[0],
0.5 * v[0],
0.5 * v[1] + 0.5 * v[2] + v[3]
)
i = i + 1
print('v' + str(i) + ': ' + str(v))
Output:
v1: (0.0, 0.5, 0.5, 0.0)
v2: (0.5, 0.0, 0.0, 0.5)
v3: (0.0, 0.25, 0.25, 0.5)
v4: (0.25, 0.0, 0.0, 0.75)
v5: (0.0, 0.125, 0.125, 0.75)
由上述结果,我们看到,老鼠在五分钟后逃出的概率为
更一般地,我们可以用
即
故由矩阵乘法的定义,递推关系式可以写成:
马尔可夫链:一些定义
至此我们得到了解决此问题的矩阵形式,我们把此类在不同状态间随机移动的数学模型称为马尔可夫链. 老鼠在随机移动的过程中可能落在4个格子内,即存在4个状态. 而每做一次移动,其状态即发生转移. 为了讨论更一般的情况,我们不妨设有
我们把经过
其中
我们把各个状态之间转移的概率所组成的方阵
其中
[^1]: 注意这里第
那么同上文中的推导,我们可以得到相邻两个状态向量的关系,
根据矩阵乘法的性质,不难推得
简化版问题的矩阵解法
在上文简化版问题中,
故
下面我们用计算机来完成矩阵乘法计算:
#!/usr/bin/env python3
import numpy as np
n = 5 # 计算到n次转移后的情况
i = 0 # 当前进行到i次转移
x = np.array([
[1],
[0],
[0],
[0]]) # 当前的状态向量
P = np.array([
[0, 0.5, 0.5, 0],
[0.5, 0, 0, 0],
[0.5, 0, 0, 0],
[0, 0.5, 0.5, 1]
]) # 转移矩阵
while i < n:
x = P.dot(x) # x=P*x
i = i+1
print('x'+str(i)+': n'+str(x))
Output:
x1:
[[0. ]
[0.5]
[0.5]
[0. ]]
x2:
[[0.5]
[0. ]
[0. ]
[0.5]]
x3:
[[0. ]
[0.25]
[0.25]
[0.5 ]]
x4:
[[0.25]
[0. ]
[0. ]
[0.75]]
x5:
[[0. ]
[0.125]
[0.125]
[0.75 ]]
结语
相信掌握上文中简化版问题的解法后,那么原问题的求解也不过是按部就班而已了.
那么通过这篇文章,你对矩阵乘法及其应用是不是有了更进一步的理解呢?
如果你解决了原9格迷宫问题,欢迎在文章下方留言与大家分享.
另外橘子老君还有几个思考题,留给大家:
- 若迷宫不会坍塌,则老鼠平均需要经过几分钟才能逃出迷宫?
- 若老鼠在进行足够多(无穷多)次移动后,是不是一定会逃出迷宫?
- 若迷宫并不存在出口,则老鼠在进行足够多(无穷多)次移动后,落在各个格子里的概率如何?
导入自橘子老君的博客.
更多适合中学生的趣味科普文章,关注微信公众号:橘子数学