马尔科夫预测MATLAB

应用领域:

大多是在预测方向,所以马尔科夫模型更多是辅助作用。

应用条件:

某一系统在已知现在情况的条件下,系统对未来时刻的情况只与现在有关,而与过去的历史无直接关系。比如,研究一个商店的累计销售额,则未来的某一时刻的销售额只与现在时刻之前的任意时刻的累计销售额无关。马尔科夫模型的关键词应当是累计,若在当前的时间线上无法进行累计,那么是否能够找到可以在其他时间线上进行累计的可能?可以创造自己的时间线,这是我的一种理解。
同时,马尔科夫链的另一个关键词应当是有限,有限意味着认知程度的深刻。即我可以把握他所有的运动方向与运动概率。若对于条件进行再一次的降低,可以将有限的条件升级为可数集合,对于自然数,即使是无限的,认知却也是足够的。所以依照书本的意思,仍然可以使用马尔科夫链进行解决。

马尔科夫模型的转移形式

1、矩阵的转移,元素的变动与更新,涉及矩阵的运算。
2、单一变量的转换。
由于计算机求解的问题,本质上是01代码的迭代与变化,所以马氏模型可能具有比想象中更广的应用领域。
最终的马尔科夫模型是否会趋近于某一矩阵?(而某一变量是大概率不可能趋向于稳定的)关于这一问题,是量变与质变的关系问题。看过一个B站的视频,食人族想要彻底改掉吃人陋习,然而每天的食人者与不食人者,各有一定概率进行相互转化,则最终,食人者与不食人者的数量比例维持在某一定值而不改变。则马尔科夫模型即使此问题的极好近似。
则使用 P i j P_{ij} Pij来代表相应的转移概率,表示从i状态转移到j状态的概率。

问题与代码

问题:
某一随机系统状态空间E={1,2,3,4},观测到:
4 3 2 1 4 3 1 1 2 3
2 1 2 3 4 4 3 3 1 1
1 3 3 2 1 2 2 2 4 4
2 3 2 3 1 1 2 4 3 1
估算转移概率
代码:
则:

clc,clear,format rat;%使用分数来表示值
a=[4 3 2 1 4 3 1 1 2 3
   2 1 2 3 4 4 3 3 1 1
   1 3 3 2 1 2 2 2 4 4
   2 3 2 3 1 1 2 4 3 1];
a=a';a=a(:)';%a(:)表示转化为一个列向量,然后取得转置,则得到一个行向量
for i=1:4
    for j=1:4
        f(i,j)=length(findstr([i,j],a));%统计字符串ij的数量
    end
end
ni=sum(f,2);%按照行求和
phat=f./repmat(ni,1,size(f,2));%矩阵除法,repamt生成了一个矩阵,其维数为一维,即数组形式,元素分别为行和的副本
disp(phat);%size(f,2)求列数
format %恢复到短小数的表示形式

更多的还是在熟悉MATLAB语法,感觉MATLAB与python的风格更像。

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/113146620