You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求绘制马尔可夫链中P(Xn=s)随时间变化曲线的方法

绘制马尔可夫链状态s的概率随步数变化曲线

针对你提出的马尔可夫链状态概率变化曲线绘制需求,我用R语言给出完整的实现方案——毕竟你给出的转移矩阵就是用R语法定义的,适配性最好:

问题回顾

我们有5个状态s、t、m、f、r的马尔可夫链,转移概率矩阵(TPM)已明确,极限分布也已算出。初始分布是均匀分布(每个状态概率为1/5),需要绘制n=0,1,2,3,4,5时,状态s的概率P(Xn = s)的变化曲线。

R语言实现代码

# 1. 定义转移概率矩阵,添加byrow=TRUE保证行顺序和题目一致
P <- matrix(
  c(.84,.03,.01,.03,.03,
    .11,.80,.15,.19,.09,
    .01,.04,.70,.02,.05,
    .04,.10,.07,.75,.00,
    .00,.03,.07,.01,.83),
  nrow = 5,
  byrow = TRUE
)

# 2. 初始分布向量,对应s、t、m、f、r的初始概率
initial_alpha <- rep(1/5, 5)

# 3. 计算n=0到5时状态s的概率
prob_s <- vector(length = 6)  # 存储n=0到5的概率值
prob_s[1] <- initial_alpha[1]  # n=0时就是初始概率

current_alpha <- initial_alpha
for (step in 2:6) {
  current_alpha <- current_alpha %*% P  # 矩阵乘法更新分布
  prob_s[step] <- current_alpha[1]  # 提取状态s的概率
}

# 4. 绘制变化曲线
plot(
  x = 0:5,
  y = prob_s,
  type = "b",  # 同时显示点和折线
  main = "状态s的概率随马尔可夫链步数变化",
  xlab = "步数n",
  ylab = "P(Xn = s)",
  pch = 16,  # 实心圆点标记
  col = "#2E86AB",  # 蓝色系更醒目
  ylim = c(0.1, 0.22)  # 固定纵轴范围,突出变化细节
)
grid(lty = 2, col = "gray")  # 添加灰色虚线网格

关键细节说明

  • 转移矩阵的byrow=TRUE:这一步很重要,确保矩阵的行和你给出的转移概率顺序完全匹配,否则计算结果会出错;
  • 分布更新逻辑:每一步的分布向量都是前一步向量和转移矩阵的乘积,这是马尔可夫链的核心性质;
  • 绘图参数:用type="b"同时展示点和线,能清晰看到每个步数对应的概率值,ylim固定纵轴范围可以让变化趋势更明显。

运行这段代码后,你会看到状态s的概率从初始的0.2(1/5)开始,逐步向极限分布的0.1478365收敛的过程。

内容的提问来源于stack exchange,提问作者tagdodger33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:53:12