其他分享
首页 > 其他分享> > 2021-02-02

2021-02-02

作者:互联网

马氏链模型Matlab的实例和实现代码

实例

这是我无意从网上看到的,但是没有代码,很可惜,于是我自己写了个同例子相似,但是可以运用到其他数值上的代码
输入数据到P_0P_n就可以跑起来了

代码

一般马氏链模型

% 马氏链模型,渡边笔记
% 系统在每个时期所处的状态是随机的
% 从一时期到下时期的状态按一定概率转移
% 下时期状态只取决于本时期状态和转移概率。即已知现在,将来与过去无关(无后效性)
% 过去不影响未来的判断,是马氏链的本质
% P_0 是初始分布,P_n 是转移矩阵,则在 n 未来的概率为
% P_0 * ( P_n ^ n )
clc,clear;close all;

% 第一次买盐,概率为 P_0
% 已知 买盐倾向 P_n
% P_0 = [0.2 0.4 0.4];
% P_n = [0.8 0.1 0.1
%     0.5 0.1 0.4
%     0.5 0.3 0.2];
% P = P_0 * P_n ^ 3;
% disp(P)

% 一般马氏链模型
a=[160 120 120
    180 90 30
    180 30 90]; % 输入统计矩阵
P_0 = [0.4 0.3 0.4]; % 初始概率

% 求状态转移矩阵
[m,~] = size(a);
ni=sum(a,2);  %计算矩阵f的行和
for i = 1:m
    for j = 1:m
        ZT(i,j) = a(i,j)./ni(i);   %求状态转移的频率
    end
end
disp('转移矩阵为 : ');
disp(ZT)
fprintf('%c', 8); % 删掉换行符
% 求 n 期概率
n = 2;
P = P_0 * ( ZT ^n );
disp(['第 ',num2str(n),' 期概率为 ',num2str(P)]);

% 概率平衡时,有 P = P * P_n 恒成立
X = ZT';
X(1,:) = [];
for i = 2:m
    X(i-1,i) = X(i-1,i) - 1;
end
X(m,:) = ones(1,m);
Y = zeros(m-1,1);
Y(m,:) = ones(1);
x = X\Y; x = x';
disp(['n 趋向于无穷的 X 的解为 : ',num2str(x)]);

代码输出

转移矩阵为 : 
       2/5            3/10           3/10    
       3/5            3/10           1/10    
       3/5            1/10           3/10    
第 2 期概率为 0.544       0.276        0.28
n 趋向于无穷的 X 的解为 : 0.5        0.25        0.25

带利润的马氏链模型

% 带利润的马氏链模型,渡边笔记
clc,clear;close all;

a=[5 5
    4 6 ]; % 输入统计矩阵
R = [9 3
    3 -7];  % 输入利润矩阵

% 对统计矩阵,求状态转移矩阵
[m,~] = size(a);
ni=sum(a,2);  %计算矩阵f的行和
for i = 1:m
    for j = 1:m
        ZT(i,j) = a(i,j)./ni(i);   %求状态转移的频率
    end
end
disp('转移矩阵为 : ');
disp(ZT)
fprintf('%c', 8); % 删掉换行符

% 求 n 期利润
n = 3;

% n = 1 时
for i = 1:m
    for j = 1:m
        v(i,j) = R(i,j) * ZT(i,j);
    end
    Sum = sum(v,2);
end
% n = n 时

for i = 1:m
    for j = 1:m
        V(i,j) = Sum(j).^(n-1) * ZT(i,j);
    end
    V_Sum = sum(V,2);
    V_Sum = V_Sum + Sum;
    if n > 1 % 边界条件
        disp(['处于状态 ',num2str(i),' 的 ',num2str(n),' 期利润为 ',num2str(V_Sum(i,:))])
    else
        disp(['处于状态 ',num2str(i),' 的 ',num2str(n),' 期利润为 ',num2str(Sum(i,:))])
    end
end

% 带利润的马氏链一般不存在平衡
% 因为钱是赚不完的

输出

转移矩阵为 : 
       1/2            1/2     
       2/5            3/5     
处于状态 1 的 3 期利润为 28.5
处于状态 2 的 3 期利润为 16.8

以上

欢迎指点和交流

标签:02,disp,end,Sum,矩阵,num2str,2021,ZT
来源: https://blog.csdn.net/weixin_45756789/article/details/113571922