马尔科夫链动态模拟与可视化分析系统
项目简介
本项目利用 MATLAB 强大的矩阵计算与图形渲染能力,构建了一个离散时间马尔科夫链(DTMC)的综合模拟与分析环境。该系统不仅支持自定义状态转移矩阵的模型构建与严格校验,还能通过蒙特卡洛方法模拟系统的动态演化过程,利用特征值分解理论计算系统的长期稳态分布,并通过多维度图表直观展示状态转移网络、概率收敛过程及单次模拟的随机轨迹。
该项目代码结构清晰,算法逻辑严密,预置了股市状态模型(牛市、熊市、震荡)作为演示案例,适用于随机过程教学、金融市场趋势分析及排队系统基础研究。
核心功能特性
- 模型参数化与校验机制
* 支持用户自定义状态转移概率矩阵和初始状态分布。
* 内置严格的随机性校验算法,自动检测转移矩阵每行元素之和及初始概率之和是否严格等于 1,保障数学模型的合法性。
- 理论稳态分析
* 不依赖迭代近似,而是通过求解矩阵特征向量的代数方法,精确计算马尔科夫链的平稳分布(Stationary Distribution)。
* 自动归一化处理,直接输出各状态在长期演化下的理论概率值。
- 概率演化计算
* 基于矩阵乘法迭代计算每一步的状态概率分布。
* 捕捉从初始状态向稳态收敛的完整动态过程。
- 蒙特卡洛动态模拟
* 基于随机数生成算法,模拟系统内单个粒子(Agent)的状态跳变路径。
* 真实复现随机过程中的不确定性和路径依赖特征。
- 多维度数据可视化
*
网络拓扑图:使用有向图展示状态间的转移关系,节点大小映射平稳概率,边粗细映射转移概率。
*
收敛曲线图:展示各状态概率随时间变化的曲线,并叠加理论稳态参考线。
*
轨迹阶梯图:以阶梯状图表展示单次模拟中的状态切换序列,包含背景状态色带以增强可读性。
系统要求
- MATLAB R2016b 或更高版本(需支持
digraph 图论对象及相关绘图函数)。 - 推荐安装 Statistics and Machine Learning Toolbox(用于
randsample 函数)。
使用与配置说明
- 启动程序:直接运行主脚本即可开始模拟。
- 参数调整:在脚本的“系统参数设置”部分,可以修改:
*
P:$N times N$ 的状态转移概率矩阵。
*
pi_0:$1 times N$ 的初始状态分布向量。
*
T:模拟的总时间步数。
*
state_labels:对应状态的名称(如:牛市、熊市等)。
- 结果查看:程序运行后将在控制台输出模型校验结果和理论平稳分布数值,并弹出一个包含三个子图的综合图形窗口。
代码实现逻辑详解
本系统的核心脚本严格按照数据流处理顺序执行,具体实现逻辑如下:
1. 系统初始化与参数预设
- 程序首先清理工作区环境,并设置固定的随机数种子(
rng(42)),确保蒙特卡洛模拟结果具有可复现性,便于调试和演示。 - 默认预置了一个 3 状态的股市模型案例,初始状态被设定为 100% 处于“牛市”。
2. 数学模型合规性校验
- 矩阵行和校验:计算转移矩阵
P 的每一行之和,检查其是否与 1 的差值在浮点数误差允许范围内($1 times 10^{-10}$)。如果校验失败,程序会抛出异常并终止,防止非法矩阵导致后续计算错误。 - 初始分布校验:同理检测初始向量
pi_0 的元素之和是否为 1。
3. 稳态分布的理论求解
- 采用特征值分解法求解平稳分布。代码对转置矩阵 $P^T$ 进行特征分解(
eig 函数)。 - 算法自动寻找特征值最接近 1 的对应的特征向量。
- 取该特征向量的绝对值并进行归一化处理(除以元素之和),从而得到理论上的平稳分布向量 $pi$。
4. 状态概率的时间演化
- 利用循环结构模拟概率分布的传递。
- 在每一步 $t$,执行向量-矩阵乘法 $pi_{t} = pi_{t-1} times P$。
- 将每一步的结果存储在历史矩阵中,通过 50 次迭代记录概率分布如何从初始状态逐渐逼近稳态。
5. 蒙特卡洛单轨迹模拟
- 初始化采样:根据初始分布
pi_0,利用加权随机采样函数 randsample 确定 $t=0$ 时刻的具体状态。 - 马尔科夫过程模拟:进入时间循环,在每一步中,根据当前状态所在的
P 矩阵行向量提取对应的转移概率分布,再次使用 randsample 随机决定下一时刻的状态。 - 该过程生成了一条符合统计规律的具体状态序列。
6. 综合可视化实现
代码创建了一个画布,划分为三个区域进行展示:
* 利用
digraph 对象构建有向图。
* 逻辑过滤:仅绘制权重大于 0 的边,保持图面整洁。
* 视觉映射:节点的大小动态关联之前计算的稳态概率值(概率越大节点越大),连接线的粗细关联转移概率值,颜色设定为冷色调风格。
* 绘制各状态概率随时间步 $t$ 变化的折线图。
* 在图中添加了虚线形式的水平参考线(
yline),标示出由特征值分解算出的理论稳态值,直观展示模拟计算向理论值的收敛效果。
* 使用
stairs 函数绘制阶梯图,精确反映离散时间点的状态跳变。
* 为了提高图表的可读性,代码通过循环在背景中绘制了交替颜色的矩形色带(
patch),并在阶梯转折点添加了散点标记,清晰区分不同的状态区间。
* Y 轴刻度被替换为具体的状态文本标签(如“牛市”、“熊市”),而非简单的数字索引。