【Matlab编程】马氏链随机模拟
本文是利用蒙特卡罗算法对马氏链过程的模拟。假设有10个状态,从每个状态到与之相邻状态的概率是相同的,仿真次数为1000,及进行了1000次状态转移。我们以动画的形式再现了状态转移的过程,并记录了到达每个状态的次数,具体实现如下:
close all;clc;clear; figure; s=1; n=1000; r=1; % 圆圈的半径 title('等概率情况的计算机模拟') set(gcf,'doublebuffer','on'); % 设置图形渲染效果 xlabel('Please press "space" key and see the result!',... 'fontsize',14,'color','r'); % 添加标注文字 hold on;axis equal; % 设置坐标轴属性 axis([-16,16,-16,16]); % 设置坐标轴范围 fill(r*sin(0:.1:2*pi)-7,r*cos(0:.1:2*pi)+13,'w'); % 画出固定点P1 hold on fill(r*sin(0:.1:2*pi)-11,r*cos(0:.1:2*pi)+9,'w');hold on % 画出固定点P2 fill(r*sin(0:.1:2*pi)-3,r*cos(0:.1:2*pi)+9,'w'); hold on% 画出固定点P3 fill(r*sin(0:.1:2*pi)+5,r*cos(0:.1:2*pi)+9,'w');hold on % 画出固定点P4 fill(r*sin(0:.1:2*pi)+9,r*cos(0:.1:2*pi)+5,'w');hold on % 画出固定点P5 fill(r*sin(0:.1:2*pi)-15,r*cos(0:.1:2*pi)-3,'w');hold on % 画出固定点P6 fill(r*sin(0:.1:2*pi)+1,r*cos(0:.1:2*pi)-3,'w'); hold on% 画出固定点P7 fill(r*sin(0:.1:2*pi)+13,r*cos(0:.1:2*pi)-3,'w');hold on % 画出固定点P8 fill(r*sin(0:.1:2*pi)-7,r*cos(0:.1:2*pi)-11,'w');hold on % 画出固定点P9 fill(r*sin(0:.1:2*pi)+5,r*cos(0:.1:2*pi)-15,'w');hold on % 画出固定点P10 text(-15.4,-3,'6','FontSize',18);hold on text(-11.4,9,'2','FontSize',18);hold on text(-7.4,13,'1','FontSize',18);hold on text(-7.4,-11,'9','FontSize',18);hold on text(-3.4,9,'3','FontSize',18);hold on text(0.6,-3,'7','FontSize',18);hold on text(4.6,9,'4','FontSize',18);hold on text(4.1,-15,'10','FontSize',18);hold on text(8.6,5,'5','FontSize',18);hold on text(12.6,-3,'8','FontSize',18);hold on hold on %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %plot([8.5,6],[6,8.3],'r-') hold on %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% x45=fliplr(8.3:-0.1:5.8); y45=fliplr(linspace(5.9,8.2,length(x45))); x54=8.3:-0.1:5.8; y54=linspace(5.9,8.2,length(x54)); x85=fliplr(9.4:0.05:12.4); y85=fliplr(linspace(4.1,-2.2,length(x85))); x58=9.4:0.05:12.4; y58=linspace(4.1,-2.2,length(x58)); x80=fliplr(5.8:0.1:12.2); y80=fliplr(linspace(-14.4,-3.8,length(x80))); x08=5.8:0.1:12.2; y08=linspace(-14.4,-3.8,length(x08)); x87=fliplr(2:0.1:12); y87=-3*ones(1,length(x87)); x78=2:0.1:12; y78=-3*ones(1,length(x78)); x79=fliplr(-6.2:0.1:0.4); y79=fliplr(linspace(-10.4,-3.8,length(x79))); x97=-6.2:0.1:0.4; y97=linspace(-10.4,-3.8,length(x97)); x73=fliplr(-2.6:0.06:0.9); y73=fliplr(linspace(7.9,-2,length(x73))); x37=-2.6:0.06:0.9; y37=linspace(7.9,-2,length(x37)); x13=-6.4:0.1:-3.8; y13=linspace(12.2,9.6,length(x13)); x31=fliplr(-6.4:0.1:-3.8); y31=linspace(9.6,12.2,length(x31)); x67=-14:.11:0; y67=-3*ones(1,length(x67)); x76=0:-0.11:-14; y76=-3*ones(1,length(x76)); x21=-10.1:.1:-7.8; y21=linspace(9.5,12.4,length(x21)); x12=-7.8:-0.1:-10.1; y12=fliplr(linspace(9.5,12.4,length(x12))); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% t6=text(-15.3,-5,'0','FontSize',12,'Color',[1 0 0]); t2=text(-11.4,7,'0','FontSize',12,'Color',[1 0 0]); t1=text(-7.2,11,'0','FontSize',12,'Color',[1 0 0]); t9=text(-7.3,-13,'0','FontSize',12,'Color',[1 0 0]); t3=text(-4,7,'0','FontSize',12,'Color',[1 0 0]); t7=text(0.6,-5,'0','FontSize',12,'Color',[1 0 0]); t4=text(4.7,7,'0','FontSize',12,'Color',[1 0 0]); t10=text(4.3,-13,'0','FontSize',12,'Color',[1 0 0]); t5=text(8.3,3,'0','FontSize',12,'Color',[1 0 0]); t8=text(12.6,-5,'0','FontSize',12,'Color',[1 0 0]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:length(x45) plot(x45(i),y45(i),'*') end for i=1:length(x54) plot(x54(i),y54(i),'*') end for i=1:length(x85) plot(x85(i),y85(i),'*') end for i=1:length(x58) plot(x58(i),y58(i),'*') end for i=1:length(x80) plot(x80(i),y80(i),'.') end for i=1:length(x08) plot(x08(i),y08(i),'*') end for i=1:length(x87) plot(x87(i),y87(i),'*') end for i=1:length(x78) plot(x78(i),y78(i),'*') end for i=1:length(x79) plot(x79(i),y79(i),'.') end for i=1:length(x97) plot(x97(i),y97(i),'*') end for i=1:length(x73) plot(x73(i),y73(i),'*') end for i=1:length(x37) plot(x37(i),y37(i),'.') end for i=1:length(x31) plot(x31(i),y31(i),'*') end for i=1:length(x13) plot(x13(i),y13(i),'*') end for i=1:length(x67) plot(x67(i),y67(i),'*') end for i=1:length(x76) plot(x76(i),y76(i),'*') end for i=1:length(x21) plot(x21(i),y21(i),'*') end for i=1:length(x12) plot(x12(i),y12(i),'*') end plot(x45,y45,'w.') plot(x85,y85,'w.') plot(x80,y80,'w.') plot(x87,y87,'w.') plot(x79,y79,'w.') plot(x73,y73,'w.') plot(x31,y31,'w.') plot(x21,y21,'w.') plot(x67,y67,'w.') plot(x54,y54,'w.') plot(x58,y58,'w.') plot(x08,y08,'w.') plot(x78,y78,'w.') plot(x97,y97,'w.') plot(x37,y37,'w.') plot(x13,y13,'w.') plot(x12,y12,'w.') plot(x76,y76,'w.') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% s=1; p1=0;%pn为到达n村庄的次数 p2=0;p3=0;p4=0;p5=0;p6=0;p7=0;p8=0;p9=0;p10=0; %plot([-14,0],[-3,-3],'b','linewidth',3) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:n m=get(gcf,'currentkey'); % 获取键入按键的名称 if strcmp(m,'space'); % 检查按下的按键是否为空格键 break; end if s==1 possible=round(rand(1)); if possible==1 s=3; p3=p3+1; for i=1:length(x13) plot(x13(i),y13(i),'.') pause(0.00000000001) end delete(t3); t3=text(-4,7,num2str(p3),'FontSize',12,'Color',[1 0 0]); else s=2; p2=p2+1; for i=1:length(x12) plot(x12(i),y12(i),'.') pause(0.00000000001) end delete(t2) t2=text(-11.4,7,num2str(p2),'FontSize',12,'Color',[1 0 0]); end elseif s==2 s=1; p1=p1+1; for i=1:length(x21) plot(x21(i),y21(i),'.') pause(0.00000000001) end delete(t1) t1=text(-7.2,11,num2str(p1),'FontSize',12,'Color',[1 0 0]); elseif s==3 possible=round(rand(1)); if possible==1 s=7; p7=p7+1; for i=1:length(x37) plot(x37(i),y37(i),'.') pause(0.00000000001) end delete(t7) t7=text(0.6,-5,num2str(p7),'FontSize',12,'Color',[1 0 0]); else s=1; p1=p1+1; for i=1:length(x31) plot(x31(i),y31(i),'.') pause(0.00000000001) end delete(t1) t1=text(-7.2,11,num2str(p1),'FontSize',12,'Color',[1 0 0]); end elseif s==4 s=5; p5=p5+1; for i=1:length(x45) plot(x45(i),y45(i),'.') pause(0.00000000001) end delete(t5) t5=text(8.3,3,num2str(p5),'FontSize',12,'Color',[1 0 0]); elseif s==5 possible=round(rand(1)); if possible==1 s=8; p8=p8+1; for i=1:length(x58) plot(x58(i),y58(i),'.') pause(0.00000000001) end delete(t8) t8=text(12.6,-5,num2str(p8),'FontSize',12,'Color',[1 0 0]); else s=4; p4=p4+1; for i=1:length(x54) plot(x54(i),y54(i),'.') pause(0.00000000001) end delete(t4) t4=text(4.7,7,num2str(p4),'FontSize',12,'Color',[1 0 0]); end elseif s==6 s=7; p7=p7+1; for i=1:length(x67) plot(x67(i),y67(i),'.') pause(0.00000000001) end delete(t7) t7=text(0.6,-5,num2str(p7),'FontSize',12,'Color',[1 0 0]); elseif s==7 possible=floor(rand(1)*4); if possible==0 s=6; p6=p6+1; for i=1:length(x76) plot(x76(i),y76(i),'.') pause(0.00000000001) end delete(t6) t6=text(-15.3,-5,num2str(p6),'FontSize',12,'Color',[1 0 0]); elseif possible==1 s=3; p3=p3+1; for i=1:length(x73) plot(x73(i),y73(i),'.') pause(0.00000000001) end delete(t3) t3=text(-4,7,num2str(p3),'FontSize',12,'Color',[1 0 0]); elseif possible==2 s=9; p9=p9+1; for i=1:length(x79) plot(x79(i),y79(i),'.') pause(0.00000000001) end delete(t9) t9=text(-7.3,-13,num2str(p9),'FontSize',12,'Color',[1 0 0]); else s=8; p8=p8+1; for i=1:length(x78) plot(x78(i),y78(i),'.') pause(0.00000000001) end delete(t8) t8=text(12.6,-5,num2str(p8),'FontSize',12,'Color',[1 0 0]); end elseif s==8 possible=floor(rand(1)*3); if possible==0 s=7; p7=p7+1; for i=1:length(x87) plot(x87(i),y87(i),'.') pause(0.00000000001) end delete(t7) t7=text(0.6,-5,num2str(p7),'FontSize',12,'Color',[1 0 0]); elseif possible==1 s=5; p5=p5+1; for i=1:length(x85) plot(x85(i),y85(i),'.') pause(0.00000000001) end delete(t5) t5=text(8.3,3,num2str(p5),'FontSize',12,'Color',[1 0 0]); else s=10; p10=p10+1; for i=1:length(x80) plot(x80(i),y80(i),'.') pause(0.00000000001) end delete(t10) t10=text(4.3,-13,num2str(p10),'FontSize',12,'Color',[1 0 0]); end elseif s==9 s=7; p7=p7+1; for i=1:length(x97) plot(x97(i),y97(i),'.') pause(0.00000000001) end delete(t7) t7=text(0.6,-5,num2str(p7),'FontSize',12,'Color',[1 0 0]); else s=8; p8=p8+1; for i=1:length(x08) plot(x08(i),y08(i),'.') pause(0.00000000001) end delete(t8) t8=text(12.6,-5,num2str(p8),'FontSize',12,'Color',[1 0 0]); end plot(x45,y45,'w.') plot(x85,y85,'w.') plot(x80,y80,'w.') plot(x87,y87,'w.') plot(x79,y79,'w.') plot(x73,y73,'w.') plot(x31,y31,'w.') plot(x21,y21,'w.') plot(x67,y67,'w.') plot(x54,y54,'w.') plot(x58,y58,'w.') plot(x08,y08,'w.') plot(x78,y78,'w.') plot(x97,y97,'w.') plot(x37,y37,'w.') plot(x13,y13,'w.') plot(x12,y12,'w.') plot(x76,y76,'w.') end for j=i:n if s==1 possible=round(rand(1)); if possible==1 s=3; p3=p3+1; else s=2; p2=p2+1; end elseif s==2 s=1; p1=p1+1; elseif s==3 possible=round(rand(1)); if possible==1 s=7; p7=p7+1; else s=1; p1=p1+1; end elseif s==4 s=5; p5=p5+1; elseif s==5 possible=round(rand(1)); if possible==1 s=8; p8=p8+1; else s=4; p4=p4+1; end elseif s==6 s=7; p7=p7+1; elseif s==7 possible=floor(rand(1)*4); if possible==0 s=6; p6=p6+1; elseif possible==1 s=3; p3=p3+1; elseif possible==2 s=9; p9=p9+1; else s=8; p8=p8+1; end elseif s==8 possible=floor(rand(1)*3); if possible==0 s=7; p7=p7+1; elseif possible==1 s=5; p5=p5+1; else s=10; p10=p10+1; end elseif s==9 s=7; p7=p7+1; else s=8; p8=p8+1; end end delete(t1) delete(t2) delete(t3) delete(t4) delete(t5) delete(t6) delete(t7) delete(t8) delete(t9) delete(t10) t6=text(-15.3,-5,num2str(p6),'FontSize',12,'Color',[1 0 0]); t2=text(-11.4,7,num2str(p2),'FontSize',12,'Color',[1 0 0]); t1=text(-7.2,11,num2str(p1),'FontSize',12,'Color',[1 0 0]); t9=text(-7.3,-13,num2str(p9),'FontSize',12,'Color',[1 0 0]); t3=text(-4,7,num2str(p3),'FontSize',12,'Color',[1 0 0]); t7=text(0.6,-5,num2str(p7),'FontSize',12,'Color',[1 0 0]); t4=text(4.7,7,num2str(p4),'FontSize',12,'Color',[1 0 0]); t10=text(4.3,-13,num2str(p10),'FontSize',12,'Color',[1 0 0]); t5=text(8.3,3,num2str(p5),'FontSize',12,'Color',[1 0 0]); t8=text(12.6,-5,num2str(p8),'FontSize',12,'Color',[1 0 0]);
仿真过程如下:
最终的结果如下:
原文:http://blog.csdn.net/tengweitw/article/details/34063833
作者:nineheadedbird
【Matlab编程】马氏链随机模拟的更多相关文章
- MATLAB求马氏距离(Mahalanobis distance)
MATLAB求马氏距离(Mahalanobis distance) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.马氏距离计算公式 d2(xi, ...
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling
http://blog.csdn.net/pipisorry/article/details/51373090 吉布斯采样算法详解 为什么要用吉布斯采样 通俗解释一下什么是sampling. samp ...
- 随机模拟(MCMC)
http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/ http://blog.csdn.net/lin360580306/article/ ...
- 随机模拟MCMC和Gibbs Sampling
随机模拟 统计模拟中有一个重要的问题就是给定一个概率分布 p(x),我们如何在计算机中生成它的样本.一般而言均匀分布 Uniform(0,1)的样本是相对容易生成的. 通过线性同余发生器可以生成伪随机 ...
- 基于欧氏距离和马氏距离的异常点检测—matlab实现
前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X ...
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断
http://blog.csdn.net/pipisorry/article/details/51539739 吉布斯采样的实现问题 本文主要说明如何通过吉布斯采样来采样截断多维高斯分布的参数(已知一 ...
- 马氏距离(Mahalanobis distance)
马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离.它是一种有效的计算两个未知样本集的相似度的方法.与欧 ...
- paper 114:Mahalanobis Distance(马氏距离)
(from:http://en.wikipedia.org/wiki/Mahalanobis_distance) Mahalanobis distance In statistics, Mahalan ...
- MATLAB 编程风格指南及注意事项
MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...
随机推荐
- Java 资源本地化与国际化
资源包 在编写应用程序的时候,需要面对的一个问题是如何来处理与locale相关的一些信息.比如,页面上的一些静态文本就希望能够以用户习惯的语言显示.最原始的做法是将这些信息硬编码到程序中(可能是一大串 ...
- java基础知识——网络编程、IO流
IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...
- Android的log日志知识点剖析
log类的继承结构 Log public final class Log extends Object java.lang.Object ↳ android.util.Log log日志的常用方法 分 ...
- 4.Lucene3.案例介绍,创建索引,查询等操作验证
案例: Article.java package cn.toto.lucene.quickstart; publicclassArticle { privateintid; private St ...
- iOS7 CookBook精彩瞬间(二)NSSet、通过Subscript访问类成员等
1.NSSet的用法 ①NSSet是一种无序集合,基于hash实现,可以在线性时间复杂度内查找某个元素,如果要让元素有序,应当使用NSOrderedSet,要让集合可变,与NSArray类似,使用NS ...
- Android初级教程:使用xml序列器
之前备份短信的时候生成xml都是手动拼写的,有一个问题:当短信里面存在</body>这样的标签的时候,最后结果就不是完整的xml文件,显然出错.但是,今天使用序列化器的方式,就能有效的解决 ...
- Tomcat集群应用部署的实现机制
集群应用部署是一个很重要的应用场景,设想一下如果没有集群应用部署功能,每当我们发布应用时都要登陆每台机器对每个tomcat实例进行部署,这些工作量都是繁杂且重复的,而对于进步青年的程序员来说是不能容忍 ...
- Hibernate配置文件current_session_context_class的意思
转自:http://shuaigg-babysky.iteye.com/blog/563423 此设置的作用如下: What does sessionFactory.getCurrentSession ...
- 没想到你是这样的UDP
UDP是国际标准化组织为互联网设定的标准中的传输层中的一个协议.TCP/IP协议簇是一个很庞大的家族,但是今天我们就来看一看这个面向无连接的传输层在Java中是怎样通过编程实现的. 原理性知识 在Ja ...
- 带吸附效果的ViewPager(一)
什么叫吸附效果?先看一个示例更为直观,借用网上的一个效果图: 类似这种效果的app很多,网上的实现方法也是很多,但各种重写各种监听又令人不胜其烦,今日突发奇想,顺着自己的思路实现了类似的效果,不敢独享 ...