今天介绍一个特殊的矩阵,马尔科夫矩阵,它特殊在每一列加和等于1,根据这个特征可以用它来研究一些固定比例的变化问题。
比如有A、B两个地方,它们有各自的人口,但是每一年都会有80%的A地人留在A地,而剩余20%会迁往B地,对于B地,会有40%的人迁往A地,剩余60%留在B地,迁徙一次后,也就是一年后,两地的人口明显可以如下表示
A0与B0是开始时两地的人口,而A1、B1是一年后两地的人口。
假设每一年的迁徙比例都是固定的,我们可以很轻松的知道任意年后,两地的人口。
在上一篇讲述特征值与特征向量的文章中,讲述了用特征值与特征向量来处理递归函数的方法,而要知晓n 年后A、B两地的人口也是同样的递归问题。
我们依照上一篇文章的思路,可以得到以下关系
其中,S是系数矩阵的特征向量组成的矩阵,Λ是系数矩阵的特征值组成的对角阵,C是对特征向量取线性组合组成初始值矩阵的系数矩阵。
由此,我们就可以得到任意年的A、B两地人口数了。而且马尔科夫矩阵有一个性质,就是一定有一个特征值为1,而其它特征值都小于1。这个性质说明了什么?
注意,将上式展开写就是
从这个式子可以看出,当n趋于很大时,由于只有一个特征值等于1,而其它的特征值小于1,所以那些特征值小于1的项会趋于0,换句话说,这个式子n取无穷时的极限就是特征值等于1的那一项的值。在很多年后,A、B两地的人口会趋于固定,不再变化。
要计算多个地点之间的人口往来也是同样的道理,如下是显示五个地点A、B、C、D、E的人口变化趋势的程序
M=[0.6,0.01,0.05,0.01,0.02;...
0.18,0.75,0.26,0.003,0.12;...
0.1,0.15,0.42,0.02,0.25;...
0.1,0.08,0.18,0.96,0.01;...
0.02,0.01,0.09,0.007,0.6]; % 马尔科夫矩阵(系数矩阵),每列加和等于1
u0=[6000;10600;3750;21000;2500]; % A、B、C、D、E五个地区的初始人口
[S,L]=eig(M); % 计算马尔科夫矩阵的特征值与特征向量
C=S\u0; % 计算系数矩阵C
Y=1:20; % 从第1年到第20年的范围
mysize=size(Y);
EachY_A=ones(mysize);
EachY_B=ones(mysize);
EachY_C=ones(mysize);
EachY_D=ones(mysize);
EachY_E=ones(mysize);
for i=1:mysize(2)
un=S*(L^(i-1))*C; % 特征值与特征向量表示的递归公式
EachY_A(i)=un(1); % 将每一年,各地的人口保存到对应的矩阵中
EachY_B(i)=un(2);
EachY_C(i)=un(3);
EachY_D(i)=un(4);
EachY_E(i)=un(5);
end
plot(EachY_A); % 将五个地区的人口趋势显示在图像上
hold on
plot(EachY_B);
plot(EachY_C);
plot(EachY_D);
plot(EachY_E);
legend('A','B','C','D','E')
hold off
以下是程序运行结果
可以看出各地的变化趋势,而每个地区的人口最后都会趋于一个稳态值,这是由马尔科夫矩阵的特征值的性质决定的,以下是上面程序中马尔科夫矩阵的特征值对角阵
确实是除了一个为1的特征值,其它的特征值都小于1,这是最后能趋于一个稳态的关键。
读者可自行寻找其他例子,尝试更高阶的马尔科夫矩阵的应用。