Hello Mat

 找回密码
 立即注册
查看: 3450|回复: 0

马尔科夫链模型Markov

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2016-11-27 17:32:22 | 显示全部楼层 |阅读模式
        马尔可夫链(Markov),是数学中具有马尔可夫性质的离散时间随机过程。该过程中,在给定当前知识或信息的情况下,过去(即当期以前的历史状态)对于预测将来(即当期以后的未来状态)是无关的。因此马尔可夫链有众多的生物学应用,特别是人口过程,可以帮助模拟生物人口过程的建模,还可用来建模排队理论和统计学中的建模。隐蔽马尔可夫模型还被用于生物信息学,用以编码区域或基因预测。      
       在MATLAB程序中,主要参见以下主要几步,
       Step 1,求出各食品数据的增长率;
       Step 2, 编程,使快速上升 (>0.03),在程序中用“2”表示;缓慢上升(0,0.03) ,在程序中用“1”表示;相对不变0 ,在程序中用“0”表示;缓慢下降(-0.03,0) ,在程序中用“-1”表示;快速下降(<-0.03) ,在程序中用“-2”表示.;得到各类食品在不同时期的B 。
       Step 3,统计相邻增长率变化的一致的次数C ,例如:增长率为先快速增长后相对不变出现的次数为‘20’=1;
       Step 4,对每一种食品,分五类进行叠加求和,分别为“先快速增长”、“先缓慢增长”、“先相对不变”、“先缓慢下降”、“先快速下降”;得到D 。
       Step 5,求出一步转移概率矩阵E ;即 每行的每五个数据依次与对应的C 相除D,得到概率矩阵 E的一行;
       Step 6, 使用求出的一步转移概率矩阵E ,并求出不同时期的状态概率;
  1. clc,clear,close all
  2. load('x.mat')
  3. for j=1:42
  4.     fori=1:38
  5.       a(j,i)=(x(j,i+1)-x(j,i))/x(j,i); % 求增长率
  6.     end
  7. end
  8. b=zeros(42,38);
  9. c=zeros(42,25);
  10. % 分别为不同增长率赋值
  11. for j=1:42
  12.     fori=1:38
  13.       if  a(j,i)>=0.03
  14.           b(j,i)=2;
  15.       elseif (a(j,i)<0.03)&&(a(j,i)>0)
  16.           b(j,i)=1;
  17.       elseif  a(j,i)==0
  18.           b(j,i)=0;   
  19.       elseif  a(j,i)>-0.03 &&a(j,i)<0
  20.           b(j,i)=-1;
  21.       elseif a(j,i)<-0.03
  22.           b(j,i)=-2;   
  23.        end
  24.     end
  25. end
  26. % 统计相连增长率值特征
  27. for j=1:42
  28. for i=1:36
  29.     if  (b(j,i)==2&&b(j,i+1)==2)
  30.        c(j,1)=c(j,1)+1;
  31.    elseif(b(j,i)==2&&b(j,i+1)==1)
  32.        c(j,2)=c(j,2)+1;   
  33.    elseif(b(j,i)==2&&b(j,i+1)==0)
  34.        c(j,3)=c(j,3)+1;      
  35.    elseif(b(j,i)==2&&b(j,i+1)==-1)
  36.        c(j,4)=c(j,4)+1;
  37.    elseif(b(j,i)==2&&b(j,i+1)==-2)
  38.        c(j,5)=c(j,5)+1;
  39.    elseif(b(j,i)==1&&b(j,i+1)==2)
  40.        c(j,6)=c(j,6)+1;      
  41.    elseif(b(j,i)==1&&b(j,i+1)==1)
  42.        c(j,7)=c(j,7)+1;        
  43.    elseif(b(j,i)==1&&b(j,i+1)==0)
  44.        c(j,8)=c(j,8)+1;        
  45.    elseif(b(j,i)==1&&b(j,i+1)==-1)
  46.        c(j,9)=c(j,9)+1;      
  47.    elseif(b(j,i)==1&&b(j,i+1)==-2)
  48.        c(j,10)=c(j,10)+1;
  49.    elseif(b(j,i)==0&&b(j,i+1)==2)
  50.        c(j,11)=c(j,11)+1;      
  51.    elseif(b(j,i)==0&&b(j,i+1)==1)
  52.        c(j,12)=c(j,12)+1;        
  53.    elseif(b(j,i)==0&&b(j,i+1)==0)
  54.        c(j,13)=c(j,13)+1;      
  55.     elseif(b(j,i)==0&&b(j,i+1)==-1)
  56.        c(j,14)=c(j,14)+1;      
  57.    elseif(b(j,i)==0&&b(j,i+1)==-2)
  58.        c(j,15)=c(j,15)+1;     
  59.    elseif(b(j,i)==-1&&b(j,i+1)==2)
  60.        c(j,16)=c(j,16)+1;      
  61.    elseif(b(j,i)==-1&&b(j,i+1)==1)
  62.        c(j,17)=c(j,17)+1;      
  63.    elseif(b(j,i)==-1&&b(j,i+1)==0)
  64.        c(j,18)=c(j,18)+1;      
  65.    elseif(b(j,i)==-1&&b(j,i+1)==-1)
  66.        c(j,19)=c(j,19)+1;      
  67.    elseif(b(j,i)==-1&&b(j,i+1)==-2)
  68.        c(j,20)=c(j,20)+1;   
  69.    elseif(b(j,i)==-2&&b(j,i+1)==2)
  70.        c(j,21)=c(j,21)+1;      
  71.    elseif(b(j,i)==-2&&b(j,i+1)==1)
  72.        c(j,22)=c(j,22)+1;      
  73.    elseif(b(j,i)==-2&&b(j,i+1)==0)
  74.        c(j,23)=c(j,23)+1;        
  75.    elseif(b(j,i)==-2&&b(j,i+1)==-1)
  76.        c(j,24)=c(j,24)+1;        
  77.    elseif(b(j,i)==-2&&b(j,i+1)==-2)
  78.        c(j,25)=c(j,25)+1;      
  79.     end
  80. end
  81. end
  82. d=zeros(42,5);
  83. % 累加求和
  84. for i=1:42
  85.     forj=1:25
  86.        if(j<6)
  87.            d(i,1)=d(i,1)+c(i,j);
  88.        elseif(j>5&&j<11)
  89.            d(i,2)=d(i,2)+c(i,j);
  90.         elseif(j>10&&j<16)
  91.            d(i,3)=d(i,3)+c(i,j);
  92.        elseif(j>15&&j<21)
  93.            d(i,4)=d(i,4)+c(i,j);
  94.         else
  95.            d(i,5)=d(i,5)+c(i,j);
  96.         end
  97.     end
  98. end
