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

R语言求解转移矩阵极限/唯一平稳分布并绘制可视化结果

R语言求解马尔可夫链转移矩阵唯一平稳分布方法

你给出的3阶转移矩阵对应不可约非周期马尔可夫链,存在唯一平稳分布,且该平稳分布等同于极限分布,以下方法均为确定性计算,不会产生随机结果。

1. 定义转移矩阵

首先运行给定的矩阵定义代码:

P <- matrix(c(0.2,0.3,0.5,0.1,0.8,0.1,0.4,0.2,0.4), nrow=3, ncol=3, byrow=TRUE)

2. 求解平稳分布的两种确定性方法

平稳分布π满足两个核心条件:π %*% P = π、sum(π) = 1,可以通过以下两种方式求解:

方法一:线性方程组求解

将平稳条件转换为线性方程组直接求解,精度最高:

# 构造系数矩阵:转置P减单位矩阵,对应π(P-I)=0的约束
coef_mat <- t(P) - diag(nrow(P))
# 替换最后一行为全1,对应各状态概率和为1的约束
coef_mat[nrow(coef_mat), ] <- rep(1, ncol(coef_mat))
# 构造右端向量,前n-1项为0,最后一项为1
rhs <- rep(0, nrow(P))
rhs[length(rhs)] <- 1
# 求解线性方程组得到平稳分布
pi_stationary <- solve(coef_mat, rhs)
# 打印结果
print(pi_stationary)

方法二:特征值法求解

平稳分布是转移矩阵转置的特征值为1对应的左特征向量,归一化后即可得到:

# 计算P转置的特征值与特征向量
eigen_result <- eigen(t(P))
# 提取特征值最接近1的特征向量(避免数值计算误差的影响)
target_vec <- eigen_result$vectors[, which.min(abs(eigen_result$values - 1))]
# 对特征向量做归一化,使各分量和为1
pi_stationary_eigen <- Re(target_vec / sum(target_vec))
# 打印结果
print(pi_stationary_eigen)

两种方法输出的结果完全一致,均为恒定的精确值,不存在随机性。

3. 结果可视化

可以使用基础绘图包绘制平稳分布的柱状图,直观展示各状态的稳态概率:

# 绘制柱状图
bar_pos <- barplot(pi_stationary,
                   names.arg = paste0("状态", 1:3),
                   col = c("lightblue", "lightgreen", "lightcoral"),
                   main = "转移矩阵对应唯一平稳分布",
                   ylab = "稳态概率",
                   ylim = c(0, max(pi_stationary) * 1.1))
# 添加数值标签
text(x = bar_pos,
     y = pi_stationary + 0.02,
     labels = round(pi_stationary, 3))

注意事项

  • 以上所有方法均为确定性数值计算,全程没有随机模拟步骤,输出结果完全恒定
  • 仅当转移矩阵对应的马尔可夫链不可约非周期时,平稳分布等同于极限分布,本次你提供的转移矩阵满足该条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:24:06