
Markov链模型转移概率矩阵求解
Matlab求解Markov链模型转移概率矩阵P
一、时齐Markov链模型
假定 Markov 链是时齐的,也就是转移规律与时间无关,只和时间长短有关,那 Markov 链的状态完全由初始状态和转移概率决定,因此,建立时齐 Markov 链的关键是构造转移概率矩阵,将转移概率矩阵计为:
P = [ p 11 p 12 ⋯ p 1 n p 21 p 22 ⋯ p 2 n ⋮ ⋮ ⋱ ⋮ p n 1 p n 2 ⋯ p n n ] P=\begin{bmatrix} p_{11}&p_{12}&\cdots&p_{1n}\\ p_{21}&p_{22}&\cdots&p_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ p_{n1}&p_{n2}&\cdots&p_{nn} \end{bmatrix} P=
p11p21⋮pn1p12p22⋮pn2⋯⋯⋱⋯p1np2n⋮pnn
已知初始分布 π 0 \pi_0 π0和转移概率 P P P,即可计算各单位时间 n n n后的状态分布 π n \pi_n πn, π n = π 0 ∗ P n \pi_n=\pi_0*P^n πn=π0∗Pn。
二、案例问题描述
假设2010年全国第六次人口普查中的基线状态数据为 A A A,2015年全国人口抽查调查状态数据为 B B B,即 B = A ∗ P 5 B=A*P^5 B=A∗P5。2010年和2015年人口状态概率 A = ( 0.4382 , 0.3933 , 0.1390 , 0.0295 ) A=(0.4382,0.3933,0.1390,0.0295) A=(0.4382,0.3933,0.1390,0.0295)和 B = ( 0.4051 , 0.4185 , 0.1505 , 0.0260 ) B=(0.4051,0.4185,0.1505,0.0260) B=(0.4051,0.4185,0.1505,0.0260)。如何求解Markov链模型转移概率矩阵 P P P?
三、算法思路&步骤
为了求解 B = A ∗ P 5 B=A*P^5 B=A∗P5,可以将矩阵方程转为带约束条件的非线性优化问题。具体如下:
min F = ∣ ∣ B − A P 5 ∣ ∣ s . t . { ∑ j = 1 j = 4 p i j = 1 , 0 < p i j < 1 , 0 < i < 4 , 0 < j < 4 \begin{array}{l} \min {\rm{ }}F = ||B - A{P^5}||\\ s.t.\left\{ \begin{array}{l} \sum\limits_{j = 1}^{j = 4} {{p_{ij}} = 1} ,\\ 0 < {p_{ij}} < 1,\\ 0 < i < 4,0 < j < 4 \end{array} \right. \end{array} minF=∣∣B−AP5∣∣s.t.⎩
⎨
⎧j=1∑j=4pij=1,0<pij<1,0<i<4,0<j<4
四、Matlab代码
% 部分Matlab代码---------------------------
clear,clc,close all
%% 计算状态转移矩阵
A = [0.4382,0.3933,0.1390,0.0295];
B = [0.4051,0.4185,0.1505,0.0260];
% 非线性优化fmincon
Aeq = kron(eye(4),ones(1,4)); % 等式约束,行和为1
beq = ones(4,1);
lb = zeros(1,16); % 变量上下界
ub = ones(1,16);
x0 = ones(1,16)*0.1; % 初始解guess
[x, fval] = fmincon(@fun,x0,[],[],Aeq,beq,lb,ub);
x = reshape(x,[],4)';
disp('转移概率矩阵:');disp(x)
%% 计算未来年份
year = 15:5:40;
n = length(year);
data = zeros(n,4);
for i = 1:n
data(i,:) = A*x^year(i);
end
更多推荐
所有评论(0)