复制代码

  1. %一步转移概率矩阵;
  2. f=b(:,37);
  3. e= zeros(5,5);
  4. for i=1:42
  5.     forj=1:25
  6.        if(j<6)
  7.            if(d(i,1)==0)
  8.            e(5,j)=0;
  9.            else
  10.            e(1,j)=c(i,j)/d(i,1);   
  11.            end
  12.        elseif(j>5&&j<11)
  13.            if(d(i,2)==0)
  14.             e(5,j-5)=0;
  15.            else
  16.            e(2,j-5)=c(i,j)/d(i,2);   
  17.            end
  18.        elseif(j>10&&j<16)
  19.            if(d(i,3)==0)
  20.            e(5,j-10)=0;
  21.            else
  22.            e(3,j-10)=c(i,j)/d(i,3);   
  23.            end
  24.        elseif(j>15&&j<21)
  25.            if(d(i,4)==0)
  26.            e(5,j-15)=0;
  27.            else
  28.            e(4,j-15)=c(i,j)/d(i,4);   
  29.            end
  30.         else
  31.            if(d(i,5)==0)
  32.            e(5,j-20)=0;
  33.            else
  34.            e(5,j-20)=c(i,j)/d(i,5);   
  35.            end
  36.         end
  37.     end
  38.    g=zeros(i,5); %预测4、5月的增长率
  39.    if(f(i,1)==2)  
  40.         h=[10 0 0 0 ]*e
  41.         fork=1:6
  42.            h=h*e            
  43.         end
  44.    elseif(f(i,1)==1)
  45.         g(i,:)=[0 1 0 0 0 ];
  46.        h=g(i,:)*e
  47.         fork=1:6
  48.            h=h*e           
  49.         end
  50.     elseif(f(i,1)==0)
  51.        g(i,:)=[0 0 1 0 0 ];
  52.        h=g(i,:)*e
  53.         fork=1:6
  54.            h=h*e            
  55.        end   
  56.     elseif(f(i,1)==-1)
  57.        g(i,:)=[0 0 0 1 0 ];
  58.        h=g(i,:)*e
  59.         fork=1:6
  60.            h=h*e            
  61.        end      
  62.     elseif(f(i,1)==-2)
  63.        g(i,:)=[0 0 0 0 1 ];
  64.        h=g(i,:)*e
  65.         fork=1:6
  66.            h=h*e            
  67.        end      
  68.     end
  69. end
复制代码





算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 22:49 , Processed in 0.201699 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表