【随机过程】马氏链的理论与仿真

简介:         在2014年终总结中,我提到要对这学期学过的数学课中的部分算法进行仿真实现。《数值分析》和《工程优化》这两门数学课里面还有些专门讲算法的,可以用来仿真。
        在 2014年终总结中,我提到要对这学期学过的数学课中的部分算法进行仿真实现。 《数值分析》和《工程优化》这两门数学课里面还有些专门讲算法的,可以用来仿真。在《随机过程》这门课中,几乎全都是公式推导,定理证明,实在难以仿真实现。最后发现,马尔科夫链这一章比较适合仿真,况且先前也写过类似的程序,更重要的是之前有人也问过关于马氏链的Matlab实现问题。关于马氏链的理论原理在这就不作描述,下面直接用程序来实现具体问题的求解。

        假设有9个状态,其状态转移图如下所示:



根据状态转移图,我们可以得到其一步转移概率矩阵为P:

问题一:从状态1在1000次内转移到状态9的概率为多少?

理论值:
       由一步转移概率矩阵P的性质知,P的n次幂矩阵Pn中的第i行第j列的元素表示的是从状态i经过n步转移到状态j的概率。注意到,状态9为吸收态。因此,在1000步以内的任意一步到达状态9后,就永远停留在了状态9。所以P的1000次幂矩阵P1000中的第1行第9列就是从状态1在1000次内转移到状态9的概率。

仿真值:
       在仿真中,我们设置仿真次数为100000次(越大越好),设置初始状态为1,在1000步中,如果到达状态9就记录,然后跳出循环,开始新一轮循环。 具体代码如下:
clear all
clc
 
%一步转移概率矩阵
P=[0.7 0.3 0 0 0 0 0 0 0
   0.7 0 0.3 0 0 0 0 0 0
   0 0.7 0 0.3 0 0 0 0 0 
   0 0 0.7 0 0.3 0 0 0 0 
   0 0 0 0.7 0 0.3 0 0 0 
   0 0 0 0 0.7 0 0.3 0 0 
   0 0 0 0 0 0.7 0 0.3 0 
   0 0 0 0 0 0 0.7 0 0.3 
   0 0 0 0 0 0 0 0 1];
 
p=P^1000;
p(1,9)%理论值
num=0;%记录到达状态9的次数
for i=1:100000%实验次数
    state=1;%初始状态为1
    for j=1:1000%1000步
         if state==1
            if rand()<0.3
                state=2;
            end
        elseif state==9
            state=9;
 
        else
            if rand()<0.3
                state=state+1;
            else
                state=state-1;
            end
        end
        if state==9
            num=num+1;
            break;
        end
    end
end 
        num/100000 %仿真值

问题二:从状态1到状态9平均需要几步?
理论值:
            最直观的想法就是:假设从状态1到达状态9需要n步的概率为pn,则平均步数可以表示为1*p1+2*p2+……+n*pn+……。注意,这里的pn是首达概率,即从状态1经过k步首次到达状态9的概率,也就是前k-1次没有到达状态9。显然这里的首达概率而不是转移概率矩阵中的概率。这里的首达概率不好求,不过可以矩阵论(可惜没有选这门课)的相关知识来理论求解,最终可以得到的表达式如下:

其中,x,y表示状态,在本例中,x=1,y=9,其它符号表示如下:


仿真值:
           有时候,理论比较复杂的问题,仿真起来就相对简单,和问题一中的仿真类似,假定仿真次数为10000次,设置最大步数为100000000,当到达状态9时,就记录所需步数并跳出循环, 具体的程序实现如下:
clear all
clc

P=[0.7 0.3 0 0 0 0 0 0 0
   0.7 0 0.3 0 0 0 0 0 0
   0 0.7 0 0.3 0 0 0 0 0 
   0 0 0.7 0 0.3 0 0 0 0 
   0 0 0 0.7 0 0.3 0 0 0 
   0 0 0 0 0.7 0 0.3 0 0 
   0 0 0 0 0 0.7 0 0.3 0 
   0 0 0 0 0 0 0.7 0 0.3 
   0 0 0 0 0 0 0 0 1];

sum=0;
p=P^1000;

x=1;
y=9;
P_size=9;%状态个数
Ix=zeros(1,P_size);%行向量
Ix(x)=1;
Iy=zeros(P_size,1);%列向量
Iy(y)=1;
I=eye(P_size);
Ey=I;
Ey(y,y)=0;

average=Ix*(I-P*Ey)^-2*P*Iy%理论值

state=1;%初始状态
num=0;%达到次数
result=0;%需要经过的步数
for k=1:100000%仿真10000次
    state=1;
    for i=1:100000000%设定最大步数(越大越好)
        if state==1
            if rand()<0.3
                state=2;
            end
        elseif state==9
            state=9;
        else
            if rand()<0.3
                state=state+1;
            else
                state=state-1;
            end
        end
        if state==9
            num=num+1;
            result=result+i;%记录总的步数
            break;
        end
    end
end  

result/num%计算平均步数


原文:http://blog.csdn.net/tengweitw/article/details/43160553

作者:nineheadedbird





目录
相关文章
|
9月前
|
机器学习/深度学习 移动开发 JavaScript
ZC序列理论学习及仿真(一)
ZC序列理论学习及仿真
1429 0
|
机器学习/深度学习 数据采集 算法
m基于GA-LSTM遗传优化长短期记忆网络的电力负荷数据预测算法matlab仿真
m基于GA-LSTM遗传优化长短期记忆网络的电力负荷数据预测算法matlab仿真
145 4
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
9月前
|
机器学习/深度学习
ZC序列理论学习及仿真(三)
ZC序列理论学习及仿真
383 0
|
8月前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
138 6
|
8月前
|
算法
基于仿射区间的分布式三相不对称配电网潮流算法matlab仿真
```markdown # 摘要 本课题聚焦于基于仿射区间的分布式三相配电网潮流算法在MATLAB2022a中的仿真。算法利用仿射运算处理三相不平衡情况及分布式电源注入,旨在提供比区间算法更精确的不确定区域。仿真结果展示了算法优势。核心程序设计考虑了PQ、PV及PI节点,将不同类型的节点转换统一处理,以适应含分布式电源的配电网潮流计算需求。 ``` 这个摘要以Markdown格式呈现,总字符数为233,满足了240字符以内的要求。
|
9月前
ZC序列理论学习及仿真(二)
ZC序列理论学习及仿真
481 0
|
9月前
|
机器学习/深度学习 算法
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
339 0
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
|
9月前
|
机器学习/深度学习 算法 安全
基于小波神经网络的网络流量预测算法matlab仿真
基于小波神经网络的网络流量预测算法matlab仿真
|
机器学习/深度学习 算法 Python
【负荷预测】基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)
【负荷预测】基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)
177 0

热门文章

最新文章