本文为北海的数模课程学习笔记,课程出自微信公众号:数学建模BOOM。
求赞!求收藏!求关注!
目录
模型简介
- 状态有限:如果无限,可以通过设置不同阈值变成有限。
- 未来的状态只与现在有关: 但是求概率时也要考虑过去的概率。
- 概率随机:只能求明天处于某一种状态的概率。
一个n+1只会被n影响的典型例子:基因只用看父母,不用看祖父母
与其他模型对比:
•
其他预测模型:计算的是
“
数值
”
,理论上是
无数种可能
(常见实数集合,比如噪声值)
•
马尔科夫预测:计算的是
“
概率
”
,需要
有限种已知的可能结果(比如几种方案)
模拟退火 就是一个马尔科夫过程
适用赛题
基本的特点:状态
随机
,下一阶段的状态
只与当前有关
- 预测人下一年的健康状态。
- 商家根据本周销售量预计下周进货量。
- 预测明年是否升职。
原理讲解
时齐性:两种状态转换的概率,只与时间间隔有关。一般带有周期性的问题才满足时齐性。
在面对销售类问题时,可以在论文的模型假设中写“假设销售规律满足时齐性”。
典型例题
注意是把矩阵乘n次。
代码求解
求一步转移矩阵
•
一般需要根据已知数据,求出一步转移矩阵的估计值
•
需要
遍历
已知数据,统计每一组相邻两个状态的数量(找出有多少个
“1 1” , “1 2” ,……
)
•
如果题目所定的系统状态是文字(例如张三的四种状态),那么在写代码时,可以自行定义
不同状态对应的数字,写出矩阵
一步转移概率:
clc, clear
% 题目给我们的是把数据写成了多行,需要把数据改成一行,才方便后面的运算
a0=[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];
a1=a0'; % 转置
a2=a1(:); % a1(:)为每列合并成一个长的列向量
a=a2'; % 转置后为一个行向量
%遍历整个字符串,统计每种子字符串的个数
%也就是求任意两种状态相邻的总次数
for i=1:4
for j=1:4
f(i,j)=length(strfind(a,[i j])); %统计每种子串的个数
end
end
ni=sym(sum(f,2)); %sum中的2表示对矩阵f按行求和。若调用sym可转换为符号数也就是分数
P=f./ni %状态转移矩阵的估计值,也就是i到j的概率
p0=[0.2 0.3 0.3 0.2];
p5=p0*(P^5)