目录
[目标:用EXCEL和python 计算马尔可夫链转移矩阵](#目标:用EXCEL和python 计算马尔可夫链转移矩阵)
[1 用EXCEL计算](#1 用EXCEL计算)
[1.1 马尔可夫链的基本应用](#1.1 马尔可夫链的基本应用)
[1.2 具体计算](#1.2 具体计算)
[2 用python计算马尔可夫转移矩阵](#2 用python计算马尔可夫转移矩阵)
[2.1 py代码](#2.1 py代码)
[2.2 运行结果](#2.2 运行结果)
[3 上面2者计算结果相同](#3 上面2者计算结果相同)
目标:用EXCEL和python 计算马尔可夫链转移矩阵
1 用EXCEL计算
1.1 马尔可夫链的基本应用
- 状态矩阵A0* 转移矩阵M=状态矩阵A1
- 但是计算要注意
- 矩阵计算的数学的行数列数要求
- 注意左乘和右乘,不要搞错
1.2 具体计算
- 主要将上1个状态,作为新的初始状态,就可以继续计算下一个状态
- 如此循环loop下去(本质和写代码一回事)
- 可以看到,一般循环多次后,状态内不同子状态的概率会趋于稳定不变,这就是马尔可夫稳定态的意思吧
2 用python计算马尔可夫转移矩阵
2.1 py代码
python
import numpy as np
matrix = np.matrix([[0.7, 0.1, 0.2],
[0.2, 0.5, 0.3],
[0.3, 0.4, 0.3]], dtype=float)
vector1 = np.matrix([[1, 0, 0]], dtype=float)
for i in range(20):
vector1 = np.dot(vector1, matrix)
print('Courrent round: {}'.format(i+1))
print(vector1)
2.2 运行结果
Courrent round: 1 [[0.7 0.1 0.2]] Courrent round: 2 [[0.57 0.2 0.23]] Courrent round: 3 [[0.508 0.249 0.243]] Courrent round: 4 [[0.4783 0.2725 0.2492]] Courrent round: 5 [[0.46407 0.28376 0.25217]] Courrent round: 6 [[0.457252 0.289155 0.253593]] Courrent round: 7 [[0.4539853 0.2917399 0.2542748]] Courrent round: 8 [[0.45242013 0.2929784 0.25460147]] Courrent round: 9 [[0.45167021 0.2935718 0.25475799]] Courrent round: 10 [[0.4513109 0.29385612 0.25483298]] Courrent round: 11 [[0.45113875 0.29399234 0.25486891]] Courrent round: 12 [[0.45105627 0.29405761 0.25488612]] Courrent round: 13 [[0.45101675 0.29408888 0.25489437]] Courrent round: 14 [[0.45099781 0.29410386 0.25489833]] Courrent round: 15 [[0.45098874 0.29411104 0.25490022]] Courrent round: 16 [[0.45098439 0.29411448 0.25490113]] Courrent round: 17 [[0.45098231 0.29411613 0.25490156]] Courrent round: 18 [[0.45098131 0.29411692 0.25490177]] Courrent round: 19 [[0.45098083 0.2941173 0.25490187]] Courrent round: 20 [[0.4509806 0.29411748 0.25490192]]
3 上面2者计算结果相同
- 也可以看到一点,所谓的概率稳定下来,也和小数位的精确位数有关系。
- 有时候看起来趋于稳定了,是因为小数位的精度比较小导致看起来的错觉 ^ ^