MATLAB计算转移矩阵源代码

如何用MATLAB计算转移矩阵

如何用MATLAB计算马尔科夫矩阵

如何用MATLAB实现马尔科夫过程

这些都是一样的问题。

一. 转移矩阵算法描述

简书没有公式编辑器,敲在 Word 里,直接扔截图。

转移矩阵的算法描述

二. 引例

引例来源:引例

1. 例子

引例数据

2. 解法

1)数据处理与分析

将数据在 Excel 中处理成以下形式。把你的数据元素变成”某种意义的比值“,分析确定你的模型中”状态数“和所谓”相同状态年份间隔数“。本例中状态数为5,年份间隔数为5。每一个年份间隔都会输出一个转移概率矩阵,所以本例结果会输出 5 个 P。

数据整理

2)输入info矩阵

此处有技巧,无需手工单个数据录入。先在 MATLAB 中输入info=[];,然后将 Excel 中整理好的数据全选复制,将光标移动到方括号中间,粘贴后按回车即可。

输入info矩阵后MATLAB的窗口

3)修改代码

按照代码中注释修改部分参数。

%--此时你已经输入比例矩阵info

%--参数修改

P = zeros(5);       %所求转移矩阵阶数,本例中为5。
for k = 1:5         %k为年份间隔数,本例中为5。
    for i = 1:5     %i为状态数,本例中为5。

%--此处参数修改结束,后面还有一处修改

%--以下内容无需改动--%
      front = 0;
      back = 0;
      
      if (i ~= 1) %对应(2)(3)
      
        up = info(k+1,i);
        
        if(info(k+1,1)>info(k,1))
        
          for n = 2:i
            front = front + info(k,n);
          end
          for n = 2:i-1
            back = back + info(k+1,n);
          end
        
          down = front - back;
          P(i,i) = up / down;
          
        elseif(info(k+1,1)<info(k,1))
        
          for n = 1:i
            front = front + info(k,n);
          end
          for n = 1:i-1
            back = back + info(k+1,n);
          end
        
          down = front - back;
          P(i,i) = up / down;
          
        end
 %--无需改动结束--%
 
 %--bug修复--% 
 %--注意!注意!注意!--%
 %--在计算5阶这种小的转移矩阵还没什么问题,计算20阶时出现元素为负的情况,显然不合常理--%
 %--此时需要进行bug修复,将以下三行代码前注释符%去掉即可。会大幅影响计算结果!--%      
 %--也许是我的代码逻辑有问题,如果你发现了,请指正,不胜感激--%

 %       if(P(i,i)>1)
 %         P(i,i)= 1;
 %       end
 
 %--bug修复结束--%
 
 %--对应(5)--%       
        if(i == 5) %i为状态数,本例中为5
          P(i,1) = 1 - P(i,i);
        else 
          P(i,i+1) = 1 - P(i,i);
        end
      
      elseif (info(k+1,i)>info(k,i))
          P(i,i) = 1;

%--对应(1)-%        
      else
        
        up = info(k+1,i);
        down = info(k,i);
        P(i,i) = up / down;
        P(i,i+1) = 1 - P(i,i);
      end
  
  end

P

end

3)输入代码

代码在 Windows 10,MATLAB 2014a 环境下测试通过,可以输出状态转移矩阵 P。

粘贴代码
输出结果

4)其他

输出多个转移概率矩阵 P ,可以求一下均值当作接下来预测用的转移概率矩阵,嫌麻烦直接从几个 P 里挑一个好看的进行预测。

关于代码准确性,我算了以下五个 P 的均值,和引力来源中的论文比较了下,误差在小数点四位后。

代码求得P均值
引例给的结果

三. 写在后面

把论文写成教程的既视感有没有...

在建模搜索资料的过程中发现,关于 MATLAB 在马尔科夫过程中特别是转移矩阵的计算中,无论使用 Google 还是百度,都搜不到现成的代码。也许这些代码对大牛来说随手写,但写完不分享令我等渣渣深感困扰,只好花了一晚上来自己写。代码的质量很差,但又不是不能用,斜眼笑。有错误和不足欢迎在评论区指正,谢谢。原理在引例链接中的论文有详细说明,可以点进去仔细看看。代码不会用也可以在评论区说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 隐马尔可夫模型(Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表...
    vlnk2012阅读 6,642评论 3 47
  • 一、分类视图 MATLAB各个类别内的产品之间是有相互依赖关系的,所以有时不能单单取消某一个产品的安装。如果不需要...
    顽强的猫尾草阅读 16,046评论 1 11
  • 显示中文帮助的方法 预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中...
    VeyronC阅读 2,458评论 0 34
  • 第三章 还债过年 日子过得真快,兄弟俩在上海学生意已经六个多月了。 天也寒冷了,刺骨的西北风刮在人脸上有针刺似的痛...
    可燃上海阅读 662评论 1 5
  • 前几天当我还在筹备着双十一大采购的时候,大宝突然问我:“过几天就是我们结婚一周年纪念日了,想要什么?” 嗯?结婚一...
    我叫栗子阅读 676评论 0 0